Problém kritické sekce
Z FAV wiki
(Rozdíly mezi verzemi)
(Založena nová stránka: Pokud procesy sdílejí společnou paměť, kterou čtou a zapisují, může nastat časový souběh. Hledání časových souběhů v reálných programech není jednoduch...) |
|||
| Řádka 1: | Řádka 1: | ||
| + | |||
| + | == Časový souběh == | ||
| + | |||
Pokud procesy sdílejí společnou paměť, kterou čtou a zapisují, může nastat časový souběh. Hledání časových souběhů v reálných programech není jednoduché, protože časový souběh se obvykle projevuje nedeterministicky a programy běží po většinu času bez problémů. | Pokud procesy sdílejí společnou paměť, kterou čtou a zapisují, může nastat časový souběh. Hledání časových souběhů v reálných programech není jednoduché, protože časový souběh se obvykle projevuje nedeterministicky a programy běží po většinu času bez problémů. | ||
| − | + | Příklad - Přístup do souboru | |
| − | + | ||
| − | + | * 2 procesy chtějí vytvořit soubor a zapsat do něj | |
| − | + | * 1. proces – zjistí, že soubor není | |
| + | * ... přeplánování ... | ||
| + | * 2. proces – zjistí, že soubor není, vytvoří a zapíše | ||
| + | * 1. proces – pokračuje, vytvoří a zapíše znehodnotí činnost druhého procesu | ||
| + | |||
| + | Řešení - časový souběh by nenastal, pokud by čtení+modifikace proběhli atomicky, tj. jako jedna nedělitelná operace. Zařídit HW většinou není praktické. SW řešení - v jednom okamžiku dovolíme číst a zapisovat společná data pouze jednomu procesu. | ||
| + | |||
| + | == Kritická sekce == | ||
| − | + | = místo programu, kde je prováděn přístup ke společným datům | |
| − | + | ||
Dobré řešení musí mít 3 vlastnosti: | Dobré řešení musí mít 3 vlastnosti: | ||
| − | + | # Vzájemné vyloučení: žádné 2 procesy nesmějí být současně uvnitř své kritické sekce | |
| − | + | # Proces běžící mimo svou kritickou sekci nesmí blokovat jiné procesy | |
| − | + | # Žádný proces nesmí na vstup do své kritické sekce čekat nekonečně dlouho | |
Verze z 29. 8. 2011, 13:48
Časový souběh
Pokud procesy sdílejí společnou paměť, kterou čtou a zapisují, může nastat časový souběh. Hledání časových souběhů v reálných programech není jednoduché, protože časový souběh se obvykle projevuje nedeterministicky a programy běží po většinu času bez problémů.
Příklad - Přístup do souboru
- 2 procesy chtějí vytvořit soubor a zapsat do něj
- 1. proces – zjistí, že soubor není
- ... přeplánování ...
- 2. proces – zjistí, že soubor není, vytvoří a zapíše
- 1. proces – pokračuje, vytvoří a zapíše znehodnotí činnost druhého procesu
Řešení - časový souběh by nenastal, pokud by čtení+modifikace proběhli atomicky, tj. jako jedna nedělitelná operace. Zařídit HW většinou není praktické. SW řešení - v jednom okamžiku dovolíme číst a zapisovat společná data pouze jednomu procesu.
Kritická sekce
= místo programu, kde je prováděn přístup ke společným datům
Dobré řešení musí mít 3 vlastnosti:
- Vzájemné vyloučení: žádné 2 procesy nesmějí být současně uvnitř své kritické sekce
- Proces běžící mimo svou kritickou sekci nesmí blokovat jiné procesy
- Žádný proces nesmí na vstup do své kritické sekce čekat nekonečně dlouho