Operační systémy Stavba OS © Milan Keršláger Obsah: funkce OS, součásti OS, jádro OS (monolitické, mikrojádro, hybridní), RTOS, jednoúlohové, víceúlohové, víceuživatelské, multiprocesory, SMP, clustery.
Funkce operačního systému 1. ovládání počítače ● umožňuje uživateli spouštět programy ● zajišťuje předání vstupů a získání výstupů programu 2. abstrakce hardware ● programátor používá jednoduché API ● nestaráme se o detaily ovládání HW → ovladače 3. správa prostředků ● přiděluje a odebírá procesům systémové prostředky ● tj. hardware ovládaný počítačem: ● grafická karta, USB porty, paměť, procesor
Součásti operačního systému ● jádro operačního systému (kernel) ● zavádí se do paměti při startu počítače ● zůstává v činnosti po celou dobu provozu počítače ● obstarává všechny dříve zmíněné činnosti ● 3 typy jader + specifický případ RTOS – monolitické jádro, mikrojádro, hybridní jádro ● pomocné nástroje ● utility – nástroje na přidělování práv, formátování... ● démoni (služby v MS Windows)
Typy jader OS ● monolitické jádro – monolithic kernel ● jeden celek řeší celý problém ● varianta: modulární jádro ● mikrojádro – microkernel ● idea jako u strukturovaného programování ● ještě menší: exokernel, nanokernel, picokernel ● hybridní jádro – hybrid kernel ● něco mezi monolitickým a mikrojádrem ● snaha o využití „toho lepšího“ z obou ● RTOS – speciální případ
Monolitické jádro ● jádro je jeden celek ● původní model (např. Unix) ● v souvislém úseku paměti (kernel-space) ● vše na stejné (absolutní) úrovni oprávnění ● chyba (např. v ovladači) ohrožuje celé jádro ● umožňuje efektivní programátorské triky ● do téže paměti zasahují různé subsystémy ● vývoj náročný na znalost funkce celého jádra ● dnes Linux, FreeBSD a další ● části jako samostatné moduly → modulární jádro
Mikrojádro ● jádro minimalizováno (jen nejnutnější části) ● hezké rozvržení, vlastní píseček, snadné pochopit ● vše ostatní jako běžné procesy – tzv. servery ● souborový subsystém, síťový subsystém a další ● komunikace přes API (zasílání zpráv) ● proces (server) lze po pádu restartovat (ale fuj) ● výkonnostní problémy (někdy nemusí vadit) ● vyvolání služby jádra může znamenat nutnost čekat na přepnutí kontextu mezi jádrem a procesem (i více procesy) ● samostatné procesy nemohou manipulovat se společnými daty (např. cache) ● GNU Hurd + mikrojádro GNU Mach – stále není finální ● Symbian – funkční, navíc RTOS
Hybridní jádro ● kombinuje výhody monolitu a mikrojádra ● základní jádro je větší ● včetně částí citlivých na výkonnost ● blíží se z druhé strany modulárnímu monolitu ● Microsoft Windows NT ● NT 3.1, 3.5, 3.51, 2000, XP, 2003, Vista, 2008, 7,... ● Microsoft Windows CE ● Windows Mobile, Pocket PC
Operační systém reálného času ● RTOS – Real Time Operating System ● definovaná časová ultimáta ● krátká doba reakce na událost ● rychlé přepínání úloh ● úloha má garantovaný běh v jednotce času – programátor ví, že za daný čas dostane alespoň garantovaný strojový čas procesoru – může si rozmyslet, co je nebytně nutné spočítat a co může počkat ● typicky mobilní telefony (Symbian, Windows CE) ● nestihne-li připravit data, je výpadek přenosu (hlasu) ● Symbian, Windows CE, RTLinux,...
OS podle schopností
Jednoúlohový systém ● v paměti OS a běžící úloha ● pro starší počítače, jednoduché procesory ● typicky bez ochrany paměti ● úloha může ohrozit operační systém ● CP/M ● 8bitový OS ● DOS ● 16bitový OS ● žádný OS se nejmenoval DOS → celá rodina OS
Víceúlohový systém ● lepší využití HW počítače ● úloha je zablokovaná a čeká na dokončení I/O operace (tisk, síť, pevný disk) ● úloha záměrně spí (vstup od uživatele, jiná událost) ● potřeba oddělení jednotlivých úloh a jádra OS ● HW podpora v CPU (ochrana paměti, privilegovaný režim) ● střídání úloh při vykonávání procesorem ● tzv. multitasking (v jádře OS ho zajišťuje scheduler) ● reentrantní jádro OS ● více úloh volá jádro zároveň (DOS neumožňoval)
Vývoj víceúlohových systémů ● 1966 – IBM OS/360 a MFT ● Multitasking With Fixed Number of Tasks ● ještě jen konfigurace kontrolního programu ● 1967 – MVT ● Multitasking With Variable Number of Tasks ● subsystémy: správa a ochrana paměti, scheduler ● Multics (neúspěšný projekt) – AT&T 60. léta ● měl umět „všechno“ (až futuristicky) ● Unix (Ken Thompson) – 1969 ● jednoduchý – „programátoři sobě“, něco z Multicsu
Víceuživatelský systém ● podpora více uživatelů zároveň ● zavedení oprávnění, správce (administrátor) ● vícenásobné uživatelské rozhraní ● textové rozhraní (v Unixu zajišťuje tzv. shell) ● grafické rozhraní → problém – jedna grafická karta → jak více klávesnic, monitorů? – původní návrh HW a SW s tím obvykle nepočítá – řešení: obraz jen v paměti + síťový přístup ● MS Windows: vzdálená plocha (vyžaduje Terminal services) – Unix: modulární X Window systém (již od počátku) ● můžeme označit za skutečné operační systémy
Zvýšení výkonu počítače ● zrychlení hodin CPU ● zaostávání pomalejších částí počítače – cache ● fyzikální limity ● širší sběrnice, větší registry ● více dat zpracovaných najednou ● paralelizace ● pro specifické úlohy, jiný styl programování ● multiprocesory a multipočítače
Multiprocesory I. ● více procesorů sdílí jednu operační paměť ● současný přístupu ke stejné paměti → souběh – řízení konfliktního přístupu do paměti je limitující ● odlišně řeší NUMA (procesory od AMD) – každý CPU má „svoji paměť“ – vyjednávají mezi sebou jen při přístupu k „cizí“ paměti ● k víceúlohovému jádru přistupují další potíže ● paralelní vykonávání kódu více procesory – asymetrické řešení → kód jádra jen CPU#0 ● Novell Netware server 4 (1993) – snadné přizpůsobení UP jádra – symetrické řešení → SMP ● Linux, Windows NT a další
Multiprocesory II. ● dva fyzické CPU, dnes běžně vícejádrové CPU ● problém: zvýšení výkonu není lineární ● režie vzájemného vyjednávání ● čekání na uvolnění zámku ● speciální architektury pro masivní MP ● každý CPU komunikuje s každým ● → exponenciální složitost ● nutno naprogramovat specifické aplikace ● dnes většina aplikací jednovláknová
Multipočítače – clustery ● nemají společnou paměť ● obvykle z „laciných“ PC → levný superpočítač ● propojení pomocí rychlé LAN (uzly) ● různá zaměření clusterů: ● výpočetní – HPC, paralelní výpočty ● load-ballancing – rozkládání zátěže ( serverová farma ) ● fail-over – odolnost proti výpadku uzlu ● storage – rozložení a paralelizace I/O operací ● gridové clustery ● nededikované počítače, aplikační využití (Boinc)