Operációs rendszerek vizsga 2010. január 18.

A VIK Wikiből

1. Hasonlítsa össze a folyamat (process) és a szál (thread) fogalmakat, adja meg az egymáshoz való viszonyukat, miben azonosak/hasonlítanak és miben különböznek! Rövid táblázatos összehasonlítást kérünk, nem esszét!

Szoftvertechnikák egyik (7-8. elöadás - Folyamatok, konkurens alkalmazások készítése) előadásrészlete elég jól idevág.

2. feladathoz segítség: Mi a prioritás inverzió jelensége?

A szemaforok alkalmazásának egyik nemkívánatos mellékhatása a prioritás inverzió. Adott egy alacsony, egy közepes és egy magas prioritású taszk. Tételezzük fel, hogy először az alacsony prioritású lesz futásra kész. Miután elindult, egy adott ponton lefoglalja a szemafort, majd fut tovább. Ekkor azonban futásra kész lesz a magas prioritású taszk is. A (preemptív) kernel ennek megfelelően ütemezni is fogja. Egy adott ponton a magas prioritású feladat is le szeretné foglalni a szemafort. De mivel az már foglalt, ezért várakozó állapotba kerül. A vezérlés pedig visszaadódik az ekkor egyetlen futásra kész taszkra, az alacsony prioritásúra. Némi idő eltelte után a közepes fontosságú feladat is futásra kész lesz, a kernel ütemezi is, majd futása végeztével folytatódik tovább az alacsony prioritású taszk futása. Egészen addig, amíg el nem engedi a szemafort. Ez a lépés ugyanis futásra kész állapotba hozza a magas prioritású feladatot, amit a kernel ütemez is. Futása során elvégzi azon műveleteket, melyhez a szemafor kellett, majd elengedi azt. Ekkor nem történik semmi, lévén nem vár magasabb prioritású taszk a szemaforra. Miután befejezi futását, visszatér a vezérlés az alacsony prioritású feladatra, így az is be tudja fejezni működését. Figyeljük meg, hogy az alacsony prioritású taszk részben, a közepes prioritású pedig teljes egészében képes volt "beelőzni" a magas prioritásút. Sőt, ha több köztes prioritású feladat is lenne, legrosszabb esetben mindegyik olyan időzítéssel lesz futásra kész, hogy mindegyik hamarabb fog lefutni, mint a legmagasabb prioritású. Ezért nevezik ezt a jelenséget prioritás inverziónak.

5. Rajzolja fel a UNIX folyamatok teljes állapotátmeneti-gráfját és ismertesse az életciklusukat a létrehozástól a megszűnésig! Térjen ki a fontosabb rendszerhívásokra is!

_UNIX 2. diasorból_
az ábra és a folyamatok életciklusa (állapotátmenetek) pont a fontosabb

Folyamatok életciklusa (állapotátmenetek)

  • Létrehozás
    • fork() : új folyamat létrehozása (copy-on-write technika)
    • exec() : új programkód betöltése egy folyamat címterébe
  • Futtatás (ütemezés)
    • futó és futásra kész állapotok közötti átmenetek vezérlése
  • Futás megállítása
    • várakozás eseményre (önként)
    • felfüggesztés (felhasználó)
    • leállás (önként vagy a kernel)
  • Leállás
    • exit()  : rendszerhívással
    • zombi állapot
    • szülő értesítése
    • gyerekek adoptálása

A fork() és az exec() rendszerhívások

  • A fork() eltérő értékkel tér vissza a szülő és a gyerek esetében
  • Az exec() sikeres végrehajtás esetén nem tér vissza
		  if ((res = fork()) == 0) {
				// gyerek
				exec(...);
				// ha visszatér, exec hiba történt
		  } else if ( res < 0 ) {
				// fork hiba történt
		  }
		  // res = CHILD_PID (>0), szülő kódja fut tovább 
  • fork() variációk (címtér használat, szálak többszörözése)
    • clone() (osztott címtér), vfork() (exec), fork1() (egy szál)
  • exec() variációk (elérés, argumentumok, környezet)
    • execl(), execv(), execle(), execve(), execvp(), execlp()

A folyamatok családfája

  • Folyamatot csak egy másik folyamat tud létrehozni
    • minden folyamatnak van szülője és lehetnek gyerekei
    • a szülő változhat (így a gyerekek listája is)
  • A fork() megadja a szülőnek a gyerek azonosítóját (PID)
  • Az ős folyamat (init, idle, swapper)
    • minden folyamat őse
    • a rendszer leállásáig fut
    • örökli az árva folyamatokat
    • figyeli bizonyos rendszerfolyamatok meglétét (futását)
  • A család fontos
    • a szülő értesítést kap a gyerek folyamat leállásáról (nyugtáznia kell)