40. อัลกอริทึมของนายธนาคาร
(Banker’s Algorithm)
โครงสร้างข้อมูลที่จำาเป็นมีดังนี้
Available : เป็นเวคเตอร์ขนาด m ซึ่งใช้เก็บ ค่า
จำานวนทรัพยากรที่ว่างของทรัพยากรแต่ละประเภท
เช่น Available[j] = k หมายถึง ทรัพยากรประเภท Rj
มีจำานวนทรัพยากรว่างอยู่ k ตัว
Max : เป็นเมทริกซ์ขนาด n x m ซึ่งใช้เก็บค่าจำานวน
สูงสุดของทรัพยากรแต่ละประเภทที่กระบวนการ
แต่ละตัวต้องการใช้ เช่น Max[i,j] = k หมายถึง
กระบวนการ Pi ต้องการทรัพยากรประเภท Rj มาก
ที่สุด k ตัว
41. อัลกอริทึมของนายธนาคาร
(Banker’s Algorithm)
Allocation : เป็นเมทริกซ์ขนาด n x m ซึ่งใช้เก็บค่า
จำานวนทรัพยากรแต่ละประเภทที่กระบวนการแต่ละ
ตัว กำาลังถือครองอยู่ เช่น Allocation[i,j] = k หมาย
ถึง กระบวนการ Pi กำาลังถือครองทรัพยากรประเภท
Rj อยู่ k ตัว
Need : เป็นเมทริกซ์ขนาด n x m ซึ่งใช้เก็บค่า
จำานวนทรัพยากรแต่ละประเภทที่กระบวนการแต่ละ
ตัว อาจร้องขอเพิ่มอีกได้ เช่น Need[i,j] = k หมายถึง
กระบวนการ Pi อาจร้องขอทรัพยากรประเภท Rj ได้
อีก k ตัว จะเห็นว่า Need [i,j] = Max[i,j] –
Allocation[i,j]
42. ขั้นตอนวิธีตรวจดูสถานะปลอดภัย
(Safety Algorithm)
ขั้นตอนวิธีในการตรวจสอบว่า ระบบจะอยู่ใน
สถานะปลอดภัยหรือไม่ เป็นดังนี้
กำาหนดให้ Work และ Finish เป็นเวคเตอร์ขนาด m
และ n ตามลำาดับ และกำาหนดค่าเริ่มต้น ดังนี้
Work := Available;
For i := 1 TO n DO
Finish[i] := FALSE;
43. ขั้นตอนวิธีตรวจดูสถานะปลอดภัย
(Safety Algorithm)
ให้ i = 1
WHILE i £
n DO BEGIN
IF Finish[i] = FALSE AND Need[i] £
Work
THEN BEGIN
Work := Work + Allocation[i];
Finish[i] := TRUE;
i := i +1; END
ELSE i := i+1;
END
IF some Finish[i] = FALSE THEN “unsafe” ELSE “safe”
44. อัลกอริทึมร้องขอทรัพยากร
(Resource-Request Algorithm)
ให้ Requestเป็นเวคเตอร์ แสดงคำาร้องขอของ
i กระบวนการ Pi โดยที่ Requestหมายถึง
i กระบวนการ Pi ได้ร้องขอทรัพยากรประเภท Rj เป็น
จำานวน k ตัว
เมื่อกระบวนการ Pi ร้องขอทรัพยากร ระบบจะ
จัดการ ดังนี้
£
1. ถ้า Request> Needแล้ว ระบบจะแจ้งข้อผิด
i i พลาดว่า “กระบวนการขอทรัพยากรมากกว่าที่ระบุ”
แล้วกระบวนการจะถูกขับออกจากระบบ แต่ถ้า
RequestNeedแล้ว จะไปทำางานในขั้นตอนที่ 2
i i
45. อัลกอริทึมร้องขอทรัพยากร
(Resource-Request Algorithm)
2. ถ้า Requesti > Available แล้วให้ Pi รอจนกว่า
ทรัพยากรที่ร้องขอจะว่าง จากนั้นจึงไปทำางานใน
ขั้นตอนที่ 3 แต่ถ้า Requesti Available แล้ว จะไป
ทำางานในขั้นตอนที่ 3 ทันที
3. ระบบจะสมมติว่าได้จัดสรรทรัพยากรให้ตามที่
กระบวนการ Pi ร้องขอมา โดยระบบจะมีสถานะ
เปลี่ยนไป ดังนี้
Available := Available – Requesti;
Allocationi := Allocationi + Requesti;
Needi := Needi – Requesti;
£
48. ตัวอย่าง (An Illustrative
Example)
Allocation Max Available
A B C A B C A B C
P0
P1
P2
P3
P4
0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3
3 3 2
49. ตัวอย่าง (An Illustrative
Example)
และเนื่องจาก เมทริกซ์
Need เกิดจาก Max –
Allocation ดังนั้นจะได้
ว่า
Need
A B C
P0
P1
P2
P3
P4
7 4 3
1 2 2
6 0 0
0 1 1
4 3 1
57. ระบบที่มีทรัพยากรแต่ละประเภทหลายตัว
(Several Instances of a Resource Type)
ขั้นตอนวิธีในการตรวจหาวงจรอับนี้คล้ายกับ
Banker’s Algorithm ซึ่งจำาเป็นต้องใช้โครงสร้าง
ข้อมูลดังต่อไปนี้
Available : เป็นเวคเตอร์ขนาด m แสดงจำานวน
ทรัพยากรแต่ละชนิด ที่ยังว่างอยู่ (ไม่ได้ถูก
กระบวนการใดถือครองอยู่)
Allocation : เป็นเมทริกซ์ n x m ใช้เก็บค่าจำานวน
ทรัพยากรแต่ละชนิดที่กระบวนการแต่ละตัวถือครอง
อยู่
Request : เป็นเมทริกซ์ n x m ใช้เก็บค่าจำานวน
ทรัพยากรแต่ละชนิดที่กระบวนการแต่ละตัวกำาลัง
ร้องขอ
58. ระบบที่มีทรัพยากรแต่ละประเภทหลายตัว
(Several Instances of a Resource Type)
ขั้นตอนวิธีตรวจหาวงจรอับ
1. Work := Available;
2. FOR i:= 1 TO n DO
IF Allocation¹
0
i THEN Finish[i] := FALSE
ELSE Finish[i] := TRUE;
59. ระบบที่มีทรัพยากรแต่ละประเภทหลายตัว
(Several Instances of a Resource Type) 3. i := 1;
WHILE i n DO BEGIN
IF Finish[i] = FALSE AND Request[i] Work
THEN BEGIN
Work := Work + Allocationi;
Finish[i] := TRUE;
i := i+1; END
ELSE i := i+1;
END;
4. FOR i=1 TO n DO
IF Finish[i] = FALSE THEN process Pi is in a deadlocked.
6. IF Finish[i] = TRUE ทั้งหมด แสดงว่าขณะนี้ระบบไม่เกิดวงจร
อับ.
60. ตัวอย่าง
ให้ระบบมี 5 กระบวนการ P0 , P1 , P2 , P3 และ P4 และมี
ทรัพยากรชนิด A 7 ตัว , ชนิด B 2 ตัว , ชนิด C 6 ตัว ณ
เวลา T0 ระบบอยู่ในสถานะดังนี้
Allocation Request Available
A B C A B C A B C
P0
P1
P2
P3
P4
0 1 0
2 0 0
3 0 3
2 1 1
0 0 2
0 0 0
2 0 2
0 0 0
1 0 0
0 0 2
0 0 0