User Tools

Site Tools


statnice:vyvoj:otazka7

7. Operační systémy

Struktura operačních systémů, typy operačních systémů. Proces, komunikace mezi procesy, paralelismus, obsluha kritické sekce. Přidělování procesoru procesům, synchronizace procesů, obsluha přerušení. Druhy pamětí, přidělování operační paměti, virtuální paměť, příklady z jednotlivých operačních systémů . Soubory, adresářová struktura, evidence volného a přiděleného místa na discích, obsluha sdílených souborů, sdílené zdroje systému, deadlock a jeho ošetření.

Úloha

Předpoklady: Zhodnoťte za jakých podmínek umožníte ve své organizaci použití více druhů OS, tj. heterogenní prostředí na úrovni OS.

Zadání:

  • Jaké faktory a okolnosti vezmete v úvahu?

Teorie

Operační systém – součást základního softwarového vybavení počítače – s určitým zjednodušením lze říci, že leží mezi HW a ASW, nicméně ne tak docela (mikrokód, atd.). Vytváří určité standardní prostředí pro běh jiných programů a je to de facto jedna z abstraktních vrstev.

Struktura operačních systémů – typy: monolitický (vše v jednom – malé, rychlé, výkonné jádro, nicméně trochu chaos, problémy s laděním – typicky MSDOS, Unixy), vrstevnatý (jednotlivé složky OS, jako je správa paměti, řízení procesů, IO funkce, uživatelská vrstva, atd. jsou striktně odděleny, jejich vnitřní struktura je mezi nimi odstíněna – přehledné, funkční, výhodné pro vývoj – nahrazování vrstev, nicméně velká režie – dříve OS/2, WNT), virtuální stroj (běží nad HW, zajišťuje běh více programů a kterému jakoby přidává další funkce – extended machine – dnes třeba Java nebo dříve některé systémy od IBM; pro každý program emuluje běh jednouživatelského operačního systému), klient server (jednotlivé složky jsou poměrně malé samostatné servery, vlastní jádro je malinké a zajišťuje vlastně pouze řízení procesů – když chce uživatelská aplikace třeba číst ze souboru, volá jinou de facto uživatelskou aplikaci – server, který to zajistí – bezpečné, distribuované, ale nepoužívá se příliš).

Proces – instance programu. Je definován svým kontextem, který definuje datovou strukturu v paměti, kde je kód nahrán, registry v CPU, zásobník, hromadu, atd. Jedno CPU může v jednu chvíli vykonávat pouze jeden proces. Procesy mohou vyvolávat child procesy, na některých OS jim předávají své datové struktury, na některých ne, mohou se i různým způsobem vzájemně ukončovat, atd. Přepínání procesů – rychlým přepínáním různých procesů se dosahuje iluze současného běhu více programů současně. Tzv. přepínání kontextu. Procesy mohou být běžící, ready nebo blokované (a to buď vyvoláním nějaké žádosti třeba o IO, chybou, vlastní žádostí nebo prostě tím, že jim dojde čas a OS jim odebere CPU – na některých systémech to není). Kromě toho mohou být inicializované předtím, než se rozeběhnou nebo ukončené – zombie procesy nebo mohou být suspendované blokované nebo čekající.

Přerušení – vyvolaná různými věcmi – např. dělení nulou, programové, atd. Lze je i maskovat, ale pozor na to.

Paralelismus – běh více procesů najednou. Je to žádoucí, protože můžeme zajistit asynchronní zpracování (nemusí čekat na tlačítko), můžeme mít různé funkce v různých aplikacích (kalukačka ve Win), efektivněji využívat systém, atd. Paralelní, pseudoparalelní. Problém je ve sdílení stejných datových struktur – může dojít ke ztrátě dat, pokud je proces přerušen v blbou dobu – viz. ten příklad s tiskárnou. Je proto potřeba zajistit tzv. vzájemné vyloučení. Při běhu programů ta místa, která pracují s těmi sdílenými daty jsou tzv. kritická sekce. Je třeba zajistit, aby dva procesy nemohly být současně v kritické sekci (kdyžtak musí jeden počkat). Více možností, jak to zajistit – maskování přerušení, problém ztráty výkonu – zejména u multiCPU a ztráty kontroly OS nad počítačem). Jinak existují Test-and-set. Problém aktivního čekání u softwarového řešení. Semafory – v paměti proměnná a fronta, proces, když chce přistoupit, sníží hodnotu semaforu, ta když je menší než 0, proces se zařadí do fronta a čeká. Když něco dokončí, volí funkci up, další proces se uvolní z fronty a jede se dál. Funkce nedělitelné. Další – kritická sekce (region) nebo monitory – chráněné objekty. Komunikace mezi procesy – záleží na tom, zda jde o komunikaci jednoduchou – nejprimitivnější – sdílená paměť a semafor nebo one to one, nebo složitější prostřednictvím mailboxu (různé typy bufferů – zero length, omezená délka, neomezená délka), v distribuované architektuře RPC. Problémy – zda potvrzovaná nebo ne, pokud to běží zvlášť na různých strojích, jak ošetřit, jestli jeden nebo druhý nezkolaboval – čekání na doručení, případně aby nedošlo k opakovanému doručení. Rozlišení zda je zpráva omezená, neomezená. U Unixu – pipes – emulace souboru, neomezená délka. U distribuovaných systémů může být problém v kódování dat.

Přidělování CPU procesům: job scheduling, process scheduling – plánování přidělování času. Může být preemptivní (při čekání na I/O, ukončení procesu, vyvolaném přerušení, oživení po I/O). Pokud jenom při ukončení procesu a čekání na I/O nepreemptivní (Windows). Je třeba zajistit, aby CPU bylo využíváno efektivně, byly minimalizovány doby čekání a odezvy, aby byla minimalizována režie, spravedlnost – aby se dostali ke slovu v rozumném čase. FIFO, shortest job first, podle priorit, podle zbývajícího času do konce procesu, podle využívání systémových zdrojů. U preemptivního round robin. Multifronty pro různé druhy procesů. Dispečer – řeší přepínání kontextu – musí být velmi rychlý.

Obsluha přerušení – přerušení SW a HW (IRQ – interní a externí – maskovatelná a nemaskovatelná). Uloží obsah registrů a přepnou program někam jinam.

Deadlocky – za určitých okolností může dojít k tomu, že dva či více procesů vzájemně čeká na přidělení prostředku v zablokování – nekonečně dlouho. Např. pokud jeden drží prostředky a žádá o další, nedostane, zablokuje se a jiné zase čekají na prostředky, které drží první. Problém nastává pokud dochází ke kruhové závislosti a prostředky nelze odejmout. Co s tím: 1) nic – pštrosí algoritmus – používá většina operačních systémů, 2) předcházení – různé metody – např. proces musí žádat o všechny prostředky najednou nebo když je nedostane, všechno uvolnit a vyhýbání se deadlockům (bankéřův algoritmus). OS může taky detekovat kruhové závislosti a potom to odstřelovat. Čím víc paralelních úloh běží, tím je to náročnější a zpravidla se na to peče.

Paměť – různé druhy – registry CPU, cache (2 úrovně), interní operační paměť, externí paměť. U jednouživatelských OS není víceméně problém – pro proces velikost paměti – co zabírá OS. Pokud potřebujeme více paměti, musí se dělat overlay nebo stránkování. Pokud je v paměti více procesů, nastává komplikovaná problém – jednak by si procesy neměly vzájemně do paměti lézt, potom je třeba jim zajistit víc kapacity, než umožňuje fyzická velikost paměti, je tu problém fragmentace, atd. Řešení velikosti paměti – virtuální paměť. Algoritmus vyhodnocování toho co odswapovat, co ne. Fragmentace paměti. Přidělování – stejné fyzické bloky – jednoduché, ale daný počet paralelně běžících procesů; relokace – komplikované – buď psát programy, kde nejsou potřeba absolutní adresy : .com nebo programy, kde se přepočítávají adresy v relokační tabulce nebo je tam bázová adresa a k té se automaticky přičtou adresy relativní. Virtuální adresování – paměť rozdělena na rámy, virtuální na stránky, ty se nahrávají do rámů jak je potřeba. Určování toho, kdy byla naposledy modifikována – u každého 2 bity – pro změnu a čtení nebo FIFO nebo last recently used (náročné). Problém fragmentace – setřásání paměti – možnost – hledání prvního co je na řadě (používá se) nebo prvního většího.

Soubory – data uložená zpravidla na permanentním datovém médiu. Jsou definována svým názvem a umístěním v adresářové struktuře, taktéž jsou známy atributy, délka, dlouhé jméno, přístupová práva, atd. Umístění souborů – lineárně – celý soubor v jednom kuse (CD-ROM pásky – tam, kde se na to nebude šahat). Na disku, kde hrozí změna velikosti souboru, atd. po blocích – buď spojovým seznamem, což se moc nepoužívá nebo bitovou mapou. Stará FATka měla bloky po sobě jdoucí, kde u každého byl zda je plný a kde je další. V Unixu i-nodes – speciální soubory obsahující názvy a další data k souborům odkazy na datové bloky a nepřímé odkazy na další i-nodes. Zápis po blocích přináší problém obsazení fyzicky většího místa, než je velikost souboru, protože se využívají celé bloky – čím větší blok, tím rychlejší zpracování, ale větší ztráty. V moderních systémech – subalokace – konce souborů se ukládají do bloků o menší velikosti. Pro zrychlení se používá cachování.

Obsluha sdílených souborů – využívaný soubor je zamčen – zámky mohou být různé – pro čtení, zápis, někde jsou povinné – Novell (zamčený soubor nelze ani kopírovat), někde nepovinné – Unix (aplikace na ně může kašlat). Zamykat lze v některých případech i jednotlivé věty. Obecně je ale v dnešní době lepší a standardnější na data, u kterých by obecně připadaly takové problémy, používat DB. Lze použít i transakční zpracování.

Praxe

Musí k tomu být důvod – např. máme aplikaci, která nějaký systém požaduje. Rozdíl je rovněž mezi serverovými OS a uživatelskými OS. Vždy je ale třeba hodnotit TCO, nejen náklady na nákup toho kterého software. Čili – náklady na HW, sítě, požadavky aplikací, co umí uživatelé (zda bychom je museli přeškolovat, atd.). Obecně dneska není s budováním heterogenních sítí velký problém, jednak kvůli vysoké standardizaci a multiplatformnosti skoro všeho (TCP/IP, Java, atd…)

Nevýhody heterogenních sítí – vyšší nároky na znalosti adminů, na správu, potenciál většího množství chyb, nekompatibilit, bezpečnostních děr – největší malér, když každý kus implementuje jiná firma. Výhody – odolnost – když budeme mít stanice na Windows a servery na Linuxu, možná nám to neklekne všechno, když přijde nový virus.

statnice/vyvoj/otazka7.txt · Last modified: 18.05.2008 10:32 by xvalo07