Folyamatok

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:

  1. 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.
  2. Fut (running): A processzor annak a folyamatnak az utasításait hajtja végre, amelyik ebben az állapotban van.
  3. 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:

  1. 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.
  2. 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).
  3. 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.
  4. 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.