Operációs rendszerek 7. előadás processzek 2007/2008. II. félév Dr. Török Levente
A mai program A multi programozástól a process-ekig A process-ek állapotai, állapot átmenetei A process-eket leíró táblák (process location) Process context váltás: mikor? Példák: http://www.iit.uni-miskolc.hu/~vadasz/geial202/peldaprogramok/
Egy processzor - sok feladat? Cél: (b. ábra), 1 proc esetén a megoldás (a. ábra), proc kihasználtság (c. ábra) megvalósul a látszat párhuzamosság ez a multi programozás
Sok feladat -> Sok processz 1. Direkt program a sok feladat kiszolgálásra nagy odafigyelést igényel, nehézkes nem lehet nagy ciklusokat szervezni, minden task csak egy kis feladatot láthat el int main() { for(;;) { task1(); // pl mosógép program végrehajtásának következő fázisa task2(); // az LCD frissititese task3(); // billentyuzet feldolgozasa } }
Sok feladat -> Sok processz 2. Állapot gépes technika ha bonyolultabb task-okat kell szervezni void task1() { static int state_m1; // ez az állapotgép állapota switch(state_m1){ case 1: ; state_m1=2;break; // itt váltunk állapotot először case 2: ;state_m1=1;break; // másodszor, vissza } } int main() { for(;;) { task1(); // pl mosógép program végrehajtásának következő fázisa task2(); // az LCD frissititese task3(); // billentyuzet feldolgozasa } }
Mi történik? A Task1() állapotgépje: először 1 2 másodszor ebben az állapotban megoldjuk a feladat egyik részét, majd elengedjük a vezérlést majd ebben megoldjuk az a másik feladat részét, és majd ismét elengedjük a vezérlést A végrehajtási sorrend a main-ben: task1() // state= 1 task2() task3() új ciklus task1() // state= 2 task2() stb.stb.
Sok feladat -> Sok processz 3. BgProc-os technika: csak arra kell figyelni, hogy bármelyik hosszú ideig tartó folyamat időről-időre meghívja a BgProc()-ot, amelyben a háttérfolyamatok állapotgépek segítségével adminisztrálásra kerülnek. A technika a előzőekkel szemben REKURZÍV megoldást alkalmaz.
Sok feladat -> Sok processz 4. Task switching: Timer interrupt-on időröl-időre kicseréljük a CPU teljes állapotját: (pl. x86-on: IP,CS,SS,DS ) NAGYON jól kell ismerni a hardware-t! Task adminisztrációs terület a memóriában (context): Task1 leírója: regs: IP,CS,SS,DS Task2 leírója: regs: IP,CS,SS,DS Task3 leírója: regs: IP,CS,SS,DS 2. save clock 1. Timer irq (20ms) CPU: Az éppen futó proc regs: IP,CS,SS,DS 3. restore
Sok feladat -> sok processz 5. Task switching védett op.rendszer esetén USER SPACE Task 1 Proc Context Task 2 Proc Context KERNEL SPACE Admin adatok Admin adatok Scheduler Proc context: regs, stacks,... ugyanaz mint az elöbb Admin adatok: - pl. megnyitott fájl descriptor-ok.
Process context User space: regiszterek: CS, IP, DS,SS pwd Kernel space: ID, process állapota, prioritása közelmúltban felhasznált ideje, gyermekei által felhasznált idők, kötetkező ébredés ideje fájl handler-ek, exception handler-ek cimei MMU állapota jogosultságok,umask,uid,gid rendszerhívás paraméterei
Standard kérdések Az op. rendszer szemponjából: Extended virtual machine: egyedüli hw. látszata hogyan? Resource management: CPU scheduling hogyan lehet optimális? Responding machine: egyedüli gép látszata az API felől. A felhasználó szepontjából: Process (sok DS) vagy thread (fonál; egy DS)? Kommunikáció a process-ek thread-ek között.
Kérdés Vajon a kernelben csak egy processz van? régen a linuxban igen, illetve ú.n. cooperative multi tasking volt ma már nem.ma preemptive multi tasking van, amihez valódi kontextus tartozik. természetesen a kernel processzek nincsenek védve egymástól ezért továbbra is nagyon odafigyelve lehetcsak kernelt fejleszteni. NB: az IT handler-ek csak a rendszer kontextushoz tartoznak.
Kérdés 2. Annak érdekében, hogy minden egyes task között egyenletesen tudjam elosztani a processzort, mint erőforrást, tudnom kell, hogy melyik process mennyit futott a közelmúltban és hogy valójában a processzor hány százalékára lenne jogosult. Ezt vezetjük ún. számlákon. Vajon a rendszerhívások melyik process számláját (process idejét) használják? A rendszerhívások (ioctl/syscall) mindenképp a hívó process idejét eszik meg. Az interruptok a rendszer process idejét fogyasztják.
2 állapotú process model A 2 állapot valamelyikében van a proc. Running Not-running
A queue-ban várakozik minden ready process
Process Creation (létrehozás) Példák: Gyermek folyamat létrehozása Print-elés (job bejuttatása a print queue-ba) A felhasználó be-log-olása
Process Termination példák process befejezésre exit() függvényt hív maga a process véget ér a program futása ( a main() fv ) System or User Kills process kill parancs segítségével küldünk a processnek (3-as signal-t quit-et), vagy 9-eset küldünk a rendszernek Error vagy fault esemény Segmentation Fault: ezzel egy időben: core dump fájl gyártása! A process-t indító felhasználó kilép
Process Termination példák process befejezésre Memory unavailable (nincs elég mem) Protection error (védelmi hiba) example write to read-only file (csak olvasható fájl írása) Arithmetic error: Division by zero
Process Termination példák process befejezésre I/O failure (sikertelen I/O művelet) Invalid instruction (nem értelmezett utasítás): például, amikor adat területet próbálunk végrehajtatni Privileged instruction execution: privilégizált csak kernel módban futtatható utasítást próbáltunk meg végrehajtani user módban. Operating system intervention: (Op rendszer beavatkozás) such as when deadlock occurs (deadlock feloldás) Parent terminates so child processes terminate: a szülő folyamat befejezte a futását. Parent request (szölői kérésre)
Process állapotok Not-running (nem futó) ready to execute (de kész a futásra) Blocked waiting for an event (egy esemény bekövetkezésére vár) ezt a folyamatot az ütemező nem tudja kiválasztani ütemezésre, mert bár ennek kellene következni, de várakozik az esemény bekövetkezésére
Az 5 állapotú modell Running Ready Blocked New Exit Ez azonos lenne a 3 állapotú modellel, de olyat nem szoktas emlegetni:)
Using Two Queues
Suspended Processes (felfüggesztett állapot) Ha sokáig blokkolt (blocked) egy proc., kikerülhet (swap-pelődhet) a disk-re, ilyenkor kerül felfüggesztett (suspended) állapotba 2 új állapot Blocked suspend Ready suspend Ugyan ez történhet akkor is, ha hosszú ideig csak ready, azaz futásra kész állapotban van egy processz.
One Suspend State
Two Suspend States: 7 states modell
Okok a felfüggesztésre (suspended azaz swapped állapotba kerülésre) Swap: memória szűkössége, (mem starving) Interaktivitás: a felhasználó kiszolgálása elsődleges (CPU starving) Időzítés: a csak időszakosan fútó háttér folyamatokat, ki lehet swap-elni. Szülő folyamat kérésre
Virtualitás Minden processz úgy érzékeli, hogy övé a rendszer, akkor amikor fut. Azaz azt érzi nincs más a rendszerben, minden erőforrás az övé
Operating System Control Structures Minden process-t és erőforrást nyilván kell tartani: Ezeket táblázatokba, struktúrákba foglalva kezeli az op. rendszer
Process Table = cca. Process Location Table
Memory Tables Allocation of main memory to processes Allocation of secondary memory to processes Protection attributes for access to shared memory regions Information needed to manage virtual memory
I/O Tables I/O device is available (elérhető) or assigned (felhasználás alatt van) Status of I/O operation I/O<->mem átvitel során használt memória címek
File Tables Opened files Current Status (pillanatnyi állapota) Attributes (hozzáférési jogok) Location in main memory
Process Image Process Location
Process Location (a process tartalma ) Process control block PCB: Collection of attributes (minden attribútumok gyűjteménye!) Ez a processz nem ki-swap-pelhető része Process image: Code, data, stack, segments and attributes Ez a processz ki-swap-pelhető része
Process Control Block Process identification A kurrens process azonosítója (pid) A szülő process azonosítója (parent process - ppid) User identifier (uid), group identifier (gid), umask
Process Control Block Processor State Information A processzor a felhasználható által is használható regiszterei: pl. x86-on: AX, BX,, segmensek, Control and Status Registers PC, Status registers: carry, overflow, interrupt state
Példa a status register-re Pentium II EFLAGS Register
Process Control Block Process Control Information Scheduling and State Information (minden ami a process ütemezéséhez kell): Process state: running, ready, waiting, halted Priority: (e.g., default, current, highestallowable) Scheduling-related information: Az elmúlt időben felhasznált processzor idő Event: (esemény) Annak az eseménynek az azonosítója (ha blokkolt állapotban van), aminek teljesülnie kell mielőtt a process-t vissza lehet állítani ready állapotba
Process Control Block Process Control Information Data Structures (adat struktúrák) Egy folyamatot több helyre kellhet kapcsolni (azonosítani) Például, ha egy queue-ban várakozik, vagy ha egy process szülő-gyerek viszonyban jelenítjük meg. Ezek leírásához van szükség ezekre ezekre a szerkezetekre.
Process Control Block Process Control Information Interprocess Communication 2 független processz között flag-ekkel, signal-okkal, és messages-ekkel, osztott memoriával kommunikálhatunk. Ezek egy része ebben helyezkedik el. Process Privileges (jogosultságok): A processznek garantálni kell, hogy bizonyos memória területet elérhet és csak ő érhet el. Továbbá a rendszer erőforrások és perifériák jogosultságaira is.
Process Control Block Process Control Information Memory Management: A processzhez tartozó virtuális memiória leírására szolgáló pointereket, szegmenseket és vagy page-eket tartalmaz. Resource Ownership and Utilization (erőforrás birtoklása és használatának nyilvántartása) pl. nyitott file-ok. esetenként az erőforrás használat történetét is itt tartjuk nyilván és az ütemező ezt is figyelembe veszi.
Process végrehajtási módok User mode kevésbé privilégizált, korlátozott üzemmód A felhasználói programok futnak így Nem lehet minden proc. utasítást végrehajtani System mode = control mode = kernel mode privilégizált: minden erőforráshoz hozzáférhet az ilyen process az op.sys kernel-e fut így
Process Creation (létrehozás) Egyedi proc, azonosító allokálása Memória allokálása a proc. image számára és proc. contr. block (PCB) számára, ez utóbbit inicializálni kell Vegül a proc. ütemezőt értesítésítjük
Mikor váltsunk process-t? Clock interrupt lejárt a process-re szánt idő ebben az időszeletben I/O interrupt Memory fault Ha a megcímzett memória terület swap területen van.
Mikor váltsunk process-t? Trap: NB: (a kooperativ op rendszerek csak ezt tudják! - win 3.2) ha hiba történt ha ez exit állapotba billentené a proc-t
Processz váltásának lépései Save: PC and context Update the current PCB Change PCB state to ready Scheduler selects another proc. Update PCB of the new proc. to running Update memory-management data structures Restore context, and PC (i. e. jump)
Execution of the Operating System Non-process Kernel execute kernel outside of any process operating system code is executed as a separate entity that operates in privileged mode
Execution of the Operating System Process-Based Operating System major kernel functions are separate processes Useful in multi-processor or multi-computer environment
Execution of the Operating System NB: FUSE Execution Within User Processes operating system software within context of a user process process executes in privileged mode when executing operating system code
Processz management függvények C-ben fork() - process létrehozás gyermek proc. létrehozása a kurrens proc. context másolása a gyeremekére visszatérés mind a két proc.-ban a kurrens pid-del getpid() visszaadja a kurrens proc. pid-jét
main() { Példa 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 FONTOS: A szülő és a gyermek adat területe csak másolata egymásnak, de nem ugyanaz a memória terület!
fork() Szülő fork() A szülő folytatja futását Másolatként létrejön a gyermek folyamat
Process felülírása Ha az új process-t, a kurrens helyére akarjuk betölteni használjuk: exec(char* programfilename, ) Ez betölti a megadott programot, amely elkezd ugyanebben a process-ben futni.
Ultra könnyű process: thread = fonál = szál Egy proc. thread-jei közös adatal de külön-külön: Thread ID stack pointer, regisztek open files (descriptors) signal mask signals and signal handler priority current working directory Return value: errno User and group id Használat (gyakorlaton): pthread_create(); pthread_join();
Process és thread állapotok Process Thread1 Thread2 Run Blocked Run Blocked Ready Ready A vezérlés mindig a nem blokkolt állapotú thread-ek között kerül kiosztásra addig ameddig a process időszeletében arra lehetőség van.
Összefoglalás Multitasking direkt prog/direkt HW futtatás Op.sys esetén adatstruktúrák a kernelben státusok, állapot átmenetek kontrol: létrehozás, felülírás, thread létrehozás
Ellenőrző kérdések Mi a multiprogramozás? Miért fontos? Írjon egy állapotgépet C-ben, ami 1 másodpercenként sorsol egy új állapotot és oda lép. Milyen módszerekkel lehet valósítani multiprogramozást? 3 módszer Milyen processz adatok vannak user és kernel space-en? Mi a thread és a processz különbsége? Mi a cooperative és mi a preemptive multi tasking. Mi processzek 3,5 és 7 állapota? Mikor jön létre a suspended processz állapot?
Ellenőrző kérdések Milyen táblazatokat kell manage-elni az op.rendszerben? Mi a Process Location? Mi a PCB és mi a Process Image? Milyen 3 csoportba bontható információkat tartalmaz a PCB? Mit tartalmaz Proc Image? Írjon példát fork használatára. Exec használatára. Mit jelent a virtualitás legfontosabb megjelenése egy multitask-os rendszerben. Milyen lépésekben zajlik egy processz váltás? Milyen processzor működési állapotok és címtartományokat ismer? Mi jellemző a kernel és a user végrehajtási módra? privilégizáció És mód váltása?
Ellenőrző kérdések Rajzolja le egy processz két thread-jének thread állapot diagramját. Az egy processz különböző thread-jeiben különbözőek lesznek-e a megnyitott file-ok? a kurrens munka könyvtár? HF: utána nézni mire való a clone() függvény? -> man clone HF: utána nézni mi a zombie processz állapot és miért kell, hogy legyen? -> http://kerneltrap.org/node/6206