Deadloc ks
วันนี้เราเริ่มต้นเรียนบทที่ 7 เริ่มในหน้า 237 ในตำรา เรียนของคุณ. บทนี้จะเกี่ยวกับ deadlocks คือ สิ่งที่คุณรู้, มันคือ สิ่งที่ทำให้ application หรือบางครั้งคอมพิวเตอร์เกิดอาการ "hang" แม้ฮาร์ดแวร์จะเป็นปกติ แต่เราต้องการทราบสิ่ง ที่เพิ่มเติมเกี่ยวกับสิ่งเหล่านี้ เราต้องเรียนรู้มันต่อไป deadlock คือสิ่งที่เราควรจะกำหนดขึ้นอย่างแม่นยำ โดยทั่วไปก็คือเมื่อกำหนด processes ( หรือ เทรด ) มี วงจร dependency ที่มีลูปอนันต์ หนังสือเล่มนี้กล่าว ในทางคลุมเครือในวรรคแรกของบท วรรคนั่นคือในระบบ multiprogramming กระบวนการหลายอย่างอาจมีการ แย่งทรัพยากรที่มีจำนวนจำกัด คำร้องขอของโปรเซสและทรัพยากรที่ไม่สามารถ ใช้ได้ ในขณะที่กระบวนการจะ เข้าสู่สภาวะรอ. บางครั้ง กระบวนการที่รออยู่ไม่สามารถเปลี่ยนสถานะเนื่องจาก ทรัพยากรที่มี มีการร้องขอจะมีการเกิดขึ้น สถานการณ์นี้ เรียกว่า deadlocks
แต่ให้คุณคิดว่ามีสองคน คนหนึ่งมีชื่อผู้ใช้และอีกคน มีรหัสผ่าน. ถ้าคุณมีทั้งสองอย่างคุณสามารถดาวน์ โหลดคำตอบจากการบ้าน ตัวอย่างสมมุติว่า person 1 มีขั้นตอนวิธีการดังนี้ person1: get username get password access account, download stuff release password release username ok, แต่ person 2 มีขั้นตอนวิธีการที่แตกต่าง : person2: get password get username access account, download stuff release username release password
ที่จริงมันควรจะมีวิธีการที่เหมือนกัน ลองดูการทำ context switch ของเครื่องคอมพิวเตอร์ ฉัน จะใส่ person 1 เข้าไปใน column ทางซ้ายและ person 2 เข้าไปใน column ทางขวา 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) D E A D L O C K person 1 ต้องรอ password จาก person 2 จะทำ เสร็จ person 2 ต้องรอ username จาก person 1 จะทำ เสร็จ
ดังนั้นถ้าคุณ ' โชคดี ' และทั้งสองได้รับการรัน โดยไม่ต้องมีการ context switch ในระหว่างนั้น และไม่มีใครได้รับสอง resources ดังนั้นจะไม่มี ปัญหาเกิดขึ้น แต่เราไม่สามารถรับประกันว่าจะไม่ เคยมี context switch เกิดขึ้นหรือดังนั้นไม่มีใครที่ จะมีทรัพยากรเมื่อเราเริ่มการใช้ ด้วยเหตุนี้เราจึงมีบทที่ 7 เพื่ออธิบายเกี่ยวกับ deadlocks. เราจำเป็นต้อง เรียนรู้วิธีการตรวจสอบ deadlocks และหลีกเลี่ยง การเกิดของ deadlocks มากที่สุด ลักษณะของ deadlock 1.Mutual exclusion - ทรัพยากรไม่สามารถใช้ ร่วมกัน 2.Hold & Wait - ถ้าโปรเซสสามารถถือครอง ทรัพยากรที่ตัวเองได้รับก็สามารถทำการร้องขอ ทรัพยากรเพิ่มเติมได้ 3. No preemption - ถ้าโปรเซสกำลังใช้งาน ทรัพยากรอยู่ และระบบไม่สามารถบังคับให้โปรเซส นั้นปล่อยทรัพยากรนั้นให้เป็นอิสระได้ 4. Circular wait คือ เกิดวงจรรอคอย
และถ้าเมื่อ 4 เหล่านี้เป็นจริงก็สามารถมีการ เกิด deadlocks หากแม้หนึ่งของเหล่านี้เป็นเท็จ, การเกิด deadlocks. เพื่อให้เห็นว่าตอนนี้เรารู้วิธีการ โจมตีปัญหาการหลีกเลี่ยงการเกิด deadlocks. เรา ต้องค้นหาวิธีการรับประกันหนึ่งใน 4 เหล่านี้เป็นเท็จ. หากเราสามารถทำที่เราสามารถรับประกันการเกิด deadlocks จะไม่เกิดขึ้น การป้องกันการเกิด deadlocks 1. ระบุลำดับทรัพยากรทั้งหมด. จำนวนทรัพยากรแต่ ละสิ่งไม่สามารถมีหมายเลขซ้ำๆ. 2. รหัสของคุณต้องได้รับทรัพยากรในลำดับ ascending และต้องได้รับทรัพยากรทั้งหมดก่อนจะ ทำงาน 3. รหัสของคุณต้องปล่อยทรัพยากรลำดับ descending หลังการทำงาน นี่คืองาน ลำดับแรก username คือ 1 password คือ 2
ต่อไป ปรับปรุง person 2 ให้อยู่ในลำดับที่ถูกต้อง ตอนนี้ person 1 และ person 2 มีลำดับที่ถูกต้องแล้ว ในตัวอย่างนี้ person 1 and person 2 มีลักษณะ คล้ายๆ กัน แต่ไม่เหมือนกันทั้งหมด person1: get username [1] get password [2] access account, download stuff release password [2] release username [1] person2: get username [1] get password [2] access account, download stuff release password [2] release username [1] คอมพิวเตอร์จะทำ context switch เราจะวาง กระบวนการที่ 1 ในคอลัมน์ซ้ายและกระบวนการ 2 ใน คอลัมน์ขวา
get username (context switch) [wait because cannot get username] (context switch) get password (context switch) [keep waiting] (context swtich) access account, download stuff (context switch) [still waiting] (context switch)
release password (context swtich) [waiting some more] (context switch) release username (context switch) get username สามารถดูงานนี้โดยไม่เกิด deadlocks แม้การ context switch. ปัญหาในตัวอย่างนี้จะแก้ไขจะอธิบายวิธีการ ทำงาน. หากไม่สามารถป้องกัน deadlocks โดยวิธีนี้ ( อาจจะเป็นรหัสที่เขียนโดยนักเรียนหรือผู้ใช้ ) จะ สามารถทำอะไร ? ตรวจสอบ deadlocks: ใช้อัลกอลึทึมของกราฟเพื่อวงจร รอบเมื่อกระบวนการไม่ได้เปลี่ยนสถานะไปที่นาที X ทำลาย deadlocks: หากคุณพบ deadlocks, ดูวงจร และกำจัดหนึ่งกระบวนการ. ตรวจสอบการ deadlocks ใหม่และทำซ้ำไม่มี deadlocks