12.07.2015 Views

Spis treœci - Patrz

Spis treœci - Patrz

Spis treœci - Patrz

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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

then signal(prawa_kolejka)else signal(lewa_kolejka)end else beginif empty(prawa_kolejka)then signal(lewa_kolejka)else signal(prawa_kolejka)endend; {ZWOLNIJ)beginwolny := true;cylinder := C div 2end; {DYSK}4.4.14 Asynchroniczne wejście-wyjścieJeżeli proces żąda wejścia-wyjścia, gdy dysk jest zajęty, to żądanie zapamiętuje się wkolejce żądań do_wykonania. Przebywa tam tak długo, aż zostaną wykonane żądaniawcześniejsze. Żądanie usuwa się z tej kolejki w procedurze PRZERWANIE_WE_WY.Proces wywołujący procedurę CZEKAM_NA_WYKONANIE albo jest wstrzymywany,gdy żądanie jeszcze nie jest wykonane, albo nie, gdy żądanie już zostało wykonane. Żądaniawykonane znajdują się w kolejce po_wykonaniu.Są tam wstawiane w procedurze PRZERWANIE_WE_WY, jeżeli proces, którywygenerował żądanie nie czeka na nie. Sprawdzenie tego faktu odbywa się po ewentualnejinicjacji wykonania kolejnego żądania, — chodzi o to, aby dysk nie był niepotrzebniebezczynny.W rozwiązaniu używa się funkcji i procedur działających na kolejkach żądań. Treścitych funkcji i procedur pomijamy.monitor DYSK;type kolejka_żądań = ...;var KOLEJKA: condition;wolny, czeka: boolean;bieżące, wykonane: par_żądania;do_wykonania, po.wykonaniu: kolejka_żądań;function pusta(k: kolejka_żądań): boolean;{true, gdy kolejka k jest pusta; wpp false}function w_kolejce(ż: par.żądania;k: kolejka.żądań): boolean;{true, gdy żądanie ż jest w kolejce k; wpp false}procedure z_kolejki(ż: param.żądań; k: kolejka_żądań);{usuwa żądanie ż z kolejki k}procedure do_kolejki(ż: param.żądań; k: kolejka_żądań);{wstawia żądanie ż do kolejki k}function pierwsze(k: kolejka.żądań): par_żądania;{dostarcza pierwsze żądanie z kolejki k, usuwając je}export procedure ŻĄDANIE_WE_WY(żądanie: par.żądania);beginif wolny then beginwolny := false;bieżące := żądanie;start_dysk(bieżące)endelsedo_kolejki(żądanie, do.wykonania)end; {ŻĄDANIE_WE_WY>100

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

Saved successfully!

Ooh no, something went wrong!