‹#›/28 PB153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ Vlákna 06 ‹#›/28 lProgram ●soubor definovaného formátu obsahující instrukce, data a další informace potřebné k provedení daného úkolu lProces ●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) lVlá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) lModel – jen procesy (ne vlákna) ●proces: jednotka plánování činnosti i jednotka vlastnící prostředky lModel – procesy a vlákna ●proces: jednotka vlastnící zdroje ●vlákno: jednotka plánování činnosti PROCESY A VLÁKNA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lKaždé vlákno si udržuje svůj vlastní ●zásobník ●PC (program counter) ●registry ●TCB (Thread Context Block) lVlá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 jedno 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) PROCESY A VLÁKNA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lProč 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 l1: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 l1: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) PROCESY A VLÁKNA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 PROCESY vs. VLÁKNA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ single-threaded process multithreaded process code registers data files stack code data files registers stack stack stack registers registers thread thread ‹#›/28 lJednovláknový OS: ●nepodporuje koncept vláken (nezná pojem vlákno) ●MS-DOS: 1 proces, 1 vlákno ●UNIX: n procesů, 1 vlákno / 1 proces lMultivláknový OS: ●podporuje koncept více vláken v rámci procesů ●Windows XP, Solaris, … JEDNO/MULTIVLÁKNOVÝ OS PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lVý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ě lPříklady ●síťový souborový (nebo i jiný J) 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 VÝHODY VYUŽITÍ VLÁKEN PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lProgram se skládá z několika vláken, která běží paralelně lVý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ší) lKonzistence ●vlákna jedné aplikace se proto musí mezi sebou synchronizovat, aby se zachovala konzistentnost dat (musíme zabránit současné modifikaci stejných dat dvěmi vlákny apod.) PROBLÉM KONZISTENCE PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lSituace: ●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) lPř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í lAle 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 PŘÍKLAD (PROBLÉM KONZISTENCE) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lTři klíčové stavy vláken: ●běží ●připravený ●čekající lVlákna se (samostatně) neodkládají ●všechny vlákna jednoho procesu sdílejí stejný adresový prostor lUkončení procesu ukončuje všechny vlákna existující v rámci tohoto procesu STAVY VLÁKEN PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lUser-Level Threads (ULT) ●Správa vláken se provádí prostřednictvím vláknové knihovny („thread library“) na úrovni uživatelského / aplikačního programu ●Jádro o jejich existenci neví ●přepojování mezi vlákny nepožaduje provádění funkcí jádra ●nepřepíná se ani kontext procesu ani režim procesoru ●Plánování přepínání vláken je specifické pro konkrétní aplikaci ●aplikace si volí pro sebe nejvhodnější (např. plánovací) algoritmus VLÁKNA NA UŽIVATELSKÉ ÚROVNI PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 l„Threads library“ obsahuje funkce pro ●vytváření a rušení vláken ●předávání zpráv a dat mezi vlákny ●plánování běhů vláken ●uchovávání a obnova kontextů vláken lCo dělá jádro pro vlákna na uživatelské úrovni ●jádro neví o aktivitě vláken, proto manipuluje s celými procesy ●když některé vlákno zavolá službu jádra, je blokován celý proces dokud se služba nesplní ●pro „thread library“ je takové vlákno ale stále ve stavu „běží“ ●stavy vláken jsou na stavech procesu nezávislé VLÁKNA NA UŽIVATELSKÉ ÚROVNI PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lVýhody ●přepojování mezi vlákny nepožaduje provádění jádra (tj.vyšší rychlost) ●nepřepíná se ani kontext ani režim procesoru ●plánování je specifické pro konkrétní aplikaci ●aplikace volí si pro sebe nejvhodnější algoritmus ●ULT mohou běžet pod kterýmkoliv OS ●není vyžadována podpora na úrovní jádra OS ●ULT potřebují uživatelskou knihovnu (ke slinkovaní s aplikací) lNevýhody ●většina volání služeb OS způsobí blokování celého procesu (tj. všech vláken procesu) ●jádro může přidělovat procesor pouze procesům, dvě vlákna stejného procesu nemohou běžet na dvou procesorech VLÁKNA NA UŽIVATELSKÉ ÚROVNI PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lKernel-Level Threads (KLT) lSprávu vláken podporuje jádro, nepoužívá se „thread library“ ●používá se API pro vláknové služby jádra ●informaci o kontextu procesů a vláken udržuje jádro ●přepojování mezi vlákny aktivuje jádro ●plánování na bázi vláken již v jádře OS lPříklady ●OS/2 ●Windows 95/98/NT/2000/XP ●Solaris ●Tru64 UNIX ●BeOS ●Linux VLÁKNA NA ÚROVNI JÁDRA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lVýhody ●jádro může současně plánovat běh více váken stejného procesu na více procesorech ●k blokování dochází na úrovni vlákna (není blokován celý proces) ●I programy jádra mohou mít multivláknový charakter lNevýhody ●přepojování mezi vlákny stejného procesu zprostředkovává jádro (tj. pomaleji) ●při přepnutí vlákna se 2x přepíná režim procesoru (tj. režie navíc) VLÁKNA NA ÚROVNI JÁDRA PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lVlákna se vytvářejí v uživatelském prostoru lVětšina plánování a synchronizace se dělá v uživatelském prostoru lProgramátor může nastavit počet vláken na úrovni jádra lLze kombinovat přínosy oboru přístupů lNapř. OS Solaris <=8 KOMBINACE VLÁKEN ULT/KLT PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 ln : 1 ●více ULT se zobrazuje do 1 KLT ●používá se na systémech, které nepodporují KLT l1 : 1 ●každý ULT se zobrazuje do 1 KLT ●Windows 95/98/NT/2000/XP, OS/2 ln : m ●více ULT se může zobrazovat do více KLT ●OS může vytvořit dostatečný počet KLT ●Solaris 2, Windows NT/2000 s ThreadFiber package MULTIVLÁKNOVÉ MODELY PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 MODEL n:1 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ k user thread kernel thread ‹#›/28 MODEL 1:1 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ k k k k user thread kernel thread ‹#›/28 MODEL m:n PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ k user thread k k kernel thread ‹#›/28 lProces ●uživatelský adresový prostor ●zásobník ●PCB (process control block) lULT ●OS je nevidí lKLT ●jednotka pro přidělování času procesoru lLightweight processes (LWP) ●LWP podporuje 1 nebo více ULT a zobrazuje je do 1 KLT ●LWP – rozhraní pro paralelismus pro aplikace PŘÍKLAD: SOLARIS 2 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 PŘÍKLAD: SOLARIS 2 (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ task 1 task 2 task 3 CPU kernel kernel thread user-level thread lightweight process ‹#›/28 lImplementuje 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) lSluž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) PŘÍKLAD: WIN32 PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 l„A Win32®-based application consists of one or more processes. A process, in the simplest terms, is an executing program. One or more threads run in the context of the process. A thread is the basic unit to which the operating system allocates processor time. A thread can execute any part of the process code, including parts currently being executed by another thread. A fiber is a unit of execution that must be manually scheduled by the application. Fibers run in the context of the threads that schedule them“ lSlužby OS ●ConvertThreadToFiber ●CreateFiber ●DeleteFiber ●GetFiberData ●SwitchToFiber PŘÍKLAD: WIN32 (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lKnihovna „pthreads“ lSlužby knihovny ●pthread_create ●pthread_exit ●pthread_join ●pthread_detach ●pthread_attr_init PŘÍKLAD: LINUX – UNIX - POSIX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lImplementace POSIX threads ●LinuxThreads ●Odpovídá POSIX standardu IEEE 1003.1c až na ovladače signálů. ●Vlákna mají různá PID (Process Identifier) ●Není nadále vyvíjeno ●NTPL (Native POSIX Threads Library for Linux) ●Nahradilo LinuxThreads ●Lepší výkon ●Vyžaduje jádro řady 2.6 ●Dnes součást knihovny GNU C ●Model 1:1 ● NGPT (Next Generation POSIX Threads) ●Alternativa k NTPL, které se neprosadila PŘÍKLAD: LINUX PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 lSlužby jádra OS l#include lint clone(int (*fn)(void *), void *child_stack,int flags, void *arg); l_syscall2(int, clone, int, flags, void *, child_stack); l lslužba jádra sys_clone a knihovní funkce clone ●vytvoří vlákno, které sdílí (v rámci procesu) adresový prostor, tabulku deskriptorů souborů, tabulku ovladačů signálů, trasovací informace, process ID PŘÍKLAD: LINUX (2) PB 153 OPERAČNÍ SYSTÉMY A JEJICH ROZHRANÍ ‹#›/28 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Í