作業系統複習筆記 二

2021-09-22 12:10:32 字數 4505 閱讀 7007

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 動態分割槽分配演算法...