06.09.2015 Views

บทที่ 5 การติดตาย (Deadlocks)

บทที่ 5 การติดตาย (Deadlock)

บทที่ 5 การติดตาย (Deadlock)

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>บทที่</strong> 5 <strong>การติดตาย</strong><br />

(<strong>Deadlocks</strong>)


<strong>การติดตาย</strong> (<strong>Deadlocks</strong>)<br />

• การท างานร่วมกันของโปรเซสหลายโปรเซส (ในระบบมัลติโปรแกรมมิ่ง) เมื่อ<br />

โปรเซสต้องการใช้ทรัพยากร จะต้องร้องขอทรัพยากรจากระบบ โดยสามารถ<br />

ขอใช้ทรัพยากรให้ได้จ านวนมากที่สุด เพื่อให้โปรเซสสามารถท างานได้เสร็จสิ้น<br />

แต่ไม่สามารถร้องขอทรัพยากรมากเกินกว่าที่ระบบมีอยู่จริง<br />

• เมื่อโปรเซสต้องการใช้ทรัพยากรของระบบ โปรเซสต้องท าตามล าดับขั้นตอน<br />

ต่างๆ ต่อไปนี้<br />

oการร้องขอ (Request)<br />

oการใช้งาน (Use)<br />

oการคืน (Release)


<strong>การติดตาย</strong> (<strong>Deadlocks</strong>)<br />

oการร้องขอ (Request)<br />

เมื่อโปรเซสต้องการใช้ทรัพยากรใดๆ จะต้องท าการร้องขอทรัพยากรนั้นจาก<br />

ระบบ โดยระบบจะตรวจสอบว่า ทรัพยากรที่ถูกร้องขอว่างหรือไม่<br />

กรณีที่ทรัพยากรว่าง โปรเซสจะได้รับการจัดสรรทรัพยากรทันที<br />

แต่ถ้าทรัพยากรไม่ว่าง (ถูกใช้งานโดยโปรเซสอื่น) โปรเซสที่ร้องขอจะต้อง<br />

รอจนกว่าจะได้รับทรัพยากรที่ต้องการ


<strong>การติดตาย</strong> (<strong>Deadlocks</strong>)<br />

oการใช้งาน (Use)<br />

เมื่อโปรเซสได้รับทรัพยากรที่ต้องการแล้ว โปรเซสสามารถใช้งานทรัพยากร<br />

ที่ได้รับ เช่น เครื่องพิมพ์ เมื่อได้รับการจัดสรรเครื่องพิมพ์แล้ว โปรเซส<br />

สามารถพิมพ์ข้อมูลออกทางเครื่องพิมพ์ได้<br />

oการคืน (Release)<br />

โปรเซสต้องคืนทรัพยากรที่ใช้เสร็จแล้วกลับสู่ระบบ เพื่อเปิดโอกาสให้<br />

โปรเซสอื่นที่ต้องการใช้ทรัพยากรนั้น ได้รับการจัดสรรทรัพยากรต่อไป


<strong>การติดตาย</strong> (<strong>Deadlocks</strong>)<br />

บางครั้งเมื่อโปรเซสต้องการใช้ทรัพยากร และร้องขอทรัพยากรจากระบบ<br />

แต่ทรัพยากรที่โปรเซสต้องการใช้ไม่ว่าง เนื่องจากโปรเซสอื่นก าลังใช้งานอยู่ ท า<br />

ให้โปรเซสนั้นๆ ต้องรอคอย และเป็นการรอคอยที่ไม่มีที่สิ้นสุด (โปรเซสไม่มี<br />

โอกาสได้รับการจัดสรรทรัพยากร) เรียกเหตุการณ์นี้ว่า <strong>การติดตาย</strong><br />

(<strong>Deadlocks</strong>)<br />

เช่น โปรเซส A ต้องการใช้เครื่องพิมพ์ แต่เครื่องพิมพ์ถูกใช้โดยโปรเซส<br />

B ท าให้โปรเซส A ต้องรอจนกว่าเครื่องพิมพ์จะว่าง ส่วนโปรเซส B อยู่ใน<br />

สถานะรอให้ทรัพยากรอื่นว่างเช่นกัน ท าให้โปรเซส A ไม่มีโอกาสได้รับจัดสรร<br />

ให้ใช้เครื่องพิมพ์ ซึ่งเป็นการรอคอยอย่างไม่มีที่สิ้นสุด


ตัวอย่างของ<strong>การติดตาย</strong><br />

ตัวอย่างของเหตุการณ์ที่เกิด<strong>การติดตาย</strong> เช่น <strong>การติดตาย</strong>ในการจราจร<br />

<strong>การติดตาย</strong>ในการใช้ทรัพยากร<br />

• <strong>การติดตาย</strong>ในการจราจร


ตัวอย่างของ<strong>การติดตาย</strong><br />

• <strong>การติดตาย</strong>ในการใช้ทรัพยากร<br />

<strong>การติดตาย</strong>ในการใช้ทรัพยากร เกิดขึ้นเนื่องจากแต่ละโปรเซสรอทรัพยากร<br />

ที่ถูกครอบครองโดยอีกโปรเซสหนึ่ง โดยที่ทรัพยากรเหล่านั้นเป็นทรัพยากร<br />

ที่ไม่สามารถใช้งานร่วมกันได้


ลักษณะของ<strong>การติดตาย</strong><br />

• การไม่เกิดร่วม (Mutual Exclusion)<br />

o ในกรณีที่เป็นทรัพยากรที่ไม่สามารถใช้ร่วมกันได้ ท าให้ทรัพยากรถูกใช้งานได้เพียงครั้ง<br />

ละ 1 โปรเซส คือ ขณะเวลาหนึ่งจะมีเพียงโปรเซสเดียวที่ใช้งานทรัพยากรได้ ไม่<br />

สามารถมีโปรเซสอื่นใช้งานทรัพยากรพร้อมกันได้<br />

• การครอบครองและการรอใช้ทรัพยากร (Hold and Wait)<br />

o โปรเซสที่ได้ครอบครอง (hold) ทรัพยากรอยู่แล้ว ต้องการใช้ทรัพยากรอื่นเพิ่มเติม<br />

และร้องขอทรัพยากรที่มีสถานะไม่ว่าง ท าให้โปรเซสต้องรอ (Wait)<br />

• การไม่แย่งชิงทรัพยากร (No Preemptive)<br />

o โปรเซสที่รอใช้ทรัพยากรต่อจากโปรเซสอื่น (ที่ก าลังใช้ทรัพยากรนั้นอยู่) จะต้องรอ<br />

จนกว่าโปรเซสนั้นๆ ท างานเสร็จ และปลดปล่อยทรัพยากร โปรเซสไม่สามารถแย่งชิง<br />

ทรัพยากรจากโปรเซสอื่นได้


ลักษณะของ<strong>การติดตาย</strong><br />

• การรอแบบวงกลม (Circulate Wait)<br />

o โปรเซสเกิดการรอเป็นวัฏจักร (P 0 , P 1 , P 2 , …, P n ) โดย<br />

P 0 รอทรัพยากรที่ถูกครอบครองโดย P 1<br />

P 1 รอทรัพยากรที่ถูกครอบครองโดย P 2<br />

…<br />

P n-1 รอทรัพยากรที่ถูกครอบครองโดย P n<br />

P n รอทรัพยากรที่ถูกครอบครองโดย P 0<br />

การเกิดติดตายจะต้องมีครบทั้ง 4 เงื่อนไข โดยเงื่อนไขทั้ง 4 ข้อนี้ ไม่ได้เป็นอิสระต่อกัน<br />

คือ ถ้าเกิดการรอแบบวงกลมแล้ว จะท าให้เกิดการครอบครองและรอ เป็นต้น


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

การป้องกันไม่ให้เกิด<strong>การติดตาย</strong>ขึ้น จะต้องท าให้เงื่อนไขอย่างน้อย 1 ข้อไม่เป็นจริง<br />

• ปฏิเสธการไม่เกิดร่วม (Denying the Mutual Exclusion condition)<br />

การไม่เกิดร่วมเกิดขึ้นในกรณีที่มีหลายโปรเซสต้องการใช้ทรัพยากรที่ไม่<br />

สามารถใช้ร่วมกันได้พร้อมๆ กัน เช่น เครื่องพิมพ์<br />

แต่ถ้าทรัพยากรที่โปรเซสต้องการใช้พร้อมกัน เป็นทรัพยากรที่ใช้ร่วมกัน<br />

ได้ เช่น การอ่านแฟ้ม โปรเซสสามารถเปิดและอ่านแฟ้มข้อมูลได้พร้อมกันโดย<br />

ไม่ต้องรอ ดังนั้นจะไม่เกิดสภาวะการไม่เกิดร่วม


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

• การป้องกัน<strong>การติดตาย</strong>ด้วยการปฏิเสธการไม่เกิดร่วม สามารถท าได้ด้วยการให้<br />

ระบบเลือกใช้เฉพาะทรัพยากรที่สามารถใช้ร่วมกันได้ ซึ่งเป็นไปได้ยากในทาง<br />

ปฏิบัติ เนื่องจากทรัพยากรหลายชนิดไม่สามารถใช้ร่วมกันได้ และระบบมีความ<br />

ต้องการใช้ทรัพยากรเหล่านั้น<br />

• บางระบบได้ก าหนดให้ส่งค าร้องขอใช้ทรัพยากรที่ไม่สามารถใช้ร่วมกันได้ของแต่<br />

ละโปรเซสเก็บไว้ในที่พัก (spool) บนทรัพยากรที่สามารถใช้ร่วมกันได้แทน<br />

เช่น ดิสก์ ท าให้หลายโปรเซสของระบบรู้สึกเหมือนว่า สามารถเรียกใช้<br />

ทรัพยากรที่ไม่สามารถใช้ร่วมกันได้พร้อมกัน


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

• ตัวอย่างเช่น ระบบคอมพิวเตอร์มีเครื่องพิมพ์ 1 เครื่อง ถ้าระบบมี 3 โปรเซส<br />

คือ โปรเซส A, B และ C ที่ท างานร่วมกัน และทั้ง 3 โปรเซสร้องขอ<br />

เครื่องพิมพ์พร้อมกัน<br />

• โปรเซส A ได้รับจัดสรรเครื่องพิมพ์ ดังนั้น ค าร้องขอใช้เครื่องพิมพ์ของโปรเซส<br />

B และ C ต้องถูกส่งเข้าที่เก็บพักบนดิสก์<br />

• เมื่อโปรเซส A ใช้เครื่องพิมพ์เสร็จเรียบร้อย จะปล่อยเครื่องพิมพ์กลับคืนให้<br />

ระบบ ระบบจะเรียกโปรเซสต่อไปที่รออยู่บนที่เก็บพักให้ได้รับจัดสรรเครื่องพิมพ์<br />

ต่อไป<br />

• จะเห็นว่า ทั้ง 3 โปรเซสสามารถเรียกใช้เครื่องพิมพ์ได้พร้อมๆ กัน


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

• ปฏิเสธการครอบครองและการรอ (Denying the Hold and Wait)<br />

เพื่อไม่ให้เกิดเงื่อนไขนี้ในระบบ ระบบจ าเป็นต้องรับประกันได้ว่า ขณะที่<br />

โปรเซสร้องขอทรัพยากร โปรเซสต้องไม่ได้ครอบครองทรัพยากรใดๆ ทั้งสิ้น<br />

วิธีการที่ท าได้คือ ก่อนที่โปรเซสจะเริ่มต้นการท างาน ให้แต่ละโปรเซสร้อง<br />

ขอทรัพยากรทั้งหมดที่ต้องการใช้จากระบบพร้อมกันในครั้งเดียว<br />

ถ้าระบบตรวจสอบได้ว่า ทรัพยากรที่โปรเซสร้องขอว่าง ระบบจะจัดสรร<br />

ทรัพยากรนั้นให้แก่โปรเซส<br />

ถ้าทรัพยากรนั้นๆ ไม่ว่าง โปรเซสก็จ าเป็นต้องรอ โดยที่โปรเซสจะเริ่มต้น<br />

การท างานได้ก็ต่อเมื่อ โปรเซสได้รับจัดสรรทรัพยากรที่ต้องการครบถ้วน และ<br />

ระหว่างการท างานโปรเซสไม่สามารถร้องขอทรัพยากรเพิ่มเติมได้อีก


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

ตัวอย่างเช่น โปรเซสต้องการคัดลอกข้อมูลจากเทปลงดิสก์ แล้ว<br />

เรียงล าดับ และพิมพ์ ดังนั้นทรัพยากรที่โปรเซสต้องการ คือ ตัวอ่านเทป<br />

ดิสก์ และเครื่องพิมพ์<br />

ในการป้องกัน<strong>การติดตาย</strong>ด้วยการปฏิเสธการครอบครองและการรอ<br />

ระบบจะต้องก าหนดให้โปรเซสร้องขอทรัพยากรทั้ง 3 ก่อนเริ่มต้นการท างาน<br />

แต่ในการท างานนั้น ทรัพยากรแต่ละชนิดไม่จ าเป็นต้องถูกเรียกใช้งานพร้อมกัน<br />

โดยทั่วไปการพิมพ์ผลลัพธ์ออกทางเครื่องพิมพ์จะเกิดขึ้นท้ายสุด แต่<br />

เครื่องพิมพ์ต้องถูกโปรเซสครอบครองตั้งแต่เริ่มต้น แม้ว่าเครื่องพิมพ์จะเป็น<br />

ทรัพยากรที่ถูกใช้งานท้ายสุดก็ตาม


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

การแก้ปัญหา<strong>การติดตาย</strong>วิธีนี้ เป็นผลให้ปริมาณการใช้งานของทรัพยากร<br />

ลดต่ าลงมาก และยังเป็นไปได้ที่จะเกิดปัญหาการอดตาย เนื่องจากโปรเซส<br />

ต้องการใช้ทรัพยากรหลายชนิด แต่อาจมีทรัพยากรบางชนิดที่ไม่ว่าง ท าให้<br />

โปรเซสต้องรอจนกว่าทรัพยากรนั้นจะว่าง<br />

แต่ปัญหาจะเกิดขึ้นถ้าโปรเซสอื่นที่ได้ทรัพยากรไป ไม่ยอมคืนทรัพยากร<br />

ให้ระบบ ท าให้โปรเซสที่ต้องการใช้ทรัพยากรต้องรออย่างไม่มีที่สิ้นสุด


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

• ปฏิเสธการไม่แย่งชิงทรัพยากร (Denying the No-Preemption condition)<br />

วิธีที่ 1<br />

วิธีนี้จะยอมให้โปรเซสสามารถแย่งชิงทรัพยากรที่ถูกครอบครองโดยโปรเซสอื่นได้<br />

ถ้ามีโปรเซสที่ได้ครอบครองทรัพยากรบางอย่าง ร้องขอทรัพยากรอื่นเพิ่มเติมจาก<br />

ระบบ แต่ทรัพยากรที่โปรเซสร้องขอนั้นไม่ว่าง ให้โปรเซสปลดปล่อยทรัพยากรทั้งหมดที่<br />

ครอบครองอยู่กลับคืนสู่ระบบ จากนั้นโปรเซสจึงร้องขอทรัพยากรใหม่ทั้งหมด จนกว่าจะได้<br />

ทรัพยากรที่ต้องการครบ โปรเซสจึงจะเริ่มต้นท างานได้<br />

ตัวอย่างเช่น เมื่อเริ่มต้นท างาน โปรเซส A ได้รับจัดสรรทรัพยากร R 1 และ R 2<br />

ในเวลาต่อมา โปรเซสร้องขอทรัพยากร R 3 ระบบตรวจสอบแล้วพบว่า ทรัพยากร R 3<br />

ถูกครอบครองโดยโปรเซส B ดังนั้น โปรเซส A ต้องปล่อยทรัพยากร R 1 และ R 2 คืน<br />

ให้ระบบ


วิธีที่ 2<br />

การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

ถ้ามีโปรเซสร้องขอทรัพยากรบางอย่างจากระบบ ให้ระบบตรวจสอบว่าทรัพยากรที่<br />

ถูกร้องขอนั้นว่างหรือไม่ กรณีที่ทรัพยากรนั้นไม่ว่าง ระบบต้องตรวจสอบต่อไปว่า<br />

ทรัพยากรนั้นถูกครอบครองโดยโปรเซสใด และโปรเซสนั้นก าลังรอทรัพยากรชนิดอื่น<br />

หรือไม่ (โปรเซสอยู่ในสถานะรอ)<br />

o ถ้าใช่ ให้ระบบแย่งชิงทรัพยากรนั้นจากโปรเซสที่ก าลังครอบครอง และน า<br />

ทรัพยากรนั้นมอบให้โปรเซสที่ร้องขอ<br />

o ถ้าไม่ใช่ ก็ให้โปรเซสที่ร้องขอทรัพยากรนั้น รอจนกว่าทรัพยากรที่ต้องการว่าง<br />

(โปรเซสไม่สามารถแย่งชิงทรัพยากรได้)


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

ตัวอย่างเช่น โปรเซส A ร้องขอทรัพยากร R 1 ให้พิจารณาว่า ระบบจะจัดสรร<br />

ทรัพยากรให้โปรเซส A หรือไม่ ในการพิจารณานั้นระบบต้องตรวจสอบก่อนว่า<br />

ทรัพยากร R 1 ว่างหรือไม่<br />

o ถ้าทรัพยากร R 1 ว่าง ระบบจะจัดสรรทรัพยากร R1 ให้โปรเซส A<br />

o ถ้าทรัพยากร R 1 ไม่ว่าง ระบบจะตรวจสอบต่อไปว่า ทรัพยากร R 1 ถูก<br />

ครอบครองโดยโปรเซสใด<br />

o ถ้า R 1 ถูกครอบครองโดยโปรเซส B และโปรเซส B ร้องขอทรัพยากร R 2 ซึ่งไม่ว่าง<br />

(โปรเซส B อยู่ในสถานะรอ) ให้ระบบแย่งทรัพยากร R 1 จากโปรเซส B และจัดสรร<br />

ทรัพยากร R 1 ให้กับโปรเซส A<br />

o ถ้า R 1 ถูกครอบครองโดยโปรเซส B และโปรเซส B ไม่ได้ร้องขอทรัพยากรอื่นๆ ที่ไม่<br />

ว่าง (โปรเซส B ไม่ได้อยู่ในสถานะรอ) ระบบจะไม่สามารถแย่ง R 1 จากโปรเซส B<br />

มาให้โปรเซส A ดังนั้น โปรเซส A ต้องรอจนกว่าทรัพยากร R 1 ว่าง


การป้องกัน<strong>การติดตาย</strong><br />

(Deadlock Prevention)<br />

• ปฏิเสธการรอแบบวงกลม (Denying the Circular Wait condition)<br />

เพื่อไม่ให้เกิดการรอแบบวงกลม ระบบจะก าหนดหมายเลขประจ า<br />

ให้แต่ละทรัพยากร และเมื่อมีการร้องขอทรัพยากรจากโปรเซสใดๆ จะ<br />

ต้องเป็นการร้องขอเรียงตามล าดับหมายเลขประจ าทรัพยากรจากน้อยไป<br />

มากเสมอ<br />

จากรูป โปรเซส P1 ได้ครอบครองทรัพยากร R 3 , R 4 , R 6 ,<br />

R 7 และได้ขอใช้ทรัพยากร R 8 ซึ่งจะไม่เกิดการรอแบบวงกลม เพราะ<br />

การขอใช้ทรัพยากรเป็นการขอแบบเรียงล าดับหมายเลขทรัพยากรจาก<br />

น้อยไปหามาก และถ้าโปรเซสต้องการทรัพยากรที่มีหมายเลขทรัพยากร<br />

ก่อนหน้า โปรเซสจะต้องคืนทรัพยากรคืนสู่ระบบทุกตัวเสียก่อน


การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

ระบบที่เกิด<strong>การติดตาย</strong>จะไม่สามารถท างานใดๆ ต่อไปได้ จ าเป็นต้องมี<br />

วิธีการก าจัด<strong>การติดตาย</strong>ที่เกิดขึ้น เพื่อกู้ระบบกลับคืนสู่สภาพที่ใกล้เคียงกับ<br />

สภาพก่อนที่จะเกิด<strong>การติดตาย</strong> เพื่อให้ระบบสามารถท างานที่ยังค้างอยู่ต่อไปได้<br />

วิธีการที่ใช้ก าจัด<strong>การติดตาย</strong>สามารถท าได้ 2 วิธี คือ<br />

1. การยกเลิกโปรเซส (Process Termination)<br />

2. การแย่งชิงทรัพยากรจากโปรเซส (Process Preemption)


1. การยกเลิกโปรเซส (Process Termination)<br />

การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

การก าจัด<strong>การติดตาย</strong>ด้วยการยกเลิกโปรเซส สามารถท าได้ 2 วิธี ซึ่งแต่<br />

ละวิธีนั้นระบบจะเรียกทรัพยากร (ที่ได้จัดสรรไปแล้ว) คืนจากโปรเซส จากนั้น<br />

จึงยกเลิกโปรเซส<br />

1.1 การยกเลิกทุกโปรเซสที่เกิด<strong>การติดตาย</strong><br />

วิธีนี้เป็นการก าจัด<strong>การติดตาย</strong>ด้วยการยกเลิกโปรเซสที่เกิด<strong>การติดตาย</strong><br />

ทั้งหมด แต่มีข้อเสียที่อาจมีบางโปรเซสที่ท างานมาเป็นเวลานานแล้ว และงาน<br />

ใกล้จะเสร็จสิ้นแล้ว แต่โปรเซสต้องถูกยกเลิกไป ท าให้โปรเซสต้องเสียเวลาและ<br />

เสียค่าใช้จ่าย เนื่องจากโปรเซสที่ถูกยกเลิกไปนั้นต้องเริ่มต้นท างานใหม่


1.2 การยกเลิกทีละหนึ่งโปรเซส<br />

การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

วิธีนี้เป็นการยกเลิกโปรเซสทีละหนึ่งโปรเซส จนกว่า<strong>การติดตาย</strong>จะถูก<br />

ก าจัดออกไป โดยที่หลังจากแต่ละโปรเซสถูกยกเลิกหรือก าจัดไปนั้น ระบบต้อง<br />

เรียกอัลกอริทึมตรวจสอบ<strong>การติดตาย</strong> เพื่อตรวจสอบว่า ระบบยังคงมีการติด<br />

ตายอยู่หรือไม่ ท าให้เปลืองค่าใช้จ่ายอื่น (overhead) มาก


การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

การยกเลิกโปรเซสออกจากระบบไม่ได้เป็นสิ่งที่ท าได้ง่าย ถ้าโปรเซสท างาน<br />

ไปได้ระยะหนึ่ง แล้วสถานะของทรัพยากรต่างๆ ถูกเปลี่ยนแปลงไป เช่น<br />

โปรเซสก าลังปรับปรุงแฟ้มข้อมูลให้เป็นปัจจุบัน และถูกยกเลิก ท าให้แฟ้มข้อมูล<br />

ถูกทิ้งค้างอยู่ในสถานะไม่สมบูรณ์ หรือโปรเซสก าลังพิมพ์งานและถูกยกเลิก<br />

ระบบต้องก าหนดสถานะของเครื่องพิมพ์ใหม่ ก่อนที่จะพิมพ์งานอื่นต่อไป<br />

นอกจากนี้การยกเลิกแต่ละโปรเซสนั้น ระบบต้องสามารถตัดสินใจได้ว่า<br />

จะเลือกยกเลิกโปรเซสใด จึงจะท าให้ระบบต้องเสียค่าใช้จ่ายน้อยที่สุด และ<br />

ก าจัด<strong>การติดตาย</strong>ออกไปได้


การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

ปัจจัยที่ระบบใช้ในการพิจารณาเลือกว่าระบบจะยกเลิกโปรเซสใด<br />

o ล าดับความส าคัญ (priority) ของโปรเซส โดยโปรเซสที่มีล าดับความส าคัญ<br />

น้อยจะถูกยกเลิกก่อนโปรเซสที่มีล าดับความส าคัญมากกว่า<br />

o ระยะเวลาที่โปรเซสถูกประมวลผลไปแล้ว และระยะเวลาที่โปรเซสต้องการใช้<br />

เพื่อให้งานเสร็จสิ้น โดยที่ระบบจะเลือกยกเลิกโปรเซสที่เริ่มประมวลผลเป็นเวลา<br />

ไม่นาน (ยังต้องใช้เวลาในการโปรเซสอีกมากเพื่อให้งานเสร็จ) การที่ระบบเลือก<br />

ยกเลิกโปรเซสลักษณะนี้ เนื่องจาก จะเกิดความเสียหายน้อยกว่าการเลือก<br />

ยกเลิกโปรเซสที่ถูกประมวลผลไปเป็นระยะเวลานาน และงานของโปรเซสนั้น<br />

ใกล้เสร็จสมบูรณ์แล้ว


การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

o จ านวนทรัพยากรที่โปรเซสต้องการเพิ่มเติม เพื่อใช้ในการประมวลผลให้งานของ<br />

โปรเซสเสร็จสมบูรณ์ โดยระบบจะพิจารณาเลือกยกเลิกโปรเซสที่ร้องขอ<br />

ทรัพยากร และอยู่ในสถานะรอทรัพยากรเป็นจ านวนมาก เนื่องจากโปรเซสนั้น<br />

มีโอกาสท างานเสร็จสมบูรณ์น้อยกว่าโปรเซสที่ได้ครอบครองทรัพยากรเป็น<br />

จ านวนมาก และยังคงเหลือทรัพยากรที่ต้องการอีกเป็นจ านวนน้อยกว่า


2. การแย่งชิงทรัพยากรจากโปรเซส<br />

การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

วิธีนี้ระบบพยายามก าจัด<strong>การติดตาย</strong>ด้วยการแย่งชิงทรัพยากรจากโปรเซส<br />

หนึ่ง เพื่อน าทรัพยากรนั้นไปมอบให้อีกโปรเซสหนึ่ง ท าเช่นนี้เรื่อยไป จนกว่า<br />

<strong>การติดตาย</strong>จะถูกก าจัดออกไปได้ โดยที่การแย่งชิงทรัพยากรนี้ ระบบ<br />

จ าเป็นต้องพิจารณาเรื่องต่อไปนี้<br />

2.1 การเลือกเหยื่อ (Selecting a victim)<br />

2.2 การถอยกลับ (Rollback)<br />

2.3 การอดตาย (Starvation)


2.1 การเลือกเหยื่อ (Selecting a victim)<br />

การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

ระบบจ าเป็นต้องพิจารณาว่าจะแย่งชิงทรัพยากรชนิดใด จากโปรเซสใด<br />

โดยปัจจัยที่น ามาพิจารณาคือ ค่าใช้จ่าย ซึ่งเป็นค่าใช้จ่ายที่เกิดจากการยกเลิก<br />

โปรเซสใดโปรเซสหนึ่ง<br />

ดังนั้น ถ้าระบบจ าเป็นต้องพิจารณาเพื่อยกเลิกโปรเซสหนึ่งโปรเซส ระบบ<br />

อาจเลือกยกเลิกโปรเซสที่ครอบครองทรัพยากรเป็นจ านวนน้อยที่สุด และเป็น<br />

โปรเซสที่ท างานไปแล้วเป็นเวลาไม่นานนัก


2.2 การถอยกลับ (Rollback)<br />

การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

ถ้าระบบแย่งชิงทรัพยากรจากโปรเซสใดก็ตาม จะท าให้โปรเซสที่ถูกแย่งชิง<br />

ทรัพยากรไปนั้นไม่สามารถประมวลผลต่อไปได้ ระบบจ าเป็นต้องให้โปรเซสถอย<br />

หลังกลับไปอยู่ในสถานะปลอดภัย และเริ่มต้นท างานจากสถานะนั้น<br />

วิธีที่ง่ายที่สุดในการพิจารณาให้โปรเซสถอยกลับไปอยู่ในสถานะที่<br />

ปลอดภัย คือ ให้โปรเซสถอยหลังกลับไปยังสถานะที่อยู่ห่างจากสถานะที่ท าให้<br />

เกิด<strong>การติดตาย</strong>มากที่สุด


2.3 การอดตาย (Starvation)<br />

การกู้คืนจาก<strong>การติดตาย</strong><br />

(Deadlock Recovery)<br />

ในระบบที่ใช้วิธีการเลือกเหยื่อโดยพิจารณาจากค่าใช้จ่ายเป็นส าคัญ ใน<br />

การแย่งชิงทรัพยากรของโปรเซสนั้น เป็นไปได้ว่า อาจเกิดการแย่งชิงทรัพยากร<br />

จากโปรเซสเดิมอยู่ตลอดเวลา ท าให้โปรเซสที่ถูกแย่งชิงนั้นไม่สามารถท างานได้<br />

เสร็จสิ้น คือ โปรเซสอยู่ในสถานะอดตาย

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!