A program egy algoritmust megvalósító utasítások sorozata magas színtű nyelven vagy gépi kódban. A folyamat (task, process) egy éppen végrehajtás alatt álló program. Egy program végrehajtása több folyamatot is létrehozhat. Egy program több különböző folyamatból is állhat. (Például egy levelező program esetén a bejelentkezés az első folyamat, mely létrehozhat egy szerkesztő, majd egy levélküldő folyamatot.) A létrehozó folyamat a szülő (parent process), a létrehozott a gyermekfolyamat (child process). A szülőt általában az operációs rendszer hozza létre.
Multitasking környezetben a processzorok száma általában kevesebb, mint a folyamatoké, így a folyamatok időnként várakozni kényszerülnek. A további folytatáshoz azonban néhány információt tárolni kell róla.
A folyamatleíró blokk (Process Control Block – PCB) azonosítja egyértelműen a folyamatot. Ez tartalmazza a folytatáshoz szükséges adatokat (konkrét tartalma az adott rendszertől függ):
- a folyamat azonosítóját
- a programszámláló állását
- a folyamat állapotát
- a regiszterek tartalmát
- a folyamathoz tartozó memóriaterületek adatait
- a használt perifériák, állományok jellemzőit
A folyamatok másik megközelítése: Olyan programok, melyeknek van folyamatleíró blokkja. (Vagyis az operációs rendszer felügyelete alá kerültek). A folyamatok közötti váltás e tábla alapján történik, minél nagyobb a tábla, annál lassabban.
A szálak (THREAD) a folyamatokhoz hasonlítanak, de nyilvántartásukhoz gyakran elég az utasítás számláló és a regiszterek tartalma. (Helyesírás ellenőrző az MS Word-ben.) A szálak közötti átkapcsolás nagyon gyors, de az adatcsere lehetősége miatt általában valamilyen közös memóriát kell használniuk.
A folyamatok és a processzor kapcsolata igen szoros, a folyamatok minden utasítását a processzor hajtja végre. Egy folyamat az elindításától a befejezéséig folyamatosan igényli a processzor közreműködését. Rendszerünkben több folyamat is fut, ezért a precíz működés érdekében pontos időzítésre van szükség. A processzor kihasználtsági foka (különösen régebben, amikor a hardver igen drága volt,) elsőrendű fontossággal bírt, de manapság sem elhanyagolható.
A felhasználók szempontjából azonban nem ez a kulcskérdés. A felhasználó akkor érzi jól magát, és akkor elégedett a számítógép működésével, ha az a programjait a lehető legrövidebb idő alatt végrehajtja. A kihasználtság és a sebesség tehát egyaránt fontos, ezért az operációs rendszereknek mindkét feltételt teljesíteniük kell.
Az idővel való gazdálkodást ütemezésnek (scheduling) nevezzük. Az ütemezés során a folyamatok állapota változik meg. Attól függően, hogy milyen állapotok között történik váltás, az ütemező több szintjét definiálhatjuk. (magas szintű ütemező , alacsony szintű ütemező)
Egy folyamat az időzítés szempontjából alapvetően 3 alapállapotot vehet fel, az állapotok között pedig 4 különböző átmenet lehetséges.
-
Az alapállapotok:
- Futásra kész (ready): Ebben az állapotban – a processzoron kívül – minden erőforrás a folyamat rendelkezésére áll. A folyamatok, létrejöttüket követően futásra kész állapotba kerülnek.
- Fut (running): A processzor annak a folyamatnak az utasításait hajtja végre, amelyik ebben az állapotban van.
- Várakozik (blocked): Ha futó folyamat olyan erőforrást igényel, amelyik pillanatnyilag nem áll rendelkezésre, vagy a további futásához szüksége van egy másik folyamat által szolgáltatandó eredményre, ebbe az állapotba kerül.
-
Az átmenetek:
- Elindul (dispatch): A központi egység felszabadulása esetén az alacsonyszintű ütemező a futásra kész állapotban lévő folyamatok közül választja ki azt, amelyik a fut állapotba kerülhet.
- Megszakad (timer runout): Ha a futó folyamat számára biztosított idő lejár, visszakerül a futásra kész állapotba. (Nem mindegyik operációs rendszer teszi lehetővé, hogy egy folyamatot megszakítsunk, ehhez a rendszernek, illetve a folyamatnak megszakíthatónak kell lennie).
- Vár (wait, block): Amennyiben olyan erőforrásra van szüksége, amely éppen foglalt, a fut állapotból a várakozik állapotba jut.
- Feléled (awake): A várt esemény bekövetkezése esetén a folyamat futásra kész állapotba kerül és újra beáll a processzorra várakozó folyamatok sorába.