วันศุกร์ที่ 21 กันยายน พ.ศ. 2555

แบบฝึกหัด ข้อ 11


11. การติดตาย (deadlock) คืออะไร สาเหตุสำคัญที่ทำให้เกิดการติดตายมีอะไรบ้าง อธิบาย และยกตัวอย่างประกอบ
ตอบ การติดตาย (deadlock) คือ เหตุการณ์ที่ทรานแซกชันรอการใช้ข้อมูลที่ถูกล็อกโดยการทรานแซกชันอื่นอย่างไม่รู้จบในลักษณะเป็นลูกโซ่ เหมือนงูกินหาง เช่น การที่ทรานแซกชันที่ 2 รอคอยเพื่อใช้ทรัพยากร ได้แก่ ข้อมูลในฐานข้อมูลหรืออุปกรณ์อื่นๆ ที่กำลังถูกล็อกไว้และใช้งานโดยทรานแซกชันที่ 1 จึงทำให้ทรานแซกชันที่ 2 ไม่สามารถจะเรียกใช้ทรัพยากรนั้นในขณะเดียวกันได้ ดังนั้นทรานแซกชันที่ 2 จะต้องรอจนกว่าทรานแซกชันที่ 1 จะทำงานเสร็จและคลายล็อก (unlock) ทรัพยากรนั้นเสียก่อน อย่างไรก็ตามทรานแซกชันที่ 1 ก็ยังไม่สามารถทำงานใดๆ ต่อได้ เพราะทรานแซกชันที่ 1 ต้องการเรียกใช้ทรัพยากรที่กำลังถูกใช้งานและถูกล็อกไว้โดยทรานแซกชันที่ 2 จึงทำให้ทรานแซกชันที่ 1 ต้องรอทรานแซกชันที่ 2 ทำงานนั้นให้เสร็จและคลายล็อกทรัพยากรนั้นเสียก่อน โดยที่ทั้ง 2 ทรานแซกชันต่างไม่รู้ว่าตนเองรอทรัพยากรของอีกฝ่ายซึ่งต่างฝ่ายต่างล็อกไว้และกำลังใช้งานอยู่ ดังนั้นจึงไม่มีทรานแซกชันใดสามารถจะดำเนินการใดต่อไปได้ จะต้องอยู่ในสภาพหยุดนิ่งและรอไปเรื่อยไม่รู้จบ เหตุการณ์ลักษณะนี้เรียกว่า เดดล็อก (dead lock) ดังภาพที่  แสดงเหตุการณ์ที่เกิดเดดล็อก
ภาพที่ 1 แสดงเหตุการณ์ของการเกิดเดดล็อก
จากภาพเกิด deadlock ขึ้นได้เนื่องจาก ณ เวลา t1 transaction 1 กำลังใช้ข้อมูล Y อยู่และในขณะเดียวกัน transaction 2 ก็กำลังใช้ข้อมูล X อยู่ ในช่วงเวลา t2 transaction 2 ต้องการใช้ข้อมูล Y ซึ่ง transaction 1 ยังใช้อยู่ ส่วน transaction 2 ก็ยังใช้ข้อมูล X ที่ transaction 1 ต้องการใช้อยู่ ลักษณะนี้จะทำให้เกิด deadlock ขึ้น
สาเหตุสำคัญที่ทำให้เกิดการติดตาย
•การไม่เกิดร่วม (Mutual Exclusion)
oในกรณีที่เป็นทรัพยากรที่ไม่สามารถใช้ร่วมกันได้ ทาให้ทรัพยากรถูกใช้งานได้เพียงครั้งละ 1 โปรเซส คือ ขณะเวลาหนึ่งจะมีเพียงโปรเซสเดียวที่ใช้งานทรัพยากรได้ ไม่สามารถมีโปรเซสอื่นใช้งานทรัพยากรพร้อมกันได้
•การครอบครองและการรอใช้ทรัพยากร (Hold and Wait)
oโปรเซสที่ได้ครอบครอง (hold) ทรัพยากรอยู่แล้ว ต้องการใช้ทรัพยากรอื่นเพิ่มเติม และร้องขอทรัพยากรที่มีสถานะไม่ว่าง ทาให้โปรเซสต้องรอ (Wait)
•การไม่แย่งชิงทรัพยากร (No Preemptive)
oโปรเซสที่รอใช้ทรัพยากรต่อจากโปรเซสอื่น (ที่กาลังใช้ทรัพยากรนั้นอยู่) จะต้องรอจนกว่าโปรเซสนั้นๆ ทางานเสร็จ และปลดปล่อยทรัพยากร โปรเซสไม่สามารถแย่งชิงทรัพยากรจากโปรเซสอื่นได้
•การรอแบบวงกลม (Circulate Wait)
oโปรเซสเกิดการรอเป็นวัฏจักร (P0, P1, P2, …, Pn) โดย
P0 รอทรัพยากรที่ถูกครอบครองโดย P1
P1 รอทรัพยากรที่ถูกครอบครองโดย P2
Pn-1 รอทรัพยากรที่ถูกครอบครองโดย Pn
Pn รอทรัพยากรที่ถูกครอบครองโดย P0
การเกิดติดตายจะต้องมีครบทั้ง 4 เงื่อนไข โดยเงื่อนไขทั้ง 4 ข้อนี้ ไม่ได้เป็นอิสระต่อกัน คือ ถ้าเกิดการรอแบบวงกลมแล้ว จะทาให้เกิดการครอบครองและรอ เป็นต้น
ตัวอย่าง การติดตาย

ไม่มีความคิดเห็น:

แสดงความคิดเห็น