1.問答題:有乙個檔案f,有a,b兩組程序共享這個檔案,同組的程序可以同時讀檔案f,但當有a組(或b組)的程序在讀檔案f時就不允許b組(或a組)的程序讀,
解:定義兩個計數器c1,c2,分別記錄a組和b組中讀檔案的程序數,三個訊號量s1,s2,sab,其中s1用於通知a組程序已經有b組程序在讀檔案f了,s2用於通知b程序已經有a程序在讀檔案f了,sab用於實現對共享變數c1和c2以及臨界區的互斥訪問.
begin
var s1,s2,sab:semaphore = 1,1,1;
c1,c2:integer = 0,0;
process a-i(i=1,2)
begin
repeat
p(sab);
c1 = c1+1;
if(c1=1) then p(s2);
v(sab);
讀檔案f;
p(sab)
c1 = c1-1;
if(c1==0)v(s2)
v(sab)
until false
end
process b-i(i=1,2)
begin
repeat
p(sab);
c2 = c2+1;
if(c2=1) then p(s1);
v(sab);
讀檔案f;
p(sab)
c2 = c2-1;
if(c2==0)v(s1)
v(sab)
until false
end
end
2,應用題:get程序讀資料到buffer1裡,然後程序copy從buffer1裡的資料複製到buffer2裡,再由put程序取出buffer2裡的資料去進行列印.
分析:這是兩個階段的生產-消費問題.第一階段的生產者和消費者是get和copy,第二階段的生產者和消費者是copy和put.為簡單計,假設buffer1,buffer2 都是單緩衝區,因此只要設4個訊號量empty1,full1,empty2,full2,就可以了.
begin
buffer:integer
empty1,empty2,full1,full2,:semaphore=1,1,0,0;
cobegin
process get
begin
repeat
讀資料p(empty1);
把資料放到buffer1裡
v(full1);
until false
endprocess copy
begin
repeat
p(full1)
從buffer1裡讀出資料
v(empty1);
p(empty2)
把資料放到buffer2裡
v(full2)
until false
endprocess put
begin
repeat
p(empty2)
從buffer2裡讀出資料
v(full2);
列印資料
until false
endcoend
end3.輸入程序輸入資料到緩衝區buffer1中,計算程序從buffer1中讀出資料進行計算,並把結果送入buffer2,然後列印程序從buffer2中讀出結果進行列印.假設緩衝區大小分別為n1和n2.
begin
buffer:integer
empty1,empty2,full1,full2,mutex1,mutex2:semaphore=n1,n2,0,0,1,1;
cobegin
process input
begin
repeat
輸入資料
p(empty1);
p(mutex1);
把資料放到buffer1裡
v(mutex1);
v(full1);
until false
endprocess compute
begin
repeat
p(full1)
p(mutex1);
從buffer1裡讀出資料
v(mutex1);
v(empty1);
p(empty2)
p(mutex2);
把資料放到buffer2裡
v(mutex2);
v(full2);
until false
endprocess print
begin
repeat
p(empty2)
p(mutex2);
從buffer2裡讀出資料
v(full2);
v(full2);
列印資料
until false
endcoend
end4.過橋問題.
(1)橋每次只能有一輛車通過,
(2)不允許兩車交會,但允許同方向的多輛車依次通過
解:(1)
begin
mutex:semaphore=1;
cobegin
process scar//南邊來的車
begin
come;
p(mutex);
過橋;v(mutex);
go;end
process ncar//北邊來的車
begin
come;
p(mutex);
過橋;v(mutex);
go;end
coend
end(2)
begi
var smutex=1,nmutex=1,mutex=1:semaphore;
scarcount=0,ncarcount=0:integer;
cobegin
process scari(i=1,2)
begin
p(smutex);
if(scarcount=0) then p(mutex);
scarcount = scarcount +1;
v(smutex);
過橋;p(smutex);
scarcount = scarcount -1;
if(scarcount=0) then v(mutex);
v(smutex);
endprocess ncarj(j=1,2)
begin
p(nmutex);
if(ncarcount=0) then p(mutex);
ncarcount = ncarcount +1;
v(nmutex);
過橋;p(nmutex);
ncarcount = ncarcount -1;
if(ncarcount=0) then v(mutex);
v(nmutex);
endcoend
end5.在管道通訊機制中,用訊號量描述讀程序和寫程序訪問管道檔案的過程,假設管道檔案大小為10kb.
分析:在unix系統中,利用乙個開啟的共享檔案來連線兩個相互通訊的程序,這個共享檔案叫管道.作為管道輸入的傳送程序,以字元流的形式將資訊送入管道,而作為管道輸出的接收程序,從管道中獲取資訊.管道通訊機制要提供三方面的協調能力:(1)互斥.當乙個程序對管道進行讀/寫操作時,另乙個程序必須等待.(2) 同步.當寫程序把資料寫入管道後便去睡眠等待,直到輸出程序取走資料後喚醒它.若一次寫入的資料超過緩衝區剩餘空間的大小,當緩衝區滿時,寫程序必須阻塞,並喚醒讀程序。(3)對方是否存在.只有確定對方存在時,才能夠進行通訊.
本題只需要考慮互斥,同步問題。由於只有一對程序訪問管道,因此不需要設定互斥訊號量,只要設定兩個同步訊號量empty,full.分別表示管道可寫和可讀.
begin
pipe:array[09] of kilobytes;
ts=10,length,in=0,out=0:integer;
empty,full:semaphore=1,0;
cobegin
process pipewriter
begin
repeat
產生資料;
p(empty);
length = data length;
while(length>0 and ts>0)
begin
pipe[in] = data of 1kb;
in = (in+1) mod n;
ts = ts-1;
length = length - 1;
endv(full);
endprocess consumer
begin
repeat;
p(full);
從緩衝區取出一件物品;
out = (out+1) mod n;
ts = ts +1;
v(empty);
endcoend
end
作業系統複習筆記
定義 管理系統資源 控制程式執行 改善人機介面 提供各種服務,並合理組織計算機工作流程和為使用者方便有效的使用計算機提供良好執行環境的一種系統軟體。功能 處理器管理 儲存管理 裝置管理 檔案管理 聯網和通訊管理 特性 併發性 共享性 1.透明資源共享 2.獨佔資源共享 非同步性 分類 批處理作業系統...
作業系統複習筆記(三)
一 虛擬記憶體中的置換策略 移除認為最不可能用到的頁 1 基本演算法 opt 最佳 置換下次訪問距當前距離最長的頁 理想狀態 lru 最近最少使用 fifo 先進先出 clock 時鐘 類似於時鐘迴圈,每個頁都擁有乙個迴圈的判斷是否可修改的時間 時鐘策略 乙個附加位 類似於指標,位址位 附加位從第乙...
作業系統複習筆記2
1 第四章 儲存器管理 2 第五章 虛擬儲存器 3 第六章 輸入輸出系統 4 第七章 檔案管理 參考 計算機作業系統 第四版 湯小丹 梁紅兵 哲鳳屏 湯子瀛 西安電子科技大學出版社出版 一 第四章 儲存器管理 1 計算機系統儲存層次 p120 p122 計算機的儲存層次如下 2 動態分割槽分配演算法...