‹#›/29 PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Procesy 05 ‹#›/29 lPro spuštěný program máme řadu pojmenování ●dávkové systémy: úlohy, dávky, jobs ●multiprogramové systémy: procesy (processes, tasks), vlákna (threads) lSpolečné pojmenování pro spuštěný program je proces (někdy používáme synonymum task) lDále zavádíme pojem vlákno pro „dílčí“ proces v rámci „procesu“ lProces obsahuje ●čítač instrukcí ●zásobník ●datovou sekci ●program (instrukční sekce) CO JE TO PROCES PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lHierarchie procesů ●rodič, potomek (proces vytvořený na žádost jiného procesu – rodiče) ●sourozenci (procesy vytvořené jedním rodičem) lProcesy a mutiprogramování ●prokládáním běhů procesů maximalizujeme využití procesoru a minimalizujeme dobu odpovědi ●procesu jsou přidělovány zdroje systému ●bereme v úvahu priority a vzájemnou výlučnost operací ●musíme zabránit „uváznutí“ procesů (deadlock) PROCES V OS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lProces se může nacházet v jednom ze stavů: ●nový (new): právě vytvořený proces ●běžící (running): některý procesor právě vykonává instrukce procesu ●čekající (waiting): čeká na určitou událost ●připravený (ready): čeká na přidělení času procesoru ●ukončený (terminated): ukončil své provádění STAVY PROCESU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 STAVY PROCESU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ new terminated ready running waiting admitted interrupt exit I/O or event completion I/O or event wait scheduler dispatch ‹#›/29 lProcess Control Block -- tabulka obsahující informace potřebné pro definici a správu procesu ●stav procesu (běžící, připravený, …) ●čítač instrukcí ●registry procesoru ●informace potřebné pro správu paměti ●informace potřebné pro správu I/O ●účtovací informace INFORMACE OS O PROCESU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ pointer process state process number process counter registers memory limits list of open files ‹#›/29 PŘEPNUTÍ PROCESU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ save state into PCB0 operating system reload state from PCB1 save state into PCB1 reload state from PCB0 process P0 process P1 interrupt or system call idle idle executing interrupt or system call idle executing executing ‹#›/29 lVyžádá se služba, akceptuje se některé asynchronní přerušení, obslouží se a nově se vybere jako běžící proces lKdyž OS přepojuje CPU z procesu X na proces Y, musí: ●uchovat (uložit v PCB procesu X) stav původně běžícího procesu ●zavést stav nově běžícího procesu (z PCB procesu Y) lPřepnutí kontextu představuje režijní ztrátu (zátěž) ●během přepínání systém nedělá nic efektivního lDoba přepnutí závisí na konkrétní HW platformě ●Počet registrů procesoru, speciální instrukce pro uložení/načtení všech registrů procesoru apod. lPři přerušení musí procesor ●uchovat čítač instrukcí ●zavést do čítače instrukcí hodnotou adresy vstupního bodu ovladače přerušení z vektoru přerušení l PŘEPNUTÍ KONTEXTU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lFronta úloha ●seznam všech procesů v systému lFronta připravených procesů ●seznam procesů uložených v hlavní paměti a připravených k běhu lFronta na zařízení ●seznam procesů čekajících na I/O operaci lFronta odložených procesů ●seznam procesů čekajících na přidělení místa v hlavní paměti lFronta na semafor ●seznam procesů čekajících na synchronizační událost l… FRONTY PLÁNOVÁNÍ PROCESŮ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 PŘÍKLAD: FRONTY PROCESŮ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ head tail head tail head tail head tail head tail ready queue terminal unit 0 disk unit 0 mag tape unit 1 mag tape unit 1 registers PCB7 registers PCB2 PCB3 PCB14 PCB6 PCB5 queue header ‹#›/29 lObecně nemusím mít všechny úlohy, které chci spustit, v operační paměti lFronta všech úloh může být značně dlouhá a plánovač musí rozhodnout, které úlohy zavést do paměti a spustit lToto je úkol dlouhodobého (strategického) plánovače ●vybírá který proces lze zařadit mezi připravené procesy ●plánovač je spouštěn je relativně málo často – typicky při ukončení jednoho procesu rozhodne, kterou úlohu dále vybrat k zavedení do paměti a spuštění ●nemusí být super rychlý ●určuje stupeň multiprogramování STRATEGICKÝ PLÁNOVAČ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lPřiděluje procesor připraveným procesům lJe spouštěn často (např. každých 10ms) lProto musí být rychlý KRÁTKODOBÝ PLÁNOVAČ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ready queue I/O queue I/O request time slice expired fork a child wait for a interrupt child executes intercept occurs I/O CPU ‹#›/29 lKaždý proces musíme jednou zavést do RAM ●alespoň částečně (část může zůstat na disku a dohrána on-demand – viz některé optimalizace) lPříliš mnoho procesů v RAM však snižuje výkonnost i při využití virtuální paměti lOS musí provádění některých procesů odložit -- „vrátit“ na disk lDva nové stavy ●odložený čekající ●odložený připravený ODKLÁDÁNÍ PROCESŮ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lStřednědobý (taktický) plánovač ●vybírá který proces lze zařadit mezi odložené procesy ●vybírá který odložený proces lze zařadit mezi připravené procesy lNáleží částečně i do správy operační paměti ●kapacita FAP je omezená a odložené procesy uvolňují paměť STŘEDNĚDOBÝ PLÁNOVAČ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ CPU ready queue I/O I/O waiting queues partialy executed swapped-out process swap in swap out end ‹#›/29 lRodič vytváří potomky (další procesy) lPotomci mohou vytvářet další potomky … lVzniká strom procesů lSdílení zdrojů – varianty při vytváření potomků ●rodič a potomek sdílejí zdroje původně vlastněné rodičem ●potomek sdílí rodičem vyčleněnou podmnožinu zdrojů s rodičem ●potomek a rodič jsou plně samostatné procesy, nesdílí žádný zdroj lBěh ●rodič a potomek mohou běžet souběžně ●rodič čeká na ukončení potomka VYTVOŘENÍ PROCESU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lProces provede poslední příkaz a sám požádá OS o ukončení ●výstupní data procesu se předají rodiči (pokud o to má zájem – např. čeká na ukončení potomka voláním wait) ●zdroje končícího procesu se uvolňují operačním systémem lO ukončení procesu žádá jeho rodič (nebo jiný proces s dostatečnými právy nebo OS), protože např.: ●potomek překročil stanovenou kvótu přidělených zdrojů ●úkol přidělený potomkovi rodič již dále nepotřebuje ●rodič končí svoji existenci a nebylo povoleno, aby potomek přežil svého rodiče ●může docházet ke kaskádnímu ukončování (ukončí se celá větev stromu procesů) UKONČENÍ PROCESU PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lNezávislé procesy ●nemohou se vzájemně ovlivňovat lKooperující procesy ●mohou ovlivňovat běh jiných procesů nebo jiné procesy mohou ovlivňovat jejich běh lPřínosy kooperace procesů ●sdílení informací ●urychlení výpočtů ●modularita ●pohodlí při programování lPříklady typových úloh kooperace ●producent – konzument ●klient – server KOOPERUJÍCÍ PROCESY PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lNeumožňuje spouštět procesy paralelně (single-taskingový systém) lSlužby OS ●spusť proces a čekej na ukončení potomka (služba 4bh int21h) ●ukonči proces (služba 00 int21h nebo služba 4ch int21h nebo int20h) ●zjisti návratovou hodnotu ukončeného procesu (služba 4dh int21h) ●ukonči proces, ale neuvolňuj paměť – (terminate, but stay resident) – TSR (služba 31h int21h nebo int 27h) PŘÍKLAD: MS-DOS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lPopisovač procesu (Program Segment Prefix) PŘÍKLAD: MS-DOS (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Offset Size Contents +0 2 EXE programs may JMP or RET here (PSP:0) to exit +2 2 top of available system memory in paragraphs +4 1 (reserved) +5 5 FAR CALL to DOS function dispatcher +6 (2) bytes available in Program Segment (for COM file only) +0aH 4 Terminate address. See INT 22H +0eH 4 Ctrl-Break handler address INT 23H +12H 4 Critical Error handler addr INT 24H +16H 16H DOS reserved area +2cH 2 Segment address of DOS environment +2eH 2eH DOS reserved area +5cH 10H setup as an FCB for 1st cmd parameter +6cH 14H setup as an FCB for 2nd cmd parameter +80H 1 count of characters in UPA at 81H also offset of default DTA +81H 7fH characters from DOS command line (except any redirection directives) 100H Program Segment Prefix size ‹#›/29 lOS s preemptivním multitaskingem lSlužby OS ●fork – vytvoří nový proces jako kopii rodiče ●execve – nahradí současný proces spuštěním jiného programu ●exit (resp. _exit) – ukončí proces ●wait, waitpid – čeká na ukončení potomka PŘÍKLAD: UNIX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lSpuštění procesu a vyčkání na jeho ukončení ●pid=fork(); ●if(pid<0) { perror(“fork failed”); exit(1); } ●else if(pid==0) { /* child */ ● execlp(“/bin/ls”,”ls”,NULL); } ● else { /* parent */ ● wait(NULL); ● printf(“child completed”); ● exit(0); ● } PŘÍKLAD: UNIX (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lvolání fork() implementováno jako copy-on-write (tj. dokud paměť není měněna je sdílena a až při pokusu o modifikaci je vytvořena kopie) lvfork – upravené fork, které nekopíruje stránky paměti rodičovského procesu ●rychlejší ●vhodné pro okamžité spuštění execve lclone – upravené fork, které umožňuje sdílet některé zdroje (například paměť, deskriptory souborů, ovladače signálů) mezi rodičovským a nově vytvořeným procesem. lInformace o procesu jsou uloženy ve struktuře task_struct (viz usr/include/sched.h) PŘÍKLAD: LINUX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 PŘÍKLAD: LINUX (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ 1 2 6 4 3 5 zombie sleeping wakeup ready to run fork () new process running in kernel mode sleep interrupt & return sys call or interrupt & return running in user mode context switch in/out ‹#›/29 lSlužby OS ●CreateProcess – vytvoří nový proces (spustí specifikovaný program) ●OpenProcess – pro získání přístupu k existujícímu procesu ●ExitProcess – ukončí tento proces ●TerminateProcess – ukonči nějaký (např. synovský) proces ●GetExitCodeProcess – zjisti návratovou hodnotu ukončeného procesu (nebo fakt, že proces ještě neskončil) PŘÍKLAD: WIN32 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 l STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); if(!CreateProcess(L"c:\\windows\\system32\\sol.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { printf( "CreateProcess failed (%d)\n", GetLastError() ); getch(); return; } WaitForSingleObject( pi.hProcess, INFINITE ); CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); PŘÍKLAD: WIN32 (CreateProcess) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 lDWORD aProcesses[1024], cbNeeded, cProcesses; lif ( EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) l{ cProcesses = cbNeeded / sizeof(DWORD); for (int i = 0; i < cProcesses; i++ ) if( aProcesses[i] != 0 ) VypisProces( aProcesses[i] ); l} PŘÍKLAD: WIN32 (EnumProcesses) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 PŘÍKLAD: WIN32 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Initialized Waiting Ready Terminated Running Transition Standby Context-switch to it and start ist execution (dispatching) Execution completes Reinitialise Place in ready queue Preempt Select for execution Create and initialize thread object Thread waits on an object handle Kernel stack outswapped Preempt (or time quantum ends) Wait is complete ‹#›/29 lValues for the Thread Wait Reason counter l0 Waiting for a component of the Windows NT Executive l1 Waiting for a page to be freed l2 Waiting for a page to be mapped or copied l3 Waiting for space to be allocated in the page or nonpaged pool l4 Waiting for an Execution Delay to be resolved l5 Suspended l6 Waiting for a user request l7 Waiting for a component of the Windows NT Executive l8 Waiting for a page to be freed l9 Waiting for a page to be mapped or copied l10 Waiting for space to be allocated in the page or nonpaged pool l11 Waiting for Execution Delay to be resolved l12 Suspended l13 Waiting for a user request l14 Waiting for an event pair high l15 Waiting for an event pair low l16 Waiting for an LPC Receive notice l17 Waiting for an LPC Reply notice l18 Waiting for virtual memory to be allocated l19 Waiting for a page to be written to disk l20+ Reserved PŘÍKLAD: WIN32 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/29 Výukovou pomůcku zpracovalo Servisní středisko pro e-learning na MU http://is.muni.cz/stech/ PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ