360 likes | 659 Views
Chapter 4 : Dead Lock. Computer Operating System ระบบปฏิบัติการคอมพิวเตอร์. วัตถุประสงค์. วงจรอับคืออะไร เงื่อนไขที่ทำให้เกิดวงจรอับ แผนภาพแสดงของวงจรอับ การป้องกันการเกิดวงจรอับ การหลีกเลี่ยงวงจรอับ วิธีการตรวจสอบการกู้คืนเมื่อเกิดวงจรอับ การที่ไม่ต้องสนใจอะไรเลย
E N D
Chapter 4 : Dead Lock Computer Operating System ระบบปฏิบัติการคอมพิวเตอร์
วัตถุประสงค์ • วงจรอับคืออะไร • เงื่อนไขที่ทำให้เกิดวงจรอับ • แผนภาพแสดงของวงจรอับ • การป้องกันการเกิดวงจรอับ • การหลีกเลี่ยงวงจรอับ • วิธีการตรวจสอบการกู้คืนเมื่อเกิดวงจรอับ • การที่ไม่ต้องสนใจอะไรเลย • สรุปวิธีการเกิดวงจรอับ
วงจรอับ (Dead Lock) Introduction • ระบบคอมพิวเตอร์ประกอบด้วยทรัพยากร(resource) จำนวนมาก • ทรัพยากรเหล่านี้ถูกเรียกใช้ได้ทีละ 1 โปรเซส • เช่น เครื่องพิมพ์, ดีสก์ไดรฟ์, harddisk เป้าหมาย • ทรัพยากรจะต้องถูกครอบครองเพียง 1 โปรเซสเท่านั้น ณ เวลาใดเวลาหนึ่ง ปัญหา • มีหลายโปรแกรมทำงานในเวลาพร้อม ๆ กัน • 1 โปรแกรมมีหลายโปรเซส • แต่ละโปรเซสต้องการทรัพยากร ซึ่งบางครั้งอาจเป็นทรัพยากรเดียวกันก็ได้
วงจรอับ (Dead Lock) • โปรเซส A ขอใชสแกนเนอร์ และได้ใช้ • โปรเซส B ขอใชเครื่องเขียนซีดี (CD writer) และได้ใช้ • โปรเซส A ขอใช้เครื่องเขียนซีดีบ้าง แต่ B ไม่ยอม • ในขณะเดียวกัน B เกิดร้องขอเพื่อใช้สแกนเนอร์บ้าง ซึ่ง A กำลังใช้อยู่ • ต่างคนต่างไม่ได้ใช้ทรัพยากรของแต่ละฝ่าย โปรเซส A ร้องขอ ครอบครอง ครอบครอง ร้องขอ โปรเซส B รูปที่ 4.1 การเกิดวงจรอับโดยโปรเซสทั้งสองต่างรอใช้ทรัพยากร
4.1 วงจรอับคืออะไร (Dead Lock) “วงจรอับ (Deadlock) คือกลุ่มของโปรเซสที่ถูกปฏิเสธไม่ให้ทำงาน (blocking) อันมีผลสืบ เนื่องมาจากการแย่งชิงทรัพยากร หรือการสื่อสาร โดยที่โปรเซสในกลุ่มต่างรอคอยสัญญาณ ทำงานที่จะเกิดขึ้นได้เฉพาะจากโปรเซสภายในกลุ่มนี้เท่านั้น” ภาพที่ 4.2 การเกิดวงจรอับ
4.2 เงื่อนไขการเกิดวงจรอับ วงจรอับอาจจะเกิดขึ้นก็ต่อเมื่อเงื่อนไขทั้งสามข้อต่อไปนี้ 1. เมื่อทรัพยากรที่ไม่สามารถถูกใช้ร่วมกันได้หลาย ๆ โปรเซสพร้อมกันได้ (Mutual exclusion condition) 2. เมื่อมีการถือครองและรอ (hold and wait condition) 3. เมื่อการทำงานในระบบไม่มีการแทรกกลางครัน (no preemptive condition) ไม่สามารถบังครับให้มีการปลดปล่อยทรัพยากรได้ 4. เกิดวงจรรอคอย (Circuit wait condition) ทรัพยากร A ครอบครอง ครอบครอง Process A Process B ร้องขอ ร้องขอ ทรัพยากร B
4.3 แผนภาพของวงจรอับ กราฟจัดสรรทรัพยากร • ลูกศรจากโหนดทรัพยากรชี้ไปหาโหนดโปรเซส หมายถึง ทรัพยากรนั้นได้ถูกร้องขอและโปรเซสนั้นก็ได้ใช้ไปแล้ว และกำลังถือครองอยู่ ในรูป ทรัพยากร R ในขณะนั้นถูกโปรเซส A ถือครองอยู่ A โปรเซส R ทรัพยากร การถือครองทรัพยากร
4.3 แผนภาพของวงจรอับ กราฟจัดสรรทรัพยากร • ลูกศรจากโหนดโปรเซสชี้ไปหาโหนดทรัพยากร หมายถึง โปรเซสในขณะนั้นกำลังรอคอยทรัพยากรนั้นอยู่ โปรเซส B กำลังรอทรัพยากร S S ทรัพยากร B โปรเซส การรอคอยทรัพยากร
4.3 แผนภาพของวงจรอับ กราฟจัดสรรทรัพยากร • ในรูปที่ 4.4 (ค) จะเห็นได้ว่ามีวงจรอับเกิดขึ้น โปรเซส C กำลังรอคอยที่จะใช้ทรัพยากร T ซึ่งในขณะนั้นก็ถูกถือครองโดยโปรเซส D โปรเซส D เองไม่สามารถปล่อยทรัพยากร T ได้ เพราะว่าตัวเองก็กำลังรอคอยทรัพยากร U ที่ถือครองโดยโปรเซส C เช่นกัน โปรเซสทั้งสองก็จะรอคอยอย่างไม่มีที่สิ้นสุด แผนภาพวงกลมในกราฟแสดงว่าวงจรอับนั้นเกี่ยวข้องกับโปรเซสและทรัพยากรที่มีเส้นกราฟต่อกันเป็นลูกโซ่ โดยจากตัวอย่างในรูปนั้น คือ วงจร C-T-D-U-C D T U C (ค) วงจรอับ
4.3 แผนภาพของวงจรอับ สมมุติว่า ในระบบมีโปรเซส 3 ตัว คือ A, B และ C และทรัพยากร 3 ตัว คือ R, S และ T การร้องขอและการปล่อยทรัพยากรของทั้งสามโปรเซส ดังรูป ระบบปฏิบัติการมีอิสระในการอนุญาตให้โปรเซสใดทำงานหรือป้องกันไม่ให้โปรเซสงานใดทำงานก็ได้ โดยอาจจะเริ่มจากให้ A ทำงานจนกว่า A จะทำงานเสร็จ และจึงให้ B ทำงานจนเสร็จ แล้ว C จึงทำงานต่อ ลักษณะการกำหนดให้โปรเซสทำงานดังกล่าวจะไม่ทำให้เกิดวงจรอับอย่าง แน่นอน เพราะไม่มีการแข่งขันในการใช้ทรัพยากรร่วมกับโปรเซสอื่น
4.3 แผนภาพของวงจรอับ A B C A B C A B C R S T R S T R S T A request R B request S C request T A B C A B C A B C R S T R S T R S T A request S B request T C request R กำหนดให้โปรเซสสามารถทำการคำนวณและแสดงผลพร้อมกันได้ การจัดการ ตารางทำงานที่เหมาะสมควรเป็นการทำงานแบบหมุนเวียนกันไป หรือ round robin นั่นเอง
4.3 แผนภาพของวงจรอับ A B C A B C A B C R S T R S T R S T A request R C request T A request S A B C A B C A B C R S T R S T R S T C request R A dedicate R A request S ถ้าคาดว่าวงจรอับจะเกิดขึ้น ระบบอาจจะระงับไม่ให้โปรเซส B ได้รับทรัพยากร S และให้เพียงโปรเซส A และ C ทำงานก่อน ทำให้ได้ลำดับของการร้องขอและการปล่อยทรัพยากรเป็นดังรูป
4.4 การป้องกันการเกิดวงจรอับ 4.4.1 การให้ใช้ทรัพยากรร่วมกันได้ (Mutual exclusion prevention) - ทรัพยากรในระบบไม่อนุญาตให้หลายโปรเซส ใช้งานพร้อมๆ กันได้ - วิธีการแก้ไขระบบปฏิบัติการจะต้องจัดการให้โปรเซสในระบบสามารถใช้งาน ทรัพยากรเหล่านั้นร่วมกันได้ (เช่น ไฟล์ข้อมูล ระบบอาจจะอนุญาตให้หลายโปรเซส เข้าถึงไฟล์ข้อมูลนั้นได้ โดยมีการกำหนดให้มีการเข้าถึงเป็นแบบอ่านได้อย่างเดียว (read only)) - เครื่องพิมพ์ไม่สามารถใช้ทรัพยากรร่วมกันได้ อาจจะใช้วิธีสพูลลิ่งเข้ามาช่วย โดยใช้พื้นที่ดิสก์เป็นตัวรับเอาต์พุตแทนเครื่องพิมพ์
4.4 การป้องกันการเกิดวงจรอับ 4.4.2 การป้องกันการถือครองและรอคอย (Hold and wait prevention) - อนุญาตให้โปรเซสร้องขอทรัพยากรที่ต้องการทั้งหมดก่อน และจะไม่อนุญาตให้ โปรเซสนั้นทำงานจนกว่าจะได้รับทรัพยากรที่ร้องขอไปพร้อมกันทั้งหมดก่อน - วิธีการนี้จะทำให้ระบบปฏิบัติการทำงานอย่างไม่มีประสิทธิภาพ เพราะอย่างแรก โปรเซสจะต้องถือครองทรัพยากรเป็นเวลานานในขณะที่รอให้ตัวเองได้รับทรัพยากร ทั้งหมดก่อนจึงจะทำงานได้ ทั้งๆ ที่โปรเซสเหล่านั้นเพียงได้รับทรัพยากรบางตัวก็ สามารถทำงานก่อนได้เลย - บางทรัพยากรที่ถูกครอบครองโดยโปรเซสอาจจะยังไม่ได้ถูกใช้งาน และโปรเซสอื่นก็ ไม่สามารถเรียกนำไปใช้ได้ด้วย
4.4 การป้องกันการเกิดวงจรอับ 4.4.3 ยอมให้มีการแทรกกลางครัน (Preemptable) - ระบบจะไม่ยอมให้โปรเซสร้องขอทรัพยากรจนกว่าจะปลดปล่อยทรัพยากรของตัวเอง - ถ้าโปรเซสต้องการเพิ่มต้องปล่อยทรัพยากรแล้วทำการขอใหม่ - ระบบสามารถแทรกได้กลางครัน ใช้ได้กับระบบที่มีสิทธิและลำดับความสำคัญ (priority)
4.4 การป้องกันการเกิดวงจรอับ 4.4.4 การป้องกันการเกิดวงจรรอคอย (Circular wait protection) - โปรเซสจะร้องขอได้เฉพาะทรัพยากรที่อยู่ในลำดับสูงกว่าเท่านั้น เช่น ถ้าโปรเซสกำลังถือครองทรัพยากร S อยู่ และต่อมาโปรเซสนี้ได้ทำการร้องขอ ทรัพยากร ซึ่งระบบจะอนุญาตให้โปรเซสนั้นร้องขอได้เฉพาะทรัพยากรที่อยู่ในลำดับ ที่สูงกว่า S การป้องกันวิธีนี้จะส่งผลให้การทำงานของระบบปฏิบัติการไร้ประสิทธิภาพโดยจะ ทำให้การประมวลผลช้าลงและมีการปฏิเสธการใช้งานของทรัพยากรโดยไม่มีความ จำเป็น
4.4 การป้องกันการเกิดวงจรอับ
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.1 แนวเส้นของการใช้ทรัพยากร - วิธีการคิด หรืออัลกอริทึ่มของการหลีกเลี่ยงการเกิดวงจรอับวิธีนี้มีพื้นฐานอยู่บน แนวความคิดคือ ต้องการให้ระบบอยู่ในสถานะที่ปลอดภัย (safe state) - แผนภาพจะถูกใช้เพื่อแสดงแนวความคิดของคำว่า “อยู่ในสถานะที่ปลอดภัย” - ในบางครั้งการใช้แผนภาพจะไม่สามารถสื่อความหมายโดยตรงเกี่ยวกับการใช้ อัลกอริทึ่มนี้ก็ตาม แต่สามารถทำให้เราเข้าใจความหมายของปัญหาและหนทางแก้ไข ได้มากขึ้น
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.1 แนวเส้นของการใช้ทรัพยากร B u (โปรเซสทั้งสอง เสร็จเรียบร้อย เครื่องพิมพ์ I8 I7 I6 t I5 พล็อตเตอร์ r s A p q I1 I2 I3 I4 เครื่องพิมพ์ พล็อตเตอร์
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.2 การปฏิเสธให้โปรเซสทำงาน (ระบบที่มีโปรเซส nตัว และมีทรัพยากรต่างชนิด กัน mตัว) โดยมีการนิยามเวกเตอร์และแมตทริกซ์ ดังนี้ แมตทริกซ์ Claim แสดงถึงความต้องการทรัพยากรแต่ละชนิดสูงสุดของแต่ละโปรเซส โดยให้แต่ละแถวแทนโปรเซส 1 ตัว นั่นคือ Cij = จำนวนทรัพยากร j ที่โปรเซส i ต้องการ
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.2 การปฏิเสธให้โปรเซสทำงาน Aij = จำนวนทรัพยากร j ที่ถูกครอบครองโดยโปรเซส i
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.2 การปฏิเสธให้โปรเซสทำงาน Cij = จำนวนทรัพยากร j ที่โปรเซส i ต้องการ Aij = จำนวนทรัพยากร j ที่ถูกครอบครองโดยโปรเซส i • ทรัพยากรทั้งหมดจะเท่ากับทรัพยากรที่ว่างรวมกับทรัพยากรที่ถูกครอบครอง Ri = Vi + Aki • ไม่มีโปรเซสใดร้องขอได้มากกว่าจำนวนทรัพยากรที่มีอยู่ทั้งหมด Cki Ri • ไม่มีโปรเซสใดที่สามารถครอบครองทรัพยากรมากกว่าที่ตัวเองร้องขอในตอนแรก Aki Cki • จะเริ่มโปรเซสใหม่ก็ต่อเมื่อ Ri C(n+1) +Cki
4.5.3 การปฏิเสธไม่ให้ครอบครองทรัพยากร 4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) • Banker’s Algorithm • ลูกค้าเปรียบได้กับโปรเซส เงินเปรียบได้กับทรัพยากร • หลักทั่วไป *** ธนาคารมีสิทธิปฏิเสธการให้กู้ได้ ธนาคารมีจำนวนเงินจำกัด ลูกค้าต้องการกู้ในวงเงินสูงสุด ลูกค้าจะชำระคืนเมื่อได้รับเงินจากธนาคาร
4.5.3 การปฏิเสธไม่ให้ครอบครองทรัพยากร 4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) • ให้ B ทำงานเสร็จก่อนโดยเพิ่มทรัพยากรให้อีก 2 ตัว • เมื่อ B ทำงานเสร็จและคืนทรัพยากรสู่ระบบ • กำหนดให้ C ทำงานโดยให้ทรัพยากรเพิ่มดังรูป (ง) • เมื่อ C ทำงานเสร็จแล้วจะได้ผลดังรูป (จ) ทำให้ A สามารถทำงานจนเสร็จสมบูรณ์ได้ HAS MAX HAS MAX HAS MAX HAS MAX HAS MAX Free 3 Free 1 Free 5 Free 0 Free 7 (ก) (ข) (ค) (ง) (จ) โดย HAS คือ ทรัพยากรที่ได้รับ MAX คือ ทรัพยากรที่ต้องการทั้งหมด ตัวอย่างการแสดงของสถานะที่ปลอดภัย
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.3 การปฏิเสธไม่ให้ครอบครองทรัพยากร HAS MAX HAS MAX HAS MAX HAS MAX Free 3 Free 2 Free 0 Free 4 (ก) (ข) (ค) (ง) ตัวอย่าง การแสดงของสถานะที่ไม่ปลอดภัย • ให้การตัดสินใจจาก (ก) ไป (ข) เป็นการตัดสินใจที่นำพาระบบเข้าสู่สถานะที่ไม่ปลอดภัย • แต่ไม่ได้หมายความว่าระบบจะเข้าสู่วงจรอับเสมอ วิธีแก้ไข ระบบควรปฏิเสธการร้องขอการครอบครองทรัพยากรของโปรเซส A
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.4 วิธีการทำงานแบบนายธนาคารสำหรับระบบที่มีทรัพยากรหลายตัว • R = [6342] ทรัพยากรที่มีอยู่ทั้งหมด Allocate (A) Claim (C) เครื่องพิมพ์ เครื่องพิมพ์ พล็อตเตอร์ โปรเซส พล็อตเตอร์ โปรเซส ซีดีรอม ซีดีรอม เทป เทป • P = [5322] ทรัพยากรที่ถูกครอบครองในขณะนั้น V = R – P • V = [1020] ทรัพยากรที่ว่าง
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.4 วิธีการทำงานแบบนายธนาคารสำหรับระบบที่มีทรัพยากรหลายตัว Allocate (A) Claim (C) เครื่องพิมพ์ เครื่องพิมพ์ พล็อตเตอร์ โปรเซส พล็อตเตอร์ โปรเซส ซีดีรอม ซีดีรอม เทป เทป • V = [1020] นำมาเทียบกับ ค่าที่อยู่ในแมตทริกซ์ C แล้วนำค่าจาก Allocate (A) มารวมกับค่า V ก็จะได้ค่าทรัพยากรที่ว่าง หลังจากมีการคืนค่าทรัพยากรจากโปรเซสที่ทำงานเสร็จแล้ว ทำจนครบทุกโปรเซสที่อยู่ในระบบ
4.5 การหลีกเลี่ยงการเกิดวงจรอับ (Avoidance) 4.5.4 วิธีการทำงานแบบนายธนาคารสำหรับระบบที่มีทรัพยากรหลายตัว วิธีการตรวจสอบดูว่าระบบอยู่ในสถานะปลอดภัยหรือไม่ • เริ่มตรวจสอบแถวของโปรเซสในตาราง C ว่ามีแถวใดบ้างที่มีจำนวนทรัพยากรที่ต้องการน้อยกว่าหรือเท่ากับ V ถ้าไม่มีแสดงว่าอยู่ในวงจรอับแล้ว • สมมุติว่ามี 1 แถวที่สามารถได้รับทรัพยากรแต่ละตัวทั้งหมด (เช่นโปรเซส D) และทำงานได้ ให้ทำเครื่องหมายว่าทำงานสำเร็จและคืนทรัพยากรสู่ระบบ • ทำซ้ำข้อ 1 และ 2 จนกระทั่งทุกโปรเซสทำงานเสร็จ
4.6 วิธีการตรวจสอบและกู้คืนเมื่อเกิดวงจรอับ 4.6.1 ขั้นตอนการตรวจหาวงจรอับ • ทำการตรวจทุกครั้งที่มีการร้องขอ • สามารถตรวจพบวงจรอับได้รวดเร็ว • กำหนดเวลาได้ง่าย ข้อเสีย ต้องเสียเวลาในการตรวจ
4.6 วิธีการตรวจสอบและกู้คืนเมื่อเกิดวงจรอับ 4.6.1 ขั้นตอนการตรวจหาวงจรอับ • อัลกอริธึม • เริ่มต้นโปรเซสไม่มีเครื่องหมายใด ๆ • ทำเครื่องหมายบนโปรเซสทุกตัว ที่มีค่าของแถวในแมตริกซ์ A เป็น 0 หมด • สร้างเวกเตอร์ W ให้มีค่าเท่ากับเวกเตอร์ V • ค้นหาตำแหน่งแถวที่ I โดยที่โปรเซส I จะต้องไม่ถูกทำเครื่องหมายแล้ว และแถวที่ i ของ Q มีค่าน้อยกว่าหรือเท่ากับ W นั่นคือ Qjk Wk,สำหรับทุกค่าของ 1 k m ถ้าไม่พบแถวตามที่กำหนดให้หยุดการทำงาน • ถ้าพบแถวตรงตามเงื่อนไข ให้ทำเครื่องหมายที่โปรเซส i และเพิ่มค่าของ W โดยการบวกเพิ่มค่าของแถวที่ตรงกันในแมตริกซ์ A นั่นคือให้ Wk = Wk + Ajk
4.6.1 ขั้นตอนการตรวจหาวงจรอับ 4.6 วิธีการตรวจสอบและกู้คืนเมื่อเกิดวงจรอับ วิธีการตรวจหาวงจรอับ • ทำเครื่องหมายที่โปรเซส P4 เพราะว่า P4 ไม่มีทรัพยากรในครอบครอง • กำหนดให้ W = [00001] • ทรัพยากรที่โปรเซส P3 ต้องการน้อยกว่าหรือเท่ากับ W ดังนั้นให้ทำเครื่องหมายที่ P3 และเพิ่มค่า W = W + [00010] = [00011] • ออกจากการตรวจสอบ R1 R2 R3 R4 R5 R1 R2 R3 R4 R5 R1 R2 R3 R4 R5 R P1 P3 P4 P1 P3 P4 เวกเตอร์ทรัพยากร P2 P2 R1 R2 R3 R4 R5 V แมตริกซ์ (Q) ที่ร้องขอ แมตริกซ์ (A) การครอบครองทรัพยากร เวกเตอร์ทรัพยากรที่เหลือ
4.6 วิธีการตรวจสอบและกู้คืนเมื่อเกิดวงจรอับ 4.6.2 ขั้นตอนการกู้คืนระบบ วิธีที่สามารถนำไปใช้ในการกู้คืนระบบ 1. ยกเลิกการทำงานของแต่ละโปรเซสที่เกิดวงจรอับ • เลือกโปรเซสที่ได้ใช้เวลาของตัวประมวลผลไปแล้วน้อยที่สุด • เลือกโปรเซสที่ได้ให้ผลลัพธ์ หรือเอาต์พุตออกมาแล้วน้อยที่สุด • เลือกโปรเซสที่ได้ครอบครองทรัพยากรไปแล้วน้อยที่สุด • เลือกโปรเซสที่มีลำดับความสำคัญ หรือ priority น้อยที่สุด • เลือกโปรเซสที่ยังต้องการเวลาในการทำงานมากที่สุด 2. ทำการแทรกหรือเรียกทรัพยากรคืนจากโปรเซสทีละตัวจนกว่าวงจรอับจะหายไป 3. ยกเลิกการทำงานของทุกโปรเซสที่เกิดวงจรอับ 4. ทำการสำรองข้อมูลของทุกโปรเซสที่เกิดวงจรอับไปยังจุดที่ทำการตรวจสอบก่อนหน้านี้