A folyamat az egymással összefüggő rendszererőforrások gyűjteményének azonosítható absztrakciója, amely egy különálló és független virtuális címtéren alapul, amelyben a szálak végrehajtása meg van szervezve. Az ISO 9000:2000 definíciók a folyamatot egymással összefüggő és kölcsönhatásban lévő tevékenységek összességeként határozzák meg, amelyek a bemeneteket outputokká alakítják.
Maga a számítógépes program csak egy passzív utasítássorozat. Míg a folyamat ezen utasítások közvetlen végrehajtása.
Ezenkívül a folyamat egy futó program és annak minden eleme: címtér , globális változók , regiszterek , verem , megnyitott fájlok és így tovább.
A számítástechnikai rendszerben egy folyamatot jellemzően a következő erőforrások képviselnek (amit "tulajdonnak" is neveznek):
Az operációs rendszer a legtöbb információt a folyamatokról a folyamattáblában tárolja.
A szálakat (szálakat) támogató operációs rendszereken a szálak saját erőforrásokkal is rendelkeznek. Ez általában csak a processzor állapota, bár a szálak más erőforrásokat is használhatnak.
Annak érdekében, hogy csökkentse annak valószínűségét, hogy a folyamatok interferálják egymást, valamint a rendszer meghibásodásának valószínűségét (például patthelyzet vagy összeomlás ), az operációs rendszer biztosítja a folyamatok elkülönítését, és lefoglalja a szükséges erőforrásokat. Az operációs rendszer mechanizmusokat is biztosít a folyamatok biztonságos és kiszámítható kommunikációjához.
Ez a rész egy folyamat memóriaábrázolását tárgyalja a Linux operációs rendszerben és az x86 architektúrában . Az ilyen ábrázolás alig különbözik sok más többfeladatos operációs rendszertől és architektúrától. Például az amd64 -ben, az x86 utódjában a hívási verem ugyanígy felülről lefelé nő, de a címtér mérete 2 48 bájtra nő. [2]
A Linux lapos memóriamodellt használ , ezért ebben az architektúrában minden folyamat számára 232 bájt memória áll rendelkezésre. Az összes virtuális memória felhasználói és kernelterületre oszlik . A kernelterület egy gigabájt memóriát foglal el, a legmagasabb címtől kezdve. A fennmaradó terület, azaz három gigabájt a felhasználói terület számára van fenntartva.
A jobb oldali diagram bármely folyamat felhasználói térbeli reprezentációját mutatja. A kernelterület minden folyamatban azonos, mivel a kernelnek csak egy példánya létezhet az operációs rendszerben. A program elindítása után a processzor utasításai (gépi kódja) és az inicializált adatok importálásra kerülnek a RAM-ba. Ugyanakkor az indítási argumentumok és a környezeti változók magasabb címekre importálódnak.
Az inicializált adatterület csak olvasható adatokat tárol. Lehetnek például karakterlánc-literálok.
Az inicializálatlan adatterület általában globális változókat tárol.
A kupac a memória lefoglalására szolgál a program futása közben. Linuxon erre van egy rendszerhívás mmap.
A veremterület az eljárások meghívására szolgál .
Szintén fontos részlet, hogy a verem és a felső terület, valamint az inicializált adatterület és a kupac között véletlenszerű behúzás található. Ez biztonsági okokból történik, például más funkciók egymásra halmozásának megakadályozása érdekében.
A dinamikus hivatkozási könyvtárak és a fájlleképezések a verem és a kupac között helyezkednek el.
A többfeladatos operációs rendszerekben lehetővé vált több folyamat egyidejű munkavégzése. A megelõzõ többfeladatos operációs rendszerek lehetõvé tették több folyamat egyidejû futtatásának érzését. Ehhez több folyamat menedzselésére volt szükség.
A Unix az egyik első többfeladatos operációs rendszer. Minden folyamatnak egyedi numerikus PID-je van. A benne lévő folyamatok fahierarchiával rendelkeznek , ahol a gyökér a PID 1-es init folyamat . Rendszerhívással új folyamat hozható létre , ez a szülő folyamatfork pontos másolata lesz . Az init kivételével minden folyamatnak mindig van szülőfolyamata (a PPID attribútum ( Parent PID )); olyan folyamatok, amelyek szülője véget ért , az init leszármazott folyamataivá válnak.
A folyamatokat csoportokba is vonják . setpgidA rendszer hívja a csoportazonosítót (PGID), és felelős a csoport azonosítójának kezeléséért getpgid. A PGID megegyezik a csoportvezető PID-jével. A gyermek folyamat örökli a csoportot a szülőtől. A csoportok a feladatok kezelésére szolgálnak .
A folyamatcsoportokat munkamenetekké egyesítik . A rendszerhívás felelős egy új munkamenet létrehozásáért setsid. Az azonos csoportból származó folyamatok nem tartozhatnak különböző munkamenetekhez. Ezért a csoportvezető nem lehet foglalkozásvezető: egy foglalkozás létrehozásakor a gyermekfolyamat automatikusan a foglalkozásvezetővé és az új csoport vezetőjévé válik. A munkamenetek a felhasználó bejelentkezése után futó összes folyamat nyomon követésére szolgálnak.
Minden munkamenethez legfeljebb egy vezérlőterminál tartozhat . A terminálemulátor egy parancshéjjal ( leggyakrabban bash vagy sh) rendelkezik gyermekfolyamatként , amely indítás előtt az új munkamenet vezetője lesz, és beállítja magát a vezérlő terminálnak.
A legegyszerűbb operációs rendszernek nem kell új folyamatokat létrehoznia, hiszen a készülék bekapcsolásakor egyetlen program fut bennük. Bonyolultabb rendszerekben új folyamatokat kell létrehozni. Általában létrejönnek:
Egy folyamat a fő futó állapoton kívül más állapotokban is lehet, például várakozva.
Egy Linux - folyamat a következő állapotok egyikében lehet:
Minimum 2 teljesítési szakasz:
Az eljárás leállításának okai:
Az operációs rendszerek szempontjai | |||||
---|---|---|---|---|---|
| |||||
Típusok |
| ||||
Sejtmag |
| ||||
Folyamatmenedzsment _ |
| ||||
Memóriakezelés és címzés | |||||
Betöltési és inicializálási eszközök | |||||
Héj | |||||
Egyéb | |||||
Kategória Wikimedia Commons Wikikönyvek Wikiszótár |