User Tools

Site Tools


statnice:vyvoj:otazka7

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
statnice:vyvoj:otazka7 [06.05.2008 14:54] xvalo07statnice:vyvoj:otazka7 [18.05.2008 10:32] (current) xvalo07
Line 7: Line 7:
 **Zadání:**  **Zadání:** 
   * Jaké faktory a okolnosti vezmete v úvahu?   * 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.1210078456.txt.gz · Last modified: 06.05.2008 00:00 (external edit)