80 likes | 356 Views
Deadlocks. oslecture07. Deadlocks คืออะไร?. Deadlocks คือ บางสิ่งที่เราควรจะใช้กำหนดความถูกต้อง โดยพื้นฐานมันจะเกิดขึ้นเมื่อเซตของโปรเซสหรือเทรดต้องทำงานร่วมกันเป็นวัฏจักร ซึ่งเป็นการวนลูปที่ไม่สิ้นสุด ในย่อหน้าแรกของหนังสือกล่าวถึงสิ่งนี้ว่ามันค่อนข้างที่จะเป็นเรื่องยาก ซึ่งมีดังนี้
E N D
Deadlocks oslecture07
Deadlocks คืออะไร? • Deadlocksคือ บางสิ่งที่เราควรจะใช้กำหนดความถูกต้อง โดยพื้นฐานมันจะเกิดขึ้นเมื่อเซตของโปรเซสหรือเทรดต้องทำงานร่วมกันเป็นวัฏจักร ซึ่งเป็นการวนลูปที่ไม่สิ้นสุด ในย่อหน้าแรกของหนังสือกล่าวถึงสิ่งนี้ว่ามันค่อนข้างที่จะเป็นเรื่องยาก ซึ่งมีดังนี้ “ในทรัพยากรของการทำงานแบบหลายโปรแกรม หลายๆโปรเซสจะแย่งชิงจำนวนทรัพยากรที่มีอยู่จำกัด โปรเซสจะทำการร้องขอทรัพยากร และถ้าทรัพยากรไม่สามารถใช้ประโยชน์ได้ในขณะนั้น โปรเซสจะเข้าสู่สถานะที่รอการทำงาน บางทีโปรเซสที่กำลังรอก็จะไม่ได้เปลี่ยนสถานะ เพราะว่าทรัพยากรนั้นถูกเรียกใช้โดยโปรเซสอื่นๆที่กำลังรอ สถานการณ์นี้เรียกว่า Deadlocks”
Deadlocks Deadlocks Example • person #1 จะมีอัลกอริทึม ดังนี้ : person1: get username get password access account, download stuff release password release username • person 2 จะมีอัลกอริทึมต่างจาก person1 เพียงเล็กน้อย ดังนี้: person2: get password get username access account, download stuff release username release password
Deadlocks • จำไว้ว่าคอมพิวเตอร์สามารถทำ context switch ได้ตลอดเวลา ดังนั้นเราจะวางโปรเซสแรกในคอลัมน์ทางซ้ายมือ และโปรเซสที่สองในคอลัมน์ทางขวามือ ดังนี้ get username (context switch) get password (process 2 hangs trying to get username, since process 1 has it) (context switch) (process 1 hangs trying to get password, since process 2 has it)
Deadlocks • person 1 จะต้องรอพาสเวิร์ดซึ่ง person 2 มีแล้วperson 2 จะต้องรอชื่อผู้ใช้ซึ่ง person 1 มีแล้ว • ดังนั้น ถ้าถูกต้อง หรือทั้งสองโปรเซสสามารถรันได้โดยไม่เกิด context switch ในระหว่างการทำงาน ก็แสดงว่าไม่มีปัญหา แต่ก็ไม่สามารถที่รับรองได้ว่า จะไม่มีcontext switch เกิดขึ้นภายหลัง
4 ปัจจัยของการเกิด Deadlocks • Mutual exclusion- จะไม่ใช้ทรัพยากรร่วมกัน • Hold & Wait - เมื่อคุณได้รับทรัพยากร อย่าปล่อยมันไปจนกระทั่งเมื่อคุณได้ใช้งาน • No preemption - ไม่มีผู้ใด (O/S) สามารถนำมันไปที่อื่น และให้มันกับคนอื่นๆ • Circular wait- ปัยหาจะเป็นในลักษณะกราฟทิศทางเดียว หรือ กราฟวงกลม โดยกราฟจะแสดงการรอ dependencies – ถ้ากราฟเป็นวงกลม จะมี circular wait
4 ปัจจัยของการเกิด Deadlocks (ต่อ) • ถ้าหนึ่งในที่กล่าวมานี้มีความผิดพลาดเกิดขึ้น เป็นไปไม่ได้ที่จะไม่มีการgกิดdeadlock ดังนั้นสิ่งที่เห็นอยู่ขณะนี้ เราก็จะรู้แล้วว่าต้องทำอย่างไรที่จะกำจัดปัญหาของ deadlock เราต้องหาทางที่จะทำให้แน่ใจได้ว่าหนึ่งใน 4 ข้อเงื่อนไข คือสิ่งที่ผิด ถ้าเราสามารถทำได้ เราจะสามารถแน่ใจได้ว่าจะไม่มี deadlock เกิดขึ้น
การแบ่ง circular wait • การแบ่ง circular wait ซึ่งเป็นเทคนิคที่จะป้องกันการเกิด deadlock ได้แก่ 1. กำหนดขอบเขตของทรัพยากรทั้งหมด กำหนดตัวเลขสำหรับทรัพยากร แต่คุณต้องไม่เพิ่มตัวเลขเป็นสองเท่า 2. รหัสของคุณจะต้องได้รับทรัพยากรในรายการ และจะต้องได้รับทรัพยากรทั้งหมดก่อนงาน 3. รหัสของคุณจะต้องปล่อยทรัพยากรสำหรับงาน