290 likes | 434 Views
Synchronizácia I/O. 4. prednáška VRVS. Synchronizácia. Chceme zabrániť časovo závislým chybám Keď je výpočet závislý na výsledku iných úloh V lepšom prípade sa na výsledky čaká V horšom prípade sa pracuje so starými dátami. Ochrana zariadení.
E N D
Synchronizácia I/O 4. prednáška VRVS
Synchronizácia • Chceme zabrániť časovo závislým chybám • Keď je výpočet závislý na výsledku iných úloh • V lepšom prípade sa na výsledky čaká • V horšom prípade sa pracuje so starými dátami
Ochrana zariadení • Ak by dva procesy naraz tlačili na tlačiareň, tak by boli výsledky premiešané • alebo ak by dva procesy zapisovali do súboru, výsledok by bol taktiež mix: • Jeden píše Milan • Druhý píše Schmotzer • Výsledok MScilahmontzer
Riešenie • Pripustiť k tlačiarni jediný proces (napríklad démon lpd v Unixe) • Ostatné programy tlačia do súboru • Keď je súbor hotový, oznámia to lpd • Všeobecnejšie povedané zariadenie obsluhuje jediný (dopredu definovaný) proces
Iná možnosť • Proces požiada o zariadenie • OS mu pridelí exkluzívny prístup k zariadeniu • Po ukončení procesu je prostriedok (zariadenie) uvoľnený
Komunikácia medzi procesmi • Zdieľajú spoločnú dátovú štruktúru(kus pamäte, súbor apod.) • Ako synchronizovať komunikáciu? • Najjednoduchší je binárny semafor BS • Je dvojhodnotový. • 0 = voľno, 1 = obsadené zariadenie
BS – proces musí • zistiť hodnotu semaforu (0 alebo 1) pre žiadaný prostriedok/zariadenie, • nastaviť semafor na 1, • použiť prostriedok ovládaný semaforom, • nastaviť semafor na 0 (po uvoľnení prostriedku/zariadenia).
TS • Na test i nastavenie sa používa procesorová inštrukcia TS – test and set • Nemôže byť prerušená v prospech iného procesu • Takto nedôjde k havárii dvoch procesov (kedy jeden otestuje BS=0 aj druhý, ale uprostred testu druhý nastaví BS:=1 a semafor by nefungoval správne)
Problém a jeho riešenie • Proces čakajúci na uvoľnenie zariadenia nespí, ale v cykle volá príkaz TS • To zaťažuje počítač. Preto sa používa stratégia zvaná WAIT a SIGNAL • Žiadateľ o prostriedok s prideleným semaforom X volá funkciu LOCK(X) • Ak funkcia zistí, že prostriedok je obsadený, volá funkciu jadra WAIT(X)
WAIT a SIGNAL • Dispečer prepne volajúci proces do stavu čakajúci – proces tak nespotrebúva CPU • Ak niektorý proces uvoľňuje zariadenie, volá funkciu UNLOCK(X) • Dispečer zavolá funkciu SIGNAL(X), ktorá prehľadá tabuľku procesov, či niektorý nečaká na uvoľnenie semaforu X • Ak áno, taký proces bude prebudený
Zovšeobecnené semafory • Operácia P(S) vykoná S:=S-1 • Ak S<0, volá funkciu WAIT(S) • Operácia V(S) vykoná S:=S+1 • Ak S≤0, volá funkciu SIGNAL(S) • Ak S iba nastavujeme na 1 alebo 0, ide o obyčajné funkcie LOCK(S) a UNLOCK(S)
Príklad: Producent a konzument • Konzument nemá čítať prázdne dáta • Producent nemá preplniť zásobník • Do dátovej štruktúry sa zmestí n položiek • Použijeme dva semafory s počiatočným nastavením • S1=n • S2=0
Algoritmus producenta Pp • Vyskúšajte si pre S1=2 a S2=0: • Vytvor položku, • P(S1), • ulož položku do vyrovnávacej pamäte, • V(S2), • opakuj algoritmus od bodu 1.
Algoritmus konzumenta Pc • P(S2), • odober položku z vyrovnávacej pamäte, • V(S1), • spotrebuj položku, • opakuj algoritmus od bodu 1.
Komunikácia • Všeobecne môže byť priama • SEND(PR, M) pošli správu M procesu PR • RECEIVE(PS,M)príjmi správu Mod procesu PS • Nepriama komunikácia používa schránku: • WRITE(SCHRANKAX, MESSAGE) • READ(SCHRANKAX, MESSAGE)
Otázky • Môže do schránky (my hovoríme na port) písať správy viacero programov? • Odpoveď: ehe • Môže obsah schránky správ čítať viacero programov? • Odpoveď: e-e(dá sa, ale skomplikujeme si život)
Otázky na skúšku • Otázka: Kto prideľuje porty? • Odpoveď: Operačný systém • Otázka: Aha, a tá komunikácia je na lokálnom počítači alebo cez sieť? • Odpoveď: To je jedno, pretože toto je len všeobecný princíp
Uviaznutie • Zablokujú sa nám dva prostriedky pomocou dvoch procesov takto: • Proces A chce zariadenie Z1 • Proces B chce zariadenie Z2 • Proces A chce aj zariadenie Z2 ale ma ho rezervovane proces B ! Musí teda čakať • Ak teraz proces B chce zariadenie Z1, je to celé v keli – čakať sa bude do nekonečna
Riešenie blokácie • Zablokovanie (uviaznutie) je anglicky deadly embrance resp. deadlock • Najjednoduchšie riešenie je úplné počiatočné pridelenie – program pred spustením nesie v hlavičke oznam, ktoré zariadenia potrebuje
Úplné počiatočné pridelenie • Pridelia sa mu všetky zariadenie alebo sa vôbec nespustí, ak je niektoré zariadenie používané iným • Nevýhoda – blokuje zariadenia, ktoré možno ani nepoužije.
Dynamické prideľovanie • Riadené prideľovanie prostriedkov: • Program na začiatku oznámi, ktoré zariadenia potrebuje • Operačný systém odhadne možnosť zablokovania a ak nie je pravdepodobná, spustí program • Ak dôjde k zablokovaniu, pokračuje len prvý proces a ostatné sú dočasne uspaté
Dynamické prideľovanie 2 • Hierarchické prideľovanie prostriedkov • Prostriedky označí číslami (tlačiareň 1, páska 2) • Proces smie žiadať o (momentálne voľný) prostriedok v rastúcej číselnej postupnosti • Zaručuje nezablokovanie, ale vynútená postupnosť rezervácie zariadení nevyhovuje
Dynamické prideľovanie 3 • Detekcia uviaznutia a zotavenie sa z neho • Pripúšťa také zablokovanie, z ktorého sa vie operačný systém zotaviť • Každý prostriedok dostane svoje číslo • Procesy si rezervujú prostriedky volaním funkcií rezervuj(X) a uvoľni(X) • RATBL (Resource Assignment Table) – tabuľka pridelenia prostriedkov
PWTBL (Process Wait Table) – tabuľka procesov čakajúcich na pridelenie prostriedkov • Riadok tabuľky RATBL obsahuje číslo prostriedku a číslo procesu, ktorému je prostriedok pridelený • Položka tabuľky PWTBL obsahuje číslo procesu a potom číslo prostriedku, na ktorý proces čaká
Akonáhle si proces rezervuje alebo uvoľní prostriedok, jadro operačného systému správnym spôsobom pozmení príslušné tabuľky • Akonáhle je požadovaný uzamknutý prostriedok (už si ho rezervoval iný proces), aplikuje sa algoritmus detekcie zablokovania
Algoritmus detekcie zablokovania • Striedavo používa druhú položku jednotlivých tabuliek (pretože tá je stále indexom do tej druhej tabuľky) na detekciu procesov, ktoré navzájom na seba čakajú. Ak sa medzi nimi vyskytne proces, ktorého požiadavka detekciu zablokovania spustila, k zablokovaniu došlo.
Príklad blokády • Proces 1 si žiada prostriedok 2. V RATBL zistíme, že ho má pridelený proces 4. V tabuľke PWTBL sa pozrieme na 4. riadok a zistíme, že proces s číslom 4 čaká na prostriedok 1. Z 1. riadku RATBL zistíme, že prostriedok 1 je používaný procesom 2. Z PWTBL zistíme, že proces 2 čaká na uvoľnenie prostriedku 3. Z RATBL zistíme, že prostriedok 3 už používa náš proces 1
Tabuľky z príkladu • PWTBL RATBL(čakajú) (majú)1 – 2 1 – 22 – 3 2 – 43 – 0 (nečaká) 4 – 1 3 – 1
Zotavenie sa z uviaznutia • Vážny problém • zložitý algoritmus pre návrat vo výpočte až k bodu, kedy bol prostriedok pridelený procesu • Alebo technika kontrolných bodov, ktorá vždy pri pridelení prostriedku ukladá obsahy registrov a celý stav procesu