Chapter7b Deadlock
Daedlocl ( วงจรอัป ) คือ สภาวะที่โพรเซส บางตัวหรือทุกตัวไม่สามารถทำงานต่อไปได้ ส่วนใหญ่เกิดจากการใช้ทรัพยากรร่วมกันแล้ว เกิดการแย่งชิง ทรัพยากรกัน การเกิด deadlock จะมีเงื่อนไขในการเกิด เมื่อ 1) ทรัพยากรเป็นแบบใช้ร่วมกันไม่ได้ (Mutual Exclusion) - หนึ่งโพรเซสเท่านั้นที่จะใช้ทรัพยากรได้ โดยที่อีกโพรเซสต้องรอ 2) ถือครองแล้วรอคอย (Hold and Wait) - มีโพรเซสตัวหนึ่งใช้ทรัพยากรอยู่ โดยที่มี การรอคอยทรัพยากรอีก ตัว หนึ่งซึ่งทรัพยากรตัวนี้ถูกครอบครองโดยโพ รเซสอีกตัวหนึ่ง Deadlock
Deadlock ( ต่อ ) 3) ไม่มีการแทรกกลางคัน (No Preemtion) - ทรัพยากรจะถูกคืนเมื่อโพรเซสต้องการคืน หากไม่มีการคืนระบบปฏิบัติการจะทำอะไรไม่ได้ 4) รอคอยเป็นวงกลม (Circular Wait) - เป็นการรอคอยแบบงูกินหาง กฎของ deadlock ซึ่งทุกๆโพรเซสจะต้องดำเนินการตามเงื่อนไข ดังต่อไปนี้ 1) การร้องขอ (Request) จะตองรอจนกว่าจะ ได้ทรัพยากรนั้น 2) การใช้งาน (Use) ต้องใช้งานจนเสร็จ เรียบร้อย 3) การคืนทรัพยากร (Release) เมื่อใช้ ทรัพยากรเสร็จเรียบร้อยแล้วต้อง คืนกลับสู่ระบบ
ภาพแสดงเหตุการณ์ของการเกิด deadlock
จากภาพดังกล่าว คือ การที่ทรานแซกชันที่ 2 รอ คอยเพื่อใช้ทรัพยากร ได้แก่ ข้อมูลใน ฐานข้อมูลหรืออุปกรณ์อื่นๆ ที่กำลังถูกล็อกไว้และใช้ งานโดยทรานแซกชัน ที่ 1 จึงทำให้ทราน แซกชันที่ 2 ไม่สามารถจะเรียกใช้ทรัพยากรนั้นใน ขณะเดียวกันได้ ดังนั้น ทรานแซกชันที่ 2 จะต้อง รอจนกว่า ทรานแซกชันที่ 1 จะทำงานเสร็จและ คลายล็อก (unlock) ทรัพยากรนั้นเสียก่อน อย่างไร ก็ตามทรานแซกชันที่ 1 ก็ยังไม่สามารถทำงานใดๆ ต่อได้ เพราะทรานแซกชันที่ 1 ต้องการเรียกใช้ ทรัพยากรที่กำลัง ถูกใช้งาน และถูกล็อกไว้ โดยทรานแซกชันที่ 2 จึงทำให้ทรานแซกชันที่ 1 ต้องรอ ทรานแซกชันที่ 2 ทำงานนั้นให้เสร็จ และคลายล็อกทรัพยากรนั้นเสียก่อน โดยที่ทั้ง 2 ทรานแซกชัน ต่างไม่รู้ว่าตนเองรอทรัพยากรของ อีกฝ่ายซึ่งต่างฝ่ายต่างล็อกไว้ และกำลังใช้ งานอยู่ดังนั้นจึงไม่มีทรานแซกชันใดสามารถจะ ดำเนินการใดต่อไปได้ จะต้องอยู่ในสภาพ หยุดนิ่ง และรอไปเรื่อยๆไม่รู้จบ