57
OPERÁCIÓS RENDSZEREK A folyamat kontextus, processz menedzsment, processz állapotok

OPERÁCIÓS RENDSZEREK

  • Upload
    janae

  • View
    47

  • Download
    1

Embed Size (px)

DESCRIPTION

OPERÁCIÓS RENDSZEREK. A folyamat kontextus, processz menedzsment, processz állapotok. A mai program. A processz és a processz kontextus fogalmak Kontextus váltás (processz – rendszer – processz kontextus) Processz kontroll, rendszerhívásai Processz állapotok, állapotátmenetek, futási mód - PowerPoint PPT Presentation

Citation preview

Page 1: OPERÁCIÓS RENDSZEREK

OPERÁCIÓS RENDSZEREK

A folyamat kontextus, processz menedzsment, processz állapotok

Page 2: OPERÁCIÓS RENDSZEREK

Vadász 2

A mai program• A processz és a processz kontextus fogalmak• Kontextus váltás (processz – rendszer – processz

kontextus)• Processz kontroll, rendszerhívásai• Processz állapotok, állapotátmenetek, futási mód• A taszk, processz, fonál fogalmak

Page 3: OPERÁCIÓS RENDSZEREK

Vadász 3

A CPU által végrehajtott instrukciófolyam

• Hogyan működik a számítógép: a CPU veszi a soron következő instrukciót és végrehajtja …

• Van képzetünk az instrukciófolyamról. Ez struktúrálatlan.

• A HW ad egy struktúráltságot: felhasználói módban/kernel módban végrehajtott instrukciófolyam szakaszok vannak. Köztük a trap és a visszaállítás.

Page 4: OPERÁCIÓS RENDSZEREK

Vadász 4

Az instrukciófolyam másik struktúrálása

• Logikailag szakaszoljuk az instrukciófolyamot• Egy adott program futásához tartozó

instrukciófolyam a kezdetétől a végéig egy szakasz• Ez a job/taszk/processz• Ez a szakaszolás nem következik a hardverből• Ezt a szakaszolást az OS végzi• A processzhez persze az instrukciófolyamon kívül az adatai

(és még további információk) is hozzátartoznak ...

Page 5: OPERÁCIÓS RENDSZEREK

Vadász 5

A folyamat fogalma

A folyamat (processz, taszk) egy végrehajtási példánya egy párhuzamosságot nem tartalmazó végrehajtható

programnak.Processz végrehajtható programPongyolán: processzben fut a program.

A processzhez dedikált PC tartozik, ami egyetlen helyre tud mutatni a program szövegben

Page 6: OPERÁCIÓS RENDSZEREK

Vadász 6

Folyamat tartalom (Process Context)A folyamat kontextus: adatstruktúrákba rendezve minden

olyan információ, ami a folyamat futásához szükséges.

Minden olyan információ, ami a rendszer számára szükséges, hogy a CPU-t a folyamatok között kapcsolja, a folyamatok

szekvencialitásának illúzióját biztosítva.

“Tartalom“ szerint:- a program kódszegmensei (instrukciók sorozatai),- a program adatszekciói (inicializált adatszekciók, konstans szekciók stb.),- a processz veremtárai,-a processz menedzselési információi (állapotokat leíró, számlázási, hozzáférési stb. információk, erőforrás leírók)-Regisztertartalmak.

Page 7: OPERÁCIÓS RENDSZEREK

Vadász 7

A processz kontextusEgy szemléletmód:

• hardver kontextus: HW regiszterek, MMU regiszterek stb. (volatile context/environment)

• szoftver kontextus (Address space)

Egy másik szemléletmód:• felhasználói szintű kontextus, amit a felhasználói

címtartomány (User Level Address Space) címez• rendszer szintű kontextus (System Address Space)

Page 8: OPERÁCIÓS RENDSZEREK

Vadász 8

Futási mód - kontextus - címtartomány • Emlékezz: módváltás=trap/kivételes esemény/IT

User módUser

Address Space

Kernel módKernel

Address Space

Processz kontextus

(program, adat, verem)

Admin. adatok

Kivétel kezelők, szolgáltató rutinok

stb.

System Stacks,

IT handlerek, ütemező stb.

A processz javára

Page 9: OPERÁCIÓS RENDSZEREK

Vadász 9

Futási mód - kontextus -címtartomány• A processz címtartományának

– Egy része a felhasználói címtartomány. Processzenként szétválasztott memóriaterületet címez.

– Egy része kernel szintű címtartomány. Minden processz ugyanazt a kernel memóriarészt címezi

• Fontosak az MMU regiszterek (VM címleképzéshez). Ezek is részei a processz kontextusnak.

• Fontos fogalom a futó processz (kurrens)– MMU regiszterei segítik a címleképzést

Page 10: OPERÁCIÓS RENDSZEREK

Vadász 10

Egy kérdés, és a válasz …Van már fogalmunk a processz címtartományairól és a

kontextusáról. Mi van a kernel kóddal? Az tartozik valamilyen kontextushoz? A válasz:

• Bizonyos kernel szolgáltatások kliens-szerver módban, önálló processzekként teljesítődnek. Saját processz kontextusuk van, IPC-vel kérhetők szolgáltatásaik.

• Mások: rutinok a kernelben– Egyes rutinok a futó processz javára dolgoznak (sycall,

kivételkezelők) – Az IT kezelőknek (valószínűleg) nincs közük a futó

processzhez. Lehet, nincs is futó processz.

Page 11: OPERÁCIÓS RENDSZEREK

Vadász 11

Tovább a válasz …• A futó processz javára dolgozó kernel rutinok a

processz kontextusán (fölötte) futnak– Ekkor a kernel közvetlenül elérheti a futó processz

kontextusának elemeit – A független processz modellből levezethető tárgyalásban a

kernel kódok, adatok nem is részei a processz kontextusnak (fölötte fut). De egy másik tárgyalásmód szerint részei (kontextusán fut)

• Az IT kezelők semmiképp nem részei egyetlen processz kontextusnak sem. Nem processz kontextusban futnak, minden processz kontextusa fölött: rendszer kontextusban

Page 12: OPERÁCIÓS RENDSZEREK

Vadász 12

Tovább a válasz …• Tárgyaljuk így:• A CPU futhat egy processz kontextusán (kontextusában)

– Felhasználói módban: a program kódját futtaja– Kernel módban: Sycall rutint, kivételkezelőt futtat. Ezek közvetlenül

elérhetik a processz címtartományát • A CPU futhat rendszer kontextusban

– Kernel módban: IT kezelést végez, tevékenysége nem köthető egy processzhez (sem) . Valamely processz kontextusa csak közvetetten érhető el.

• Van processz kontextus váltás (két processz közti akció), és van processz kontextusról rendszer kontextusra való váltás: egyszerű kontextus váltás (futó processz MMU regiszterei helyett rendszer MMU regiszterek betöltődnek, ez „olcsóbb”) fogalom

Page 13: OPERÁCIÓS RENDSZEREK

Vadász 13

A processz kontextus adatstruktúrái– Process Table Entry (kernel címtartományban)

• a processz kreáláskor keletkezik, • nem kisöpörhető: rezidens,• "statikus" adatokat tartalmaz (melyek a processz létezését jelzik, de

nem elegendőek a futásához):– azonosítók (pid, pname, statikus kvóták, attributumok),– kód és adatszegmens pointerek és hosszok,– vermek hossza stb.

– Processz leíró (Process Descriptor)• a processz futtathatóvá válásakor keletkezik,• esetleg kisöpörhető: nem feltétlenül rezidens,• "dinamikus" adatokat tartalmaz (melyek a processz futásához is

kellenek):– volatile kontextus (regisztertartalmak: PC, PSW stb.),– ütemezési, számlázási, állapot információk, – vermek pointerei stb.

Page 14: OPERÁCIÓS RENDSZEREK

Vadász 14

A processz kontextus adatstruktúráiA kiinduló pont

• A processz tábla (Process Table)• A kernel által kezelt, adott méretű táblázat (array of

structure), melynek egy-egy bejegyzése egy-egy processz vezérlő blokk (process table entry).

• A tábla mérete kritikus. Mi történne, ha betelne?• Processz vezérlő blokk (Process Control Block)

– folyamat azonosítási információi (pid, ppid, pname)– folyamat számlázási információi (CPU használat stb.)– időkiosztással (scheduling) kapcsolatos információk– erőforrás használati határértékek (limitek, kvóták)– mutatók a kontextus további részeire stb.– next/prev pointerek láncolt listákhoz.– ( Más elnevezések is lehetnek)

Page 15: OPERÁCIÓS RENDSZEREK

Vadász 15

u-area

proc-structure

Process Table

Processzenkéntiregion table

Közösregion table

Memória

Unix processz kontextus adatstruktúrái

Page 16: OPERÁCIÓS RENDSZEREK

Vadász 16

Unix processz kontextus adatstruktúrái• Proc structure (olyan adatok, melyek akkor is kellenek, ha

kisöprött a processz)– uid, gid, pid, ppid (azonosítók)– program méret, memóriaigény– állapotjelzők a memóriamenedzseléshez,

a globális ütemezéshez– szignál mezők stb.

• U area (1K-4K)(kisöpörhető, kilapozható; olyan információk, melyek akkor kellenek, ha a processz nincs kisöpörve)– user structure + mutató a kernel veremre

• erőforrás limitek, kvóták, default eszköz, dir, terminál• nyitott I/O folyamok leírói, • idő, számlázási információk az ütemezéshez stb.

Page 17: OPERÁCIÓS RENDSZEREK

Vadász 17

Unix processz kontextus komponensek

Felhasználói szintű kontextus

•Program szöveg•Adatok•Veremtár•Osztott adatok

Rendszer szintűkontextus statikus része

•Process Table bejegyzése•U Area•Processzenkénti Region Table Felhasználói szint

Keret az 1. rétegnek

Keret a 2. rétegnek

Keret a 3. rétegnek

A kontextus statikus része A kontextus dinamikus

(volatile)része

Page 18: OPERÁCIÓS RENDSZEREK

Vadász 18

Összefoglalás• Vettük a processz fogalmat, szétválasztva a program

- processz fogalmakat.• a processz kontextus fogalmat

– tartalom szerint,– adatstruktúráival,– címtartományok szerint.

• Kérdés: miért jó a processz koncepció? Milyen előnye van?

Page 19: OPERÁCIÓS RENDSZEREK

Vadász 19

Folyamatok vezérlése (Process Control, Process Management)

• A folyamatok• születnek, élnek, valamilyen feladatot végeznek,

– versenyeznek erőforrásokért,– osztoznak erőforrásokon,– kommunikálnak, együttműködnek,– szinkronizáció köztük.

• Végül exitálnak.Általában processzt csak processz kreálhat.

Így: szülő - gyermek kapcsolat lehet közöttük.Van ősszülő processz. (Lehetnek a rendszer betöltéskor

keletkező processzek, amiknek nincs szülője.)

Page 20: OPERÁCIÓS RENDSZEREK

Vadász 20

A processzek élete• Szülő folytatja futását gyermekével párhuzamosan• Szülő megvárja, amíg gyermekei befejeződnek

• A szülő és gyermeke osztozik az erőforrásokon• Részben, alig, vagy egyáltalán nem osztoznak

• Processzek együttműködése– Független processzek (nincs hatásuk egymásra)– Kooperáló/versenyző processzek

Page 21: OPERÁCIÓS RENDSZEREK

Vadász 21

A független processz modell• A kernel saját virtuális gépet biztosít minden processznek.

Ezen a processz szekvenciálisan fut. Saját időtere van, csak ezt látja …

• Egy rendszerhívás a virtuális gép egy virtuális instrukciója. Saját időterében megszakíthatatlan.

• A kivételes esemény, a megszakítás a virtuális gép számára esemény, le tudja kezelni.

• Nem szükségesek a processz állapot, állapotváltás, az ütemezés, módváltás fogalmak sem …

• Ez egy idealizált modell. Nem igaz, hogy a processzeknek nincs hatásuk egymásra …

Page 22: OPERÁCIÓS RENDSZEREK

Vadász 22

A kooperáció• A kooperáció kiváltó oka

– Információ osztás, pl. közös fájlok stb.– Sebesség növelés. Feltétel: több CPU, vagy I/O csatorna– Modularitás (bonyolult rendszerek dekompozíciója)– Kényelem (pl. editál-fordít párhuzamosan a felhasználó)

• Mit kíván a kooperáció?– Processzek közötti kommunikációs mechanizmusokat (IPC

mechanizmusokat).– Kölcsönös kizárási mechanizmusokat.

Page 23: OPERÁCIÓS RENDSZEREK

Vadász 23

Processz kontroll rendszerhívások• Processz kreáció hívásai

– fork(), vfork(), system(), clone()LINUX, ptrace()• Statikus kontextus megváltoztatása

– execl(), execlp(), execle(), execv(), execvp()• Processz terminációval kapcsolatos hívások

– exit(), _exit(), abort() (a szignálkezelők is terminálhatnak)– atexit(), on_exit() // terminációt befolyásoló hívások– wait(), waitpid() // terminációt kiváró hívások

• Segítő hívások– sleep(), pause(), szignálkezelések, attribútum lekérdezések

és beállítások stb.

Page 24: OPERÁCIÓS RENDSZEREK

Vadász 24

Processz kreáció• A kernel elkészíti a processz tábla bejegyzést; • memóriát biztosít a kód és adatszegmenseknek,

inicializál; • elkészíti a processz leírót, memóriát biztosít a

vermeknek;• Elkészíti a regiszter kontextust (a PC értéket kap);• futtatható állapotba teszi a processzt.

Page 25: OPERÁCIÓS RENDSZEREK

Vadász 25

Processz befejeződés• Az exit/return rendszerhívás család egyik tagjának

meghívása, vagy a vezérlésnek a main függvény utolsó utasításának végrehajtása a normális termináció– A termináció során „háztartási munka” folyik,– Az atexit() és on_exit() hívásokkal befolyásolhatjuk ezt.– Néhány mozzanat a háztartási munkából:

• Processz szignáloz a szülőjének, hogy exitál;• Gyermekeit átadja más processznek, hogy azok legyenek s szülők;• (Esetleg) leszármazottainak szignáloz (pl. üléslétesítő processz SIGHUP

szignált küld).

• Az abort() rendszerhívás erőszakosan terminálja hívóját. A szignálok (az alapértelmezési szignálkezelők) többnyire szintén terminálnak.

Page 26: OPERÁCIÓS RENDSZEREK

Vadász 26

Processz kreáció: fork()• A fork és a join mechanizmus

– A fork az instrukciófolyamot két párhuzamos ágra osztja, elágaztatja,

– a join pedig a két ágat összeolvasztja.• A fork()POSIX, Unix rendszerhívás a processz instrukció

folyamát úgy ágaztatja ketté, hogy az egyik ág a hívó processz instrukció folyama marad, a másik ág számára pedig gyermek processzt kreál

• A szülőben a fork-kal szétválasztott ágakat a wait() v. waitpid()POSIX hívással lehet összeolvasztani: a szülő megvárja gyermekének terminálódását.

Page 27: OPERÁCIÓS RENDSZEREK

Vadász 27

Gyermek processz készítés: fork()• Szintaxisa

– Prototípus deklarációja:pid_t fork();

– Hívása:#include <sys/types.h>#include <unistd.h>...pid = fork()...

Page 28: OPERÁCIÓS RENDSZEREK

Vadász 28

A fork szemantikája• Készít gyermek folyamatot, melynek kontextusa a

pid-et és az időfelhasználást kivéve ugyanaz, mint a készítőjé (ugyanaz a szöveg, ugyanott fut!)

• A pontos egyezőségekért, különbözőségekért nézzék a man fork-ot!

Page 29: OPERÁCIÓS RENDSZEREK

Vadász 29

A fork „tevékenysége”• Ellenőrzi, készíthető-e a gyermek. Meghatározza a gyermek

pid-jét. Előkészíti a VM kisöprési/kilapozási területét• Bejegyzést készít a processz táblába a gyermek számára

– Bizonyos adatok a szülőtől jönnek (uid, gid, signal mask, ppid), mások 0-val, vagy a processzre jellemzően indulnak (idők)

• VM címleképző táblá(kat) allokál a gyermeknek• Elkészíti a processz leírót (másolja a szűlőjét, majd a gyermek

címleképzéséhez igazítja). Ezzel a szülő kontextusának logikai másolatát elkészíti. A nyitott adatfolyamok hivatkozásait inkrementálja.

• Inicializálja a gyermek HW kontextusát (a szülő regisztereit másolva), futtatható állapotba teszi a gyermeket.

• Mindkét processzben visszatér:– szülőben a gyermek pid-jével (negatív értékkel, ha hiba van),– gyermekben 0 értékkel.

Page 30: OPERÁCIÓS RENDSZEREK

Vadász 30

Egy egyszerű példa …main() {int pid, gpid;

pid = getpid();if((gpid = fork()) == 0) {

/* Itt a gyermek fut */gpid = getpid();exit(0); /* Gyermek befejeződik */

}/* itt a szulo fut */exit(1); /* Szulo befejeződik */

}

Page 31: OPERÁCIÓS RENDSZEREK

Vadász 31

Két kérdés …

• Hány processz fut, ha a fenti programot futtatjuk?(Feltesszük, minden fork() sikeres).

• És itt?

main() { if (fork() /*1*/) exit(1); else if (fork() /*2*/) exit(2); else fork() /*3*/; exit(3);}

main() { int i; for (i=0; i<3; i++)

fork(); }

Page 32: OPERÁCIÓS RENDSZEREK

Vadász 33

Statikus processz kontextus megváltoztatása

Új programot tölt a kontextusra. Az exec* családEgyikük deklarációjának szintaxisa:int execl(char *path, char *arg0[, char *arg1,…](char *) 0);Visszaad: státust.Hívása:#include <unistd.h>int status;...status=execl(”/public/myname/

myexec_file”,”pname”,”elso”,”masodik”,NULL);

Page 33: OPERÁCIÓS RENDSZEREK

Vadász 34

Az exec? lépései• Elemzi a path-ot, ellenőrzi, hogy futtatható-e

(permissions, executable, SUID, SGID)• Másolja az argumentumokat és beállítja a

lörnyezetet (environment)• VM-hez swap területet allokál, a régit elereszti• VM-hez címleképző táblá(kat) allokál, felállítja az új

címtartományokat • Default szignálkezelést állít be (a blokkolt vagy

ignorált szignálokat megtartja) • Inicializálja a HW kontextust (PC felveszi a belépési

pont címet, többi regiszter nullázódik)

Page 34: OPERÁCIÓS RENDSZEREK

Vadász 35

Esettanulmányok • Nézzék a

http://www.iit.uni-miskolc.hu/~vadasz/GEIAL202/Peldaprogramok/helyet. • Itt a …/proc jegyzékben a következő fájlok:

– system-syscall-pelda.c // system() rendszerhívások

– szulo-gyermek-egyutt-fut.c // fork() hívás– fork-exec-villak.c & echoall.c // fork után execle és execlp

• A következő fájlok processz terminálódási példák:– processz-terminalodasok.c // különböző terminálódások– processz-terminalodas-2.c // terminálódó processz

gyermekei esete– zombie-processz.c // zombie előállítás

Page 35: OPERÁCIÓS RENDSZEREK

Vadász 36

Foglaljunk össze!• Tudunk processzt kreálni, statikus kontextust váltani

a fork-exec "villával". • Az exec*() hívásnál argumentumokat adhatunk át a

main()-nek! • Érdemes megnézni a wait()SVID, waitpid()POSIX,

wait3()BSD hívásokat, ezekkel a szülő megvárhatja a gyermeke lefutását!

• Processzek terminálódását elérhetjük az exit() rendszerhívásokkal. Az exit során „háztartási munkát” végeztethetünk.

• Most újabb téma jön: processz állapotok

Page 36: OPERÁCIÓS RENDSZEREK

Vadász 37

Processz állapotok• Az OS szempontjából nézve

– több processz (futó program) létezik a rendszerben,– ezeknek aktivitása van, futásuk közben különböző

állapotokat vehetnek fel.• Az operációs rendszernek nyomon kell követni az

állapotokat, állapotváltozásokat, hogy erőforrásokat és szolgáltatásokat biztosítson a processzek számára.

• A "global system state" a létező processzek állapotainak összessége.

Page 37: OPERÁCIÓS RENDSZEREK

Vadász 38

Egy processz állapotai• A legalapvetőbb állapotok:

– Futó állapot (running, current stb.). A processzé a CPU. – Futásra kész állapot (ready, computable etc.). A processz

számára minden erőforrás rendelkezésre áll, kivéve a CPU-t. A CPU-t igényli a processz.

– Blokkolt állapot (blocked, sleeping stb.) A processz a CPU-n kívül valamilyen erőforrást igényel még. Előbb ezt kell megkapja, csak utána vehet részt a CPU-ért való versengésben.

– A futásra kész és a blokkolt állapotokat együtt szokás várakozó (waiting) állapotoknak is nevezni. Általában az állapot elnevezésekben sok változat van.

Page 38: OPERÁCIÓS RENDSZEREK

Vadász 39

Processz állapotok, állapotátmenetek

blokkolt

futó

készsignal/assign

sleep/wait/request preem

pt

schedule/run

várakozó

• Ellipszisek az állapotok, nyilak az állapotátmenetek• Más elnevezések is szokásosak (pl. ready=computable=on,

blocked=sleeping=suspended, running=current=active stb.)• Mi válthatja ki az átmeneteket?• Látható a Process Context Switch jelenség

Page 39: OPERÁCIÓS RENDSZEREK

Vadász 40

Az állapot átmenetek• A wait/sleep/request állapotátmenetet maga a

processz "okozza", azzal, hogy bejelenti igényét valamilyen -a processzortól különböző - erőforrásra (pl. bufferre, diszk blokkra, eseményre stb.)

• A signal/assign állapotátmenetet rendszerint egy IT kezelő (handler) rutin "okozza", jelzés, hogy már rendelkezésre áll az a más erőforrás.

• A elvétel (preempt) és a kioszt (schedule/run) állapotátmeneteket az ütemező (scheduler/dispatcher) "hajtja végre".

Page 40: OPERÁCIÓS RENDSZEREK

Vadász 41

A Process Context Switch• A CPU "kapcsolása" két processz között.• Egyik "elveszti" a CPU-t, a másik megkapja. • Mindig két processz vesz részt benne,

– az egyiknél • wait/sleep/request (maga "mond le" a CPU-ról) • vagy preempt (elveszik tőle a CPU-t, bár még használná)

állapotátmenet történik,– a másiknál a schedule/run átmenet (megkapja a CPU-t).

• Figyeljük meg: blokkolt processz állapotból előbb kész állapotba kell jutni, hogy a „kapcsolásban” részt vehessen processz!

Page 41: OPERÁCIÓS RENDSZEREK

Vadász 42

Egy bővebb - de általános - állapot diagramm

running

blocked ready non existent

suspendedblocked

suspendedready

zombieexit

wait

suspend resume

preempt-schedule

suspend suspend resume

signal

signal create

delete

Page 42: OPERÁCIÓS RENDSZEREK

Vadász 43

A processz állapotok nyilvántartása• A kontextusban (rendszerint a PCB-ben) rögzítettek az

állapotok, de • láncolt lista adatszerkezeteken, sorokon (queues) is!

Sorfej

Readyqueue

Blokkoltprocesszek

sorai

NULLheadtail

headtail

headtail

headtail

MT1queue

Disk1queue

Terminalqueue

PCB

PCB

NULL

NULLPCB

PCB

NULLPCB

Page 43: OPERÁCIÓS RENDSZEREK

Vadász 44

A láncolt listák és a Context Switch

Sorfej

Readyqueue

NULLheadtail

PCB2

PCB6

Sorfej

Runqueue

NULLheadtail

PCB1

Sorfej

Readyqueue

NULLheadtail

PCB6

PCB1

Sorfej

Runqueue

NULLheadtail

PCB2

A PCB1 processz időszelete letelt, preempcióval elveszik tőle a

CPU-t

Page 44: OPERÁCIÓS RENDSZEREK

Vadász 45

Processz állapot - processz futási mód

• A futási módok alapvetően a CPU jellemzői:– felhasználói (normál, user) mód,– kernel (privilegizált, védett) mód: ebben

• szélesebb címtartomány,• bővebb utasításkészlet.

• Mivel a a CPU regiszterek is hozzátartoznak processz kontextushoz (dinamikus/volatile kontextus), mondhatjuk: a processzeknek is van futási módjuk.

• Különböztessük meg az állapotot a futási módtól!

Page 45: OPERÁCIÓS RENDSZEREK

Vadász 46

Futási mód - kontextus • Emlékezz: módváltás=trap/kivételes esemény/IT

User módUser

Address Space

Kernel módKernel

Address Space

Processz kontextus

Program, adat, verem

Admin. adatok

Kivétel kezelők, szolgáltató rutinok

stb.

System Stacks,

IT handlerek, ütemező stb.

A processz javára

Page 46: OPERÁCIÓS RENDSZEREK

Vadász 47

Processz állapotok (Bach szerint)

U Run

K Run

ReadySleep

Preem-ted

Zombie

fork

ret

exit

wait

signal

schedule

preempt

(i)ret/exec

syscall, it,trap

trap, it, iret

Page 47: OPERÁCIÓS RENDSZEREK

Vadász 48

U Run

K Run

ReadySleep

Zombie

fork

trap, it, iret

exit

wait

signal

schedule

preempt

(i)ret/exec

syscall, it,trap

Processz állapotok

Page 48: OPERÁCIÓS RENDSZEREK

Vadász 49

Taszk, processz, fonál• Ismerjük a klasszikus processz fogalmat. • A modern OS-ek (és alkalmazásfejlesztők) támogatják a

konkurens programozást, a párhuzamosságot …• Fonál (thread): a CPU használat alapegysége, egy

szekvenciálisan futó instrukciósorozat, van dinamikus kontextusa (regiszterkészlete, verme). Osztozik más fonalakkal egy taszk statikus kontextusán (címkészlet: adat, kód; stb.). A fonalak valódi vagy pszeudó párhuzamosságban futhatnak.

• Taszk: van statikus kontextusa (címkészlete, erőforrásai: nyitott I/O-k, adminisztrációs információk, szignálok stb.) Fonál nélkül egy taszk passzív entitás.

• Egy taszk egyetlen fonállal: a klasszikus processz.• További egységek programozói szemmel: rutinok, utasítások,

instrukciók

Page 49: OPERÁCIÓS RENDSZEREK

Vadász 50

Párhuzamosság• A valódi párhuzamosság attól függ, hány processzor

van … hány processzort használhat egy alkalmazás • A klasszikus processz koncepciójú multitasking vagy

multiprocessing rendszereken is van párhuzamosság– Előzőn pszeudó– Másodikon már valódi

• A fonál koncepció (többprocesszoros rendszeren) kiterjeszti a párhuzamosságot, de konkurens programozási módszereket igényel …

Page 50: OPERÁCIÓS RENDSZEREK

Vadász 51

Konkurencia• Az alkalmazás fejlesztéséhez kapcsolódó fogalom• A konkurens programozás lehet rendszer szintű, vagy

felhasználói szintű, vagy vegyes …– Rendszer szinten

• a fonál kontrollhoz (kreálás, terminálás, attribútum lekérdezés-beállítás stb.) rendszerhívások biztosítottak

• A kernel „ismeri” a fonalakat, allokál nekik CPU-t, ütemezi őket, nyilvántartja állapotukat stb.

– Felhasználói szinten • a fejlesztőhöz adott RTL rutinok végzik a fonál kontrollt (kreáció,

megszüntetés, állapot nyilvántartás, ütemezés). Olcsóbb. • A kernelnek nincs is tudomása a fonalakról. Miután felhasználói szintről a

CPU allokálás védelmi problémákhoz vezetne, nem biztos, hogy valódi párhuzamosságot ad. De teljesítménynövelést azért adhat (a saját fonalak szinkronizációjával, ütemezésével)

– Dual konkurencia: a fonál támogatás funkcionalitása megoszlik …

Page 51: OPERÁCIÓS RENDSZEREK

Vadász 52

Taszk, processz, fonál• Ellentmondásos a terminológia

– Taszk vagy processz? (task, process)– Fonál, szál, könnyűsúlyú processz (thread , lightweight

process: LWP)– Felhasználói szintű fonál (user thread)– Kernel fonál (kernel thread)– Kernel támogatott felhasználói fonál (kernel supported

user thread)

Page 52: OPERÁCIÓS RENDSZEREK

Vadász 53

A kernel fonalai• Nem tartozik felhasználói taszkokhoz• Kernel kontextusuk van • A kernel menedzseli őket (kreáció, megszüntetés,

állapot nyilvántartás, ütemezés, CPU allokálás és kapcsolás stb.)

• Viszonylag olcsó a menedzselésük• Kernel funkciókat látnak el • Ide tartoznak a kernel szintű taszkok kernel

kontrollált fonalai is (ezeknek már taszk kontextusuk van)

Page 53: OPERÁCIÓS RENDSZEREK

Vadász 54

Kernel támogatott fonalak• Ezeket hívják (gyakran) könnyűsúlyú processzeknek (LWP) is• Taszkhoz rendeltek, de a kernel ismeri őket• Rendszerhívások kellenek a kontrolljukhoz (kreáció,

megszüntetés, attribútum kezelés)• A kernel nyilvántartja állapotukat, allokál nekik CPU-t,

ütemezi és kapcsolja őket• Viszonylag drága a menedzselésük• Osztoznak a taszk kontextusán, erőforrásain• Felhasználói taszkok ilyen fonalai felhasználói módban futnak

Page 54: OPERÁCIÓS RENDSZEREK

Vadász 55

Felhasználó kontrollált fonalak• A fejlesztő RTL rutinjait használva programozzuk őket

(POSIX pthreads)• A kernel nem is tud róluk• A RTL rutinokkal kreáljuk, szinkronizáljuk, ütemezzük,

kapcsoljuk őket. • Állapotukat is csak a taszk tartja nyilván. • Menedzselésük olcsó (nem kellenek rendszer-hívások) • Osztoznak a taszk kontextusán (erőforrásain)• A taszkhoz allokált processzoron is osztoznak, azaz csak

pszeudó párhuzamosságban futhatnak. • Természetesen felhasználói módban futnak

Page 55: OPERÁCIÓS RENDSZEREK

Vadász 56

Taszk, K kontrollált fonalakkal

Fut

ReadyBlokkolt

Fut

ReadyBlokkolt

fonál1 fonál2

Taszk

A taszknak nincsenek állapotai. A fonalaknak viszont vannak.

A fonalak (LWP) ütemezését - akár több CPU-ra - a scheduler végzi.

Page 56: OPERÁCIÓS RENDSZEREK

Vadász 57

Taszk, U fonalak

fut

bl kesz bl

fut

kesz

Run

Blokkolt Ready

Vannak taszk és fonál állapotok is.

Run taszkállapotban mikor egy fonál blokkolódik, a taszk kiválaszt másikat és annak adja a CPU-ut.

Ready taszkállapotban legalább egy fonál futásra-kész.

Blokkolt taszkállapotban nincs kész fonál.

A kernel nem is tud a fonalakról.

Page 57: OPERÁCIÓS RENDSZEREK

OPERÁCIÓS RENDSZEREK

A folyamat kontextus, processz menedzsment, processz állapotok

Vége