Nutchasan Jantarah
2 min readSep 19, 2018

--

week 15 19/09/2018

อะไรคือ สภาวะ Deadlock

สภาวะ Deadlock หรือ สภาวะติดตาย ก็คือสภาวะที่กลุ่ม process หนึ่ง โดนบล็อกการทำงาน โดยมีสาเหตุมาจาก ในกลุ่ม process นั้น มี process ตัวหนึ่งรอรับการใช้ทรัพยากรจากระบบ แต่ทรัพยากรที่ต้องการนั้นถูก process ตัวอื่นใช้งานอยู่ ทำให้เกิดการรอคอย ซึ่งสามารถอธิบายการทำงานได้คร่าวๆ คือ

รูปภาพจาก https://www.geeksforgeeks.org/operating-system-process-management-deadlock-introduction/

ในกรณีที่เรามี process อยู่ 2 ตัว โดยเรากำหนดให้เป็น Process1 และ Process2 ซึ่งแต่ละตัว ต่างครอบครองทรัพยาการอยู่กันคนละตัว แต่ทั้งคู่ต้องการทรัพยากรจากอีกฝั่ง ที่จะทำให้การทำงานเสร็จสมบูรณ์ ซึ่งทรัพยากรนั้นกำลังถูกใช้งานจากอีก process อยู่เช่นกัน ส่งผลให้ทั้ง 2 process ต้องรอซึ่งกันและกัน ไม่สามารถทำงานต่อได้

Deadlock Characterization

ลักษณะของสภาวะการติดตาย มีด้วยกัน 4 เงื่อนไข ซึ่งการเกิดสภาวะติดตาย จะเกิดขึ้นได้เมื่อ 4 เงื่อนไขนี้เกิดพร้อมกัน
1.) Mutual exclusion (การไม่เกิดร่วมกัน) : คือ เหตุการณ์ที่ process หนึ่ง สามารถถือครองทรัพยากรตัวหนึ่งได้ในขณะใดขณะหนึ่ง ซึ่งในขณะนั้น process ตัวอื่นจะไม่สามารถใช้ทรัยากรตัวนั้นได้
2.) Hold and wait (การครอบครองและการรอใช้ทรัพยากร) : คือ เหตุการณ์ที่ process หนึ่ง ถือครองทรัพยากรไว้แล้ว และทำการร้องขอทรัพยากรอีกตัวที่กำลังถูกใช้อยู่ ส่งผลให้ process นั้น เกิดการรอ
3.) No Preemptive (การไม่แย่งชิงทรัพยากร) : คือ เหตุการณ์ที่ทรัพยากรจะถูกปลดปล่อยไปให้ process อื่นใช้งานต่อ เมื่อ process เดิมที่ถือครองใช้งานเสร็จแล้ว
4.) Circular wait (การรอแบบวงกลม) : คือ เหตุการณ์ที่ process หลายๆตัว ต่างรอทรัพยากรจาก process อีกตัว กันเป็นวงกลม ยกตัวอย่างเช่น P1 รอ P2 P2 รอ P3 และ P3 รอ P1

Deadlock Prevention

การป้องกันสภาวะติดตาย โดยจะป้องกันในช่วงของการแจกจ่ายในส่วนของทรัพยากรให้แก่ process โดยมีแนวคิดให้เงื่อนไขจาก 1 ใน 4 ของ Deadlock Characterization ไม่เกิดขึ้น ซึ่งมีวิธีการป้องกันดังนี้
1.) ทำให้ Mutual exclusion ไม่เกิดขึ้น โดยการยอมให้ process สามารถเข้าถึงทรัพยากรตัวเดียวกัน ได้หลายๆ process
2.) ทำให้ไม่มีการ Hold and wait โดยการให้ process ใช้งานทรัพยากรเดิมให้เสร็จก่อน จึงจะสามารถร้องขอทรัพยากรตัวอื่น มาใช้งานได้
3.) ทำให้เป็น Preemptive โดยเมื่อ แล้ว process ที่ถือครองทรัพยากรอยู่แล้วเกิดทำการร้องขอทรัพยากรเพิ่ม ซึ่งการขอครั้งนั้นไม่สำเร็จ process นั้นจะทำการปล่อยทรัพยากรทั้งหมดไปยังส่วนที่เก็บทรัพยากรที่ไม่สามารถแจกจ่ายโดย และ process นี้จะสามารถกลับมาทำงานได้ก็ต่อเมื่อทรัพยากรที่ต้องการ สามารถแจกจ่ายได้ครบ
4.) ทำให้ไม่มี Circular wait โดยจะกำหนดเลขลำดับให้แก่ process และทรัพยากร ซึ่งวิธีนี้จะเป็นการกำหนดลำดับความสำคัญ ในการร้องขอทรัพยากรสำหรับ process

--

--

Nutchasan Jantarah

Faculty of Computer Engineering at Prince Of Songkla University