การขาดแคลนทรัพยากร
การขาดแคลนทรัพยากรเป็นปัญหาที่พบในการประมวลผลแบบพร้อมกันซึ่งกระบวนการจะถูกปฏิเสธทรัพยากร ที่จำเป็น ในการประมวลผลงาน อย่างต่อเนื่อง [ 1 ]การขาดแคลนอาจเกิดจากข้อผิดพลาดในอัลกอริทึมการจัดตารางเวลาหรือการกีดกันร่วมกันแต่ยังสามารถเกิดจากการรั่วไหลของทรัพยากรและอาจเกิดขึ้นโดยเจตนาผ่านการโจมตีแบบปฏิเสธการให้บริการเช่นฟอร์กบอมบ์
เมื่อการอดอาหารเป็นไปไม่ได้ในอัลกอริทึมแบบขนานอัลกอริทึมนั้นเรียกว่าปราศจากการอดอาหารปราศจาก การ ล็อกเอาต์[ 2 ]หรือกล่าวได้ว่ามีการบายพาสแบบจำกัด[ 3 ]คุณสมบัตินี้เป็นตัวอย่างของความมีชีวิตชีวาและเป็นหนึ่งในสองข้อกำหนดสำหรับอัลกอริทึมการกีดกันร่วมกัน อีกข้อหนึ่งคือความถูกต้องชื่อ "บายพาสแบบจำกัด" หมายความว่ากระบวนการใดๆ (ส่วนแบบขนาน) ของอัลกอริทึมจะถูกบายพาสไม่เกินจำนวนครั้งที่จำกัดก่อนที่จะได้รับอนุญาตให้เข้าถึงทรัพยากรที่ใช้ร่วมกัน[ 3 ]
การจัดตารางเวลา
โดย ทั่วไปแล้ว การขาดแคลนทรัพยากร (Starvation) มักเกิดจากอัลกอริทึมการจัดตารางการทำงาน ที่เรียบง่ายเกินไป ตัวอย่างเช่น หากระบบมัลติทาสก์ (ที่ออกแบบมาไม่ดี) สลับไปมาระหว่างสองงานแรกอยู่เสมอ ในขณะที่งานที่สามไม่เคยได้ทำงานเลย งานที่สามก็จะถูกขาดแคลนเวลาใช้งาน CPUอัลกอริทึมการจัดตารางการทำงาน ซึ่งเป็นส่วนหนึ่งของเคอร์เนลควรจะจัดสรรทรัพยากรอย่างเท่าเทียมกัน กล่าวคือ อัลกอริทึมควรจัดสรรทรัพยากรเพื่อให้ไม่มีกระบวนการใดขาดแคลนทรัพยากรที่จำเป็นอย่างถาวร
ตัวจัดตารางการทำงานของระบบปฏิบัติการหลายตัวใช้แนวคิดเรื่องลำดับความสำคัญของกระบวนการ กระบวนการที่มีลำดับความสำคัญสูง (A) จะทำงานก่อนกระบวนการที่มีลำดับความสำคัญต่ำ (B) หากกระบวนการที่มีลำดับความสำคัญสูง (กระบวนการ A) เกิดการบล็อกและไม่ยอมให้ทำงานต่อ กระบวนการที่มีลำดับความสำคัญต่ำ (B) จะไม่ได้รับการจัดสรรเวลาทำงานเลย (ในบางระบบ) ซึ่งจะทำให้เกิดภาวะอดอยาก หากมีกระบวนการที่มีลำดับความสำคัญสูงกว่า (X) ซึ่งขึ้นอยู่กับผลลัพธ์จากกระบวนการ B กระบวนการ X อาจไม่เสร็จสิ้นแม้ว่าจะเป็นกระบวนการที่สำคัญที่สุดในระบบก็ตาม สภาวะนี้เรียกว่าการผกผันลำดับความสำคัญ อัลกอริทึมการจัดตารางการทำงานสมัยใหม่มักมีโค้ดที่รับประกันว่าทุกกระบวนการจะได้รับทรัพยากรที่สำคัญอย่างน้อยที่สุด (ส่วนใหญ่มักเป็นเวลาของ CPU) เพื่อป้องกันไม่ให้กระบวนการใด ๆ ประสบกับภาวะอดอยาก
ในเครือข่ายคอมพิวเตอร์ โดยเฉพาะเครือข่ายไร้สายอัลกอริทึมการจัดตารางเวลาอาจประสบปัญหาการขาดแคลนทรัพยากรในการจัดตารางเวลา ตัวอย่างเช่น การจัดตารางเวลา โดยพิจารณาจากปริมาณงานสูงสุด
โดยปกติแล้วภาวะอดอยากเกิดจากภาวะติดตายซึ่งทำให้กระบวนการหยุดนิ่ง กระบวนการสองหรือมากกว่านั้นจะติดตายเมื่อแต่ละกระบวนการไม่ได้ทำอะไรเลยในขณะที่รอทรัพยากรที่ถูกครอบครองโดยโปรแกรมอื่นในชุดเดียวกัน ในทางกลับกัน กระบวนการจะอยู่ในภาวะอดอยากเมื่อมันรอทรัพยากรที่มอบให้กับกระบวนการอื่นอย่างต่อเนื่อง การรับประกันว่าปราศจากภาวะอดอยากนั้นแข็งแกร่งกว่าการไม่มีภาวะติดตาย: อัลกอริทึมการกีดกันร่วมกันที่ต้องเลือกที่จะอนุญาตให้กระบวนการหนึ่งในสองกระบวนการเข้าสู่ส่วนวิกฤตและเลือกหนึ่งกระบวนการโดยพลการนั้นปราศจากภาวะติดตาย แต่ไม่ปราศจากภาวะอดอยาก[ 3 ]
วิธีแก้ปัญหาการอดอยากที่เป็นไปได้คือการใช้อัลกอริธึมการจัดตารางเวลาด้วยคิวลำดับความสำคัญที่ใช้ เทคนิค อายุด้วย อายุเป็นเทคนิคการค่อยๆ เพิ่มลำดับความสำคัญของกระบวนการที่รออยู่ในระบบเป็นเวลานาน[ 4 ]