นงลักษณ์ พรมทอง วิเชษฐ์ พลายมาศ นงลักษณ์ พรมทอง วิเชษฐ์ พลายมาศ ภาวะติดตาย Deadlocks
Deadlocks The Deadlock Problem System Model Deadlock Characterization Methods for Handling Deadlocks Deadlock Prevention Deadlock Avoidance Deadlock Detection Recovery from Deadlock
Chapter Objectives เพื่อศึกษาแนวคิดพื้นฐานเกี่ยวกับปัญหาของภาวะติดตาย ซึ่งเป็นกลุ่มของกระบวนการที่ทำงานในภาวะพร้อมกันเพื่อให้ภารกิจของตนเสร็จสิ้น เพื่อศึกษาวิธีการที่แตกต่างกันในการจัดการกับภาวะติดตาย โดยการป้องกันหรือการหลีกเลี่ยง
ปัญหาภาวะติดตาย The Deadlock Problem กลุ่มของกลุ่มกระบวนการที่ต่างฝ่ายต่างรอคอยทรัพยากรที่กำลังถูกถือครองโดยกระบวนการอื่นอยู่ Example ระบบที่มีเทปไดรฟ์ 2 ชุด P1 และ P2 ต่างฝ่ายต่างถือเทปไดรฟ์อยู่ และรอเทปไดรฟ์จากอีกฝ่ายหนึ่ง. semaphores A and B, initialized to 1 P0 P1 wait (A); wait(B) wait (B); wait(A)
Bridge Crossing Example จราจรเดินรถได้เพียงคันเดียวบนสะพาน ไม่สามารถสวนกันได้ สะพานแต่ละแห่ง เปรียบได้กับทรัพยากรชุดหนึ่งๆ ถ้าเกิดภาวะติดตายขึ้น สามารถแก้ได้โดยยอมให้รถคันหนึ่งถอยไปจากสะพาน (บังคับให้ปลดปล่อยทรัพยากร และย้อนกลับ -preempt resources and rollback) บางทีจำเป็นต้องถอยรถออกจากสะพานจำนวนหลายคัน จึงจะสามารถแก้ปัญหาภาวะติดตายได้ อาจเกิดภาวะต่างฝ่ายต่างรอซึ่งกันและกัน (Starvation)
แบบจำลองระบบ System Model ทรัพยากรแบ่งออกเป็นหลายชนิด R1, R2, . . ., Rm รอบซีพียู, พื้นที่หน่วยความจำ, อุปกรณ์ไอ/โอ ทรัพยากรแต่ละชนิด (Ri) จะมีจำนวนที่คงที่ (Wi). แต่ละกระบวนการ จะใช้ประโยชน์จากทรัพยากร ดังนี้ : ร้องขอ (request) ใช้ (use) ปลดปล่อย (release)
คุณลักษณะของภาวะติดตาย Deadlock Characterization ภาวะติดตายอาจเกิดขึ้นได้ถ้าประสบกับเงื่อนไขทั้ง 4 ข้อต่อไปนี้เกิดขึ้นในเวลาเดียวกันในระบบ การไม่เกิดร่วม (mutual exclusion) มีทรัพยากรอย่างน้อยหนึ่งหน่วยที่ถือไว้ในภาวะที่ไม่สามารถแบ่งปันได้ (nonsharable mode) มีเพียงกระบวนการเท่านั้นที่ใช้ทรัพยากรนั้นได้ ถือ-และ-รอ (hold-and-wait) มีกระบวนการกำลังครอบครองทรัพยากรอย่างน้อยหนึ่งหน่วย และกำลังรอคอยทรัพยากรอื่นเพิ่มเติม โดยที่ทรัพยากรนั้นกำลังถูกใช้อยู่โดยกระบวนการอื่นในขณะนั้น ไม่มีการบังคับ (no preemption) ทรัพยากรเหล่านั้นไม่สามารถถูกบังคับได้ จะถูกปลดปล่อยออกมาเองภายหลังจากกระบวนการใช้จนเสร็จสิ้น การรอเป็นวงกลม (circular wait) จะต้องมีเซ็ต {P0, P1, …, Pn} ของกระบวนการที่กำลังรอคอย กล่าวคือ P0 กำลังรอทรัพยากรที่ถูกถือไว้โดย P1 ในขณะที่ P1 ก็กำลังรอทรัพยากรที่ถือไว้โดย P2 ต่อเนื่องเช่นนี้ไปเรื่อยๆ จนถึง Pn-1 กำลังรอทรัพยากรที่ถูกถือไว้โดย Pn และ Pn ก็กำลังรอทรัพยากรที่ถูกถือไว้โดย P0
ตัวอย่างภาวะติดตายของการจราจรบริเวณสี่แยก
กราฟการจัดสรรทรัพยากร Resource-Allocation Graph กราฟการจัดสรรทรัพยากรระบบ (system resource-allocation graph) กราฟนี้ประกอบด้วยเซ็ตของจุดยอด V และเซ็ตของเส้นเชื่อม E เส้นของจุดยอด V แบ่งออกเป็น 2 ประเภท P = {P1, P2, …, Pn} เป็นเซ็ตที่ประกอบด้วยกระบวนการทั้งหมดในระบบ R = {R1, R2, …, Rm} เป็นเซ็ตที่ประกอบด้วยทรัพยากรทั้งหมดในระบบ เส้นเชื่อมจากกระบวนการ Pi ไปยังทรัพยากร Rj แทนด้วย P1 Rj หมายความว่า กระบวนการ Pi ร้องขอทรัพยากรของ Rj และขณะนี้กำลังรอทรัพยากรนั้นอยู่ เส้นเชื่อมจากทรัพยากร Rj ไปยังกระบวนการ Pi แทนด้วย assignment edge – directed edge Rj Pi หมายความว่า ทรัพยากร Rj ถูกจัดสรรให้แก่กระบวนการ Pi
Resource-Allocation Graph (Cont.) กระบวนการ Process ทรัพยากรที่มี 4 หน่วย Pi ร้องขอ Rj Pi กำลังถือ Rj Pi Rj Pi Rj
ตย. กราฟการจัดสรรทรัพยากร
ตย. กราฟการจัดสรรทรัพยากรที่เกิดภาวะติดตาย
ตย. กราฟการจัดสรรทรัพยากรแต่ไม่เกิดภาวะติดตาย
ข้อสังเกต ถ้ากราฟการจัดสรรทรัพยากรไม่มีวงกลม แสดงว่าระบบไม่เกิดสถานะของภาวะติดตาย ถ้ากราฟการจัดสรรทรัพยากรมีวงกลม แสดงว่าระบบอาจเกิดสถานะของภาวะติดตายหรือไม่ก็ได้ โดยที่ ถ้ามี 1 หน่วยต่อ 1 ทรัพยากร แสดงว่าเกิดภาวะติดตาย ถ้ามีหลายหน่วยต่อทรัพยากร อาจเป็นไปได้ที่จะเกิดภาวะติดตาย
วิธีการควบคุมภาวะติดตาย Methods for Handling Deadlocks วิธีที่ใช้ในการจัดการกับปัญหาภาวะติดตายมี 3 วิธี เราอาจใช้เกณฑ์วิธีเพื่อประกันว่า ระบบจะไม่มีโอกาสเข้าสู่สถานะของภาวะติดตาย (ป้องกัน-prevention) เรายินยอมให้มีการเกิดภาวะติดตายได้ และจากนั้นจะใช้การกู้คืน (กู้คืน-recovery) เราสามารถหลีกเลี่ยงปัญหาภาวะติดตาย และอ้างว่าภาวะติดตายไม่เกิดขึ้นในระบบ (หลีกเลี่ยง-avoidance) วิธีที่ 3 นิยมนำไปใช้ในระบบปฏิบัติการส่วนใหญ่ รวมทั้งยูนิกซ์ ส่วน JVM ไม่มีการจัดการกับภาวะติดตาย เพราะยกให้นักพัฒนาแอพพลิเคชันเขียนโปรแกรมเพื่อควบคุมภาวะติดตาย
การป้องกันภาวะติดตาย Deadlock Prevention การป้องกันไม่ให้เงื่อนไขทั้ง 4 ประการเกิดขึ้น เงื่อนไข การไม่เกิดร่วม (Mutual Exclusion) ห้ามร้องขอทรัพยากรที่ใช้ร่วมกัน (sharable resources) โดยจะถือครองได้เฉพาะทรัพยากรประเภทไม่สามารถใช้ร่วมกัน (nonsharable resources) ได้เท่านั้น เงื่อนไข ถือและรอ (Hold and Wait) ต้องประกันว่า เมื่อไรก็ตามที่กระบวนการใดๆ ร้องขอทรัพยากร กระบวนการนั้นจะต้องไม่ถือทรัพยากรอื่นใดอยู่เลยในขณะนั้น วิธีการคือ แต่ละกระบวนการที่ร้องขอจะต้องได้รับทรัพยากรทั้งหมดก่อนที่จะเริ่มกระทำการ -หรือ- จะยินยอมให้เฉพาะกระบวนการที่ไม่ถือทรัพยากรใดๆ อยู่ในมือเท่านั้นที่มีสิทธิ์ร้องขอทรัพยากรใหม่ได้ ดังนั้น ก่อนที่จะเริ่มร้องขอทรัพยากรเพิ่ม กระบวนการนั้นจะต้องปลดปล่อยทรัพยากรที่กำลังถืออยู่ทั้งหมดออกไปเสียก่อน ข้อด้อย มีการใช้ประโยชน์ทรัพยากรต่ำ และมีความเป็นไปได้ที่อาจเกิดภาวะรอแบบไม่รู้จบ
Deadlock Prevention (Cont.) เงื่อนไข ไม่มีการบังคับ (No Preemption) ถ้ากระบวนการที่กำลังถือทรัพยากรบางอย่างอยู่ร้องขอทรัพยากรอื่นเพิ่มเติม แต่ทรัพยากรนั้นยังไม่สามารถจัดสรรให้ได้ในขณะนั้น กระบวนการนั้นจะต้องถูกบังคับให้ปลดปล่อยทรัพยากรทั้งหมดที่กำลังถืออยู่ และทรัพยากรเหล่านี้จะถูกใส่เพิ่มเข้าไปในรายการของทรัพยากรที่กระบวนการกำลังรอ จากนั้น กระบวนการนั้นจะต้องเริ่มต้นร้องขอใหม่ทั้งหมด เช่นเดียวกับกระบวนการที่เพิ่งมาใหม่ เงื่อนไข การรอเป็นวงกลม (Circular Wait) ต้องทำการจัดอันดับทรัพยากรทุกประเภท การร้องขอจากกระบวนการใดๆ จะต้องถูกนำไปจัดอันดับด้วย
การหลีกเลี่ยงภาวะติดตาย Deadlock Avoidance ระบบจะต้องเพิ่มเติมข้อมูลเกี่ยวกับ ลำดับความสำคัญ (priori) วิธีที่ง่ายที่สุดและใช้ประโยชน์ได้มากก็คือ แต่ละกระบวนการจะต้องประกาศจำนวนทรัพยากรสูงสุดแต่ละประเภทที่จำเป็นต้องใช้ไว้ล่วงหน้า, จัดลำดับความสำคัญก่อนหลังของทรัพยากรแต่ละประเภทที่จำเป็นต้องใช้ หรืออาจต้องการใช้ในแต่ละกระบวนการ ขั้นตอนวิธีแบบหลีกเลี่ยงภาวะติดตายนั้น จะทำการตรวจสอบสถานะการจัดสรรทรัพยากรอยู่ตลอดเวลาเพื่อประกันว่าการจัดสรรนั้นจะไม่นำไปสู่เงื่อนไขการรอแบบวงกลม สถานะการจัดสรรทรัพยากร ระบุเกี่ยวกับจำนวนทรัพยากรที่ว่างอยู่ และที่กำลังถูกจัดสรร และความต้องการสูงสุดของกระบวนการทั้งหมด
สถานะปลอดภัย Safe State เพื่อประกันว่าการจัดสรรนั้นจะไม่นำไปสู่เงื่อนไขการรอแบบวงกลม เมื่อกระบวนการร้องขอทรัพยากรที่ว่างอยู่ ระบบจะตัดสินว่าจะจัดสรรให้หรือไม่โดยพิจารณาว่าระบบจะอยู่ในสถานะปลอดภัย หรือไม่ วิธีการที่นำเสนอในที่นี้จะใช้กราฟการจัดสรรทรัพยากรเข้ามาช่วย ด้วยการตรวจสอบว่ากราฟนั้นเป็นวงกลมหรือไม่ และใช้ในการตัดสินใจว่าจะจัดสรรทรัพยากรอย่างไรจึงจะไม่เกิดภาวะติดตายขึ้นในระบบ สมมุติว่า กระบวนการ Pi ร้องขอทรัพยากร Rj การร้องขอดังกล่าวจะได้รับอนุญาตได้ก็ต่อเมื่อ ถ้ามีการแปลงการร้องขอจากเส้นโยง Pi Rj ไปยังเส้นโยงมอบหมาย Pi Rj แล้วไม่ก่อให้เกิดผลลัพธ์เป็นวงกลมของกราฟการจัดสรรทรัพยากร การตรวจสอบสถานะปลอดภัย (safe state) หรือไม่ปลอดภัย (unsafe state) สามารถทำโดยได้โดยอาศัยขั้นตอนวิธีการตรวจหาวงกลม ซึ่งขั้นตอนวิธีการตรวจหาวงกลมนี้ต้องใช้เวลาปฏิบัติการในอันดับ n2 โดยที่ n คือจำนวนกระบวนการทั้งหมดในระบบ
เงื่อนไขพื้นฐาน ถ้าไม่เกิดวงกลมก็แสดงว่าการจัดสรรทรัพยากรดังกล่าวก็ถือว่าระบบอยู่ในสถานะปลอดภัย (safe state -ไม่เกิดภาวะติดตาย) ถ้าพบว่า เกิดวงกลม ก็ถือว่าอยู่ในสถานะไม่ปลอดภัย (unsafe state) ขั้นตอนวิธีแบบหลีกเลี่ยง ต้องประกันว่าระบบจะต้องไม่เข้าสู่อาณาบริเวณของสถานะไม่ปลอดภัยในขณะใดขณะหนึ่ง
Safe, Unsafe , Deadlock State
Resource-Allocation Graph Algorithm การเพิ่มเส้นโยงเรียกร้อง (claim edge) เข้าไปจากเดิมที่มีเพียงเส้นโยงร้องขอกับเส้นโยงมอบหมาย โดยที่ เส้นโยงเรียกร้องของ Pi Rj แสดงว่า กระบวนการ Pi เรียกร้องเพื่อจะขอใช้ทรัพยากร Rj ในอนาคตอันใกล้นี้ เส้นโยงเรียกร้องจะแสดงเป็นเส้นประ เส้นโยงเรียกร้องจะแปลงไปเป็นเส้นโยงร้องขอ (request edge) เมื่อมีการร้องขอทรัพยากร เส้นโยงมอบหมาย (assignment edge) เมื่อทรัพยากรถูกปลดปล่อยโดยกระบวนการหนึ่ง เส้นโยงมอบหมายจึงจะถูกแปลงไปเป็นเส้นโยงเรียกร้อง ในระบบนี้ ทรัพยากรทั้งหมดจะถูกเรียกร้องตามลำดับความสำคัญ จะช่วยให้สามารถพยากรณ์สถานะของภาวะติดตายที่อาจเกิดขึ้นในระบบได้อย่างแม่นยำด้วยการตรวจสอบว่ากราฟนั้นเป็นวงกลมหรือไม่ และใช้ในการตัดสินใจว่าจะจัดสรรทรัพยากรอย่างไรจึงจะไม่เกิดภาวะติดตายขึ้นในระบบ
กราฟการจัดสรรทรัพยากรสำหรับการหลีกเลี่ยงภาวะติดตาย
สถานะไม่ปลอดภัยในกราฟการจัดสรรทรัพยากร
การตรวจหาภาวะติดตาย Deadlock Detection ยินยอมให้ระบบเข้าสู่สถานะของภาวะติดตายได้ (deadlock state) ขั้นตอนวิธีที่ใช้ตรวจสอบสถานะของระบบว่าเกิดภาวะติดตายหรือไม่ (Detection algorithm) ขั้นตอนวิธีที่ใช้กู้คืนจากภาวะติดตาย (Recovery scheme)
ทรัพยากรในระบบที่มีเพียงหน่วยเดียว สามารถใช้ขั้นตอนวิธีการตรวจหาภาวะติดตายด้วยการใช้กราฟการจัดสรรทรัพยากรที่เรียกว่า กราฟการรอ (wait-for graph) ในการตรวจหาภาวะติดตายนี้ ระบบจำเป็นต้องบำรุงรักษากราฟการรอ และเรียกใช้ขั้นตอนวิธีดังกล่าวเป็นระยะๆ เพื่อค้นหาวงกลมในกราฟ ขั้นตอนวิธีดังกล่าวต้องใช้เวลาปฏิบัติการในอันดับ O(n2) โดยที่ n คือจำนวนของยอดในกราฟ
Resource-Allocation Graph and Wait-for Graph (a) กราฟการจัดสรรทรัพยากร (b) ความสอดคล้องกันของกราฟการรอ
ทรัพยากรในระบบที่มีหลายประเภท ความพอเพียง Available: เป็นเว็กเตอร์ของขนาด m แสดงจำนวนของทรัพยากรแต่ละประเภทที่มีให้ใช้งาน การจัดสรร Allocation: เป็นแมทริกซ์ n x m ที่ระบุจำนวนทรัพยากรแต่ละประเภทในปัจจุบันที่ถูกจัดสรรให้แต่ละกระบวนการ การร้องขอ Request: เป็นแมทริกซ์ n x m ที่ แสดงการร้องขอในปัจจุบันของแต่ละกระบวนการ ถ้าการร้องขอ [ij] = k, แสดงว่า กระบวนการ Pi is กำลังร้องขอทรัพยากร k มากกว่าหนึ่งอย่างของทรัพยากร Rj
Detection Algorithm 1. Let Work and Finish be vectors of length m and n, respectively Initialize: (a) Work = Available (b) For i = 1,2, …, n, if Allocationi 0, then Finish[i] = false;otherwise, Finish[i] = true. 2. Find an index i such that both: (a) Finish[i] == false (b) Requesti Work If no such i exists, go to step 4.
Detection Algorithm (Cont.) 3. Work = Work + Allocationi Finish[i] = true go to step 2. 4. If Finish[i] == false, for some i, 1 i n, then the system is in deadlock state. Moreover, if Finish[i] == false, then Pi is deadlocked. ขั้นตอนวิธีดังกล่าวต้องใช้เวลาปฏิบัติการในอันดับ O(m x n2) ในการตรวจหาว่าระบบเกิดสถานะภาวะติดตายหรือไม่
Example of Detection Algorithm Five processes P0 through P4; three resource types A (7 instances), B (2 instances), and C (6 instances). Snapshot at time T0: Allocation Request Available A B C A B C A B C P0 0 1 0 0 0 0 0 0 0 P1 2 0 0 2 0 2 P2 3 0 3 0 0 0 P3 2 1 1 1 0 0 P4 0 0 2 0 0 2 Sequence <P0, P2, P3, P1, P4> will result in Finish[i] = true for all i.
Example (Cont.) P2 requests an additional instance of type C. Request A B C P0 0 0 0 P1 2 0 1 P2 0 0 1 P3 1 0 0 P4 0 0 2 State of system? Can reclaim resources held by process P0, but insufficient resources to fulfill other processes; requests. Deadlock exists, consisting of processes P1, P2, P3, and P4.
เงื่อนไขการเลือกอัลกอริธึมแบบการตรวจหา Detection-Algorithm Usage ในการเลือกใช้ขั้นตอนวิธีการตรวจหา จะต้องพิจารณาปัจจัยต่อไปนี้ ภาวะติดตายจะเกิดขึ้นบ่อยแค่ไหน มีกระบวนการที่จะได้รับผลกระทบจากการเกิดภาวะติดตายเป็นจำนวนเท่าไร ถ้าภาวะติดตายเกิดขึ้นบ่อย ขั้นตอนวิธีการตรวจหาดังกล่าวก็ควรถูกเรียกใช้บ่อย ทรัพยากรทั้งหมดที่ถูกจัดสรรให้กับกระบวนการที่อยู่ในภาวะติดตายจะสูญเปล่าจนกว่าภาวะติดตายจะถูกกำจัด ยิ่งไปกว่านั้น กระบวนการที่อาจเข้าไปเกี่ยวข้องกับภาวะติดตายก็อาจเพิ่มจำนวนขึ้นเรื่อยๆ
การกู้คืนจากภาวะติดตาย: การเลิกกระบวนการ Recovery from Deadlock: Process Termination ทำการเลิกกลางคันกระบวนการทั้งหมดที่เกิดภาวะติดตาย ทำการยกเลิกกลางคันทีละกระบวนการไปจนกระทั่งยุติภาวะติดตาย ปัจจัยที่สามารถใช้เป็นแนวทางในการพิจารณาได้ดังต่อไปนี้ ลำดับความสำคัญของกระบวนการนั้น กระบวนการนั้นจะใช้เวลาเท่าไรในการคำนวน และต้องใช้เวลาคำนวณอีกนานเท่าไรก่อนที่จะเสร็จภารกิจที่ได้รับมอบหมาย จำนวนและประเภทของทรัพยากรที่กระบวนการนั้นกำลังใช้อยู่ (ตัวอย่างเช่น ทรัพยากรที่กระบวนการนั้นใช้อยู่สามารถบังคับวางได้ง่ายหรือไม่) มีทรัพยากรอีกจำนวนเท่าไรที่กระบวนการนั้นจะต้องใช้อีกจนกว่างานจะเสร็จ มีกระบวนการที่จำเป็นต้องถูกยกเลิกจำนวนเท่าไร กระบวนการนั้นเป็นเชิงโต้ตอบหรือเชิงกลุ่ม
การกู้คืนจากภาวะติดตาย: การบังคับทรัพยากร Resource Preemption ปัจจัยที่พึงพิจารณา การเลือกเหยื่อ (selection of a victim) ต้องมีค่าใช้จ่ายต่ำที่สุด การย้อนกลับ (rollback) – การกลับคืนไปสู่สถานะปลอดภัย, เริ่มต้นกระบวนการนั้นใหม่ การรอคอยอย่างไม่มีที่สิ้นสุด (Starvation) บางกระบวนการอาจถูกเลือกเป็นเหยื่อทุกครั้งที่เกิดภาวะติดตาย จึงควรคำนึงว่า นโยบายการเลือกเหยื่อใดๆ ก็ตามต้องมั่นใจว่ากระบวนการที่ถูกเลือกนั้นจะตกเป็นเหยื่อเพียงในช่วงสั้นๆ เท่านั้น
End of Deadlock วิเชษฐ์ พลายมาศ | ระบบปฏิบัติการ (OS: Operating Systems) | ภาวะติดตาย (Deadlock) | 36