Operativni Sistemi: DR - Sc. Amer Hasanović

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 26

1

Operativni sistemi dr.sc. Amer Hasanovi

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Pregled predavanja

Semafori (semaphores) Uslovne varijable (condition variables) Monitori Problemi


proizvoai/potroai (producer/consumer) itai/pisai (readers/writers)

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Semafori

Brava je mehanizam za sinhronizaciju koji prioritetno slui za davanje eksluzivnog prava nekoj niti na pristup kritinoj sekciji.

Suvie primitivna za probleme gdje je specifikacija pristupa dijeljenom resursu kompleksnija

Semafor je mehanizam za sinronizaciju vieg nivoa u odnosu na brave

Semafor je u sutini broja sa dvije operacije P() ili wait() ili down()

operacija koja eka da broja postane pozitivan a zatim ga umanjuje za 1. operacija koja inkrementira broja
Univerzitet u Tuzli

V() ili signal() ili up()

Fakultet Eletktrotehnike

Semafori analogije

Semafori su kao cijeli brojevi sem to:


Ne mogu biti negativni Mogue ih je samo inicijalizirati sa nekom vrijednosti. itanje ili postavljanje vrijednosti semafora nakon inicijalizacije nije dozvoljeno Inkrementiranje i dekrementiranje semafora (P i V) moraju biti atomske operacije. Semafor inicijaliziran sa 2
2

Analogija sa eljeznikim semaforom

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Semafori analogije

Semafori su kao cijeli brojevi sem to:


Ne mogu biti negativni Mogue ih je samo inicijalizirati sa nekom vrijednosti. itanje ili postavljanje vrijednosti semafora nakon inicijalizacije nije dozvoljeno Inkrementiranje i dekrementiranje semafora (P i V) moraju biti atomske operacije. Semafor inicijaliziran sa 2
1

Analogija sa eljeznikim semaforom

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Semafori analogije

Semafori su kao cijeli brojevi sem to:


Ne mogu biti negativni Mogue ih je samo inicijalizirati sa nekom vrijednosti. itanje ili postavljanje vrijednosti semafora nakon inicijalizacije nije dozvoljeno Inkrementiranje i dekrementiranje semafora (P i V) moraju biti atomske operacije. Semafor inicijaliziran sa 2
0

Analogija sa eljeznikim semaforom

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Semafori analogije

Semafori su kao cijeli brojevi sem to:


Ne mogu biti negativni Mogue ih je samo inicijalizirati sa nekom vrijednosti. itanje ili postavljanje vrijednosti semafora nakon inicijalizacije nije dozvoljeno Inkrementiranje i dekrementiranje semafora (P i V) moraju biti atomske operacije. Semafor inicijaliziran sa 2
0

Analogija sa eljeznikim semaforom

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Semafori analogije

Semafori su kao cijeli brojevi sem to:


Ne mogu biti negativni Mogue ih je samo inicijalizirati sa nekom vrijednosti. itanje ili postavljanje vrijednosti semafora nakon inicijalizacije nije dozvoljeno Inkrementiranje i dekrementiranje semafora (P i V) moraju biti atomske operacije. Semafor inicijaliziran sa 2
1

Analogija sa eljeznikim semaforom

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Semafori analogije

Semafori su kao cijeli brojevi sem to:


Ne mogu biti negativni Mogue ih je samo inicijalizirati sa nekom vrijednosti. itanje ili postavljanje vrijednosti semafora nakon inicijalizacije nije dozvoljeno Inkrementiranje i dekrementiranje semafora (P i V) moraju biti atomske operacije. Semafor inicijaliziran sa 2
1

Analogija sa eljeznikim semaforom

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Semafori koritenje

10

Iskljuivi pristup odreenom resursu (mutual exclusion)

Binarni semafor inicijaliziran na vrijednost 1 reduciran je na funkcionalnost brave


semafor sem = 1 sem.P() Pristupi resursu sem.V()

Ogranienje prilikom koordinacije niti (scheduling constraint)


Npr ako neka nit eli da eka na zavretak neke druge niti ista treba da pozove funkciju NitCekaj()
semafor sem = 0 NitCekaj(){ sem.P() } NitProbudi(){ sem.V() }

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Implementacija semafora
struct semafor { int vrijednost; queue q; }; void P(semafor* sem) { cli(); //onemoguci interrupte while ( sem->vrijednost == 0 ) blokiraj_nit(sem,trenutna_nit()); sem->vrijednost = sem->vrijednost - 1; sti(); //omoguci interrupte } void V(semafor* sem) { cli(); //onemoguci interrupte sem->vrijednost = sem->vrijednost + 1; if (nije_prazan_red(sem->q)) deblokiraj_nit(sem); sti(); //omoguci interrupte }
Fakultet Eletktrotehnike

11

Univerzitet u Tuzli

Problem proizvoai/potroai

12

Definicija problema:

Proizvoa ubacuje proizvode u red koji ima N mjesta Potroa konzumira bilo uzima element iz reda Proizvoa i potroa rade asinhrono

Proizvoa

...

Potroa

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Problem proizvoai/potroai

13

Definicija problema:

Proizvoa ubacuje proizvode u red koji ima N mjesta Potroa konzumira bilo uzima element iz reda Proizvoa i potroa rade asinhrono

Ubacuje novi element u red Proizvoa E E ... Konzumira prvi u redu Potroa

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Problem proizvoai/potroai

14

Definicija problema:

Proizvoa ubacuje proizvode u red koji ima N mjesta Potroa konzumira bilo uzima element iz reda Proizvoa i potroa rade asinhrono

Proizvoa

E ...

Potroa

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Postavke ispravnosti

15

Ogranienja:

Potroa mora ekati da se neko mjesto u redu popuni sa proizvodom Proizvoa mora ekati na prazno mjesto u redu kako bi ga popunio sa proizvodom Niti jedna nit nee pristupiti redu u isto vrijeme semafor popunjena_mjesta semafor prazna_mjesta semafor brava

Koristiti po jedan semafor za svako ogranienje:


Fakultet Eletktrotehnike

Univerzitet u Tuzli

Rijeenje sa semaforima
semafor* popunjena_mjesta = semafor_init(0); semafor* prazna_mjesta = semafor_init(N); semafor* brava = semafor_init(1); queue niz;

16

void proizvodjac() { while(1) { proizvod p = proizvedi(); P(prazna_mjesta); P(brava); enqueue(niz,p); V(brava); V(popunjena_mjesta); } }

void potrosac() { proizvod p; while(1) { P(popunjena_mjesta); P(brava); p = dequeue(niz)); V(brava); V(prazna_mjesta); konzumiraj(p); } }

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Diskusija

17

Semafori su kao mehanizmi ekspresivniji od brava ali

su neelegantni zato to imaju dvostruku ulogu : koordinacija niti (scheduling) protekcija dijeljenog resursa zbunjujui jer nisu direktno vezani za podatke koje tite

redosljed pozivanja semafor operacija moe izazvati zastoje Potrebna bolja abstrakcija Koristiti brave za protekciju dijeljenog resursa Uslovne varijable za koordinaciju niti

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Sinhronizirani red (verzija 1)


struct Sinh_Red { lock brava; queue q; dodajElement(Element); Element e = ukloniElement(); }; SinhRed::dodajElement(Element e) { brava.Acquire(); q.enqueue(e); brava.Release(); } Element SinhRed::ukloniElement() { brava.Acquire(); Element e = q.dequeue(); brava.Release(); return e; }
Fakultet Eletktrotehnike

18

ta uraditi ako je red prazan?

Univerzitet u Tuzli

Uslovne varijable

19

Uslovna varijabla

Ima niz niti koje ekaju na ispunjenje nekog uslova unutar kritine sekcije.

dozvoljava da nit blokira (spava) unutar kritine sekcije. wait(lock* brava) Nit atomski odputa bravu i blokira (spava) na redu niti uslovne varijable signal() ili notify() Deblokira (budi) jednu nit koja je blokirana na uslovnoj varijabli (ako postoji takva nit) broadcast() ili notifyAll() Deblokira sve niti blokirane na uslovnoj varijabli

Operacije:

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Sinhronizirani red (verzija 2)


struct Sinh_Red { lock brava; queue q; codition element_spreman; dodajElement(Element); Element e = ukloniElement(); }; SinhRed::dodajElement(Element e) { brava.Acquire(); q.enqueue(e); element_spreman.signal(); brava.Release(); } Element SinhRed::ukloniElement() { brava.Acquire(); while( q.isEmpty() ) element_spreman.wait(&brava); Element e = q.dequeue(); brava.Release(); return e; }

20

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Implementacije uslovnih varijabli

21

Na osnovu naina tretiranja signal() poziva postoje dva tipa implementacije:

Hoare

Ukoliko neka nit pozove signal() funkciju, ista odmah blokira i predaje kontrolu niti kojoj je signalizirala a signalizirana nit poinje se odmah izvravati Poziv funkcije signal() prouzrokuje da signalizirana nit pree iz stanja "blocked" u stanje "ready" te se prebacuje na "ready queue". Nit koja je signalizirala dalje nastavlja sa izvoenjem.

Mesa

Mesa je mnogo ee u praktinoj primjeni obzirom da je metodologiju lake implementirati bez znaajne modifikacije ostalih komponenti OS-a.
Univerzitet u Tuzli

Fakultet Eletktrotehnike

Pisai/itai

22

Problem dijeljenog pristupa nekoj centralnoj bazi podataka

itai ele samo da itaju podatke korisnik na bankomatu koji eli uvid u stanje rauna pisai ele da itaju i mijenjaju podatke u bazi slubenica za raunarom u banci koja procesira pristiglu platu za nekog korisnika

Sistem treba da obezbijedi

Istovremeni pristup bazi proizvoljnom broju itaa kada nema pisaa U nekom trenutku samo jedan pisa moe da pristupa bazi

Fakultet Eletktrotehnike

Univerzitet u Tuzli

Algoritam za implementaciju

23

itai

ekaju dok u bazi nema pisaa rade sa bazom pri izalzu signaliziraju pisaima koji ekaju ekaju dok u bazi nema ni pisaa ni itaa rade sa bazom pri izlazu signaliziraju pisaima ili itaima koji ekaju NAP - broj aktivnih pisaa, NAC - broj aktivnih itaa, NCC broj ekajuih itaa, NCP - broj ekajuih pisaa

Pisai

Varijable stanja

Uslovne varijable dozvoljeno_pisanje, dozvoljeno_citanje


Univerzitet u Tuzli

Fakultet Eletktrotehnike

Implementacija

24

void citac() void pisac() { { //preduslov za citanje //preduslov za pisanje brava.acquire(); brava.acquire(); while ( NAP + NCP ) while ( NAP + NAC ) { { ++NCC; ++NCP; dozvoljeno_citanje.wait(); dozvoljeno_pisanje.wait(); --NCC; --NCP; } } ++NAC; ++NAP; brava.release(); brava.release(); //izvrsi citanje //izvrsi pisanje citajpodatake(); pisipodatke(); //signaliziraj cekajucim pisacima //signaliziraj cekajucim pisacima brava.acquire(); //ili citacima --NAC; brava.acquire(); if ( NAC == 0 && NCP > 0 ) --NAP; dozvoljeno_pisanje.signal(); if ( NCP > 0 ) brava.release(); dozvoljeno_pisanje.signal(); } else if( NCC > 0 ) dozvoljeno_citanje.broadcast(); brava.release(); Fakultet Eletktrotehnike Univerzitet u Tuzli }

Monitori

25

Monitor

u programskim jezicima koji ga podravaju omoguava kontrolirani pristup dijeljenim resursima. objedinjuje bravu (protekcija dijeljenog resurse), varijable stanja (dijeljeni resurs), proizvoljan broj uslovnih varijabli i procedure u jednu cijelinu za koje vae pravila:

Zadatak brave

U datom trenutku maksimalno jedna nit u sistemu moe izvravati neku proceduru monitora Maksimalno jedna procedura monitora se izvrava u datom trenutku U bilo kojem trentku unutar procedure monitora nit moe da pozove pozove wait() na nekom uslovu ime prelazi na "blocked queue" uslova.
Univerzitet u Tuzli

Zadatak uslovnih varijabli

Fakultet Eletktrotehnike

Monitori
Varijable stanja monitora

26

... ...
Niti koje ekaju da izvre neki metod monitora

Uslovne varijable monitora

Java podrava koncept monitora na nain:


Niti koje ekaju na ispunjenje nekog uslova

Fakultet Eletktrotehnike

svaki objekat moe sluiti kao monitor nit e izvravati kod u monitoru ako izvrava tijelo metoda monitora koji ima modifikator oznaen kao synchronized Izvrava tijelo bloka koda monitora koji je oznaen kao synchronized Svaki objekat moe da slui kao uslovna varijabla i podrava operacije wait(), notify() i notifyAll() Java kompajler na adekvatna mjesta prilikom kompajliranja ubacuje primitive za sinhronizaciju

Univerzitet u Tuzli

You might also like