12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Żądania w lewej kolejce są uporządkowane malejąco według numerów cylindrów,natomiast w prawej kolejce — rosnąco. Zatem miejsce żądania przy wstawianiu do prawejkolejki jest określone po prostu numerem żądanego cylindra. Jeżeli chcemy zastosować tensam mechanizm do wstawiania żądań do obu kolejek, to w przypadku żądań wstawianych dolewej kolejki właściwą kolejność osiągniemy podając różnicę liczby cylindrów dysku i numerużądanego cylindra.Wstawianie procesu do kolejki k (wstrzymywanie procesów) w miejsce określone liczbącałkowitą p realizuje operacja wait(k.p). Procesy w kolejce są uporządkowane ze względu narosnące wartości liczb, podawanych przy operacji wstrzymywania. Zatem liczby te możemyinterpretować jako priorytet procesu przy operacji wznowienia. Jeżeli liczba jest taka sama dlawielu procesów, to o kolejności procesów decyduje kolejność wstrzymania, tak jak przystandardowej operacji wait.Prezentowane rozwiązanie, którego autorem jest Hoare [Hoar74] zaczerpnięto z książki[Ma0087].monitor DYSK;const C = ?;var wolny: boolean;cylinder: l..C;kierunek: (lewy, prawy);lewa.kolejka, prawa_kolejka: condition;export procedure PRZYDZIEL(żądanie: par_żądania);beginif not wolny thenif żądanie.cylinder < cylinder orżądanie.cylinder = cylinder and kierunek = lewythen wait(lewa_kolejka, C-żądanie.cylinder)else wait(prawa_kolejka, żądanie.cylinder);cylinder := żądanie.cylinder;wolny := falseend; {PRZYDZIEL}export procedure ZWOLNI J.beginwolny := true;if kierunek = lewy then beginif empty(lewa_kolejka)then beginkierunek := prawy;signal(prawa_kolejka)endelse signal(lewa_kolejka)end else beginif empty(prawa_kolejka)then beginkierunek := lewy;signal(lewa_kolejka)endelse signal(prawa_kolejka)endend; {ZWOLNIJ}beginwolny := true;kierunek := lewy;cylinder := C div 2end; {DYSK}98

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!