OBSAH WEBU
ČTĚTE!
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
temata:35-planovani_synchronizace:main [2011/02/04 13:15] 127.0.0.1 upraveno mimo DokuWiki |
temata:35-planovani_synchronizace:main [2012/02/27 21:13] (aktuální) conyx [35 - Plánování a synchronizace procesů, transakce] |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== Plánování a synchronizace procesů, transakce ====== | + | ====== 35 - Plánování a synchronizace procesů, transakce ====== |
- | + | ~~ODT~~ | |
- | =>> IOS by Ofeig <<= | + | |
- | + | ||
- | !!WORK IN PROGRESS!! | + | |
- | + | ||
Plánování procesů je jeden z úkolů operačního systému. Týká se systémů s více současně běžícími procesy, které podporují multitasking (schopnost provádět více úloh současně). Plánování řeší výběr procesů, kterým má být aktuálně přidělen procesor a pamět. V oblastech operačních systémů se setkáváme s oblastí __správy procesů__ (process managmentú, který zahrnuje: | Plánování procesů je jeden z úkolů operačního systému. Týká se systémů s více současně běžícími procesy, které podporují multitasking (schopnost provádět více úloh současně). Plánování řeší výběr procesů, kterým má být aktuálně přidělen procesor a pamět. V oblastech operačních systémů se setkáváme s oblastí __správy procesů__ (process managmentú, který zahrnuje: | ||
* plánovač (scheduler), který přiděluje CPU procesům | * plánovač (scheduler), který přiděluje CPU procesům | ||
Řádek 20: | Řádek 15: | ||
Běžně se rozlišují následující stavy procesů (schéma pro UNIX) | Běžně se rozlišují následující stavy procesů (schéma pro UNIX) | ||
+ | |||
{{:temata:35-planovani_synchronizace:stavy.png|}} | {{:temata:35-planovani_synchronizace:stavy.png|}} | ||
- | V OS bývá proces reprezentován strukturou **PTB** (Process control block), která zahrnuje: | + | V OS bývá proces reprezentován strukturou **PCB** (Process control block), která zahrnuje: |
* identifikátor procesu | * identifikátor procesu | ||
* stav plánování procesu | * stav plánování procesu | ||
Řádek 47: | Řádek 43: | ||
== Problém vyhladovění == | == Problém vyhladovění == | ||
- | Proces, který je připraven k běhu, se k procesoru nedostane, protože ten je neustále přilován jiným, více priotivním procesům. (Tento proces tedy hladí a neustále čeká na přidělení procesoru). | + | Proces, který je připraven k běhu, se k procesoru nedostane, protože ten je neustále přilován jiným, více priotivním procesům. (Tento proces tedy hladoví a neustále čeká na přidělení procesoru). |
Nabízí se následující řešení: | Nabízí se následující řešení: | ||
- | * procesy dle priorit dostanou určitý násobek kvanta, stejně prioritní procesy se střídají do jeho vyčerpání, pak dostanou šanci níže prioritní procesy. | + | * Procesy dle priorit dostanou určitý násobek kvanta, stejně prioritní procesy se střídají do jeho vyčerpání, pak dostanou šanci níže prioritní procesy. |
* Explicitní kontrola, zda někdo nehladoví. | * Explicitní kontrola, zda někdo nehladoví. | ||
Řádek 64: | Řádek 60: | ||
===== Synchronizace procesů ===== | ===== Synchronizace procesů ===== | ||
Současný přístup několika paralerních procesů ke sdíleným zdrojů může vést k nekonzistencím zpracovaných dat. Vznikají různé chyby, například **race condition** (časově závislá chyba), tj. chyba vznikající při přístupu ke sdíleným zdrojům kvůli různému pořadí provádění jednotlivých paralelních výpočtů v systému (kvůli jejich různé relativní rychlosti). Příkladem je například probnlém **producent - konzument**. Proto jsou vyžadovány mechanismy //zajišťující správné pořadí provádění procesů//, které se označují jako mechanismy **synchronizace procesů**. | Současný přístup několika paralerních procesů ke sdíleným zdrojů může vést k nekonzistencím zpracovaných dat. Vznikají různé chyby, například **race condition** (časově závislá chyba), tj. chyba vznikající při přístupu ke sdíleným zdrojům kvůli různému pořadí provádění jednotlivých paralelních výpočtů v systému (kvůli jejich různé relativní rychlosti). Příkladem je například probnlém **producent - konzument**. Proto jsou vyžadovány mechanismy //zajišťující správné pořadí provádění procesů//, které se označují jako mechanismy **synchronizace procesů**. | ||
+ | |||
+ | {{:temata:35-planovani_synchronizace:producent_konzument.png|}} | ||
==== Kritická sekce ==== | ==== Kritická sekce ==== | ||
Řádek 72: | Řádek 70: | ||
* je zapotřebí se vyhnout | * je zapotřebí se vyhnout | ||
* **uváznutí (deadlock)** - situace, kdy každý ze skupiny procesů čeká na uvolnění zdrojje s výlučným (omezeným) přístupem vlastněným nějakým procesem z dané skupiny | * **uváznutí (deadlock)** - situace, kdy každý ze skupiny procesů čeká na uvolnění zdrojje s výlučným (omezeným) přístupem vlastněným nějakým procesem z dané skupiny | ||
+ | {{:temata:35-planovani_synchronizace:deadlock.png|}} | ||
+ | |||
* **bloknutí (blocking)** - situace, kdy proces, jenž žádá o vstup do KS, musí čekat, přestože KS je volná (tj. žádný proces se v ní nenachází) a ani o žádnou z dané množiny sdílených KS žádný další proces nežádá | * **bloknutí (blocking)** - situace, kdy proces, jenž žádá o vstup do KS, musí čekat, přestože KS je volná (tj. žádný proces se v ní nenachází) a ani o žádnou z dané množiny sdílených KS žádný další proces nežádá | ||
* **stárnutí (hladovění, starvarion)** - situace, kdy proces čeká na podmínku, která nemusí nastat | * **stárnutí (hladovění, starvarion)** - situace, kdy proces čeká na podmínku, která nemusí nastat | ||
Zvláštním případem stárnuí je **livelock**, kdy všechny procesy z určité množiny běží, ale provadějí jen omezený úsek kódu, které by mohly opustit jen tehdy, kdyby získaly zdroj vlastněný některým z procesů dané skupiny. | Zvláštním případem stárnuí je **livelock**, kdy všechny procesy z určité množiny běží, ale provadějí jen omezený úsek kódu, které by mohly opustit jen tehdy, kdyby získaly zdroj vlastněný některým z procesů dané skupiny. | ||
+ | {{:temata:35-planovani_synchronizace:livelock.png|}} | ||
- | == Petersonů algoritmus == | + | == Petersonův algoritmus == |
Možné řešení problému KS pro 2 procesy (existuje i jeho zobecnění pro n procesů). | Možné řešení problému KS pro 2 procesy (existuje i jeho zobecnění pro n procesů). | ||
- | <code> | + | <code c> |
bool flag[2] = {false, false}; | bool flag[2] = {false, false}; | ||
int turn = 0; | int turn = 0; | ||
Řádek 155: | Řádek 156: | ||
</code> | </code> | ||
- | Dalším příklade je __aotmická instrukce__ typu **Swap** | + | Dalším příklade je __atomická instrukce__ typu **Swap** |
<code c> | <code c> | ||
void Swap(bool &a, bool &b) { | void Swap(bool &a, bool &b) { | ||
Řádek 274: | Řádek 275: | ||
init(empty,N); | init(empty,N); | ||
init(mutex,1); | init(mutex,1); | ||
- | [/code] | + | </code> |
__Producent x Konzument__ | __Producent x Konzument__ | ||
- | [code] | + | <code c> |
do { do { | do { do { | ||
... lock(full); | ... lock(full); | ||
Řádek 336: | Řádek 337: | ||
- | == Problém věřících filozofů == | + | == Problém večeřících filozofů == |
- | !!! obrázek ze slajdu | + | {{:temata:35-planovani_synchronizace:filozofove.png|}} |
+ | |||
Algoritmus s možností uváznutí: | Algoritmus s možností uváznutí: | ||
<code c> | <code c> | ||
Řádek 368: | Řádek 370: | ||
* __Provedení přechodu__ (přesuv značek ze všech vstupních do všech výstupních míst) : reprezentuje provedení nějaké akce | * __Provedení přechodu__ (přesuv značek ze všech vstupních do všech výstupních míst) : reprezentuje provedení nějaké akce | ||
- | !! obrázek prezentace 6, slajd 25 a obrázek prezentace 6, slajd 26 | + | {{:temata:35-planovani_synchronizace:prechody.png|}} |
+ | {{:temata:35-planovani_synchronizace:prechody2.png|}} | ||
== Uváznutí (deadlock) == | == Uváznutí (deadlock) == | ||
Situace, kdy ve skupině procesů každý čeká na uvolnění prostředků s výlučným přístupem přiděleného některému procesu z dané množiny (vzniká cyklická závislost na sebe čekajících procesů) a ani jeden proces z této množiny proto nemůže pokračovat | Situace, kdy ve skupině procesů každý čeká na uvolnění prostředků s výlučným přístupem přiděleného některému procesu z dané množiny (vzniká cyklická závislost na sebe čekajících procesů) a ani jeden proces z této množiny proto nemůže pokračovat | ||
- | !!! obrázek prezentace 6, stajd 27 | + | {{:temata:35-planovani_synchronizace:uvaznuti.png|}} |
- | Nutné podmínky uváznutí | + | |
- | 1) vzájemné vyloučení při používání prostředků | + | |
- | 2) vlastnictví alespoň jednoho zdroje a čekání na další | + | |
- | 3) prostředky vrací proces, který je vlastní, a to po dokončení jejich využití | + | |
- | 4) cyklická závislost na sebe čekajících procesů | + | |
- | Řešení: | + | **Nutné podmínky uváznutí** |
+ | - vzájemné vyloučení při používání prostředků | ||
+ | - vlastnictví alespoň jednoho zdroje a čekání na další | ||
+ | - prostředky vrací proces, který je vlastní, a to po dokončení jejich využití | ||
+ | - cyklická závislost na sebe čekajících procesů | ||
+ | |||
+ | **Řešení:** | ||
* **prevence uváznutí** | * **prevence uváznutí** | ||
* zrušíme platnost některého z nutných podmínek uváznutí | * zrušíme platnost některého z nutných podmínek uváznutí | ||
- | 1) nepoužívat sdílené prostředky nebo používat sdílené prostředky, které umnožňují sdílený přístup a u kterých tedy není nutné vzájmené vyloučení procesů | + | - nepoužívat sdílené prostředky nebo používat sdílené prostředky, které umnožňují sdílený přístup a u kterých tedy není nutné vzájmené vyloučení procesů |
- | 2) proces může žádat o prostředky pouze pokud žádné nevlastní | + | - proces může žádat o prostředky pouze pokud žádné nevlastní |
- | 3) pokud proces požádá o prostředky, které nemůže momentálně získat, je pozastaven, všechny prostředky jsou mu odebrány a čeká se, až mu mohou být všechny potřebné prostředky přiděleny | + | - pokud proces požádá o prostředky, které nemůže momentálně získat, je pozastaven, všechny prostředky jsou mu odebrány a čeká se, až mu mohou být všechny potřebné prostředky přiděleny |
- | 4) prostředky jsou očíslovány a je možné je získávat pouze od nejnižších čísel k vyšším | + | - prostředky jsou očíslovány a je možné je získávat pouze od nejnižších čísel k vyšším |
* **vyhýbání se uváznutí** | * **vyhýbání se uváznutí** | ||
* procesy předem deklarují určité informace o způsobu, jakým budou využívat zdroje: v nejjednodušším případě se jedná o maximální počet současně požadovaných zdrojů jednotlivých typů | * procesy předem deklarují určité informace o způsobu, jakým budou využívat zdroje: v nejjednodušším případě se jedná o maximální počet současně požadovaných zdrojů jednotlivých typů | ||
Řádek 399: | Řádek 403: | ||
== Stárnutí/hladovění procesů (starvation) == | == Stárnutí/hladovění procesů (starvation) == | ||
Proces čeká na podmínku u níž není zaručeno, že nastane (např. protože příslušné procesy mohou bát neustále přebírány jinými procesy) | Proces čeká na podmínku u níž není zaručeno, že nastane (např. protože příslušné procesy mohou bát neustále přebírány jinými procesy) | ||
- | !!! obrázek prezentace 6, slajd 33 | + | {{:temata:35-planovani_synchronizace:starnuti.png|}} |
+ | |||
+ | ==== Zdroje ==== | ||
+ | <note>IOS - Přednáška č. 5: [[http://file.ofeig.cz/file/ios-prednaska-05.pdf|Správa procesů]] | ||
+ | |||
+ | IOS - Přednáška č. 6: [[http://file.ofeig.cz/file/ios-prednaska-06.pdf|Synchronizace procesů]] | ||
+ | |||
+ | http://www.wikipedia.org | ||
+ | http://www.google.com</note> | ||
+ | |||
+ | <doodle single login|35> | ||
+ | ^ OK ^ !!! ^ | ||
+ | </doodle> | ||
+ | ~~DISCUSSION~~ |