PB 169 Počítačové sítě a operační systémy1 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émy2 Vnitřní struktura OS Existuje řada přístupů a implementací jedno velké monolitické jádro modulární, hierarchický přístup malé 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émy3 Struktura s mikrojádrem Microkernel System Structure Malé jádro OS plnící pouze několik málo nezbytných funkcí primitivní správa paměti (adresový prostor) komunikace mezi procesy ­ Interprocess communication (IPC) Většina funkcí z jádra se přesouvá do ,,uživatelské" oblasti ovladače HW zařízení, služby systému souborů, virtualizace paměti ... mezi uživatelskými procesy se komunikuje předáváním zpráv PB 169 Počítačové sítě a operační systémy4 Co je to proces Pro 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) 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 čítač instrukcí zásobník datovou sekci program PB 169 Počítačové sítě a operační systémy5 Stavy procesu Proces 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í PB 169 Počítačové sítě a operační systémy6 Stavy procesu PB 169 Počítačové sítě a operační systémy7 Informace OS o procesu Process 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 PB 169 Počítačové sítě a operační systémy8 Přepnutí procesu PB 169 Počítačové sítě a operační systémy9 Přepnutí kontextu Vyžádá se služba, akceptuje se některé asynchronní přerušení, obslouží se a nově se vybere jako běžící proces Když 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) Přepnutí kontextu představuje režijní ztrátu (zátěž) během přepínání systém nedělá nic efektivního Doba 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. 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émy10 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ů 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 Běh rodič a potomek mohou běžet souběžně rodič čeká na ukončení potomka PB 169 Počítačové sítě a operační systémy11 Ukončení procesu Proces 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 O ukončení procesu žádá jeho rodič (nebo jiný proces s dostatečnými právy), 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ů) PB 169 Počítačové sítě a operační systémy12 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 rychlejší vhodné 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émy13 Příklad: Linux (2) PB 169 Počítačové sítě a operační systémy14 Procesy a vlákna Program soubor definovaného formátu obsahující instrukce, data a další informace potřebné k provedení daného úkolu Proces systé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" objekt, 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) proces: jednotka plánování činnosti i jednotka vlastnící prostředky Model ­ procesy a vlákna proces: jednotka vlastnící zdroje vlákno: jednotka plánování činnosti PB 169 Počítačové sítě a operační systémy15 Procesy a vlákna Každé vlákno si udržuje svůj vlastní zásobník PC (program counter) registry TCB (Thread Context Block) Vlákno může přistupovat k paměti a ostatním zdrojům svého procesu zdroje procesu sdílí všechny vlákna jednoho procesu jakmile jedeno vlákno změní obsah (nelokální ­ mimo zásobník) buňky, všechny ostatní vlákna (téhož procesu) to vidí soubor 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émy16 Procesy a vlákna Proč využít vlákna využití multiprocesorových strojů (vlákna jednoho procesu mohou běžet na různých CPU) jednodušší programovaní typický příklad: jedno vlákno provádí uživatelem požadovaný úkol a druhé vlákno překresluje obrazovku 1:1 UNIX 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 OS/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émy17 Procesy vs. vlákna PB 169 Počítačové sítě a operační systémy18 Výhody využití vláken Výhody vlákno se vytvoří rychleji než proces vlákno se ukončí rychleji než proces mezi vlákny se rychleji přepíná než mezi procesy jednodušší programování (jednodušší struktura programu) u multiprocesorových systémů může na různých procesorech běžet více vláken jednoho procesu současně Příklady síť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) 1 vlákno zobrazuje menu a čte vstup od uživatele a současně 1 vlákno provádí příkazy uživatele překreslování obrazovky souběžně se zpracováním dat PB 169 Počítačové sítě a operační systémy19 Problém konzistence Program se skládá z několika vláken které běží paralelně Výhody když 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é) vlá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 vlá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émy20 Příklad (problém konzistence) Situace: 3 proměnné: A, B, C 2 vlákna: T1, T2 vlákno T1 počítá C = A+B vlákno T2 přesouvá hodnotu X z A do B (jakoby z účtu na účet) Představa o chování T2 dělá A = A-X a B = B+X T1 počítá konstantní C, tj. A + B se nezmění Ale jestliže T1 spočítá A+B po té co T2 udělá A = A-X ale dříve než co T2 udělá B = B+X pak T1 nezíská správný výsledek C = A+B PB 169 Počítačové sítě a operační systémy21 Stavy vláken Tři klíčové stavy vláken: běží připravený čekající Vlákna se (samostatně) neodkládají vš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émy22 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 CreateThread ExitThread GetExitCodeThread CreateRemoteThread (vytváří vlákno jiného procesu) SuspendThread ResumeThread GetProcessAffinityMask (běh vlákna na procesorech) SetProcessAffinityMask SetThreadIdealProcessor SwitchToThread (spusť jiný thread ­ je-li připraven) TlsAlloc, TlsFree, TlsSetValue, TlsGetValue (thread local storage)