目錄
一、 P、V操作 1
二、 銀行家問題 15
三、 頁面置換算法 23
四、 磁盤調度 28
五、 邏輯地址轉換物理地址 30
六、 進程狀態轉換 33
七、 作業調度 34
一、P、V操作
1、在南開大學和天津大學之間有一條彎曲的小路,其中從 S 到 T 一段路每次只允許一輛自行車通過,但中間有一個小的“安全島” M (同時允許兩輛自行車停留),可供兩輛自行車已從兩端進小路情況下錯車使用,如圖所示。試設計一個算法使來往的自行車均可順利通過。
答:首先中間的安全島 M 僅允許兩輛自行車通過,應作為臨界資源設置信號量。但仔細分析發現,在任何時刻進入小路的自行車最多不會超過兩輛(南開和天大方向各一輛),因此不需為安全島 M 設置信號量。在路口 S 處,南開出發的若干輛自行車應進行路口資源的爭奪,以決定誰先進入小路 SK 段,為此設置信號量 S ,用以控制路口資源的爭奪;同理,設置信號量 T ,控制天大方向自行車對路口 T 的爭奪。又小路 SK 段僅允許一輛車通過,設置信號量 SK 初值為 1 ,同理設置小路 LT 段信號量 LT 初值為 1 。
程序如下:
S : = l; T : =1; SK := 1; LT : =1 ;
Parbegin
進程 P: (南開方向自行車)
begin
P(S) ; { 與其它同方向的自行車爭奪路口 S}
P(SK); {同對面自行車爭奪路段 SK }
通過 SK;
進入 M ; **
V (SK); {一旦進入 M ,便可釋放路段 SK }
P (LT) ; { 同對面的自行車爭奪路段 LT}
通過 LT;
V (LT) ;{將路段 LT 釋放}
V(S); {將路口 S 釋放給同方向的正在路口 S 處等待的自行車}
end ,
進程 Q: (天大方向自行車)
begin
P(T) ;
P(LT) ;
通過 LT;
進入 M;
V(LT) ;
P(SK) ;
通過 SK;
V(SK) ;
V(T) ;
End ;
Parend 。
說明:
P 進程進入安全島 M 后,釋放了路段 SK ,但沒有釋放路口 S ,原因在於它是向對面的 4 進程釋放路段資源 SK ,而在 P 進程離開小路 LT 后,才會將路口 S 釋放給其他 P 進程,如不這樣,就會死鎖。請考慮如下情況:兩個方向各有一輛車前進,若在 P 進程到達安全島 M 后,執行 V (S) 及 V (SK) 操作,則有可能使得同方向的其它 P 進程得到路段 SK 的使用權,而進入小路;同理, Q 進程到達安全島后執行 V (LT) 及 V (T) 操作,有可能使得同方向的其它 Q 進程得到路段 LT 而進入小路。此時共有四輛車在整個路徑中,最終出現死鎖狀態。
2、某寺廟,有小、老和尚若干,有一水缸,由小和尚提水 入 缸(向缸中倒水)供老和尚飲用。水缸可容 10 桶水,水取自同一井中。水井徑窄,每次只能容一個捅取水。水桶總數為 3 個。每次人、取缸水僅為 1 桶,且不可同時進行。試給出有關從缸中取水和向缸中倒水的算法描述。
答:應首先考慮清楚本題需要幾個進程。從井中取水后向缸中倒水為連續動作,可算同一進程,從缸中取水為另一進程。
再考慮信號量.有關互斥的資源有水井(一次僅一個水桶進出)和水缸(一次入、取水為一桶),分別為之設信號量 mutexl , mutex2 控制互斥;
另有同步問題存在:三個水桶無論從井中取水還是人出水缸都是一次一個,應為之設信號量 count ,搶不到水桶的進程只好等待;還有水缸滿時,不可人水,設信號量 empty 控制入水量.水缸空時不可出水,設信號量 full ,控制出水量。
mutexl := 1 ; mutex 2 : = 1; empty: = 10; full := 0 ; count := 3;
parbegin
入水 : begin
Ll: P(empty) ;
P( count) ;
P (mutexl) ;
從井中取水;
V(mutext1);
P(mutex2);
送入水缸;
V(mutex2);
V(count);
V(full) ;
Goto Ll ;
End;
取水: begin
L2: P(full) ;
P(count);
P(mutex2) ;
從缸中取水;
V (mutex2) ;
V(empty);
V(count) ;
Goto L2 ;
End;
Parend.
3、桌子上有一只盤子,最多可容納兩個水果,每次只能放 入 或取出一個水果。爸爸專向盤子中放蘋果( apple ),媽媽專向盤子中放橘子( orange ),兩個兒子專等吃盤子中的橘子,兩個女兒專等吃盤子中的蘋果。請用 P, V 操作來實現爸爸、媽媽、兒子、女兒之間的同步與互斥關系。
答:盤子為互斥資源,因可以放兩個水果, empty 初值為 2; father 放蘋果前先看看有無空間,若有則搶盤子,放 apple 。后向女兒發信號( V (apple) ) ; mother 放橘子前先看看有無空間,若有則搶盤子,放橘子后向兒子發信號( V (orange) );女兒先看有無蘋果,若有則搶盤子,取走蘋果后將盤子置空( V (empty) );兒子先看有無橘子,若有則搶盤子,取走橘子后將盤子置空。
該題是生產者/消費者問題的變形,有兩對生產者和消費者。生產者需指明是給哪個消費者的產品,但消費者取走產品后無須特別通知某個生產者,因為空出的緩沖區(盤子)可由兩個生產者隨意爭奪。
設信號量 mutex 初值為 1 ,控制對盤子的互斥訪問; apple 表示盤中蘋果個數, orange 表示盤中橘子個數,初值均為 0.
parbegin
father:
begin
Ll : P( empty) ;
P(mutex ) ;
放蘋果;。
V (mutex) ;
V(apple) ;
Goto Ll ;
End;
mother:
begin
L2: P(empty) ;
P(mutex) ;
放橘子;
V (mutex ) ;
V(orange) ;
Coto L2;
End;
daughter:
begin
L3: P(apple) ;
P(mutex) ;
取蘋果
V (mutex) ;
V(empty) ;
Goto L3 ;
End;
son:
begin
L4: P(orange);
P(mutex) ;
取橘子
V (mutex) ;
V (empty) ;
Goto L4 ;
End;
Parend
4、在 4 × 100 米 接力賽中, 4 個運動員之間存在如下關系,運動員 1 跑到終點把接力棒交給運動員 2 ;運動員 2 一開始處於等待狀態,在接到運動員 1 傳來的接力棒后才能往前跑,他跑完 100 米 后交給運動員 3 ,運動員 3 也只有在接到運動員 2 傳來的棒后才能跑,他跑完 100 米 后交給運動員 4 ,運動員 4 接到棒后跑完全程。請試用信號量機制對其上過程進行分析。
答:P1: P2: P(Sl); P3: P(S2); P4: P(S3);
起跑,前進 l 00m ; 起跑,前進 l 00m ; 起跑,前進 l 00m ; 起跑,前進 l 00m ;
V(S1); V(S2); V(S3) ; 到達終點。
5、在公共汽車上,司機和售票員各行其職,司機負責開車和到站停車;售票員負責售票和開、關車門;當售票員關好車門后駕駛員才能開車行駛。試用 wait 和 signal 操作實現司機和售票員的同步。
問題描述:設公共汽車上,司機和售票員的活動分別如下:司機的活動:啟動車輛:正常行車;到站停車。售票員的活動:關車門;售票;開車門。在汽車不斷地到站、停車、行駛過程中,這兩個活動有什么同步關系?用信號量和 P 、 V 操作實現它們的同步。
問題分析:
在汽車行駛過程中,司機活動與售票員活動之間的同步關系為:售票員關車門后,向司機發開車信號,司機接到開車信號后啟動車輛,在汽車正常行駛過程中售票員售票,到站時司機停車,售票員在車停后開門讓乘客上下車。因此,司機啟動車輛的動作必須與售票員關車門的動作取得同步;售票員開車門的動作也必須與司機停車取得同步。應設置兩個信號量: S1 、 S2 ;
S1 表示是否允許司機啟動汽車(其初值為 0 )
S2 表示是否允許售票員開門(其初值為 0 )
用 P 、 v 原語描述如下:
The P,V code Using Pascal
var S1,S2 : semaphore ;
S1=0 ; S2=0 ;
cobegin
procedure driver
begin
while TRUE
begin
P(S1);
Start;
Driving;
Stop;
v(S2);
end
end
procedure Conductor
begin
while TRUE
begin
關車門;
v(s1);
售票;
p(s2);
開車門;
上下乘客;
end
end
Coend
6、有一只鐵籠子,每次只能放入一只動物,獵手向籠子里放入老虎,農民向籠子里放入豬;動物園等待取籠子里的老虎,飯店等待取籠子里的豬。現請用 wait 和 signal 操作寫出能同步執行的程序。
var Sempty, Stiger, Spig,: semaphore:= 1,0,0;
begin
parbegin
Hunter: begin
repeat
wait(Sempty);
<put tiger in cage>;
signal(Stiger);
until false;
end;
Farmer: begin
repeat
wait(Sempty);
<put pig in cage>;
signal(Spig);
until false;
end;
Zoo: begin
repeat
wait(Stiger);
<take tiger>;
signal(Sempty);
until false;
end;
Hotel: begin
repeat
wait(Spig);
<take pig>;
signal(Sempty); until false;
end;
parend;
end;
7、假設有 3 個並發進程 P , Q , R ,其中 P 負責從輸入設備上讀入信息,並傳送給 Q,Q 將信息加工后傳送給 R , R 負責打印輸出。進程 P , Q 共享一個有 m 個緩沖區組成的緩沖池;進程 Q , R 共享一個有 n 個緩沖區組成的緩沖池(假設緩沖池足夠大,進程間每次傳輸信息的單位均小於等於緩沖區長度),請寫出滿足上述條件的並發程序。
答: var mutex1,mutex2,Sip,Siq,Soq,Sor:semaphore:=1,1,m,0,n,0;
begin
parbegin
Process P
begin
repeat
< 讀入信息 >
wait(Sip);
wait(mutex1);
< 數據放入緩沖區 >
signal(mutex1);
signal(Siq);
until false
end;
Process Q
begin
repeat
wait(Siq);
wait(mutex1);
< 從緩沖區中取出數據 >
signal(mutex1);
signal(Sip);
< 數據處理〉
wait(Soq);
wait(mutex2);
< 處理后的數據放入緩沖區 >
signal(mutex2);
signal(Sor);
until false
end;
Process R
repeat
wait(Sor);
wait(mutex2);
< 把數據送入打印機完成打印 >;
signal(mutex2);
signal(Soq);
until false
end
parend
End
8、理發店里有一位理發師,一把理發椅和 n 把供等候理發的顧客坐的椅子。如果沒有顧客,理發師便在理發椅上睡覺,當一個顧客到來時,他必須先叫醒理發師,如果理發師正在理發時又有顧客來到,則如果有空椅子可坐,他們就坐下來等 ; 如果沒有空椅子,他就離開。
1) 控制變量 waiting 用來記錄等候理發的顧客數,初值均為 0 ;
2) 信號量 customers 用來記錄等候理發的顧客數,並用作阻塞理發師進程,初值為 0 ;
3) 信號量 barbers 用來記錄正在等候顧客的理發師數,並用作阻塞顧客進程,初值為 0 ;
4) 信號量 mutex 用於互斥,初值為 1
int waiting=0 ; // 等候理發的顧客數
int chairs=n ; // 為顧客准備的椅子數
semaphore customers=0, barbers=0,mutex=1;
cobegin
barber()
begin
while(TRUE); // 理完一人 , 還有顧客嗎 ?
P(cutomers); // 若無顧客 , 理發師睡眠
P(mutex); // 進程互斥
waiting := waiting – 1; // 等候顧客數少一個
V(barbers); // 理發師去為一個顧客理發
V(mutex); // 開放臨界區
cut-hair( ); // 正在理發
end
customer()
begin
P(mutex); // 進程互斥
if (waiting)
begin
waiting := waiting+1; // 等候顧客數加 1
V(customers); // 必要的話喚醒理發師
V(mutex); // 開放臨界區
P(barbers); // 無理發師 , 顧客坐着養神
get-haircut( ); // 一個顧客坐下等理 /
end
else
V(mutex); // 人滿了 , 走吧 !
end
Coend
9、有一閱覽室,共有 100 個座位。讀者進入時必須先在一種登記表上登記,該表為每一座位列一個表目,包括座號和讀者姓名。讀者離開時要注銷掉登記內容。試用 wait 和 signal 原語描述讀者進程的同步問題。
var mutex, readcount :semaphore := 1,100;
Begin
Parbegin
Process Reader:begin
repeat
wait(readcount);
wait(mutex);
< 填入座號和姓名完成登記 > ;
signal(mutex);
< 閱讀 >
wait(mutex)
< 刪除登記表中的相關表項,完成注銷 >
signal(mutex);
signal(readcount);
until false;
end;
parend;
End;
10、假定系統有三個並發進程read, move和print共享緩沖器B1和B2。進程read負責從輸入設備上讀信息,每讀出一個記錄后把它存放到緩沖器B1中。進程move從緩沖器B1中取出一記錄,加工后存入緩沖器B2。進程print將B2中的記錄取出打印輸出。緩沖器B1和B2每次只能存放一個記錄。要求三個進程協調完成任務,使打印出來的與讀入的記錄的個數,次序完全一樣。請用PV操作,寫出它們的並發程序。
答:begin SR,SM1,SM2,SP:semaphore;
B1,B2:record;
SR:=1;SM1:=0;SM2:=1;SP:=0
cobegin
process read
X:record;
begin R: (接收來自輸入設備上一個記錄)
X:=接收的一個記錄;
P(SR);
B1:=X;
V(SM1);
goto R;
end;
Process move
Y:record;
begin
M:P(SM1);
Y:=B1;
V(SR)
加工 Y
P(SM2);
B2:=Y;
V(SP);
goto M;
end;
Process print
Z:record;
begin
P:P(SP);
Z:=B2;
V(SM2)
打印Z
goto P;
end;
coend;
11、某車站售票廳,任何時刻最多可容納20名購票者進入,當售票廳中少於20名購票者時,則廳外的購票者可立即進入,否則需在外面等待。若把一個購票者看作一個進程,請回答下列問題:
(1)用PV操作管理這些並發進程時,應怎樣定義信號量,寫出信號量的初值以及信號量各種取值的含義。
(2)根據所定義的信號量,把應執行的PV操作填入下述方框中,以保證進程能夠正確地並發執行。
COBEGIN PROCESS PI(I=1,2,……)
begin ;
進入售票廳;
購票;
退出;
end;
COEND
(3)若欲購票者最多為n個人,寫出信號量可能的變化范圍(最大值和最小值)。
答:(1)定義一信號量S,初始值為20。
意義:
S>0 S的值表示可繼續進入售票廳的人數
S=0 表示售票廳中已有20名顧客(購票者)
S<0 |S|的值為等待進入售票廳的人數
(2)上框為P(S)
下框為V(S)
(3)S的最大值為20
S的最小值為20-n
注:信號量的符號可不同(如寫成t),但使用時應一致(即上述的s全應改成t)。
12、桌子有一個盤子,每次只能放入一個水果,爸爸專向盤中放蘋果,媽媽專向盤中放桔子,女兒專等吃盤中的蘋果,兒子專等吃盤中的桔子,試用P,V操作寫出他們能正確同步的並發過程。
答:設公用信號量S=1表示盤子,私用信號量S1=0表示蘋果,私用信號量S2=0表示桔子。他們能正確同步的並發過程如下:
爸爸P1 媽媽P2 女兒P3 兒子P4
P(S) P(S) P(S1) P(S2)
放蘋果 放桔子 取蘋果 取桔子
V(S1) V(S2) V(S) V(S)
13、用P、V操作說明互斥量,寫出司機與售票員之間的同步算法。司機和售票員活動如下圖所示。
答:司機和售票員之間有這樣的同步關系:司機開車后,則售票員賣票,車到站時,司機先停車,售票員再開門,乘客下、上車結束以后,售票員關門,關好門、司機再開車.
解法 開車與開門是互斥的,停車與賣票是互斥的,用S1表示停車的狀態,S1≥0時,車為停車狀態允許開門,否則不允許開門,用S2表示關門的狀態,S2≥0時,關好門狀態,此時允許開車。下圖表示司機與售票員之間利用P、V的同步算法。
14、假定一個閱覽室可供50個人同時閱讀。讀者進入和離開閱覽室時都必須在閱覽室入口處的一個登記表上登記,閱覽室有50個座位,規定每次只允許一個人登記或注銷登記。
要求:(1)用PV操作描述讀者進程的實現算法(可用流程圖表示,登記、注銷可用自然語言描述);
(2)指出算法中所用信號量的名稱、作用及初值。
S1:閱覽室可供使用的空座位,其初值為50
S: 是否可通過閱覽室,其初值為1
Process READ_in(i=1…50)
{
到達閱覽室入口處;
P(S1);P(S);
在入口處登記座位號;
V(s);
進入座位並閱讀;
}
Process READ_out(j=1…50)
{
結束閱讀到達閱覽室入中處;
P(S);
在入口處注銷座位號;
V(S1);V(S);
離開入口處;
}
二、銀行家問題
1、設系統中有三種類型的資源(A,B,C)和五個進程(P1,P2,P3,P4,P5),A資源的數量17,B資源的數量為5,C資源的數量為20。在T0時刻系統狀態如下表所示。系統采用銀行家算法來避免死鎖。請回答下列問題:
(1)T0時刻是否為安全狀態?若是,請給出安全序列。
(2)若進程P4請求資源(2,0,1),能否實現資源分配?為什么?
(3)在(2)的基礎上,若進程P1請求資源(0,2,0),能否實現資源分配?為什么?
T0時刻系統狀態
進程 |
最大資源需求量 |
已分配資源量 |
系統剩余資源數量 |
||||||
A |
B |
C |
A |
B |
C |
A |
B |
C |
|
P1 |
5 |
5 |
9 |
2 |
1 |
2 |
2 |
3 |
3 |
P2 |
5 |
3 |
6 |
4 |
0 |
2 |
|
|
|
P3 |
4 |
0 |
11 |
4 |
0 |
5 |
|
|
|
P4 |
4 |
2 |
5 |
2 |
0 |
4 |
|
|
|
P5 |
4 |
2 |
4 |
3 |
1 |
4 |
|
|
|
答:(1)T0時刻為安全狀態。其中的一個安全序列為(P4,P5,P3,P2,P1)
(其他可能的安全序列有:(P4,P5,X,X,X),(P4,P2,X,X,X),(P4,P3,X,X,X),(P5,X,X,X,X))
(2)可以為P4分配資源,因為分配后的狀態還是安全的,其安全序列的分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
2,3,3 |
分配給P4:(2,0,1) |
0,3,2 |
|
|
P4 |
0,3,2 |
0,2,0 |
4,0,5 |
4,3,7 |
True |
P5 |
4,3,7 |
1,1,0 |
3,1,4 |
7,4,11 |
True |
P1 |
7,4,11 |
3,4,7 |
2,1,2 |
9,5,13 |
True |
P2 |
9,5,13 |
1,3,4 |
4,0,2 |
13,5,15 |
True |
P3 |
13,5,15 |
0,0,6 |
4,0,5 |
17,5,20 |
True |
(3)進程P1再請求資源(0,2,0),則不能為之分配資源。因為分配資源后,不存在安全序列,其分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
0,3,2 |
分配給P1:(0,2,0) |
0,1,2 |
|
|
P4 |
|
0,2,0 |
此時,WORK不能滿足任何一個進程的請求使之運行結束,即進入了不安全狀態。 |
False |
|
P5 |
|
1,1,0 |
False |
||
P1 |
|
3,2,7 |
False |
||
P2 |
|
1,3,4 |
False |
||
P3 |
|
0,0,6 |
False |
2、某系統有A 、B 、C 類型的3種資源,在T0時刻進程P1、P2、P3、P4對資源的占用和需求情況見下表。此刻系統可用資源向量為(2,1,2)。問:
(1)將系統中各種資源總數和進程對資源的需求數目用向量或矩陣表示出來。(2)判定此刻系統的安全性。如果是安全的,寫出安全序列,如果是不安全的,寫出參與死鎖的進程。
(3)如果此時P1和P2均再發出資源請求向量Request (1,0,1),為了保持系統安全性,應該如何分配資源給這兩個進程?說明你所采用策略的原因。
(4)如果(3)中的請求都立刻滿足后,系統此刻是否處於死鎖狀態?最終能否進入死鎖狀態?若能,說明參與死鎖的進程,若不能,說明原因。解:(1)系統資源總數向量=available+Allocation =(2,1,2)+(7,2,4)=(9,3,6)進程對資源的需求矩陣
答:(1)1004112110
2
3226133144
2
2
P1P2P2P4
A B C A B C 已分配資源
Allocation
最大需求量max
資源
請求進程2222021034
2
need=max -Allocation=322
613
314422
1004112110
2
—=
(2)采用銀行家算法進行計算步驟如下:
work=(2,1,2)
finish=(false,false,false,false)
①因為:need[2]<available,故
系統可以滿足P2對資源的請求,將資源分配給P2后,P2可執行完成,然后釋放它所占有的資源。因此,
finish[2]=true;
work=work+allocation[2]=(2,1,2)+(4,1,1)=(6,2,3)
②此時,need[1]<work,故:
P1可執行完成。finish[1]=true;
work=work+allocation[1]=(6,2,3)+(1,0,0)=(7,2,3)
③此時,need[3]<work,故:
P3可執行完成。finish[3]=true;
work=work+allocation[3]=(7,2,3)+(2,1,1)=(9,3,4)
④此時,need[4]<work,故:
P4可執行完成。finish[4]=true;
work=work+allocation[4]=(9,3,4)+(0,0,2)=(9,3,6)
結論:
系統至少可以找到一個安全的執行序,如(P2,P1,P3,P4)可使各進程正常運行終結。
(3)系統不能將資源分配給進程P1,因為雖然可利用資源還可以滿足進程P1現在的需求,但是一旦分配給進程P1后,就找不到一個安全執行的序列保證各進程能夠正常運行終結。所以進程P1應該進入阻塞狀態。
(4)系統滿足進程P1和P2的請求后,沒有立即進入死鎖狀態,因為這時所有進程沒有提出新的資源申請,全部進程均沒有因資源沒有得到滿足而進入阻塞狀態。只有當進程提出資源申請且全部進程都進入阻塞狀態時,系統才處於死鎖狀態。但最終會進入死鎖狀態。
3、某系統有同類資源m個,n個並發進程可共享該類臨界資源。求:每個進程最多可申請多少個該類臨界資源,保證系統一定不會發生死鎖。
解:設每個進程最多申請該類資源的最大量為x。
每個進程最多申請x個資源,則n個進程最多同時申請的該類臨界資源數為:n*x。
為保證系統不會發生死鎖,應滿足下列不等式:
n(x-1)+1≤m(*)
則系統一定不會發生死鎖。這是因為進程最多申請x個資源,最壞的情況是每個進程都已得到了(x-1)個資源,現均申請要最后一個資源。只要系統至少還有一個資源就可使其中一個或幾個進程得到所需的全部資源,在它們執行結束后歸還的資源可供其他進程使用,因而不可以發生死鎖。
解不等式(*),可得:
x≤1+[(m-1)/n]
即:x的最大值為1+[(m-1)/n]。因而,當每個進程申請資源的最大數值為1+[(m-1)/n]時,系統肯定不會發生死鎖。
4、設系統中有3中類型的資源(A,B,C )和5個進程P1、P2、P3、P4、P5,A 類資源的數目為17,B 類資源的數目為5,C 類資源的數目為20。在T 0時刻系統狀態如下表所示。系統采用銀行家算法實施死鎖避免策略。
(1)T 0時刻是否為安全狀態?若是,給出安全序列。
(2)若在T 0時刻進程P2請求資源(0,3,4),是否能實施資源分配?為什么?(3)在(2)的基礎上,若進程P4請求資源(2,0,1),是否能實施資源分配?為什么?
(1)由題目所給出的最大資源需求量和已分配的資源數量,可以計算出T 0時刻各進程的資源需求量Need ,Need =Max-Allocation ,利用銀行家算法對T 0時刻0T 0時刻的狀態是安全的。(6分)
(2)若在T 0時刻進程P2請求資源(0,3,4),因請求資源數(0,3,4)大於剩余資源數(2,3,3),所以不能分配。(2分)
(3)在(2)的基礎上,若進程P4請求資源(2,0,1),按銀行家算法進行檢查:
P4請求資源(2,0,1)<=P4需求資源(2,2,1)P4請求資源(2,0,1)<=剩余資源數(2,3,3)
試分配並修改相應的數據結構,由此形成的資源分配情況如下表所示:
此時,如題(1)利用銀行家算法檢查系統的安全狀態,存在一個安全序列{P4、P5、P3、P2、P1},故該狀態是安全的,可以立即將P4請求的資源分配給它。
5、某系統有同類資源m個,n個並發進程可共享該類臨界資源。求:每個進程最多可申請多少個該類臨界資源,保證系統一定不會發生死鎖。
解:設每個進程最多申請該類資源的最大量為x。
為保證系統不會發生死鎖,應滿足下列不等式:
n(x-1)+1≤m(*)
解不等式(*),可得:
x≤1+[(m-1)/n]
即:x的最大值為1+[(m-1)/n]。因而,當每個進程申請資源的最大數值為1+[(m-1)/n]時,系統肯定不會發生死鎖。
某系統中有5個並發進程,都需要同類資源3個,試問該系統不會發生死鎖的最少資源數是(11)。
某系統中有4個並發進程,都需要同類資源3個,試問該系統不會發生死鎖的最少資源數是(9)。
某計算機系統中有8台打印機,有K個進程競爭使用,每個進程最多需要3台打印機.該系統可能會發生死鎖的K的最小值是(4)
系統中有3個進程,每個進程需2台打印機,如果系統配有4台打印機,則系統______不可能________出現死鎖的情況(本題要判斷出現死鎖的可能性:可能或不可能)。
若系統運行中出現如下表所示的資源分配情況,該系統是否安全?若是,給出安全序列;如果進程P2此時提出資源申請(1,2,2,2),系統能否將資源分配給它?為什么?
答:(1)利用安全性算法對此刻的資源分配情況進行如下表的安全性檢:
(2)P2請求資源(1,2,2,2)<=P2需求資源(2,3,5,6)&<=剩余資源數(1,6,2,2)
此時,可利用資源(0,4,0,0)已不能滿足任何進程的需要,故系統進入不安全狀態,故不能將資源分配給P2。
資源分配圖。系統死鎖可以利用資源分配圖來描述。該圖是由一組方框、圓圈和一組箭頭線組成的,
(1)資源分配圖。資源分配圖采用圖素的含義分別是:
方框:表示資源。有幾類資源就畫幾個方框,方框中的小圓圈表示該類資源的個數。當個數較大時可以在方框內用阿拉伯數字表示。
圓圈:表示進程。有幾個進程就畫幾個圓圈,圓圈內標明進程名稱。
箭頭線:表示資源的分配與申請。由方框指向圓圈的箭頭線表示資源的分配線,由圓圈指向方框的箭頭線表示資源的請求線。
(2)死鎖定理。在死鎖檢測時,可以利用把資源分配圖進行簡化的方法來判斷系統當前是否處於死鎖狀態。具體方法如下:
①在資源分配圖中,找出一個既非阻塞又非孤立的進程結點Pi。如果Pi 可以獲得其所需要的資源而繼續執行,直至運行完畢,就可以釋放其所占用的全部資源。這樣,就可以把Pi所有關連的資源分配線和資源請求線消去,使之成為孤立的點。
②重復進行上述操作。在一系列的簡化后,如果消去了資源分配圖中所有的箭頭線,使所有進程結點都成為孤立結點,則稱該資源分配圖是可完全簡化的;反之,則稱該資源分配圖是不可完全簡化的。
如果當前系統狀態對應的資源分配圖是不可完全簡化的,則系統處於死鎖狀態,該充分條件稱為死鎖定理。
什么是死鎖定理?利用死鎖定理判斷下圖的當前狀態是否會產生死鎖?
死鎖定理:S為死鎖狀態的充分條件是,當且僅當S狀態的資源分配圖不可完全簡化。
簡化過程,結論:不會產生死鎖。
死鎖的檢測
1.利用資源分配圖
系統對資源的分配情況可以用有向圖加以描述:該圖由結對組成:G=(V ,E )。其中,V 是頂點的集合,E 是有向邊的集合,頂點集合可分為兩部分:P={P1,P2,…Pn},它由系統中全部進程組成;R={r1,r2,r3},它由系統中的全部資源組成。
由邊組成的集合E 中,每一個元素都是一個有序結對(pi,rj )或(rj,pi )。其中,pi 是P 中的一個進程(pi ∈P ),rj 是R 中的資源類型(rj ∈R )。如果(pi ,rj )∈E ,則存在一條從進程pi 指向資源rj 的有向邊,進程pi 申請一個rj 資源單位。當前pi 在等待資源。如果(pi ,rj )∈E ,則有向邊是從資源rj 指向進程pi ,就表示有一個rj 資源分配給進程pi 。邊(pi ,rj )稱為申請邊,而(rj,pi )稱為賦給邊。在資源分配圖中,我們用圓圈表示每個進程,用方框表示各種資源的類型。
方框中圓點的數量表示該類資源的個數。當然,申請邊只能指向方框,而賦給邊必須指向方框中的一個圓點。例如
如圖所示的資源分配圖表示:P1申請臨界資源R ,同時R 已被進程P2占有。臨界資源R 類中只有一個資源。
P1
P2
●資源分配圖
R
2.資源分配圖的簡化
在利用資源分配圖進行死鎖檢測時,目的是為了決定當前狀態是否發生死鎖。如果滿足下列條件,那么一個連續可重被利用的資源圖就能夠通過進程P來進行化簡:
(1)進程沒有被阻塞
(2)進程沒有請求邊
(3)有分配邊指向P
通過消除所有指向P的分配邊,可以化簡資源分配圖。如果一個資源分配圖不能通過任一個進程化簡,那么它就是不可被簡化的;如果有一個化簡序列,導致圖中沒有任何種類的邊,那么它就是可完全簡化的。
3.死鎖定理
通過資源分配圖,我們就可以很直觀地看出系統中的進程使用資源的情況。很顯然,如果圖中不出現封閉的環路,則系統中不會存在死鎖。但如果系統出現由各有向邊組成的環路,則是否產生死鎖,還需進一步分析:如果環路可以通過化簡的方式取消,則系統一定不產生死鎖;如果環路通過化簡的方式仍不能取消,即不能再進行簡化,則系統一定會產生死鎖。這就是著名的死鎖定理。
某系統狀態S為死鎖狀態的充分必要條件是:當且僅當S狀態的資源分配圖是不可完全簡化的。即:如果資源分配圖中不存在環路,則系統不存在死鎖;如果資源分配圖中存在環路,則系統中可能產生死鎖,如果不可再簡化,則系統產生死鎖。
三、頁面置換算法
1、在一個請求分頁系統中,假如一個作業的頁面走向為:1,2,3,6,4,7,3,2,1,4,7,5,6,5,2,1。當分配給該作業的物理塊數為4時,分別采用最佳置換算法、LRU和FIFO頁面置換算法,計算訪問過程中所發生的缺頁次數和缺頁率。
(1)T0時刻為安全狀態。其中的一個安全序列為(P4,P5,P3,P2,P1)
(其他可能的安全序列有:(P4,P5,X,X,X),(P4,P2,X,X,X),
(P4,P3,X,X,X),(P5,X,X,X,X))
(2)可以為P4分配資源,因為分配后的狀態還是安全的,其安全序列的分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
2,3,3 |
分配給P4:(2,0,1) |
0,3,2 |
|
|
P4 |
0,3,2 |
0,2,0 |
4,0,5 |
4,3,7 |
True |
P5 |
4,3,7 |
1,1,0 |
3,1,4 |
7,4,11 |
True |
P1 |
7,4,11 |
3,4,7 |
2,1,2 |
9,5,13 |
True |
P2 |
9,5,13 |
1,3,4 |
4,0,2 |
13,5,15 |
True |
P3 |
13,5,15 |
0,0,6 |
4,0,5 |
17,5,20 |
True |
(3)進程P1再請求資源(0,2,0),則不能為之分配資源。因為分配資源后,不存在安全序列,其分析如下表:
|
WORK |
NEED |
ALLOCATION |
新WORK |
FINISH |
|
0,3,2 |
分配給P1:(0,2,0) |
0,1,2 |
|
|
P4 |
|
0,2,0 |
此時,WORK不能滿足任何一個進程的請求使之運行結束,即進入了不安全狀態。 |
False |
|
P5 |
|
1,1,0 |
False |
||
P1 |
|
3,2,7 |
False |
||
P2 |
|
1,3,4 |
False |
||
P3 |
|
0,0,6 |
False |
答:最佳置換算法的情況如下表:
頁面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理頁0 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
1 |
|
1 |
1 |
|
|
|
物理頁1 |
|
2 |
2 |
2 |
2 |
2 |
|
|
|
2 |
|
2 |
2 |
|
|
|
物理頁2 |
|
|
3 |
3 |
3 |
3 |
|
|
|
4 |
|
5 |
5 |
|
|
|
物理頁3 |
|
|
|
6 |
4 |
7 |
|
|
|
7 |
|
7 |
6 |
|
|
|
缺頁否 |
Y |
Y |
Y |
Y |
Y |
Y |
|
|
|
Y |
|
Y |
Y |
|
|
|
缺頁次數為9,缺頁率為9/16
LRU算法的情況如下表:
頁面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理頁0 |
1 |
1 |
1 |
1 |
4 |
4 |
|
4 |
1 |
1 |
1 |
1 |
6 |
|
6 |
6 |
物理頁1 |
|
2 |
2 |
2 |
2 |
7 |
|
7 |
7 |
4 |
4 |
4 |
4 |
|
2 |
2 |
物理頁2 |
|
|
3 |
3 |
3 |
3 |
|
3 |
3 |
3 |
7 |
7 |
7 |
|
7 |
1 |
物理頁3 |
|
|
|
6 |
6 |
6 |
|
2 |
2 |
2 |
2 |
5 |
5 |
|
5 |
5 |
缺頁否 |
Y |
Y |
Y |
Y |
Y |
Y |
|
Y |
Y |
Y |
Y |
Y |
Y |
|
Y |
Y |
缺頁次數為14,缺頁率為14/16
FIFO算法的情況如下表:
頁面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理頁0 |
1 |
1 |
1 |
1 |
4 |
4 |
|
4 |
4 |
|
|
5 |
5 |
|
|
|
物理頁1 |
|
2 |
2 |
2 |
2 |
7 |
|
7 |
7 |
|
|
7 |
6 |
|
|
|
物理頁2 |
|
|
3 |
3 |
3 |
3 |
|
2 |
2 |
|
|
2 |
2 |
|
|
|
物理頁3 |
|
|
|
6 |
6 |
6 |
|
6 |
1 |
|
|
1 |
1 |
|
|
|
缺頁否 |
Y |
Y |
Y |
Y |
Y |
Y |
|
Y |
Y |
|
|
Y |
Y |
|
|
|
缺頁次數為10,缺頁率為10/16
2、某系統對主存采用頁式管理,供用戶使用的主存區域共640K字節,被分成160塊,塊號為0,1,2……159。現有一作業的地址空間共占4頁,其頁號為0,1,2,,3,被分配到主存的第2,4,1,5塊中,回答:
(1)作業每一頁的長度為多少字節?
(2)寫出該作業被裝入主存時,其對應的頁表。
(3)把該作業的每一頁在主存中的起始地址(用16進制表示)填在下表中
頁號 起始地址
0
1
2
3
答:(1)4K字節
(2)
邏輯頁號 主存塊號
0 2
1 4
2 1
3 5
(3)
頁號 起始地址
0 002000
1 004000
2 001000
3 005000
3、在一個請求分頁系統中,若采用LRU頁面置換算法時,假如一個作業的頁面走向為:4,3,2,1,4,3,5,4,3,2,1,5,當分配給該作業的物理塊數M分別3和4時,求出在訪問過程中所發生的缺頁次數和缺頁率?比較所得結果。
答:(1)當分配給該作業的物理塊數為3時產生缺頁情況如下所示。
在訪問過程中所發生的缺頁次數為10次,缺頁率為10/12*100%=83.3%
(2)當分配給該作業的物理塊數為4時產生缺頁情況如下所示。
在訪問過程中所發生的缺頁次數為8次,缺頁率為8/12*100%=66.7%
通過計算可知,當作業的頁面走向相同時,分配給該作業的物理塊數越多,缺頁次數越少,缺頁率越低。
4、在一個請求分頁系統中,假設系統分配給某進程的物理塊數為3,開始時內存為空,執行如下訪問頁號序列:
1,2,3,4,1,2,5,1,2,3,4,5
試說明采用先進先出(FIFO) 、最近最少使用(LRU)和最佳置換算法(OPT)進行頁面置換時,缺頁次數各是多少?
答:(1)FIFO: 9次
(2)LRU:10次
(3)OPT:7次
5、 在一個請求分頁存儲管理系統中,設某作業占有7個頁面,進程P的訪問次序為1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,當分配給該進程的物理塊為4時,請用FIFO算法和LRU置換算法計算訪問過程中發生的缺頁次數和缺頁率以及分別淘汰的頁面號序列。
答:FIFO缺頁次數:10次,
缺頁中斷率:10/16=62.5%
淘汰的序列:1,2,3,4,5,6
LRU缺頁次數:9次,
缺頁中斷率:9/16=56.3%
淘汰的序列: 3,4, 5,6,1
6、在一個請求式存儲管理系統中,采用FIFO頁面置換算法,假設一進程分配了4個頁框,按下面頁面進行:1、8、1、7、8、2、7、6、5、8、3、6請給出缺頁的次數和缺頁率。
頁面走向 |
1 |
8 |
1 |
7 |
8 |
2 |
7 |
6 |
5 |
8 |
3 |
6 |
缺頁標記 |
* |
* |
|
* |
|
* |
|
* |
* |
* |
* |
|
M1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
6 |
6 |
6 |
6 |
6 |
M2 |
|
8 |
8 |
8 |
8 |
8 |
8 |
8 |
5 |
5 |
5 |
5 |
M3 |
|
|
|
7 |
7 |
7 |
7 |
7 |
7 |
8 |
8 |
8 |
M4 |
|
|
|
|
|
2 |
2 |
2 |
2 |
2 |
3 |
3 |
缺頁次數=8
缺頁率=8/12*100%
7、在一個請求分頁系統中,采用LRU頁面置換算法,例如一個作頁的頁面走向為4,3,2,1,4,3,5,4,3,2,1,5,當分配給該作業的物理塊數M分別為3和4時,試計算訪問過程中所發生的缺頁次數和缺頁率?(注意,所有內存塊最初都是空的,所以,凡第一次用到的頁面都產生一次缺頁),並比較所得結果。
答:(1)當M=3時,
頁面走向 |
4 |
3 |
2 |
1 |
4 |
3 |
5 |
4 |
3 |
2 |
1 |
5 |
缺頁標記 |
* |
* |
* |
* |
* |
* |
* |
|
|
* |
* |
* |
M1 |
4 |
4 |
4 |
1 |
1 |
1 |
5 |
5 |
5 |
2 |
2 |
2 |
M2 |
|
3 |
3 |
3 |
4 |
4 |
4 |
4 |
4 |
4 |
1 |
1 |
M3 |
|
|
2 |
2 |
2 |
3 |
3 |
3 |
3 |
3 |
3 |
5 |
缺頁次數=10
缺頁率=缺頁次數/總頁數*100%=10/12*100%=83.3%
(2)當M=4時
頁面走向 |
4 |
3 |
2 |
1 |
4 |
3 |
5 |
4 |
3 |
2 |
1 |
5 |
缺頁標記 |
* |
* |
* |
* |
|
|
* |
|
|
* |
* |
* |
M1 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
4 |
5 |
M2 |
|
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
3 |
M3 |
|
|
2 |
2 |
2 |
2 |
5 |
5 |
5 |
5 |
1 |
1 |
M4 |
|
|
|
1 |
1 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
缺頁次數=8
缺頁率=8/12*100%=67%
8、在一個請求分頁系統中,假如一個作業的頁面走向為:1,2,3,6,4,7,3,2,1,4,7,5,6,5,2,1。當分配給該作業的物理塊數為4時,分別采用最佳置換算法、LRU和FIFO頁面置換算法,計算訪問過程中所發生的缺頁次數和缺頁率。
答:最佳置換算法的情況如下表:
頁面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理頁0 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
1 |
|
1 |
1 |
|
|
|
物理頁1 |
|
2 |
2 |
2 |
2 |
2 |
|
|
|
2 |
|
2 |
2 |
|
|
|
物理頁2 |
|
|
3 |
3 |
3 |
3 |
|
|
|
4 |
|
5 |
5 |
|
|
|
物理頁3 |
|
|
|
6 |
4 |
7 |
|
|
|
7 |
|
7 |
6 |
|
|
|
缺頁否 |
Y |
Y |
Y |
Y |
Y |
Y |
|
|
|
Y |
|
Y |
Y |
|
|
|
缺頁次數為9,缺頁率為9/16
LRU算法的情況如下表:
頁面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理頁0 |
1 |
1 |
1 |
1 |
4 |
4 |
|
4 |
1 |
1 |
1 |
1 |
6 |
|
6 |
6 |
物理頁1 |
|
2 |
2 |
2 |
2 |
7 |
|
7 |
7 |
4 |
4 |
4 |
4 |
|
2 |
2 |
物理頁2 |
|
|
3 |
3 |
3 |
3 |
|
3 |
3 |
3 |
7 |
7 |
7 |
|
7 |
1 |
物理頁3 |
|
|
|
6 |
6 |
6 |
|
2 |
2 |
2 |
2 |
5 |
5 |
|
5 |
5 |
缺頁否 |
Y |
Y |
Y |
Y |
Y |
Y |
|
Y |
Y |
Y |
Y |
Y |
Y |
|
Y |
Y |
缺頁次數為14,缺頁率為14/16
FIFO算法的情況如下表:
頁面走向 |
1 |
2 |
3 |
6 |
4 |
7 |
3 |
2 |
1 |
4 |
7 |
5 |
6 |
5 |
2 |
1 |
物理頁0 |
1 |
1 |
1 |
1 |
4 |
4 |
|
4 |
4 |
|
|
5 |
5 |
|
|
|
物理頁1 |
|
2 |
2 |
2 |
2 |
7 |
|
7 |
7 |
|
|
7 |
6 |
|
|
|
物理頁2 |
|
|
3 |
3 |
3 |
3 |
|
2 |
2 |
|
|
2 |
2 |
|
|
|
物理頁3 |
|
|
|
6 |
6 |
6 |
|
6 |
1 |
|
|
1 |
1 |
|
|
|
缺頁否 |
Y |
Y |
Y |
Y |
Y |
Y |
|
Y |
Y |
|
|
Y |
Y |
|
|
|
缺頁次數為10,缺頁率為10/16
四、磁盤調度
1、設某作業占有7個頁面,如果在主存中只允許裝入4個工作頁面(即工作集為4),作業運行時,實際訪問頁面的順序是1, 2, 3, 6, 4, 7, 3, 2, 1, 4, 7, 5, 6, 5, 2, 1。試用FIFO與LRU頁面調度算法,列出各自的頁面淘汰順序和缺頁中斷次數,以及最后留駐主存4頁的順序。(假設開始的4個頁面已裝入主存)
答:FIFO:
1 2 3 6 4 7
6次
2 1 5 6
LRU:
1 2 6 4 7 3 2 1 4 7
10次
6 5 2 1
注:假定前面四頁1 2 3 6 已在主存
2、假設一個可移動磁頭的磁盤具有200個磁道,其編號為0~199,當前它剛剛結束了125道的存取,正在處理149道的服務請求,假設系統當前I/O請求序列為:88,147,95,177,94,150,102,175,138。試問對以下的磁盤I/O調度算法而言,滿足以上請求序列,磁頭將如何移動?並計算總的磁道移動數。
(1)先來先服務算法(FCFS)
(2)掃描法(SCAN)
(1)FCFS算法:
當前149 |
下一磁道 |
88 |
147 |
95 |
177 |
94 |
150 |
102 |
175 |
138 |
|
移動距離 |
61 |
59 |
52 |
82 |
83 |
56 |
48 |
73 |
37 |
總的磁道移動數為:61+59+52+82+83+56+48+73+37=551
(2)SCAN算法:
當前149 |
下一磁道 |
150 |
175 |
177 |
147 |
138 |
102 |
95 |
94 |
88 |
|
移動距離 |
1 |
25 |
2 |
30 |
9 |
36 |
7 |
1 |
6 |
總的磁道移動數為:1+25+2+30+9+36+7+1+6=117
3、設磁盤共有200個柱面,柱面編號為0-199,當前存取壁的位置在125 柱面上,並且剛剛完成了對128號柱面的服務請求,在此之前如果存在以下的請求服務序列:
75, 182, 90, 110, 170, 150, 102, 68, 42
試問:為完成上述請求, 下列算法存取臂移動順序如何?移動的總量是多少?
(1) 先來先服務(FCFS)
(2) 最短尋找時間優先(SSTF)
(3) 循環掃描法(CSCAN)
解:(1)先來先服務存取臂移動順序是75,182,90,110,170,150,102,68,42
移動的總量=50+107+92+20+60+20+48+34+26=457
(2)最短尋道時間優先存取臂移動順序是110,102,90,75,68,42,150,170,182。
移動的總量=15+8+12+15+7+26+108+20+12=223
(3)循環掃描法存取臂移動順序是42,68,75,90,102,110,150,170,182。
移動的總量=83+26+7+15+12+8+40+20+12=223
五、邏輯地址轉換物理地址
1、考慮一個由 8 個頁面,每頁有 1024 個字節組成的邏輯空間,把它裝入到有 32 個物理塊的存儲器中,問:
( 1 )邏輯地址需要多少二進制位表示?
( 2 )物理地址需要多少二進制位表示?
分析 在分頁存儲管理中,邏輯地址結構如下圖所示。
它由兩個部分組成:前一部分表示該地址所在頁面的頁號 p ;后一部分表示頁內地址(頁內位移) d 。頁號的地址位數決定了頁的多少,假設頁號有 20 位,則地址空間中最多可容納的頁面數為 2 20 ,即 1MB 個頁面。頁內地址位數確定了每頁的大小,若頁內地址為 12 位,則每頁大小為 2 12 ,即 2KB 。
同理,物理地址中塊號的地址位數決定了塊的數量。由於頁式存儲管理內存空間塊的大小與頁面大小相同,所以物理地址中塊內地址與邏輯地址中的頁內地址位數相同。
答:因為頁面數為 8=2 3 ,故需要 3 位二進制數表示。每頁有 1024 個字節, 1024=2 10 ,於是頁內地址需要 10 位二進制數表示。 32 個物理塊,需要 5 位二進制數表示( 32=2 5 )。
( 1 )頁的邏輯地址由頁號和頁內地址組成,所以需要 3+10=13 位二進制數表示。
( 2 )頁的物理地址由塊號和頁內地址的拼接,所以需要 5+10=15 位二進制數表示。
2、若在一分頁存儲管理系統中,某作業的頁表如下所示。已知頁面大小為 1024 字節,試將邏輯地址 1011 , 2148 , 4000 , 5012 轉化為相應的物理地址。
頁號 |
塊號 |
0 1 2 3 |
2 3 1 6 |
|
|
分析: 頁式存儲管理的地址結構是一維的,即邏輯地址(或物理地址)只用一個數值即可表示。若給定邏輯地址 A ,頁面的大小為 L ,則頁號 p 和頁內地址 d 可按照下式求得:
p=int [A/L] d=A mod L
其中, int 是取整函數(取數值的整數部分), mod 是取余函數(取數值的余數部分)。
下圖顯示了頁式管理系統的地址轉換機構。
頁表的作用是實現從頁號到物理塊號的地址映射。以邏輯地址的頁號檢索頁表,得到該頁的物理塊號;同時將頁內地址 d 直接送入物理地址寄存器的塊內地址字段中。這樣物理塊號和塊內地址拼接成了實際訪問內存的地址,從而完成了從邏輯地址到物理地址的轉換。
所以物理地址的計算公式為:
物理地址=塊的大小(即頁的大小 L ) 塊號 f +頁內地址 d
答:本題中,為了描述方便,設頁號為 p ,頁內位移為 d ,則:
( 1 )對於邏輯地址 1011 , p = int ( 1011/1024 )= 0 , d = 1011 mod 1024 = 1011 。查頁表第 0 頁在第 2 塊,所以物理地址為 1024 2 + 1011 = 3059 。
( 2 )對於邏輯地址 2148 , p = int ( 2148/1024 )= 2 , d = 2148 mod 1024 = 100 。查頁表第 2 頁在第 1 塊,所以物理地址為 1024 + 100 = 1124 。
( 3 )對於邏輯地址 4000 , p = int ( 4000/1024 )= 3 , d = 4000 mod 1024 = 928 。查頁表第 3 頁在第 6 塊,所以物理地址為 1024 6 + 928 = 7072 。
( 4 )對於邏輯地址 5012 , p = int ( 5012/1024 )= 4 , d = 5012 mod 1024 = 916 。因頁號超過頁表長度,該邏輯地址非法。
3、某虛擬存儲器的用戶編程空間共 32 個頁面,每頁為 1KB ,內存為 16KB 。假定某時刻一用戶頁表中已調入內存的頁面的頁號和物理塊號的對照表如下:
頁號 |
物理塊號 |
0 |
5 |
1 |
10 |
2 |
4 |
3 |
7 |
|
|
則邏輯地址 0A5C ( H )所對應的物理地址是什么?
分析: 頁式存儲管理的邏輯地址分為兩部分:頁號和頁內地址。
由已知條件“用戶編程空間共 32 個頁面”,可知頁號部分占 5 位;由“每頁為 1KB ”, 1 K=2^10 , 可知內頁地址占 10 位。由“內存為 16KB ”,可知有 16 塊,塊號為 4 位。
邏輯地址 0A5C ( H )所對應的 二進制表示形式是: 000 10 10 0101 1100 ,根據上面的分析,下划線部分為頁內地址,編碼 “ 000 10 ” 為頁號,表示該 邏輯地址對應的頁號為 2 。 查頁表,得到物理塊號是 4 (十進制),即物理塊地址為: 01 00 ,拼接塊內地址 10 0101 1100 ,得 01 00 10 0101 1100 ,即 125C ( H )。
解 邏輯地址 0A5C ( H )所對應的物理地址是 125C ( H )。
4、設某文件的物理存儲方式采用鏈接方式,該文件由5個邏輯記錄組成,每個邏輯記錄的大小與磁盤塊大小相等,均為512字節,並依次存放在50、121、75、80、63號磁盤塊上。(10分)
① 文件的第1569邏輯字節的信息存放在哪一個磁盤塊上?
② 要訪問第1569邏輯字節的信息,需要訪問多少個磁盤塊?(假如該文件的FCB在內存)
答:因為:1569=512×3+33
所以要訪問字節的邏輯記錄號為3,對應的物理磁盤塊號為80。故應訪問第80號磁盤塊。
由於采用鏈接方式,所以要訪問第3個邏輯記錄的信息,必須訪問邏輯記錄第0、1、2后,才能訪問第3個邏輯記錄,所以要訪問第1569邏輯字節的信息,需要訪問4個磁盤塊。
頁號 |
物理塊號 |
0 |
3 |
1 |
4 |
2 |
6 |
5、在一個分頁存儲管理系統中,頁長為4KB,
某一作業的頁表如圖1所示,虛擬地址3000對應的物理地址為12K+3000=152888 。
六、進程狀態轉換
1、請畫出進程的狀態轉換圖。並說明是什么事件引起每種狀態的變遷?
答:狀態轉換圖如下:
2、請畫出進程的狀態轉換圖。並說明是什么事件引起每種狀態的變遷?
答:
就緒到執行:處於就緒狀態的進程,在調度程序為之分配了處理器之后,該進程就進入執行狀態。
執行到就緒:正在執行的進程,如果分配給它的時間片用完,則暫停執行,該進程就由執行狀態轉變為就緒狀態。
執行到阻塞:如果正在執行的進程因為發生某事件(例如:請求I/O,申請緩沖空間等)而使進程的執行受阻,則該進程將停止執行,由執行狀態轉變為阻塞狀態。
阻塞到就緒:處於阻塞狀態的進程,如果引起其阻塞的事件發生了,則該進程將解除阻塞狀態而進入就緒狀態。
3、請用信號量實現下圖所示的前趨關系。
答:Var a,b,c,d,e,f:semaphore:=0,0,0,0,0,0;
Begin
Parbegin
Begin S1;signal(a);sigan(b);signal(c);end;
Begin wait(a);S2;signal(d);end;
Begin wait(c);S3;signal(e);end;
Begin wait(d);S4;signal(f);end;
Begin wait(b);wait(e);wait(f);S5;end;
parend
end
七、作業調度
1、假設有三道作業,它們的提交時間及運行時間由下表給出,
作業 |
提交時刻(時) |
運行時間(小時) |
1 |
10 |
2 |
2 |
10.1 |
1 |
3 |
10.25 |
0.25 |
采用非多道程序設計,並且采用“先來先服務”作業調度算法。指出它們的調度順序,並分別計算平均周轉時間和平均帶權周轉時間.
采用非多道程序設計,即采用單道程序設計。先來先服務調度算法調度題中給出的作業流:
作業號 |
提交時間 (時) |
運行時間 (小時) |
開始時刻 (時) |
完成時刻 (時) |
周轉時間 (小時) |
帶權周轉時間 (小時) |
1 |
10 |
2 |
10 |
12 |
2 |
1 |
2 |
10.1 |
|
12 |
13 |
2.9 |
2.9 |
3 |
1O.25 |
O.25 |
13 |
13.25 |
3 |
12 |
平均周轉時間T=7. 90/3=1.63 平均帶權周轉時間W=15.9/3=5.3 |
7.9 |
15. 9 |
1)有一組作業,其提交時間及運行時間如下表所示,在單道程序管理系統中,采用響應比高者優先高度算法,給出調度順序,各作業的周轉時間,並算出平均周轉時間和平均帶權周轉時間。(按十進制計算)
作業號 |
提交時間 |
運行時間 |
1 |
10.00 |
0.30 |
2 |
10.20 |
0.50 |
3 |
10.40 |
0.10 |
4 |
10.50 |
0.40 |
2)某移動磁盤的柱面由外向里從0開始順序編號,假定當前磁頭停在100號柱面,而且移動方向是向外的,現有一個請求隊列在等待訪問磁盤,訪問的柱面號分別為190、10、160、80、90、125、30、20、140、25。請寫出分別采用最短尋找時間優先和電梯調度算法處理上述請求的次序。
答:1)解:響應比=響應時間/要求服務時間=(等待時間+要求服務時間)/要求服務時間
由於作業1與作業2開始執行時,作業3和4均未到達,所以1、2按到達順序執行,作業2執行完后,
作業3:響應比=(10.8-10.4+0.1)/0.1=5
作業4:響應比=(10.8-10.5+0.4)/0.4=1.75
因為作業3的響應比高於作業4,所以作業3先執行。
周轉時間=完成時間-提交時間
作業1的周轉時間T1=0.3
T2=10.8-10.2=0.6
T3=10.9-10.4=0.5
T4=11.3-10.5=0.8
平均周轉時間=(0.3+0.6+0.5+0.8)/4=0.5
帶權周轉時間=周轉時間/運行時間(用P表示)
P1=0.3/0.3=1 P2=0.6/0.5=1.2 P3=0.5/0.1=5 P4=0.8/0.4=2
平均帶權周轉時間=(1+1.2+5+2)/4=2.3
2)
磁道號 |
最短尋找時間優先 (調度次序) |
電梯算法 |
190 |
6 |
10 |
10 |
10 |
6 |
160 |
5 |
9 |
80 |
2 |
2 |
90 |
1 |
1 |
125 |
3 |
7 |
30 |
7 |
3 |
20 |
9 |
5 |
140 |
4 |
8 |
25 |
8 |
4 |
2、設有一組作業,它們的提交時間及運行時間如下所示:
作業號 |
提交時間 |
運行時間(分鍾) |
1 |
8:00 |
70 |
2 |
8:40 |
30 |
3 |
8:50 |
10 |
4 |
9:10 |
5 |
在單CPU方式下,試計算采用先來先服務調度算法(FCFS)、最短作業優先調度算法(SJF)和響應比高者優先調度算法時的平均周轉時間,並指出它們的調度順序。
3、在一個單道批處理系統中,一組作業的提交時間和運行時間作業 提交時間 運行時間
J1 8 : 00 1.0
J2 8 : 50 0.50
J3 9 : 00 0.20
J4 9 : 10 0.10
試計算以下三種作業調度算法的平均周轉時間和平均帶權周轉時間
( 1 )先來先服務 ( 2 )短作業優先 ( 3 )響應比高者優先
答:( 1 )先來先服務
平均周轉時間= (1.0+0.67+0.7+0.63)/4=0.75
平均帶權周轉時間= (1.0+1.34+3.5+6.3)/4=3.035
作業 |
提交時間 |
運行時間 |
開始時間 |
完成時間 |
周轉時間 |
帶權周轉時間 |
J1 |
8:00 |
1.0 |
8:00 |
9:00 |
1.0 |
1.0 |
J2 |
8:50 |
0.50 |
9:00 |
9:30 |
0.67 |
1.34 |
J3 |
9:00 |
0.20 |
9:30 |
9:42 |
0.7 |
3.5 |
J4 |
9:10 |
0.10 |
9:42 |
9:48 |
0.63 |
6.3 |
|
|
|
|
|
|
|
(2) 短作業優先
作業執行順序: J1 J3 J4 J2
平均周轉時間=( 1.0+0.94+0.2+0.13 ) /4=0.5675
平均帶權周轉時間=( 1.0+1.94+1.0+1.3 ) =1.31
作業 |
提交時間 |
運行時間 |
開始時間 |
完成時間 |
周轉時間 |
帶權周轉時間 |
J1 |
8:00 |
1.0 |
8:00 |
9:00 |
1.0 |
1.0 |
J2 |
8:50 |
0.50 |
9:18 |
9:48 |
0.97 |
1.94 |
J3 |
9:00 |
0.20 |
9:00 |
9:12 |
0.2 |
1.0 |
J4 |
9:10 |
0.10 |
9:12 |
9:18 |
0.13 |
1.3 |
|
|
|
|
|
|
|
(3) 響應比高者優先
同( 1 )