กำหนด P กระบวนการในหน่วยความจำ และ N ทรัพยากรที่จำเป็นสำหรับพวกเขาเพื่อให้การทำงานเสร็จสิ้น และภารกิจคือหาจำนวนทรัพยากร R ขั้นต่ำที่ควรจัดสรรให้กระบวนการ เพื่อให้ดัดล็อก (deadlock) ไม่มีโอกาสเกิดขึ้น
ดัดล็อก (Deadlock) คืออะไร
ดัดล็อกเป็นสถานการณ์ในระบบปฏิบัติการที่กระบวนการหลายตัวที่อยู่ในหน่วยความจำ ไม่สามารถทำการทำงานได้ เพราะทรัพยากรที่จำเป็นสำหรับการรันโปรแกรมถูกครอบครองโดยกระบวนการอื่นที่กำลังรอทรัพยากรอื่นเพื่อให้เสร็จสิ้น
สมมติว่ามีกระบวนการสองตัว P1 และ P2 ในหน่วยความจำ โดย P1 ต้องการทรัพยากร R1 และ P2 ต้องการทรัพยากร R2 แต่ดัดล็อกจะเกิดขึ้นเมื่อ P1 ครอบครองทรัพยากร R2 และรอทรัพยากร R1 ในทำนองเดียวกัน P2 ครอบครองทรัพยากร R1 และรอทรัพยากร R2

นี่คือตัวอย่างของการรอแบบวงกลม (circular wait) ซึ่งเป็นหนึ่งในสาเหตุของดัดล็อก ดังนั้น เพื่อป้องกันดัดล็อก เราต้องคำนวณจำนวนทรัพยากรที่ควรมีสำหรับกระบวนการ เพื่อให้ดัดล็อกไม่เกิดขึ้น
เงื่อนไขไม่มีดัดล็อก (Deadlock free Condition)
R >= P * (N - 1) + 1
โดยที่ R คือทรัพยากร, P คือกระบวนการ และ N คือความต้องการของกระบวนการ
ตัวอย่าง
Input-: processes = 5, need = 3 Output-: minimum required resources are: 11 Input-: Processes = 7, need = 2 Output-: minimum required resources are: 8
แนวทางที่ใช้ในโปรแกรมด้านล่างคือ −
- รับจำนวนกระบวนการและความต้องการของกระบวนการในหน่วยความจำ
- นำสูตรที่กำหนดมาใช้คำนวณจำนวนทรัพยากรที่จำเป็น
- แสดงผลลัพธ์
อัลกอริทึม
เริ่มต้น ขั้นตอนที่ 1 -> ประกาศฟังก์ชันคำนวณทรัพยากรขั้นต่ำที่จำเป็น int min_resource(int process, int need) ประกาศ int calculate = 0 ตั้งค่า calculate = process * (need - 1) + 1 คืนค่า calculate ขั้นตอนที่ 2 -> ใน main() ประกาศ int process = 5 และ need = 3 เรียก min_resource(process, need) จบ
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; // คำนวณจำนวนทรัพยากรขั้นต่ำที่จำเป็น int min_resource(int process, int need) { int calculate = 0; calculate = process * (need - 1) + 1; return calculate; } int main() { int process = 5, need = 3; cout << "minimum required resources are : " << min_resource(process, need); return 0; }ผลลัพธ์
minimum required resources are : 11