„Folyamat (számítástechnika)” változatai közötti eltérés

[ellenőrzött változat][ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
aNincs szerkesztési összefoglaló
aNincs szerkesztési összefoglaló
1. sor:
[[Fájl:Htop.png|jobbra|bélyegkép|400x400px|A [[htop]] által megjelenített folyamatok listája]]
 
A számítástechnikában a '''folyamat''' egy [[Program (informatika)|számítógépes program]] [[Példány (számítógépes programozás)|példánya]], amelyetmelyet egy vagy több szál hajt végre. Ez tartalmazza a programkódot és a tevékenységét. [[Operációs rendszer]]től (OS) függően egy folyamat több végrehajtási [[Szál (programozás)|szálból]] állhat, amelymely utasításokat [[Egyidejűség (számítástechnika)|egyidejűleg]] hajtják végre.<ref name="OSC Chap4">{{cite book |authorlink=Abraham Silberschatz |title=Operating system concepts with Java |edition=Sixth |date=2004 |publisher=[[John Wiley & Sons]] |isbn=0-471-48905-0 |chapter=Chapter 4. Processes |last1=Silberschatz |first1=Abraham |last2=Cagne |first2=Greg |last3=Galvin |first3=Peter Baer}}</ref><ref name="Vah96">{{cite book |last=Vahalia |first=Uresh |title=UNIX Internals: The New Frontiers |url=https://archive.org/details/unixinternalsnew00vaha |date=1996 |publisher=Prentice-Hall Inc. |isbn=0-13-101908-2 |chapter=Chapter 2. The Process and the Kernel |url-access=registration}}</ref>
 
Míg a számítógépes program passzív [[Utasítás (informatika)|utasítások]] gyűjteménye, addig a folyamat ezen utasítások tényleges végrehajtása. Több folyamat társítható ugyanahhoz a programhoz; például ugyanazon program több példányának megnyitása gyakran egynél több folyamat végrehajtását eredményezi.
 
A [[többfeladatosság]] olyan módszer, amelymely lehetővé teszi több folyamat számára a [[Central processing unit|processzorok]] (CPU) és más rendszererőforrások megosztását. Minden processzor (mag) egyszerre egyetlen [[Feladat (számítástechnika)|feladatot]] hajt végre. A többfeladatosság azonban lehetővé teszi, hogy minden processzor [[Kontextusváltás|válthasson]] a feladatok között anélkül, hogy meg kellene várnia az egyes feladatok befejezését ([[Preempció (számítástechnika)|preempció]]). Az operációs rendszer megvalósításától függően kapcsolásokat lehet elvégezni, amikor a feladatok elindítják és megvárják a [[I/O Interfész|bemeneti/kimeneti]] műveletek befejezését, amikor egy feladat jelzi, [[Programmegszakítás|hardvermegszakítások]] esetén, és amikor az operációs rendszer ütemezője úgy dönt, hogy egy folyamatnak lejárt a tisztességes részesedése a processzoridőből (pl. a Completely Fair Scheduler [[Linux (rendszermag)|Linux kernel]] esetén).
 
A többfeladatosság általános formáját a processzor az [[időosztás]] által biztosítja, mely egy módszer a felhasználói folyamatok és szálak, sőt a független kernelfeladatok végrehajtásának összeillesztésére – bár ez utóbbi funkció csak olyan preemptív [[Rendszermag|kerneleken]] valósítható meg, mint például a [[Linux (rendszermag)|Linux]]. A preempciónak fontos mellékhatása van az interaktív folyamatok számára, amelyekmelyek nagyobb prioritást élveznek a processzorkorlátozott folyamatokhoz képest, ezért a felhasználók azonnal kiosztják a számítási erőforrásokat egy gombnyomás vagy az egér mozgatása közben. Ezenkívül az olyan alkalmazások, mint a videó- és a zenelejátszók, valamilyen valós idejű prioritást kapnak, megelőzve minden más alacsonyabb prioritású folyamatot. Az időosztásos rendszerekben a [[kontextusváltás]]okat gyorsan hajtják végre, ami miatt úgy tűnik, hogy több folyamat egyidejűleg hajtódik végre ugyanazon a processzoron. Több folyamat egyidejű végrehajtását [[Egyidejűség (számítástechnika)|egyidejűségnek]] hívják.
 
A biztonság és a megbízhatóság érdekében a legtöbb modern [[operációs rendszer]] megakadályozza a független folyamatok közötti közvetlen [[folyamatok közötti kommunikáció|kommunikációt]], szigorúan közvetített és ellenőrzött folyamatok közötti kommunikációs funkciókat biztosítva.
18. sor:
 
* Egy programhoz társított végrehajtható [[gépi kód]] ''képe''.
* Memória (általában a [[virtuális memória]] valamilyen régiója); amelymely magában foglalja a végrehajtható kódot, a folyamatspecifikus adatokat (bemeneti és kimeneti), egy [[Hívási verem|hívási vermet]] (az aktív [[Függvény (programozás)|alprogramok]] és/vagy egyéb események nyomon követéséhez) és egy halom a futási idő során generált közbenső számítási adatot.
* A folyamathoz hozzárendelt erőforrások operációsrendszer-leírói, például [[fájlleíró]]k ([[Unix]] terminológia) vagy [[Handle (számítástechnika)|fogantyúk]] ([[Windows]]), valamint adatforrások és összefoglalók.
* [[Számítógépes biztonság|Biztonsági]] attribútumok, például a folyamat tulajdonosa és a folyamat engedélyei (megengedett műveletei).
* A [[Central processing unit|processzor]] állapota ([[Kontextus (számítástechnika)|kontextus]]), például a [[Regiszter (számítástechnika)|regiszterek]] tartalma és fizikai memóriacímzése. Az ''állapotot'' általában számítógépes regiszterekben tárolják, amikor a folyamat végrehajtódik, egyébként pedig a memóriában.<ref name="OSC Chap4" />
 
Az operációs rendszer az aktív folyamatokkal kapcsolatos információk nagy részét [[folyamatvezérlő blokk]]oknak nevezett adatszerkezetekben tárolja. Bármilyen részhalmaza az erőforrásoknak, jellemzően legalább a processzor állapota, összefüggésben lehet minden folyamat szálaival olyan operációs rendszerek esetében, amelyekmelyek támogatják a [[Szál (programozás)|szálakat]] vagy a ''gyermek (child)'' folyamatokat.
 
Az operációs rendszer elválasztja a folyamatokat, és elosztja a szükséges erőforrásokat, hogy azok kevésbé zavarják egymást, és ezzel rendszerhibákat okozzanak (pl. [[holtpont]] vagy [[Thrashing (számítástechnika)|cséplés]]). Az operációs rendszer mechanizmusokat is biztosíthat a [[folyamatok közötti kommunikáció]]hoz, lehetővé téve a folyamatok biztonságos és kiszámítható módon történő kölcsönhatását.
31. sor:
A [[Többfeladatosság|többfeladatos]] [[operációs rendszer]] tud váltani a folyamatok között, így úgy tűnhet, mintha a folyamatokat egyidejűleg (azaz [[Párhuzamos számítástechnika|párhuzamosan]]) [[Végrehajtás (számítástechnika)|hajtaná végre]], de valójában csak egy folyamatot tud végrehajtani egy időben egyetlen [[Central processing unit|processzoron]] (kivéve, ha a processzor több maggal rendelkezik, akkor [[többszálú utasításvégrehajtás]]t vagy más hasonló technológiákat lehet használni).{{jegyzet* |megj=Néhány modern processzor két vagy több független processzort egyesít [[Többmagos processzor|többmagos]] konfigurációban, és több folyamatot is végrehajthat egyszerre. Egy másik módszer, amelyet [[Simultaneous multithreading|egyidejű többszálú utasításvégrehajtásnak]] hívnak (az [[Intel]] [[HyperThreading|Hyper-Threading]] technológiájában használják), szimulálhatja több folyamat vagy szál egyidejű végrehajtását.}}
 
Általában egy folyamatot egy főprogramhoz társítunk, a ''gyermek (child)'' folyamatokat pedig minden mellékághoz, párhuzamos folyamathoz, amelyekmelyek az [[Aszinkronia (programozás)|aszinkron]] alprogramokhoz hasonlóan viselkednek. Azt mondjuk, hogy egy folyamatnak megvannak a ''saját'' erőforrásai, amelyekmelyek közül a program ''képe'' (a memóriában) egy ilyen erőforrás. A többprocesszoros rendszerekben azonban ''sok'' folyamat lefuthat vagy megoszthatja ugyanazt az [[Újrahívhatóság (számítástechnika)|újrahívható]] ''(reentrant)'' programot ugyanazon a helyen a memóriában, de azt mondjuk, hogy mindegyik folyamatnak megvan a saját ''képe''.
 
A folyamatokat gyakran „feladatoknak” nevezik a [[Beágyazott rendszer|beágyazott]] operációs rendszerekben. A „folyamat” (vagy feladat) jelentése „valami, ami időt vesz igénybe”, szemben a „memóriával”, amelymely „valami, ami helyet foglal el”.{{jegyzet* |megj=A feladatok ''(tasks)'' és a folyamatok ''(processes)'' lényegében ugyanazon entitásra vonatkoznak. Bár némileg eltérő terminológiai történeteik vannak, szinonimákként használják őket. Manapság a folyamat kifejezést előnyben részesítik a feladathoz képest, kivéve, ha a többfeladatosságra ''(multitasking)'' utalnak, mivel a többfolyamatos ''(multiprocessing)'' alternatív kifejezést túlságosan könnyű összekeverni a többprocesszoros ''(multiprocessor)'' kifejezéssel (amely két vagy több processzorral rendelkező számítógépet jelent).}}
 
A fenti leírás vonatkozik mind az operációs rendszer által kezelt folyamatokra, mind azokra a folyamatokra, amelyeketmelyeket [[folyamatkalkulus]] határoz meg.
 
Ha egy folyamat valami olyat kér, amelyremelyre várnia kell, akkor blokkolva lesz. Ha a folyamat [[Folyamatállapot|blokkolt állapotban]] van, akkor lemezre cserélhető, de ez átlátható egy [[virtuális memória|virtuálismemória]]-rendszerben, ahol a folyamat memóriájának régiói valóban a lemezen vannak és nem a [[Memória (számítástechnika)#Elsődleges, másodlagos és harmadlagos memória|főmemóriában]]. Vegye figyelembe, hogy akár az aktív folyamatok/feladatok (végrehajtó programok) is cserélhetők lemezre, ha az utóbbi időben nem használták őket. Nem kell a végrehajtó program összes részének a fizikai memóriában lennie, hogy a társított folyamat aktív legyen.
 
=== Folyamatállapotok ===
43. sor:
[[Fájl:Process_states.svg|jobbra|bélyegkép|300x300px|A különböző folyamatállapotok az állapotdiagramban megjelenítve, nyilakkal jelölve az állapotok közötti lehetséges átmeneteket]]
 
Egy operációs rendszer [[rendszermag]]jának, amelymely lehetővé teszi a többfeladatosságot, szüksége van arra, hogy a folyamatoknak legyenek [[Folyamatállapot|bizonyos állapotai]]. Ezeknek az állapotoknak a nevei nincsenek szabványosítva, de hasonló funkcióval rendelkeznek.<ref name="OSC Chap4" />
 
* Először, a folyamatot „létrehozzuk” egy [[Memória (számítástechnika)#Elsődleges, másodlagos és harmadlagos memória|másodlagos tárolóeszközről]] ([[Merevlemez|merevlemez-meghajtó]], [[CD-ROM]] stb.) a [[Memória (számítástechnika)#Elsődleges, másodlagos és harmadlagos memória|főmemóriába]] töltéssel. Ezután a [[Ütemezés (számítástechnika)|folyamatütemező]] hozzárendeli a „várakozó” állapotot.
52. sor:
== Folyamatok közötti kommunikáció ==
 
Amikor a folyamatoknak kommunikálniuk kell egymással, meg kell osztaniuk a [[Címtér|címterük]] egy részét vagy más folyamatok közötti kommunikációt (IPC) kell használniuk. Például egy héjfutószalagon ''(shell pipeline)'' az első folyamat kimenetének el kell jutnia a másodikhoz és így tovább; egy másik példa egy olyan feladat, amelyetmelyet fel lehet bontani együttműködő, de részben független folyamatokra, amelyekmelyek egyszerre futhatnak (vagyis egyidejűséget vagy valódi párhuzamosságot használnak – ez utóbbi modell az egyidejű végrehajtás konkrét esete, és megvalósítható, ha elegendő processzormag áll rendelkezésre az összes folyamat számára, amelyekmelyek készen állnak a futtatásra).
 
Lehetséges, hogy két vagy több folyamat különböző gépeken fut, amelyekmelyek eltérő operációs rendszert (OS) futtatnak, ezért szükség van bizonyos (az elosztott számítástechnikában [[Protokoll (informatika)|kommunikációs protokolloknak]] nevezett) kommunikációs és szinkronizálási mechanizmusokra (pl. a Message Passing Interface, melyet gyakran egyszerűen [[Message Passing Interface|MPI]]-nek hívnak).
 
== Előzmények ==
60. sor:
Az 1960-as évek elején a számítógépes vezérlőszoftver a [[monitorvezérlő szoftver]]ekről, például az [[IBM 7090/94 IBSYS|IBSYS]], a [[végrehajtóvezérlő-szoftver]]ekké fejlődött. Az idő múlásával a számítógépek gyorsabban fejlődtek, miközben a [[Időosztás|számítógépes idő]] még mindig nem volt olcsó és nem volt teljes mértékben kihasználva; egy ilyen környezet lehetővé és szükségessé tette a [[Többfeladatosság|multiprogramozást]]. A multiprogramozás azt jelenti, hogy több program fut [[Egyidejűség (számítástechnika)|egyidejűleg]]. Eleinte egynél több program futott egy processzoron az [[Egyprocesszoros rendszer|egyprocesszoros]] számítógép-architektúra eredményeként, és szűkös és korlátozott hardver-erőforrásokon osztoztak; következésképpen az egyidejűség ''soros'' jellegű volt. A későbbi [[Többprocesszoros feldolgozás|többprocesszoros rendszereken]] egyszerre több program futhat ''[[Párhuzamos számítástechnika|párhuzamosan]]''.
 
A programok utasításokat tartalmaznak a processzorok számára. Egy processzor egyszerre csak egy utasítást futtathat: lehetetlen több program futtatása egyszerre. Előfordulhat, hogy egy programnak valamilyen [[Rendszererőforrás|erőforrásra]], például bemeneti eszközre van szüksége, amelymely nagy késleltetéssel rendelkezik vagy egy program lassú műveletet indíthat, például kimenetet küldhet egy nyomtatóra. Ez azt eredményezné, hogy a processzor kihasználatlan marad („üresjárat”). Annak érdekében, hogy a processzor mindig el legyen foglalva, egy ilyen program végrehajtását leállítják, és az operációs rendszer átváltja a processzort egy másik program futtatására. A felhasználó számára úgy tűnik, hogy a programok egyszerre futnak (innen a „párhuzamos” kifejezés).
 
Röviddel ezután a „program” fogalmát kibővítették a „végrehajtó program és annak összefüggései” fogalmára. Megszületett egy folyamat koncepciója, amelymely az [[Újrahívhatóság (számítástechnika)|újrahívható kód]] feltalálásával szükségessé vált. A [[Szál (programozás)|szálak]] valamivel később jöttek. Azonban az olyan fogalmak megjelenésével, mint az [[időosztás]], a [[számítógép-hálózat]]ok és a többprocesszoros [[közös memória|közösmemória]]-számítógépek, a régi „multiprogramozás” helyet adott a valódi [[többfeladatosság]] ''(multitasking)'', a többfolyamatos ''(multiprocessing)'' és később a [[többszálú utasításvégrehajtás]] ''(multithreading)'' számára.
 
== Megjegyzések ==