Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
mgr-szz:in-pos:1-pos [2019/06/05 15:42] lachmanfrantisek FCFS |
mgr-szz:in-pos:1-pos [2020/04/12 16:56] (aktuální) |
||
---|---|---|---|
Řádek 53: | Řádek 53: | ||
* příklad: MACH | * příklad: MACH | ||
* ➕ snadná přenositelnost OS, jádro je malé | * ➕ snadná přenositelnost OS, jádro je malé | ||
- | * ➕ vyšší spolehlivost (moduly mají jasné API a jsou snadněji | + | * ➕ vyšší spolehlivost (moduly mají jasné API a jsou snadněji testovatelné) |
- | testovatelné) | + | |
* ➕ vyšší bezpečnost (méně kódu OS běží v režimu jádra) | * ➕ vyšší bezpečnost (méně kódu OS běží v režimu jádra) | ||
* ➕ flexibilita (jednodušší modifikace, přidání, odebrání modulů) | * ➕ flexibilita (jednodušší modifikace, přidání, odebrání modulů) | ||
Řádek 95: | Řádek 94: | ||
* OS spravuje zdroje přidělováním procesům podle zvolené politiky (priorita, vzájemná výlučnost, zabraňuje uváznutí). | * OS spravuje zdroje přidělováním procesům podle zvolené politiky (priorita, vzájemná výlučnost, zabraňuje uváznutí). | ||
* OS podporuje tvorbu procesu a jejich komunikaci. | * OS podporuje tvorbu procesu a jejich komunikaci. | ||
- | * OS s multiprogramováním <color red> multiprogramování = multitasking</color> | + | * OS s multiprogramováním (<color red>multiprogramování = multitasking</color>) |
Řádek 245: | Řádek 244: | ||
* Toto je úkol dlouhodobého (strategického) plánovače | * Toto je úkol dlouhodobého (strategického) plánovače | ||
* Vybírá který proces lze zařadit mezi připravené procesy. | * Vybírá který proces lze zařadit mezi připravené procesy. | ||
+ | * Řeší přechod ze stavu ''nový'' do stavu ''připravený''. | ||
* Plánovač je spouštěn je relativně málo často. | * Plánovač je spouštěn je relativně málo často. | ||
* Typicky při ukončení jednoho procesu rozhodne, kterou úlohu dále vybrat k zavedení do paměti a spuštění. | * Typicky při ukončení jednoho procesu rozhodne, kterou úlohu dále vybrat k zavedení do paměti a spuštění. | ||
* Nemusí být super rychlý. | * Nemusí být super rychlý. | ||
* Určuje stupeň multiprogramování. | * Určuje stupeň multiprogramování. | ||
+ | * Nemusí být ve všech systémech přítomen. | ||
=== Krátkodobý plánovač === | === Krátkodobý plánovač === | ||
Řádek 293: | Řádek 294: | ||
</box> | </box> | ||
- | ===== Synchronizace procesů ===== | + | <box 95% round blue|SJF> |
+ | Algoritmus Shortest-Job-First | ||
+ | |||
+ | * Musíme znát délku příštího požadavku na dávku CPU pro každý proces. | ||
+ | * Vybírá se proces s nejkratším požadavkem na CPU. | ||
+ | * Dvě varianty: | ||
+ | * **nepreemptivní, bez předbíhání** | ||
+ | * jakmile se CPU předá vybranému procesu, tento nemůže být předběhnut žádným jiným procesem, dokud přidělenou dávku CPU nedokončí. | ||
+ | * **preemptivní, s předbíháním** | ||
+ | * jakmile se ve frontě připravených procesů objeví proces s délkou dávky CPU kratší než je doba zbývající k dokončení dávky právě běžícího procesu, je právě běžící proces ve využívání CPU předběhnut novým procesem. | ||
+ | * Tato varianta se rovněž nazývá **Shortest-Remaining-Time-First (SRTF)** | ||
+ | * **SJF** je optimální algoritmus (pro danou množinu procesů dává minimální průměrnou dobu čekání) | ||
+ | |||
+ | Př.: | ||
+ | |||
+ | ^ Proces ^ Doba příchodu ^ Délka dávky CPU ^ | ||
+ | | P1 | 0.0 | 7 | | ||
+ | | P2 | 2.0 | 4 | | ||
+ | | P3 | 4.0 | 1 | | ||
+ | | P4 | 5.0 | 4 | | ||
+ | |||
+ | * Nepreemtivní | ||
+ | * Průměrná doba čekání: (0+6+3+7)/4 = 4 | ||
+ | |||
+ | {{:mgr-szz:in-pos:sjf-nepre.png?300|}} | ||
+ | |||
+ | * Preemptivní | ||
+ | * Průměrná délka čekání: (9+1+0+2)/4 = 3 | ||
+ | |||
+ | {{:mgr-szz:in-pos:sjf-pre.png?300|}} | ||
+ | |||
+ | </box> | ||
+ | |||
+ | <box 95% round blue|Prioritní plánování> | ||
+ | |||
+ | * S každým procesem je spojeno prioritní číslo. | ||
+ | * **prioritní číslo** – preference procesu pro výběr příště běžícího procesu | ||
+ | * CPU se přiděluje procesu s největší prioritou | ||
+ | * nejvyšší prioritě obvykle odpovídá nejnižší prioritní číslo | ||
+ | * Opět dvě varianty: | ||
+ | * **nepreemptivní, bez předbíhání** | ||
+ | * Jakmile proces získá přístup k CPU nemůže být předběhnut jiným procesem dokud dávku neukončí. | ||
+ | * **preemptivní, s předbíháním** | ||
+ | * Jakmile se ve frontě připravených procesů objeví proces s vyšší prioritou než je priorita běžícího procesu, je běžící proces předběhnut SJF je prioritní plánování, prioritou je předpokládaná délka příští CPU dávky. | ||
+ | * **stárnutí** | ||
+ | * Procesy s nižší prioritou se nemusí nikdy provést. | ||
+ | * Řešení: **zrání** – priorita se s postupem času zvyšuje. | ||
+ | |||
+ | </box> | ||
+ | |||
+ | <box 95% round blue|Round Robin (RR)> | ||
+ | |||
+ | * Každý proces dostává CPU na malou jednotku času – časové kvantum. | ||
+ | * Desítky až stovky ms | ||
+ | * Po uplynutí této doby je běžící proces předběhnut nejstarším procesem ve frontě připravených procesů a zařazuje se na konec této fronty. Je-li ve frontě připravených procesů n procesů a časové kvantum je q, pak každý proces získává 1/n doby CPU, najednou nejvýše q časových jednotek. | ||
+ | * Žádný proces nečeká na přidělení CPU déle než (n-1)q časových jednotek | ||
+ | * Výkonnostní hodnocení | ||
+ | * q velké → ekvivalent FIFO | ||
+ | * q malé → velká režie; v praxi musí být q musí být dostatečně velké s ohledem na režii přepínání kontextu | ||
+ | * Typicky se dosahuje delší průměrné doby obrátky než při plánování SJF, avšak doba odpovědi je výrazně nižší. | ||
+ | |||
+ | Př.: | ||
+ | |||
+ | ^ Proces ^ Délka dávky CPU ^ | ||
+ | | P1 | 53 | | ||
+ | | P2 | 17 | | ||
+ | | P3 | 68 | | ||
+ | | P4 | 24 | | ||
+ | |||
+ | * časové kvantum: 20 | ||
+ | |||
+ | {{:mgr-szz:in-pos:round-robin.png?300|}} | ||
+ | |||
+ | |||
+ | </box> | ||
+ | |||
+ | ===== Komunikace a synchronizace procesů ===== | ||
+ | |||
+ | Synchronizace běhu procesů = "Jeden proces čeká na událost z druhého procesu." | ||
+ | |||
+ | <note tip> | ||
Se souběžně běžícími procesy se můžeme setkat buď v přímo paralelním prostředí, kde je jedna paměť sdílena více procesy, nebo v prostředí distribuovaném, kde má každý proces vlastní lokální paměť. Hlavním problémem výskytu souběžných procesů je sdílení prostředků (paměť, zařízení, soubory, atd.) Tento problém se vyskytuje dokonce i v mnohouživatelských OS, kdy se např. řeší sdílení paměti mezi hlavní linií výpočtu v jádře a obslužnou rutinou přerušení při I/O operaci. Především při sdíleném přístupu do paměti nebo do souboru mohou vznikat neočekávané problémy – časové závislé chyby. | Se souběžně běžícími procesy se můžeme setkat buď v přímo paralelním prostředí, kde je jedna paměť sdílena více procesy, nebo v prostředí distribuovaném, kde má každý proces vlastní lokální paměť. Hlavním problémem výskytu souběžných procesů je sdílení prostředků (paměť, zařízení, soubory, atd.) Tento problém se vyskytuje dokonce i v mnohouživatelských OS, kdy se např. řeší sdílení paměti mezi hlavní linií výpočtu v jádře a obslužnou rutinou přerušení při I/O operaci. Především při sdíleném přístupu do paměti nebo do souboru mohou vznikat neočekávané problémy – časové závislé chyby. | ||
+ | </note> | ||
+ | |||
+ | |||
+ | |||
+ | Umožňuje: | ||
+ | |||
+ | * **Komunikaci mezi procesy** | ||
+ | * zasílání zpráv | ||
+ | * synchronizace | ||
+ | * sdílená paměť | ||
+ | * vzdálené volání procedur (RPC) | ||
+ | |||
+ | * **Sdílení prostředků** | ||
+ | * procesy používají a modifikují sdílená data | ||
+ | * operace zápisu musí být vzájemně výlučné | ||
+ | * operace zápisu musí být vzájemně výlučné s operacemi čtení | ||
+ | * operace čtení mohou být realizovány souběžně | ||
+ | * pro zabezpečení integrity dat se používají kritické sekce | ||
+ | |||
+ | |||
+ | |||
+ | Komunikace – způsob synchronizace, koordinace různých aktivit | ||
+ | * může dojít k uváznutí (každý proces čeká na zprávu od nějakého jiného procesu) | ||
+ | * může dojít ke stárnutí (dva procesy si opakovaně posílají zprávy zatímco třetí proces čeká na zprávu nekonečně dlouho) | ||
+ | |||
+ | |||
+ | |||
+ | ==== Race condition ==== | ||
+ | |||
+ | * podmínka soupeření, souběh | ||
+ | * více procesů současně přistupuje ke sdíleným zdrojům a manipulují s nimi | ||
+ | * konečnou hodnotu zdroje určuje poslední z procesů, který zdroj po manipulaci opustí | ||
+ | |||
==== Vzájemné vyloučení ==== | ==== Vzájemné vyloučení ==== | ||
- | Vzájemné vyloučení je prostředek, jak zamezit dvěma procesům, aby zároveň přistupovaly k určitým datům nebo prováděly současně určité operace. Jedná se obvykle o funkce, po nichž požadujeme, aby je jeden proces provedl celé sám bez přerušování jinými procesy. Obecně se těmto funkcím říká **kritické sekce**. Kritické sekci obvykle předchází tzv. preludium (vstup do KS) – místo soupeření procesů o vstup – a je ukončena tzv. postludiem (výstup z KS) – kritická sekce je opět uvolněna pro jiný proces. | + | |
+ | Vzájemné vyloučení je prostředek, jak zamezit dvěma procesům, aby zároveň přistupovaly k určitým datům nebo prováděly současně určité operace. Jedná se obvykle o funkce, po nichž požadujeme, aby je jeden proces provedl celé sám bez přerušování jinými procesy. Obecně se těmto funkcím říká **kritické sekce**. | ||
=== Kritická sekce === | === Kritická sekce === | ||
- | Problémem kritické sekce je umožnit přístup ke kritické oblasti procesům, které o to usilují, při dodržení následujících podmínek: | + | |
- | *výhradní přístup - v každém okamžiku smí být v kritické sekci nejvýše jeden proces | + | * N procesů soupeří o právo používat jistá sdílená data. |
- | *vývoj - rozhodování o tom, který proces vstoupí do kritické sekce, ovlivňují pouze procesy, které o vstup do kritické sekce usilují; toto rozhodnutí pro žádný proces nemůže být odkládáno do nekonečna; nedodržení této podmínky může vést například k tomu, že je umožněna pouze striktní alternace (dva procesy se při průchodu kritickou sekcí musí pravidelně střídat) | + | * V každém procesu se nachází segment kódu programu nazývaný **kritická sekce**, ve kterém proces přistupuje ke sdíleným zdrojům. |
- | *omezené čekání; pokud jeden proces usiluje o vstup do kritické sekce, nemohou ostatní procesy tomuto vstupu zabránit tím, že se v kritické sekci neustále střídají - mohou do této kritické sekce vstoupit pouze omezený počet krát (zpravidla pouze jednou) | + | * **Problém: je potřeba zajistit, že v kritické sekci, sdružené s jistým zdrojem, se bude nacházet nejvýše jeden proces.** |
- | Pokud o přístup do kritické sekce usiluje některý proces v době, kdy je v ní jiný proces, případně o přístup usiluje v jednom okamžiku více procesů, je nutné některé z nich pozdržet. Toto pozdržení je možné realizovat smyčkou. Toto tzv. aktivní čekání (busy waiting) však zbytečně spotřebovává čas CPU - je možné čekající proces zablokovat a obnovit jeho běh až v okamžiku, kdy proces, který je v kritické sekci, tuto sekci opustí. | + | * **výhradní přístup** - v každém okamžiku smí být v kritické sekci nejvýše jeden proces |
+ | * **vývoj**:- rozhodování o tom, který proces vstoupí do kritické sekce, ovlivňují pouze procesy, které o vstup do kritické sekce usilují; toto rozhodnutí pro žádný proces nemůže být odkládáno do nekonečna; nedodržení této podmínky může vést například k tomu, že je umožněna pouze striktní alternace (dva procesy se při průchodu kritickou sekcí musí pravidelně střídat) | ||
+ | * **omezené čekání**: pokud jeden proces usiluje o vstup do kritické sekce, nemohou ostatní procesy tomuto vstupu zabránit tím, že se v kritické sekci neustále střídají - mohou do této kritické sekce vstoupit pouze omezený počet krát (zpravidla pouze jednou) | ||
+ | * Pokud o přístup do kritické sekce usiluje některý proces v době, kdy je v ní jiný proces, případně o přístup usiluje v jednom okamžiku více procesů, je nutné některé z nich pozdržet. Toto pozdržení je možné realizovat smyčkou. Toto tzv. aktivní čekání (**busy waiting**) však zbytečně spotřebovává čas CPU - je možné čekající proces zablokovat a obnovit jeho běh až v okamžiku, kdy proces, který je v kritické sekci, tuto sekci opustí. | ||
=== Nástroje a algoritmy pro vzájemné vyloučení === | === Nástroje a algoritmy pro vzájemné vyloučení === | ||
- | *aktivní čekání – softwarově – pouze vzájemná výlučnost R/W s pamětí, bez podpory programovacího jazyka / OS | ||
- | *aktivní čekání – speciální instrukce TST, EXCHANGE – bez podpory programovacího jazyka / OS | ||
- | *pasivní čekání – podpora v programovacím jazyku / OS: semafory, monitory, zasílání zpráv | ||
- | === Sdílené vzájemné vyloučení === | + | * **aktivní čekání -- softwarově**: pouze vzájemná výlučnost R/W s pamětí; bez podpory programovacího jazyka / OS |
- | Jedná se o exkluzivní vzájemné vyloučení operací zápisu s jakoukoli jinou operací a sdílené čtení. U tohoto typu vzájemného vyloučení se objevuje také další typ úloh – tzv. úloha o čtenářích a písařích. | + | * **aktivní čekání -- procesor**: speciální instrukce TST, EXCHANGE; bez podpory programovacího jazyka / OS |
+ | * **pasivní čekání**: podpora v programovacím jazyku / OS, př: semafory, monitory, zasílání zpráv | ||
+ | |||
+ | == Semafor == | ||
+ | |||
+ | * Synchronizační nástroj, který lze implementovat i bez „busy waiting“. | ||
+ | * Proces je (operačním systémem) „uspán“ a „probuzen“ (tj. řešení na úrovni OS). | ||
+ | * Chybné použití semaforu v jednom procesu hroutí souhru všech spolupracujících procesů. | ||
+ | |||
+ | == Monitor == | ||
+ | |||
+ | Synchronizační nástroj vysoké úrovně. | ||
+ | |||
+ | * Umožňuje bezpečné sdílení abstraktního datového typu souběžnými procesy | ||
+ | * Provádění P1 , P2 , ... se implicitně vzájemně vylučují. | ||
+ | |||
+ | |||
+ | === Sdílené vzájemné vyloučení === | ||
+ | |||
+ | Jedná se o exkluzivní vzájemné vyloučení operací zápisu s jakoukoli jinou operací a sdílené čtení. | ||
+ | |||
+ | <note tip> | ||
+ | |||
+ | Úloha o čtenářích a písařích | ||
- | == Úloha o čtenářích a písařích == | ||
*libovolný počet čtenářů může číst ze sdílené oblasti, v jednom okamžiku smí do sdílené oblasti zapisovat pouze jeden písař, jestliže písař píše do sdílené oblasti, nesmí současně z ní číst žádný čtenář. | *libovolný počet čtenářů může číst ze sdílené oblasti, v jednom okamžiku smí do sdílené oblasti zapisovat pouze jeden písař, jestliže písař píše do sdílené oblasti, nesmí současně z ní číst žádný čtenář. | ||
*Příklad výskytu této úlohy v praxi může vypadat takto: sdílenou oblast reprezentuje knihovna programů, čtenáři nazveme sestavující programy a písařem může být knihovník. | *Příklad výskytu této úlohy v praxi může vypadat takto: sdílenou oblast reprezentuje knihovna programů, čtenáři nazveme sestavující programy a písařem může být knihovník. | ||
Řádek 322: | Řádek 459: | ||
*priorita písařů (pomocí semaforů) -- první čtenář zablokuje všechny písaře, poslední čtenář je uvolní, první písař zakáže přístup novým čtenářům | *priorita písařů (pomocí semaforů) -- první čtenář zablokuje všechny písaře, poslední čtenář je uvolní, první písař zakáže přístup novým čtenářům | ||
*priorita písařů (zasíláním zpráv) -- první čtenář zablokuje všechny písaře, poslední čtenář je uvolní, první písař zakáže přístup novým čtenářům, ke sdílené oblasti řídí přístup referenční monitor se třemi mailboxy, každý čtenář / písař má svůj mailbox | *priorita písařů (zasíláním zpráv) -- první čtenář zablokuje všechny písaře, poslední čtenář je uvolní, první písař zakáže přístup novým čtenářům, ke sdílené oblasti řídí přístup referenční monitor se třemi mailboxy, každý čtenář / písař má svůj mailbox | ||
+ | |||
+ | </note> | ||
===== Uváznutí ===== | ===== Uváznutí ===== | ||
+ | |||
Množina procesů P uvázla, jestliže každý proces Pi z P čeká na událost (uvolnění prostředků, zaslání zprávy), kterou vyvolá pouze některý z procesů P. | Množina procesů P uvázla, jestliže každý proces Pi z P čeká na událost (uvolnění prostředků, zaslání zprávy), kterou vyvolá pouze některý z procesů P. | ||
+ | |||
+ | **Stárnutí** = požadavky 1 nebo více procesů z P nebudou splněny v konečném čase | ||
+ | * z důvodů vyšších priorit jiného procesu | ||
+ | * z důvodů prevence uváznutí apod. | ||
=== Nutná a postačující podmínka uváznutí === | === Nutná a postačující podmínka uváznutí === | ||
+ | |||
* Nutné podmínky uváznutí: | * Nutné podmínky uváznutí: | ||
- | - **vzájemné vyloučení** (//Mutual exclusion//) | + | - **vzájemné vyloučení** (**//Mutual exclusion//**) |
* se sdíleným zdrojem může v jednom okamžiku pracovat právě jeden proces | * se sdíleným zdrojem může v jednom okamžiku pracovat právě jeden proces | ||
- | - **inkrementálnost požadavků** (též postupné uplatňování požadavků, //Hold-and-Wait//) | + | - **inkrementálnost požadavků** (též postupné uplatňování požadavků, **//Hold-and-Wait//**) |
* proces vlastnící nějaký zdroj potřebuje ke své činnosti zdroj další, který je však držen jiným procesem | * proces vlastnící nějaký zdroj potřebuje ke své činnosti zdroj další, který je však držen jiným procesem | ||
- | - **nepředbíhatelnost** (//No preemption//) | + | - **nepředbíhatelnost** (**//No preemption//**) |
* zdroje lze uvolnit pouze procesem, který tyto vlastní a to pouze dobrovolně, až je nebude potřebovat | * zdroje lze uvolnit pouze procesem, který tyto vlastní a to pouze dobrovolně, až je nebude potřebovat | ||
+ | |||
+ | |||
* Postačující podmínka: | * Postačující podmínka: | ||
* **cyklické čekání** (též zacyklení pořadí, //Circular Wait//) | * **cyklické čekání** (též zacyklení pořadí, //Circular Wait//) | ||
Řádek 340: | Řádek 487: | ||
* existuje množina //n// procesů (//P<sub>0</sub>...P<sub>n</sub>//), kde proces //P<sub>0</sub>// čeká na uvolnění zdroje drženého procesem //P<sub>1</sub>//, //P<sub>1</sub>// čeká na uvolnění zdroje drženého //P<sub>2</sub>// atd. až //P<sub>n</sub>// čeká na uvolnění zdroje drženého //P<sub>0</sub>// | * existuje množina //n// procesů (//P<sub>0</sub>...P<sub>n</sub>//), kde proces //P<sub>0</sub>// čeká na uvolnění zdroje drženého procesem //P<sub>1</sub>//, //P<sub>1</sub>// čeká na uvolnění zdroje drženého //P<sub>2</sub>// atd. až //P<sub>n</sub>// čeká na uvolnění zdroje drženého //P<sub>0</sub>// | ||
- | === Bezpečný stav === | ||
- | |||
- | Stav je bezpečný, jestliže **systém může alokovat zdroje každému procesu** (v mezích maximálního počtu) v nějakém pořadí a zároveň nenastane deadlock (uváznutí). Formálně, systém je v bezpečném stavu, jestliže existuje bezpečná sekvence. Sekvence procesů <P1, P2, ..., Pn> je bezpečná pro aktuální stav alokace, jestliže každému procesu Pi mohou být přiděleny požadované zdroje ze zdrojů volných + zdrojů držených procesy Pj, kde j < i. Za této situace, pokud zdroje požadované procesem Pi nejsou momentálně volné, potom Pi čeká, dokud nejsou ukončeny všechny procesy Pj. V momentě, kdy dokončeny jsou, Pi může dostat všechny požadované zdroje, splnit svou úlohu, zdroje uvolnit a skončit. Je-li proces Pi ukončen, může dostat všechny požadované zdroje proces Pi+1 atd. Pokud v systému neexistuje bezpečná sekvence, říkáme o něm, že není bezpečný. | ||
===Metody ochrany proti uváznutí=== | ===Metody ochrany proti uváznutí=== | ||
- | *ignorovat je - přestože tato strategie vypadá nepřijatelně, používá ji například OS Unix; v případě uváznutí musí zasáhnout některý z uživatelů a jeden nebo více procesů násilím ukončit; v krajním případě může být nutné znovu nastartovat celý systém | ||
- | *prevence uváznutí – ruší se platnost některé nutné podmínky | ||
- | *detekce uváznutí – detekuje se existence uváznutí a řeší se následky | ||
- | *vyhýbání se uváznutí – zamezuje se současné platnosti nutných podmínek | ||
- | *nepřímé metody (zneplatnění nutné podmínky) | ||
- | *virtualizace prostředků – rušení vzájemné výlučnosti (mimo spooling nepoužitelné) | ||
- | *požadování všech prostředků najednou – ruší se požadavek inkrementálnosti požadavků | ||
- | *klady: nemusí se nic odebírat, vhodné pro procesy s jednou nárazovou činností | ||
- | *zápory: neefektivní, možná prodleva při zahájení procesu | ||
- | *odebírání prostředků – ruší se vlastnost nepředbíhatelnosti procesů z hlediska používání prostředků | ||
- | *1. možnost: proces, jemuž byl odmítnut požadavek, uvolní vše co vlastní a o vše požádá znovu | ||
- | *2. možnost: jestliže proces požaduje prostředek držený jiným procesem, držitel je požádán, aby uvolnil vše co vlastní a o vše požádal znovu (procesy nesmí být stejné priority) | ||
- | *klady: vhodné pro prostředky s uchovatelným a obnovitelným stavem (FAP, procesor) | ||
- | *zápory: režijní ztráty, možnost cyklického restartu | ||
- | *přímé metody (nepřipuštění planosti postačující podmínky) | ||
- | *uspořádání prostředků – ruší se možnost vzniku zacyklení při čekání: procesy smí požadovat prostředky pouze ve stanoveném pořadí | ||
- | *klady: lze kontrolovat při kompilaci, nic se neřeší za běhu | ||
- | *zápory: neefektivní | ||
- | ===Detekce uváznutí=== | + | == Ochrana před uváznutím prevencí == |
- | „každý dostává co chce kdy chce“, OS periodicky testuje existenci uváznutí (detekce cyklu v grafu), klady: žádný prostoj při zahájení, zápory: nutnost řešit uváznutí a posteriori | + | |
+ | * zajistíme, že se systém nikdy nedostane do stavu uváznutí | ||
+ | * zrušíme platnost některé nutné podmínky | ||
+ | |||
+ | * **nepřímé metody** (zneplatnění nutné podmínky) | ||
+ | * **Virtualizací prostředků** zrušíme **//Mutual exclusion//**. | ||
+ | * **Požadováním všech prostředků najednou** zrušíme **//Hold-and-Wait//**. | ||
+ | * ➕ nemusí se nic odebírat, vhodné pro procesy s jednou nárazovou činností | ||
+ | * ➖ neefektivní, možná prodleva při zahájení procesu | ||
+ | * **Odebíráním prostředků** zrušíme **//No preemption//** | ||
+ | * Proces, jemuž byl odmítnut požadavek, uvolní vše co vlastní a o vše požádá znovu. | ||
+ | * ➕ vhodné pro prostředky s uchovatelným a obnovitelným stavem (FAP, procesor) | ||
+ | * ➖ režijní ztráty, možnost cyklického restartu | ||
+ | * **přímé metody** (nepřipuštění planosti postačující podmínky) | ||
+ | * **uspořádáním prostředků** zrušíme možnost vzniku zacyklení při čekání: procesy smí požadovat prostředky pouze ve stanoveném pořadí | ||
+ | * ➕ lze kontrolovat při kompilaci, nic se neřeší za běhu | ||
+ | * ➖ neefektivní | ||
+ | |||
+ | == Obcházení uváznutí == | ||
- | ===Způsoby řešení uváznutí=== | + | * detekce potenciální možnosti vzniku uváznutí a nepřipuštění takového stavu |
- | *zrušit všechny uváznuté procesy (nejčastěji používaná metoda) | + | * zamezujeme současné platnosti všech nutných podmínek |
- | *návrat uváznutých procesů k poslednímu kontrolnímu bodu (možnost opakování situace) | + | * prostředek se nepřidělí, pokud by hrozilo uváznutí (hrozí stárnutí) |
- | *postupně rušit uváznuté procesy (podle spotřebovaného času procesoru, počtu tiskových řádků, času do dokončení procesu, priority, množství vlastněných prostředků) | + | |
- | *postupně předbíhat uváznuté procesy | + | |
- | *zamezit současné platnosti nutných podmínek | + | |
- | *bankéřův algoritmus | + | |
- | ===Algoritmus prevence uváznutí=== | + | <box 95% round blue|Bankéřův algoritmus > |
- | Základní myšlenkou je zajistit, aby systém byl neustale v **bezpečném stavu**. Na počátku systém v bezpečném stavu pochopitelně je. V okamžiku, kdy proces žádá zdroj, který je aktuálně volný, musí systém rozhodnout, zda procesu zdroj přidělí, nebo ho nechá čekat. **Zdroj může byt procesu přidělen pouze v případě, ze systém i po přiděleni zůstane v bezpečném stavu**. | + | |
- | == Bankéřův algoritmus == | + | * Algoritmus používaný u zdrojů, kterých se přiděluje určité množství. |
- | *Algoritmus grafu alokace zdrojů je použitelný pouze v systému, kde každá třída zdroje obsahuje max. 1 instanci. Algoritmus, který si popíšeme nyní, tento problém eliminuje. Není ovšem tak efektivní jako algoritmus grafu alokace zdrojů. | + | * Když vstoupí novy proces do systému, musí deklarovat maximální počet instanci všech tříd, které bude pro svůj běh potřebovat. Tato maxima nesmi přesahovat celkový počet zdrojů v systému. Když uživatel požaduje množinu zdrojů, musí systém zjistit nepřevede-li alokace těchto zdrojů systém do nebezpečného stavu. Pokud by tomu tak bylo, musí proces čekat než jiný proces neuvolní dostatek zdrojů. V případe opačném jsou zdroje procesu alokovány. |
- | *Když vstoupí novy proces do systému, musí deklarovat maximální počet instanci všech tříd, které bude pro svůj běh potřebovat. Tato maxima nesmi přesahovat celkový počet zdrojů v systému. Když uživatel požaduje množinu zdrojů, musí systém zjistit nepřevede-li alokace těchto zdrojů systém do nebezpečného stavu. Pokud by tomu tak bylo, musí proces čekat než jiný proces neuvolní dostatek zdrojů. V případe opačném jsou zdroje procesu alokovány. | + | * Pro zajištěni chodu bankéřova algoritmu je třeba udržovat množství datových struktur. Tyto struktury kódují stav systému alokace zdrojů. Nechť n je celkový počet procesu v systému a m je počet typu zdrojů. Potřebujeme následující datové struktury: |
- | *Pro zajištěni chodu bankéřova algoritmu je třeba udržovat množství datových struktur. Tyto struktury kódují stav systému alokace zdrojů. Nechť n je celkový počet procesu v systému a m je počet typu zdrojů. Potřebujeme následující datové struktury: | + | |
*Volny: vektor delky m indikujici pocet volnych instanci kazdeho typu zdroje. Jestlize Volny(j) = k, potom je v systemu k volnych instanci zdroje Rj. | *Volny: vektor delky m indikujici pocet volnych instanci kazdeho typu zdroje. Jestlize Volny(j) = k, potom je v systemu k volnych instanci zdroje Rj. | ||
*Max: matice typu (n,m) definujici maximalni pozadavek kazdeho procesu na kazdou tridu zdroju. Jestlize Max(i,j) = k, potom proces Pi muze pozadat maximalne o k instanci zdroje Rj. | *Max: matice typu (n,m) definujici maximalni pozadavek kazdeho procesu na kazdou tridu zdroju. Jestlize Max(i,j) = k, potom proces Pi muze pozadat maximalne o k instanci zdroje Rj. | ||
Řádek 389: | Řádek 527: | ||
*Kazdou radku matic Alokace a Potreba muzeme zpracovavat jako vektor a oznacovat jako Alokacei a Potrebai. Vektor Alokacei specifikuje zdroje, ktere jsou aktualne alokovany procesu Pi a vektor Potrebai specifikuje dalsi zdroje, ktere proces Pi potrebuje pro sve dokonceni. | *Kazdou radku matic Alokace a Potreba muzeme zpracovavat jako vektor a oznacovat jako Alokacei a Potrebai. Vektor Alokacei specifikuje zdroje, ktere jsou aktualne alokovany procesu Pi a vektor Potrebai specifikuje dalsi zdroje, ktere proces Pi potrebuje pro sve dokonceni. | ||
- | <box 95% round blue|Příklad > | + | |
Uvazujme system s peti procesy P0 az P4 a tri zdroje typu A, B, C. | Uvazujme system s peti procesy P0 az P4 a tri zdroje typu A, B, C. | ||
*Zdroj typu A ma 10 instanci | *Zdroj typu A ma 10 instanci | ||
Řádek 415: | Řádek 553: | ||
*V teto situaci je system v bezpecnem stavu. Sekvence < P1, P3, P4, P2, P0,> je bezpecna sekvence. | *V teto situaci je system v bezpecnem stavu. Sekvence < P1, P3, P4, P2, P0,> je bezpecna sekvence. | ||
+ | </box> | ||
+ | == Detekce a obnova po uváznutí == | ||
+ | |||
+ | * Uváznutí povolíme, ale jeho vznik detekujeme a řešíme. | ||
+ | * OS periodicky testuje existenci uváznutí (detekce cyklu v grafu). | ||
+ | * ➕ žádný prostoj při zahájení | ||
+ | * ➖ nutnost řešit uváznutí | ||
+ | |||
+ | Způsoby řešení uváznutí: | ||
+ | |||
+ | * zrušit všechny uváznuté procesy (nejčastěji používaná metoda) | ||
+ | * návrat uváznutých procesů k poslednímu kontrolnímu bodu (možnost opakování situace) | ||
+ | * postupně rušit uváznuté procesy (podle spotřebovaného času procesoru, počtu tiskových řádků, času do dokončení procesu, priority, množství vlastněných prostředků) | ||
+ | * postupně předbíhat uváznuté procesy | ||
+ | * zamezit současné platnosti nutných podmínek | ||
+ | |||
+ | |||
+ | <box 90% blue|Resource-Allocation Graph, RAG> | ||
+ | * množina uzlů (procesy ⚫, zdroje ⬛) | ||
+ | * hrany | ||
+ | * požadavků (proces -> zdroj) | ||
+ | * přidělení (zdroj -> proces) | ||
+ | * zdroje mohou mít více instancí | ||
+ | |||
+ | Jestliže se v RAG nevyskytuje cyklus: | ||
+ | * => k uváznutí nedošlo | ||
+ | Jestliže se v RAG vyskytuje cyklus: | ||
+ | * existuje pouze jedna instance daného typu => k uváznutí došlo | ||
+ | * existuje více instancí daného typu => k uváznutí může dojít | ||
</box> | </box> | ||
+ | <box 90% blue|Wait-for-Graph, WFG> | ||
+ | * vztahy pouze mezi procesy | ||
+ | * hrana = proces čeká na uvolnění zdroje druhým procesem | ||
+ | * Systém uvázl, pokud je v grafu cyklus. | ||
+ | </box> | ||
- | ===== Práce s pamětí, logický a fyzický adresový prostor, správa paměti a způsoby jejího provádění ===== | + | |
+ | |||
+ | == Ignorování hrozby uváznutí == | ||
+ | |||
+ | * uváznutí je věc aplikace ne systému | ||
+ | * způsob řešení zvolený většinou OS | ||
+ | |||
+ | |||
+ | |||
+ | ===== Správa paměti a virtualizace paměti ===== | ||
===Obecné poznatky správy paměti=== | ===Obecné poznatky správy paměti=== | ||
- | * | + | |
- | Pro běh procesu je nutné, aby program, který ho řídí, byl umístěn v operační paměti. | + | Pro běh procesu je nutné, aby program, který ho řídí, byl umístěn v operační paměti. |
- | * Program se převádí do formy schopné interpretace procesorem ve více krocích, jednou musí někdo rozhodnout kde bude v operační paměti (FAP) umístěn. | + | |
+ | * Z programu se stává proces (aktivní entita schopná spuštění na CPU) provedením celé řady kroků: | ||
+ | * naplnění tabulek, umístění do operační paměti | ||
+ | * vázání adres instrukcí a dat na adresy operační paměti | ||
+ | |||
+ | * Více procesů může sdílet společnou část paměti, aniž by se tím porušovala ochrana paměti | ||
+ | * neboť sdílení jedné datové struktury je lepší řešení než udržování konzistence násobných kopií vlastněných jednotlivými proces | ||
+ | |||
* Roli dlouhodobé paměti programu plní vnější paměť. | * Roli dlouhodobé paměti programu plní vnější paměť. | ||
* Vnitřní operační paměť uschovává data a programy právě běžících, resp. plánovatelných procesů. | * Vnitřní operační paměť uschovává data a programy právě běžících, resp. plánovatelných procesů. | ||
Řádek 434: | Řádek 623: | ||
===Požadavky na správu paměti=== | ===Požadavky na správu paměti=== | ||
+ | |||
==Možnost relokace programů== | ==Možnost relokace programů== | ||
* programátor nemůže vědět, ze které části paměti bude jeho program interpretován | * programátor nemůže vědět, ze které části paměti bude jeho program interpretován | ||
Řádek 453: | Řádek 643: | ||
=== LAP a FAP === | === LAP a FAP === | ||
- | <box 95% round blue|Správa paměti, základní pojmy> | + | <box 95% round blue|Fyzický a logický adresový prostor> |
- | **Vstupní fronta (input queue)**: Fronta procesů čekajících na zavedení do paměti. | + | |
**Logický adresový prostor (LAP)**: virtuální adresový prostor, se kterým pracuje procesor při provádění kódu (každý proces i jádro mají svůj). Dán šířkou a formou adresy. Kapacita je dána šířkou adresy v instrukci. | **Logický adresový prostor (LAP)**: virtuální adresový prostor, se kterým pracuje procesor při provádění kódu (každý proces i jádro mají svůj). Dán šířkou a formou adresy. Kapacita je dána šířkou adresy v instrukci. | ||
Řádek 460: | Řádek 649: | ||
**Fyzický adresový prostor (FAP)**: adresový prostor fyzických adres paměti (společný pro všechny procesy i jádro). Adresa akceptovaná operační pamětí. Kapacita je dána šířkou adresové sběrnice operační paměti | **Fyzický adresový prostor (FAP)**: adresový prostor fyzických adres paměti (společný pro všechny procesy i jádro). Adresa akceptovaná operační pamětí. Kapacita je dána šířkou adresové sběrnice operační paměti | ||
</box> | </box> | ||
+ | |||
+ | {{:mgr-szz:in-pos:vazani-adres.png?300|}} | ||
==Vázání adres LAP na adresy FAP== | ==Vázání adres LAP na adresy FAP== | ||
Řádek 475: | Řádek 666: | ||
* nutná HW podpora | * nutná HW podpora | ||
* proces může měnit svoji polohu ve FAP během provádění | * proces může měnit svoji polohu ve FAP během provádění | ||
+ | |||
+ | |||
+ | {{:mgr-szz:in-pos:relokacni-registr.png?300|}} | ||
===Přidělování souvislých oblastí=== | ===Přidělování souvislých oblastí=== | ||
Řádek 480: | Řádek 674: | ||
* sekce pro rezidentní část OS, obvykle bývá umístěna od počátku | * sekce pro rezidentní část OS, obvykle bývá umístěna od počátku | ||
* sekce pro uživatelské procesy | * sekce pro uživatelské procesy | ||
+ | |||
+ | {{:mgr-szz:in-pos:rezidentni-oblast-pameti.png?300|}} | ||
Pro ochranu procesů uživatelů mezi sebou a OS při přidělování sekce procesům lze použít schéma s relokačním a mezním registrem: | Pro ochranu procesů uživatelů mezi sebou a OS při přidělování sekce procesům lze použít schéma s relokačním a mezním registrem: | ||
Řádek 505: | Řádek 701: | ||
==Překryvy (Overlays)== | ==Překryvy (Overlays)== | ||
Historická, klasická technika. V operační paměti se uchovávají pouze ty instrukce a data, která je potřeba zde uchovat "v nejbližší budoucnosti". Vyvolávání překryvů je implementované uživatelem, není potřeba speciální podpory ze strany OS. | Historická, klasická technika. V operační paměti se uchovávají pouze ty instrukce a data, která je potřeba zde uchovat "v nejbližší budoucnosti". Vyvolávání překryvů je implementované uživatelem, není potřeba speciální podpory ze strany OS. | ||
+ | |||
+ | {{:mgr-szz:in-pos:overlays.png?300|}} | ||
==Stránkování== | ==Stránkování== | ||
+ | |||
* LAP procesu není zobrazován do jediné souvislé sekce FAP, zobrazuje se po částech do volných sekcí FAP | * LAP procesu není zobrazován do jediné souvislé sekce FAP, zobrazuje se po částech do volných sekcí FAP | ||
* FAP se dělí na //rámce// -- pevná délka (např. 512 B) | * FAP se dělí na //rámce// -- pevná délka (např. 512 B) | ||
Řádek 517: | Řádek 716: | ||
*Problém snížení efektivnosti dvojím přístupem lze řešit speciální rychlou HW cache (asociativní paměť, TLB -- Translation Look-aside Buffer) | *Problém snížení efektivnosti dvojím přístupem lze řešit speciální rychlou HW cache (asociativní paměť, TLB -- Translation Look-aside Buffer) | ||
+ | {{:mgr-szz:in-pos:strankovani.png?300|}} | ||
+ | |||
+ | |||
+ | ==Segmentace== | ||
+ | |||
+ | * Logická adresa je dvojice (segment s, offset d) | ||
+ | * Tabulka segmentů, Segment table, ST: | ||
+ | * **base** – počáteční adresa umístění segmentu ve FAP | ||
+ | * **limit** – délka segmentu | ||
+ | |||
+ | {{:mgr-szz:in-pos:segmentace.png?300|}} | ||
+ | |||
+ | |||
+ | == Virtuální pamět == | ||
+ | |||
+ | * Uložení obrazu LAP (virtuální paměti) v externí paměti | ||
+ | * nepoužívá se standardní systém souborů OS, používají se speciální metody, optimalizované pro tento účel | ||
+ | * speciální partition/slice disku | ||
+ | * Stránkování / segmentaci musí podporovat hardware správy paměti | ||
+ | * stránkování na žádost | ||
+ | * segmentování na žádost | ||
+ | * **žádost** – dynamicky kontextově generovaná indikace nedostatku | ||
+ | * OS musí být schopen organizovat tok stránek / segmentů mezi vnitřní a vnější pamětí | ||
+ | |||
+ | |||
+ | <box 95% round blue|Stránkování na žádost (Demand paging)> | ||
+ | |||
+ | * stránka se zobrazuje do FAP při odkazu na ni, pokud ve FAP není již zobrazena | ||
+ | * počáteční shluky výpadků stránek | ||
+ | </box> | ||
+ | |||
+ | <box 95% round blue|Předstránkování (Prepaging)> | ||
+ | * umístění na vnější paměti sousedních stránek v LAP bývá blízké („sousedi“) | ||
+ | * princip lokality | ||
+ | * zavádí se více stránek než se žádá | ||
+ | * vhodné při inicializaci procesu | ||
+ | </box> | ||
+ | |||
+ | == Výpadek stránky == | ||
+ | |||
+ | Pokud se stránka nenachází ve FAP je aktivován OS pomocí přerušení „page fault“ (výpadek stránky) | ||
+ | |||
+ | * OS zjistí: | ||
+ | * nelegální reference → procesu je informován (např. signál SIGSEGV) | ||
+ | * legální reference, ale stránka chybí v paměti → zavede ji | ||
+ | |||
+ | * Zavedení stránky | ||
+ | * získání prázdného rámce | ||
+ | * zavedení stránky do tohoto rámce | ||
+ | * úprava tabulky, nastaven bit valid/invalid na 1 | ||
+ | |||
+ | * Pak se opakuje instrukce, která způsobila „page fault“ | ||
+ | |||
+ | == Algoritmy určující oběť == | ||
+ | |||
+ | * **Algoritmus LRU (Least Recently Used)** | ||
+ | * oběť = nejdéle neodkazovaná stránka | ||
+ | |||
+ | * **Algoritmus FIFO (First-In-First-Out)** | ||
+ | * oběť = stránka nejdéle zobrazená ve FAP | ||
+ | |||
+ | * **Algoritmus poslední šance** | ||
+ | * FIFO + vynechávání z výběru těch stránek, na které od posledního výběru bylo odkázáno | ||
+ | |||
+ | |||
+ | |||
+ | ===== Ovládání vstupů a výstupů ===== | ||
+ | |||
+ | |||
+ | * HW pro I/O je značně rozmanitý | ||
+ | * Existují však určité běžně používané prvky: | ||
+ | * port | ||
+ | * sběrnice (bus) | ||
+ | * řadič (host adapter, controller) | ||
+ | |||
+ | * I/O zařízení jsou řízeny I/O instrukcemi (IN, OUT) | ||
+ | |||
+ | * Adresy I/O zařízení | ||
+ | * uváděné přímo v I/O instrukcích (např. IN AL, DX : DX port, AL získaný bajt) | ||
+ | * I/O se mapuje na přístup k paměti (např. grafická karta, videopaměť) | ||
+ | |||
+ | ==== Základní způsoby ovládání I/O ==== | ||
+ | |||
+ | === Polling, programované I/O operace === | ||
+ | |||
+ | * aktivní čekání na konec operace | ||
+ | * opakovaně se ptám na stav zařízení | ||
+ | * připraven | ||
+ | * pracuje | ||
+ | * chyba | ||
+ | |||
+ | |||
+ | === Přerušení === | ||
+ | |||
+ | * zahájení I/O pomocí I/O příkazu | ||
+ | * paralelní běh I/O s během procesoru | ||
+ | * I/O modul oznamuje přerušením konec přenosu | ||
+ | |||
+ | * Přerušení obsluhuje ovladač přerušení (kód OS) | ||
+ | * Maskováním lze některá přerušení ignorovat nebo oddálit jejich obsluhu | ||
+ | * Patřičný ovladač přerušení se vybírá přerušovacím vektorem | ||
+ | * některá přerušení nelze maskovat | ||
+ | * přerušení mohou být uspořádána podle priorit | ||
+ | * Přerušení se používá i pro řešení výjimek (nejsou asynchronní) | ||
+ | |||
+ | |||
+ | === DMA === | ||
+ | |||
+ | * kopírování bloků mezi pamětí a I/O zařízením na principu kradení cyklů paměti | ||
+ | * přerušení po přenosu bloku (indikace konce) | ||
+ | |||
+ | * nahrazuje programovaný I/O při velkých přesunech dat | ||
+ | * vyžaduje speciální DMA řadič | ||
+ | * při přenosu dat se obchází procesor, přístup do paměti | ||
+ | * zajišťuje přímo DMA řadič | ||
+ | * procesor a DMA soutěží o přístup k paměti | ||
+ | |||
+ | ==== Aplikační rozhraní I/O ==== | ||
+ | |||
+ | * Jádro OS se snaží skrýt rozdíly mezi I/O zařízeními a programátorům poskytuje jednotné rozhraní. | ||
+ | * Dále vrstva ovladačů ukrývá rozdílnost chování I/O řadičů i před některými částmi jádra | ||
+ | |||
+ | * Některé vlastnosti I/O zařízení | ||
+ | * mód přenosu dat: znakové (terminál) / blokové (disk) | ||
+ | * způsob přístupu: sekvenční (modem) / přímý (disk) | ||
+ | * sdílené/dedikované: klávesnice / páska | ||
+ | * rychlost přenosu: vystavení, přenos, ... | ||
+ | * read-write, read only, write only | ||
+ | |||
+ | |||
+ | ==== Síťová zařízení ==== | ||
+ | |||
+ | * Přístup k nim se značně liší jak od znakových, tak od blokových zařízení | ||
+ | * proto mívají samostatné rozhraní OS | ||
+ | * Unix i Windows obsahující rozhraní nazývané „sockets“ | ||
+ | * separují síťové protokoly od síťových operací | ||
+ | * přístup jako k souborům (včetně funkce select) | ||
+ | * Existuje celá řada přístupů k síťovým službám | ||
+ | * Pipes (roury), FIFOs, streams, queues, mailboxes | ||
+ | |||
+ | |||
+ | ==== Blokující a neblokující I/O ==== | ||
+ | |||
+ | * Blokující | ||
+ | * z hlediska procesu synchronní | ||
+ | * proces čeká na ukončení I/O | ||
+ | * snadné použití (programovaní), snadné porozumění (po provedení operace je hotovo to co jsem požadoval) | ||
+ | * někdy však není dostačující (z důvodu efektivity) | ||
+ | |||
+ | * Neblokující | ||
+ | * řízení se procesu vrací co nejdříve po zadání požadavku | ||
+ | * vhodné pro uživatelské rozhraní, bufferovaný I/O | ||
+ | * bývá implementováno pomocí vláken | ||
+ | * okamžitě vrací počet načtených či zapsaných znaků | ||
+ | |||
+ | * Asynchronní | ||
+ | * proces běží souběžně s I/O | ||
+ | * konec I/O je procesu hlášen signály | ||
+ | * obtížné na programovaní, složité používání, ale v případě vhodně promyšleného programu velice efektivní | ||
+ | |||
+ | ==== I/O subsystém v jádře ==== | ||
+ | |||
+ | * Plánování | ||
+ | * některé I/O operace požadují řazení do front na zařízení | ||
+ | * některé OS se snaží o „spravedlnost“ | ||
+ | |||
+ | * Vyrovnání (vyrovnávací paměti), buffering | ||
+ | * ukládání dat v paměti v době přenosu k/ze zařízení | ||
+ | * řeší rozdílnost rychlosti | ||
+ | * řeší rozdílnost velikosti datových jednotek | ||
+ | |||
+ | * Caching | ||
+ | * rychlá paměť udržuje kopii dat | ||
+ | * vždy pouze kopii | ||
+ | * caching je klíčem k dosažení vysokého výkonu | ||
+ | |||
+ | * Spooling | ||
+ | * udržování fronty dat určených k výpis na zařízení | ||
+ | * pokud zařízení může vyřizovat požadavky pouze sekvenčně | ||
+ | * typicky tiskárna | ||
+ | |||
+ | * Rezervace zařízení | ||
+ | * exkluzivita přístupu k zařízení pro proces | ||
+ | * rezervace / uvolnění – volání systému | ||
+ | * pozor na uváznutí (deadlock) | ||
+ | |||
+ | * Chybové řízení | ||
+ | * Vzpamatování se po poruše při chybě čtení z disku, zjištění nedostupnosti zařízení, po náhodné chybě zápisu, ... | ||
+ | * Volání požadující I/O operaci získá číslo chyby | ||
+ | * typicky záporná hodnota | ||
+ | * Udržuje se záznam o chybách v systému | ||
+ | * pro následné analýzy | ||
+ | * syslog, events (viewer), ... | ||
Řádek 523: | Řádek 915: | ||
* http://statnice.dqd.cz/home:prog:ap5 | * http://statnice.dqd.cz/home:prog:ap5 | ||
* http://statnice.dqd.cz/mgr-szz:ap-ap:7 | * http://statnice.dqd.cz/mgr-szz:ap-ap:7 | ||
- | * slidy PB153 | + | * slidy PB153 (text i schémata) |
* 04 Principy výstavby OS | * 04 Principy výstavby OS | ||
* 05 Procesy | * 05 Procesy | ||
* 06 Vlákna | * 06 Vlákna | ||
+ | * 07 Plánování CPU | ||
+ | * 08 Synchronizace procesů | ||
+ | * 09 Uváznutí | ||
+ | * 10 Správa paměti | ||
+ | * 11 Virtuální paměť | ||
+ | * 12 I/O systém | ||