Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ สำหรับเงื่อนไขไม่มีดัดล็อก (Deadlock free condition) ในระบบปฏิบัติการ


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

ดัดล็อก (Deadlock) คืออะไร

ดัดล็อกเป็นสถานการณ์ในระบบปฏิบัติการที่กระบวนการหลายตัวที่อยู่ในหน่วยความจำ ไม่สามารถทำการทำงานได้ เพราะทรัพยากรที่จำเป็นสำหรับการรันโปรแกรมถูกครอบครองโดยกระบวนการอื่นที่กำลังรอทรัพยากรอื่นเพื่อให้เสร็จสิ้น

สมมติว่ามีกระบวนการสองตัว P1 และ P2 ในหน่วยความจำ โดย P1 ต้องการทรัพยากร R1 และ P2 ต้องการทรัพยากร R2 แต่ดัดล็อกจะเกิดขึ้นเมื่อ P1 ครอบครองทรัพยากร R2 และรอทรัพยากร R1 ในทำนองเดียวกัน P2 ครอบครองทรัพยากร R1 และรอทรัพยากร R2

โปรแกรม C++ สำหรับเงื่อนไขไม่มีดัดล็อก (Deadlock free condition) ในระบบปฏิบัติการ

นี่คือตัวอย่างของการรอแบบวงกลม (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