Počítačové sítě a operační systémy Jaromír Plhák, 1.3.2016PB169 Počítačové sítě a operační systémy Jaromír Plhák xplhak@fi.muni.cz Procesy a vlákna PB169 Počítačové sítě a operační systémy Snímek 2 z 34 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 PB169 Počítačové sítě a operační systémy Snímek 3 z 34 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 PB169 Počítačové sítě a operační systémy Snímek 4 z 34 Program a proces (1) • Program – Soubor přesně definovaného formátu obsahující: • Posloupnost instrukcí, případně sdílená více procesy • Data potřebná k provedení stanoveného úkolu • Proces (Task) – Akt provádění programu, instance výpočtu podle programu – Proces je systémový objekt - jednotka aktivity charakterizovatelná prováděním posloupnosti instrukcí, okamžitým stavem a relevantní množinou systémových zdrojů PB169 Počítačové sítě a operační systémy Snímek 5 z 34 Program a proces (2) • Proces (pokr.) – Je charakterizovaný svým kontextem: • OS přiděluje prostor ve FAP procesům, ne programům, proces vlastní obraz virtuálního (logického) adresového prostoru uchovávaný na vnější paměti, proces může vlastnit soubory, I/O zařízení, okna na obrazovce, komunikační kanály k jiným procesům (sockets), ... – OS přiděluje procesu čas procesoru, proces drží procesor = běží PB169 Počítačové sítě a operační systémy Snímek 6 z 34 Co je to proces? • Pro spuštěný program máme řadu pojmenování – Dávkové systémy: úlohy, dávky, jobs – Multitaskingové systémy: procesy, vlákna • Společné pojmenování pro spuštěný program je proces • Dále zavádíme pojem vlákno pro „dílčí“ proces v rámci procesu – Abstrakce jedné z možných sekvenčních činností procesu – Proces zahrnuje mimo prostředí běhu alespoň jedno vlákno • Může se realizovat pomocí několika vláken PB169 Počítačové sítě a operační systémy Snímek 7 z 34 Data nutná pro správu a řízení procesů (1) • Stavové informace – Registry procesoru • Obecné (střadače, ... ), speciální • Stav procesoru, ukazatelé zásobníku, ukazatelé haldy, čítač instrukcí • Registr s návratovou adresou, ... – Běží, čeká na událost, je připravený běžet, … PB169 Počítačové sítě a operační systémy Snímek 8 z 34 Data nutná pro správu a řízení procesů (2) • Informace nutné pro správu a řízení procesů – Priorita procesu, stav procesu – Informace o používání zdrojů systému procesem • Spotřebovaný čas procesoru, doba běhu • PID (process identifier), účet vlastníka procesu, seznam I/O zařízení vlastněných procesem, seznam otevřených souborů, ukazatelé vyrovnávacích pamětí používaných pro otevřené soubory, ... • Informace o používaných prostorech v operační paměti – Báze, délka oblasti I stránkovací tabulka při virtualizaci paměti • ... PB169 Počítačové sítě a operační systémy Snímek 9 z 34 Informace OS o procesu • Process Control Block - tabulka obsahující informace potřebné pro definici a správu procesu (udržovaná OS) – Id procesu a jeho priorita – 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 – ... PB169 Počítačové sítě a operační systémy Snímek 10 z 34 Stavy procesu (1) • 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í PB169 Počítačové sítě a operační systémy Snímek 11 z 34 Stavy procesu (2) PB169 Počítačové sítě a operační systémy Snímek 12 z 34 Stavy procesu (3) PB169 Počítačové sítě a operační systémy Snímek 13 z 34 Vytvoření procesu, přepnutí z procesu na OS • OS rozhodl, že vytvoří nový proces – Přidělí novému procesu jedinečný id – Vyhradí ve fyzickém adresovém prostoru místo pro každou potřebnou komponentu obrazu procesu – Inicializuje PCB – Proces zařadí do vhodné fronty (mezi připravené procesy) – Vytvoří nebo doplní potřebné datové struktury (účtovací soubor apod.) • Příčiny přepnutí z procesu na OS – Přerušením - je nutná reakce OS na asynchronní událost, externí vůči běžícímu procesu (I/O, časovač, výpadek, ... ) – Synchronním přerušením - je nutná reakce OS na událost související s prováděnou instrukcí (chyba, výjimka, volání služby OS) – OS obslouží příčinu přerušení a rozhodne o dalším postupu PB169 Počítačové sítě a operační systémy Snímek 14 z 34 Přepnutí procesu PB169 Počítačové sítě a operační systémy Snímek 15 z 34 Přepnutí kontextu (1) • 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í: – 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 PB169 Počítačové sítě a operační systémy Snímek 16 z 34 Přepnutí kontextu (2) • 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í PB169 Počítačové sítě a operační systémy Snímek 17 z 34 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 PB169 Počítačové sítě a operační systémy Snímek 18 z 34 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ů) PB169 Počítačové sítě a operační systémy Snímek 19 z 34 Příklad: Linux (1) • volání fork() implementováno jako copy-onwrite (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 PB169 Počítačové sítě a operační systémy Snímek 20 z 34 Příklad: Linux (2) • 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) PB169 Počítačové sítě a operační systémy Snímek 21 z 34 Příklad: Linux (3) PB169 Počítačové sítě a operační systémy Snímek 22 z 34 Procesy a vlákna (1) • 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) PB169 Počítačové sítě a operační systémy Snímek 23 z 34 Procesy a vlákna (2) • 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 PB169 Počítačové sítě a operační systémy Snímek 24 z 34 Procesy a vlákna (3) • Každé vlákno si udržuje svůj vlastní – Zásobník – PC (Program Counter) – Registry – TCB (Thread Control Block) • Vlákno může přistupovat k paměti a ostatním zdrojům svého procesu – Zdroje procesu sdílí všechna vlákna jednoho procesu – Jakmile jedno vlákno změní obsah (nelokální – mimo zásobník) buňky, všechna ostatní vlákna (téhož procesu) to vidí – Soubor otevřený jedním vláknem mají k dispozici všechna ostatní vlákna (téhož procesu) PB169 Počítačové sítě a operační systémy Snímek 25 z 34 Procesy a vlákna (4) • Proč využít vlákna – Využití multiprocesorových strojů (vlákna jednoho procesu mohou běžet na různých CPU) – Typický příklad: jedno vlákno provádí uživatelem požadovaný úkol a druhé vlákno překresluje obrazovku PB169 Počítačové sítě a operační systémy Snímek 26 z 34 Procesy a vlákna (5) • 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) PB169 Počítačové sítě a operační systémy Snímek 27 z 34 Procesy a vlákna (6) PB169 Počítačové sítě a operační systémy Snímek 28 z 34 Výhody využití vláken • 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ě PB169 Počítačové sítě a operační systémy Snímek 29 z 34 Příklady využití vláken • 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) • Jedno vlákno zobrazuje menu a čte vstup od uživatele a současně druhé vlákno provádí příkazy uživatele • Překreslování obrazovky souběžně se zpracováním dat PB169 Počítačové sítě a operační systémy Snímek 30 z 34 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ěma vlákny apod.) PB169 Počítačové sítě a operační systémy Snímek 31 z 34 Problém konzistence - příklad • 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 poté 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 PB169 Počítačové sítě a operační systémy Snímek 32 z 34 Stavy vláken • Tři klíčové stavy vláken: – Běžící – 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 PB169 Počítačové sítě a operační systémy Snímek 33 z 34 Příklad: Win32 (1) • 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 PB169 Počítačové sítě a operační systémy Snímek 34 z 34 Příklad: Win32 (2) • Služby OS pokračování – 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)