Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

temata:35-planovani_synchronizace:main [2011/03/25 18:21]
ofeig [Klasické synchornizační problémy]
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ů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 336: Řádek 337:
  
  
-== Problém ří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~~ ~~DISCUSSION~~
temata/35-planovani_synchronizace/main.1301073674.txt.gz · Poslední úprava: 2011/03/25 18:21 autor: ofeig
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki