PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 1 Procesy a vlákna PB 169 Počítačové sítě a operační systémy PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 2 Vnitřní struktura OS ¢Existuje řada přístupů a implementací ljedno velké monolitické jádro lmodulární, hierarchický přístup lmalé jádro a samostatné procesy ¢Struktura mnoha OS je poznamenána historií OS a původními záměry, které se mohou od současného stavu radikálně lišit PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 3 Struktura s mikrojádrem ¢Microkernel System Structure ¢Malé jádro OS plnící pouze několik málo nezbytných funkcí lprimitivní správa paměti (adresový prostor) lkomunikace mezi procesy – Interprocess communication (IPC) ¢Většina funkcí z jádra se přesouvá do „uživatelské“ oblasti lovladače HW zařízení, služby systému souborů, virtualizace paměti … lmezi uživatelskými procesy se komunikuje předáváním zpráv PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 4 Co je to proces ¢Pro spuštěný program máme řadu pojmenování ldávkové systémy: úlohy, dávky, jobs lmultiprogramové systémy: procesy (processes, tasks), vlákna (threads) ¢Společné pojmenování pro spuštěný program je proces (někdy používáme synonymum task) ¢Dále zavádíme pojem vlákno pro „dílčí“ proces v rámci „procesu“ ¢Proces obsahuje lčítač instrukcí lzásobník ldatovou sekci lprogram PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 5 Stavy procesu ¢Proces se může nacházet v jednom ze stavů: lnový (new): právě vytvořený proces lběžící (running): některý procesor právě vykonává instrukce procesu lčekající (waiting): čeká na určitou událost lpřipravený (ready): čeká na přidělení času procesoru lukončený (terminated): ukončil své provádění PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 6 Stavy procesu PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 7 Informace OS o procesu ¢Process Control Block -- tabulka obsahující informace potřebné pro definici a správu procesu lstav procesu (běžící, připravený, …) lčítač instrukcí lregistry procesoru linformace potřebné pro správu paměti linformace potřebné pro správu I/O lúčtovací informace PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 8 Přepnutí procesu PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 9 Přepnutí kontextu ¢Vyžádá se služba, akceptuje se některé asynchronní přerušení, obslouží se a nově se vybere jiný běžící proces ¢Když OS přepojuje CPU z procesu X na proces Y, musí: luchovat (uložit v PCB procesu X) stav původně běžícího procesu lzavést stav nově běžícího procesu (z PCB procesu Y) ¢Přepnutí kontextu představuje režijní ztrátu (zátěž) lběhem přepínání systém nedělá nic efektivního ¢Doba přepnutí závisí na konkrétní HW platformě lPočet registrů procesoru, speciální instrukce pro uložení/načtení všech registrů procesoru apod. ¢Př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í ¢ PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 10 Vytvoření procesu ¢Rodič vytváří potomky (další procesy) ¢Potomci mohou vytvářet další potomky … ¢Vzniká strom procesů ¢Sdílení zdrojů – varianty při vytváření potomků lrodič a potomek sdílejí zdroje původně vlastněné rodičem lpotomek sdílí rodičem vyčleněnou podmnožinu zdrojů s rodičem lpotomek a rodič jsou plně samostatné procesy, nesdílí žádný zdroj ¢Běh lrodič a potomek mohou běžet souběžně lrodič čeká na ukončení potomka PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 11 Ukončení procesu ¢Proces provede poslední příkaz a sám požádá OS o ukončení lvýstupní data procesu se předají rodiči (pokud o to má zájem – např. čeká na ukončení potomka voláním wait) lzdroje končícího procesu se uvolňují operačním systémem ¢O ukončení procesu žádá jeho rodič (nebo jiný proces s dostatečnými právy), protože např.: lpotomek překročil stanovenou kvótu přidělených zdrojů lúkol přidělený potomkovi rodič již dále nepotřebuje lrodič 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ů) PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 12 Příklad: Linux ¢volá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) ¢vfork – upravené fork, které nekopíruje stránky paměti rodičovského procesu lrychlejší lvhodné pro okamžité spuštění execve ¢clone – 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. ¢Informace o procesu jsou uloženy ve struktuře task_struct (viz usr/include/sched.h) PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 13 Příklad: Linux (2) procflow PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 14 Procesy a vlákna ¢Program lsoubor definovaného formátu obsahující instrukce, data a další informace potřebné k provedení daného úkolu ¢Proces lsystémový objekt charakterizovaný svým paměťovým prostorem a kontextem (paměť i některé další zdroje jsou přidělovány procesům) ¢Vlákno, také „sled“ lobjekt, který vzniká v rámci procesu, je viditelný pouze uvnitř procesu a je charakterizován svým stavem (CPU se přidělují vláknům) ¢Model – jen procesy (ne vlákna) lproces: jednotka plánování činnosti i jednotka vlastnící prostředky ¢Model – procesy a vlákna lproces: jednotka vlastnící zdroje lvlákno: jednotka plánování činnosti PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 15 Procesy a vlákna ¢Každé vlákno si udržuje svůj vlastní lzásobník lPC (program counter) lregistry lTCB (Thread Context Block) ¢Vlákno může přistupovat k paměti a ostatním zdrojům svého procesu lzdroje procesu sdílí všechny vlákna jednoho procesu ljakmile jedeno vlákno změní obsah (nelokální – mimo zásobník) buňky, všechny ostatní vlákna (téhož procesu) to vidí lsoubor otevřený jedním vláknem mají k dispozici všechny ostatní vlákna (téhož procesu) PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 16 Procesy a vlákna ¢Proč využít vlákna lvyužití multiprocesorových strojů (vlákna jednoho procesu mohou běžet na různých CPU) ljednodušší programovaní ltypický příklad: jedno vlákno provádí uživatelem požadovaný úkol a druhé vlákno překresluje obrazovku ¢1:1 lUNIX Systém V, (MS-DOS) •pojem vlákno neznámý, každé „vlákno“ je procesem s vlastním adresovým prostorem a s vlastními prostředky ¢1:M lOS/2, Windows XP, Mach, … •v rámci 1 procesu lze vytvořit více vláken •proces je vlastníkem zdrojů (vlákna sdílejí zdroje procesu) PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 17 Procesy vs. vlákna PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 18 Výhody využití vláken ¢Výhody lvlákno se vytvoří rychleji než proces lvlákno se ukončí rychleji než proces lmezi vlákny se rychleji přepíná než mezi procesy ljednodušší programování (jednodušší struktura programu) lu multiprocesorových systémů může na různých procesorech běžet více vláken jednoho procesu současně ¢Příklady lsíťový souborový (nebo i jiný) server •musí vyřizovat řadu požadavků klientů •pro vyřízení každého požadavku vytváří samostatné vlákno (efektivnější než samostatný proces) l1 vlákno zobrazuje menu a čte vstup od uživatele a současně 1 vlákno provádí příkazy uživatele lpřekreslování obrazovky souběžně se zpracováním dat PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 19 Problém konzistence ¢Program se skládá z několika vláken které běží paralelně ¢Výhody lkdyž vlákno čeká na ukončení I/O operace, může běžet jiné vlákno téhož procesu, aniž by se přepínalo mezi procesy (což je časově náročné) lvlákna jednoho procesu sdílí paměť a deskriptory otevřených souborů a mohou mezi sebou komunikovat, aniž by k tomu potřebovaly služby jádra (což by bylo pomalejší) ¢Konzistence lvlákna jedné aplikace se proto musí mezi sebou synchronizovat, aby se zachovala konzistentnost dat (musíme zabránit současné modifikace stejných dat dvěmi vlákny apod.) PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 20 Příklad (problém konzistence) ¢Situace: l3 proměnné: A, B, C l2 vlákna: T1, T2 lvlákno T1 počítá C = A+B lvlákno T2 přesouvá hodnotu X z A do B (jakoby z účtu na účet) ¢Představa o chování lT2 dělá A = A-X a B = B+X lT1 počítá konstantní C, tj. A + B se nezmění ¢Ale jestliže lT1 spočítá A+B lpo té co T2 udělá A = A-X lale dříve než co T2 udělá B = B+X lpak T1 nezíská správný výsledek C = A+B PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 21 Stavy vláken ¢Tři klíčové stavy vláken: lběží lpřipravený lčekající ¢Vlákna se (samostatně) neodkládají lvšechny vlákna jednoho procesu sdílejí stejný adresový prostor ¢Ukončení procesu ukončuje všechny vlákna existující v rámci tohoto procesu PB 169 Počítačové sítě a operační systémy ‹#› PB 169 Počítačové sítě a operační systémy 22 Příklad: Win32 ¢Implementuje vlákna na úrovni jádra OS (implementace je zdařilá, umožňuje mimo jiné paralelní běh vláken jednoho procesu na různých procesorech) ¢Služby OS lCreateThread lExitThread lGetExitCodeThread lCreateRemoteThread (vytváří vlákno jiného procesu) lSuspendThread lResumeThread lGetProcessAffinityMask (běh vlákna na procesorech) lSetProcessAffinityMask lSetThreadIdealProcessor lSwitchToThread (spusť jiný thread – je-li připraven) lTlsAlloc, TlsFree, TlsSetValue, TlsGetValue (thread local storage)