ภาวะตันใน Operaระบบ Ting: คืออะไร, Circular Wait (ตัวอย่าง)

⚡ สรุปอย่างชาญฉลาด

ภาวะติดตายในระบบปฏิบัติการเกิดขึ้นเมื่อกลุ่มของกระบวนการถูกบล็อกเนื่องจากแต่ละกระบวนการถือครองทรัพยากรและรอทรัพยากรอื่นที่กระบวนการอื่นถือครองอยู่ ทำให้เกิดวงจรที่ไม่มีกระบวนการใดสามารถดำเนินการต่อไปได้

  • 🔒 ความหมาย: ภาวะเดดล็อกคือการหยุดกระบวนการที่แต่ละกระบวนการถือครองทรัพยากรไว้ในขณะที่รอกระบวนการอื่น
  • 🧩 สี่เงื่อนไข: การกีดกันซึ่งกันและกัน การถือครองและรอ การห้ามแย่งชิง และการรอแบบวนรอบ จะต้องคงอยู่พร้อมกันทั้งหมด
  • 🔁 การรอแบบวนรอบ: กระบวนการต่างๆ ก่อให้เกิดห่วงโซ่ปิด โดยแต่ละกระบวนการจะรอทรัพยากรที่กระบวนการถัดไปถือครองอยู่
  • 🛡️ การป้องกัน: การละเมิดเงื่อนไขข้อใดข้อหนึ่งในสี่ข้อนี้ จะช่วยป้องกันไม่ให้เกิดภาวะชะงักงันขึ้น
  • 🏦 การหลีกเลี่ยง: อัลกอริทึมของธนาคารจะตรวจสอบคำขอใช้ทรัพยากรเพื่อให้ระบบอยู่ในสถานะที่ปลอดภัย
  • 🤖 มุมมองด้าน AI: ระบบการเรียนรู้ของเครื่องจะตรวจจับรูปแบบการติดขัด และ Copilot ช่วยในการเขียนและตรวจสอบโค้ดการล็อก

ภาวะตันใน Operaระบบ ting

Deadlock คืออะไร?

การหยุดชะงัก เป็นสถานการณ์ที่เกิดขึ้นใน ระบบปฏิบัติการ ภาวะติดตาย (Deadlock) เกิดขึ้นเมื่อกระบวนการหนึ่งเข้าสู่สถานะรอคอยเนื่องจากกระบวนการรอคอยอื่นกำลังครอบครองทรัพยากรที่ต้องการอยู่ ภาวะติดตายเป็นปัญหาที่พบได้บ่อยในระบบมัลติโปรเซสซิ่ง ซึ่งหลายกระบวนการใช้ทรัพยากรเฉพาะประเภทหนึ่งร่วมกัน ซึ่งเรียกว่า ซอฟต์ล็อก (Softlock) หรือซอฟต์แวร์ล็อก (Software Lock)

เมื่อเกิดภาวะชะงักงัน กระบวนการที่เกี่ยวข้องทั้งหมดจะไม่สามารถดำเนินการต่อได้ ดังนั้นงานที่ได้รับผลกระทบจะหยุดลงจนกว่าระบบปฏิบัติการจะเข้ามาแทรกแซง

ตัวอย่างของ Deadlock

  • ตัวอย่างในโลกแห่งความเป็นจริงก็คือ การจราจรที่วิ่งไปในทิศทางเดียวเท่านั้น
  • ที่นี่สะพานถือเป็นทรัพยากร
  • ดังนั้น เมื่อเกิดภาวะชะงักงันขึ้น การแก้ไขทำได้โดยการถอยรถคันใดคันหนึ่ง (แย่งชิงทรัพยากรและถอยกลับ)
  • รถหลายคันอาจต้องจอดสำรองหากเกิดสถานการณ์ทางตัน
  • ดังนั้น การอดอาหารจึงเป็นไปได้

ตัวอย่างของ Deadlock

ตัวอย่างการเกิดภาวะเดดล็อค

การรอแบบวงกลมคืออะไร?

กระบวนการหนึ่งกำลังรอทรัพยากรที่ถูกครอบครองโดยกระบวนการที่สอง ซึ่งก็กำลังรอทรัพยากรที่ถูกครอบครองโดยกระบวนการที่สาม และเป็นเช่นนี้เรื่อยไปจนกระทั่งกระบวนการสุดท้ายกำลังรอทรัพยากรที่ถูกครอบครองโดยกระบวนการแรก ทำให้เกิดเป็นวงจรแบบลูกโซ่

ตัวอย่างเช่น กระบวนการ A ได้รับการจัดสรรทรัพยากร B ในขณะที่กำลังร้องขอทรัพยากร A ในทำนองเดียวกัน กระบวนการ B ก็ได้รับการจัดสรรทรัพยากร A ในขณะที่กำลังร้องขอทรัพยากร B ซึ่งก่อให้เกิดวงจรการรอคอยแบบวนซ้ำ

ตัวอย่างการรอแบบวงกลม

ตัวอย่างเช่น คอมพิวเตอร์เครื่องหนึ่งมีไดรฟ์ USB สามตัวและมีกระบวนการทำงานสามกระบวนการ แต่ละกระบวนการจะถือครองไดรฟ์ USB หนึ่งตัว ดังนั้น เมื่อแต่ละกระบวนการร้องขอไดรฟ์อีกตัว กระบวนการทั้งสามก็จะเข้าสู่ภาวะติดตาย เนื่องจากแต่ละกระบวนการต่างรอให้ไดรฟ์ USB ตัวอื่นถูกปล่อย ในขณะที่ไดรฟ์นั้นยังคงถูกใช้งานอยู่ ส่งผลให้เกิดเป็นวงจรที่วนซ้ำ

ตัวอย่างการรอแบบวงกลม

ตัวอย่างการรอแบบวงกลม

การตรวจจับเดดล็อคในระบบปฏิบัติการ

ภาวะการติดตาย (deadlock) สามารถตรวจจับได้โดยตัวจัดตารางทรัพยากร (resource scheduler) ตัวจัดตารางทรัพยากรช่วยให้ระบบปฏิบัติการจัดการทรัพยากรได้อย่างมีประสิทธิภาพ track คือค่าของทรัพยากรทั้งหมดที่ถูกจัดสรรให้กับกระบวนการต่างๆ เมื่อตรวจพบภาวะติดตายแล้ว สามารถแก้ไขได้โดยการแย่งชิงทรัพยากร การย้อนกลับกระบวนการ หรือการยุติกระบวนการที่ติดตายอย่างน้อยหนึ่งกระบวนการ

การป้องกันเดดล็อกในระบบปฏิบัติการ

การป้องกันภาวะติดตายก่อนที่จะเกิดขึ้นนั้นมีความสำคัญ ระบบจะตรวจสอบทุกธุรกรรมก่อนที่จะดำเนินการเพื่อให้แน่ใจว่าจะไม่นำไปสู่ภาวะติดตาย แม้แต่การดำเนินการเล็กๆ น้อยๆ ที่อาจทำให้เกิดภาวะติดตายในอนาคตก็จะไม่ได้รับอนุญาตให้ดำเนินการ

การป้องกันภาวะติดตาย (Deadlock prevention) คือชุดวิธีการที่ใช้เพื่อให้แน่ใจว่าอย่างน้อยหนึ่งในสี่เงื่อนไขที่จำเป็นนั้นไม่สามารถเกิดขึ้นได้

ไม่มีการจองล่วงหน้า

ทรัพยากรจะถูกปล่อยคืนได้โดยสมัครใจจากกระบวนการที่ถือครองทรัพยากรนั้นเท่านั้น หลังจากที่กระบวนการนั้นได้เสร็จสิ้นภารกิจแล้ว

  • หากกระบวนการใดที่กำลังถือครองทรัพยากรอยู่ร้องขอทรัพยากรอื่นที่ไม่สามารถจัดสรรให้ได้ทันที ทรัพยากรทั้งหมดของกระบวนการนั้นจะถูกปล่อยคืน
  • ทรัพยากรที่ถูกแย่งชิงจะถูกเพิ่มเข้าไปในรายการทรัพยากรที่กระบวนการกำลังรออยู่
  • กระบวนการจะเริ่มต้นใหม่อีกครั้งก็ต่อเมื่อสามารถเรียกคืนทรัพยากรเดิมและทรัพยากรใหม่ที่ร้องขอได้แล้วเท่านั้น

การยกเว้นร่วมกัน

Mutual Exclusion เป็นชื่อเต็มของ Mutex ซึ่งเป็นรูปแบบไบนารีชนิดพิเศษ สัญญาณ ซึ่งใช้สำหรับควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกัน โดยมีกลไกการสืบทอดลำดับความสำคัญเพื่อหลีกเลี่ยงปัญหาการผกผันลำดับความสำคัญที่เกิดขึ้นเป็นเวลานาน และทำให้งานที่มีลำดับความสำคัญสูงกว่าถูกบล็อกเป็นเวลาน้อยที่สุดเท่าที่จะเป็นไปได้

ทรัพยากรที่ใช้ร่วมกัน เช่น ไฟล์แบบอ่านอย่างเดียว จะไม่ทำให้เกิดภาวะการติดตาย (deadlock) แต่ทรัพยากรอย่างเช่นเครื่องพิมพ์และไดรฟ์เทป จำเป็นต้องได้รับการเข้าถึงแบบพิเศษจากกระบวนการเดียวเท่านั้น

กดค้างไว้และรอ

ในสภาวะนี้ กระบวนการต่างๆ จะต้องถูกระงับไม่ให้ครอบครองทรัพยากรหนึ่งหรือมากกว่านั้น ในขณะเดียวกันก็รอทรัพยากรอื่นๆ อีกหนึ่งหรือมากกว่านั้นไปพร้อมกัน

รอแบบวงกลม

วิธีการนี้กำหนดลำดับโดยรวมของทรัพยากรทุกประเภท การป้องกันการรอคอยแบบวนซ้ำยังกำหนดให้ทุกกระบวนการต้องร้องขอทรัพยากรตามลำดับการแจงนับจากน้อยไปมากด้วย

การหลีกเลี่ยงการหยุดชะงัก Algorithms

การหลีกเลี่ยงภาวะติดตายย่อมดีกว่าการแก้ไขปัญหาหลังจากเกิดภาวะติดตายขึ้นแล้ว การหลีกเลี่ยงภาวะติดตายจำเป็นต้องมีข้อมูลเพิ่มเติม เช่น วิธีการใช้ทรัพยากร การหลีกเลี่ยงภาวะติดตายเป็นแบบจำลองที่มีประโยชน์ ซึ่งแต่ละกระบวนการจะประกาศจำนวนทรัพยากรสูงสุดของแต่ละประเภทที่อาจต้องการใช้

การหลีกเลี่ยง Algorithms

อัลกอริทึมป้องกันภาวะติดตายจะประเมินสถานะการจัดสรรทรัพยากรแบบไดนามิก เพื่อป้องกันไม่ให้เกิดสถานการณ์การรอคอยแบบวนซ้ำ

สำหรับทรัพยากรประเภทเดียว:

  • ใช้กราฟการจัดสรรทรัพยากร
  • วงจรในกราฟเป็นสิ่งจำเป็นและเพียงพอสำหรับการเกิดภาวะชะงักงัน

สำหรับทรัพยากรประเภทเดียวกันที่มีหลายรายการ:

ความแตกต่างระหว่างภาวะอดอาหารและภาวะหยุดชะงัก

ต่อไปนี้คือความแตกต่างที่สำคัญบางประการระหว่างภาวะชะงักงันและการอดอยาก:

การหยุดชะงัก ความอดอยาก
ภาวะชะงักงันเกิดขึ้นเมื่อกระบวนการใดกระบวนการหนึ่งถูกบล็อก ภาวะอดอยาก คือสถานการณ์ที่กระบวนการที่มีลำดับความสำคัญต่ำทั้งหมดถูกบล็อก ในขณะที่กระบวนการที่มีลำดับความสำคัญสูงยังคงทำงานต่อไป
เดดล็อกเป็นกระบวนการที่ไม่มีที่สิ้นสุด การอดอาหารเป็นการรอคอยที่ยาวนาน แต่ไม่ใช่กระบวนการที่ไม่มีที่สิ้นสุด
ทุกภาวะชะงักงันย่อมมีจุดจบที่อดอยากเสมอ การอดอยากทุกครั้งไม่ได้หมายความว่าจะต้องจบลงด้วยทางตันเสมอไป
การติดตายเกิดขึ้นเนื่องจากปัจจัยหลายอย่างเกิดขึ้นพร้อมกัน ได้แก่ การกีดกันซึ่งกันและกัน การถือครองและรอ การไม่สามารถแย่งชิงได้ และการรอแบบวนซ้ำ สาเหตุเกิดจากการจัดลำดับความสำคัญที่ไม่เหมาะสมและการบริหารจัดการทรัพยากรที่ไม่ดี

ข้อดีของ Deadlock

ต่อไปนี้คือข้อดีของการใช้วิธีการจัดการภาวะติดตาย:

  • สถานการณ์นี้เหมาะสำหรับกระบวนการที่ทำการทำงานเพียงครั้งเดียวในระยะเวลาสั้นๆ
  • ไม่จำเป็นต้องมีการแย่งชิงอำนาจเพื่อแก้ไขภาวะชะงักงัน
  • วิธีนี้สะดวกเมื่อนำไปใช้กับทรัพยากรที่สามารถบันทึกและเรียกคืนสถานะได้ง่าย
  • สามารถบังคับใช้ได้ผ่านการตรวจสอบในขั้นตอนการคอมไพล์
  • ไม่จำเป็นต้องมีการคำนวณขณะทำงาน เนื่องจากปัญหาได้รับการแก้ไขแล้วในขั้นตอนการออกแบบระบบ

ข้อเสียของ Deadlock

ต่อไปนี้คือข้อเสียของการใช้วิธีการจัดการภาวะติดตาย:

  • มันทำให้การเริ่มต้นกระบวนการล่าช้า
  • กระบวนการต่างๆ ต้องทราบความต้องการทรัพยากรในอนาคตล่วงหน้า
  • มันแทรกแซงบ่อยเกินความจำเป็น
  • ระบบไม่อนุญาตให้มีการร้องขอทรัพยากรแบบเพิ่มทีละน้อย
  • มีข้อเสียเปรียบโดยธรรมชาติจากการถูกแย่งชิงสิทธิ์

คำถามที่พบบ่อย

ภาวะติดตาย (Deadlock) จำเป็นต้องมีเงื่อนไขของ Coffman สี่ข้อเกิดขึ้นพร้อมกัน ได้แก่ การกีดกันซึ่งกันและกัน (Mutual exclusion), การถือครองและรอ (Hold and wait), การห้ามแย่งชิง (No preemption) และการรอแบบวนซ้ำ (Circular wait) การลบเงื่อนไขข้อใดข้อหนึ่งออกไปจะป้องกันไม่ให้เกิดภาวะติดตายขึ้น

การป้องกันจะกำจัดเงื่อนไขหนึ่งในสี่ข้อออกไปล่วงหน้า ทำให้ไม่เกิดภาวะติดตาย (deadlock) ส่วนการหลีกเลี่ยงจะยอมให้มีเงื่อนไขเหล่านั้น แต่จะใช้การตรวจสอบขณะรันไทม์ เช่น... อัลกอริทึมของนายธนาคารเพื่อรักษาระบบให้อยู่ในสถานะที่ปลอดภัย

ในภาวะชะงักงัน กระบวนการที่ถูกบล็อกจะหยุดทำงานโดยสมบูรณ์และไม่เปลี่ยนแปลงสถานะอีกต่อไป livelockกระบวนการต่างๆ เปลี่ยนสถานะและใช้ CPU อย่างต่อเนื่อง แต่ก็ยังไม่มีความคืบหน้า ภาวะ Livelock เป็นกรณีพิเศษของการขาดแคลนทรัพยากร

ระบบอเนกประสงค์ส่วนใหญ่ รวมถึง Windows และใน Linux จะใช้อัลกอริทึมนกกระจอกเทศและเพิกเฉยต่อภาวะการติดตายที่เกิดขึ้นได้ยาก เนื่องจาก1การป้องกันมีค่าใช้จ่ายสูง ในขณะที่ฐานข้อมูลและระบบเรียลไทม์จะใช้ขั้นตอนการตรวจจับและการกู้คืนเชิงรุกแทน

กราฟการจัดสรรทรัพยากรแสดงแผนที่ของกระบวนการและทรัพยากรเป็นโหนดที่เชื่อมต่อกันด้วยเส้นขอบการร้องขอและการจัดสรร วงจรในกราฟบ่งชี้ถึงความเป็นไปได้ที่จะเกิดภาวะติดตาย และสำหรับทรัพยากรแบบอินสแตนซ์เดียว วงจรหมายความว่าเกิดภาวะติดตายขึ้นเสมอ

ไม่ การติดตายที่แท้จริงนั้นถาวร เพราะกระบวนการที่ถูกบล็อกจะไม่ปล่อยทรัพยากรของตนเองออกมา ระบบปฏิบัติการต้องแก้ไขโดยการแย่งชิงทรัพยากร ย้อนกลับ หรือยุติกระบวนการใดกระบวนการหนึ่ง

โมเดลการเรียนรู้ของเครื่องเรียนรู้รูปแบบการร้องขอทรัพยากรเพื่อคาดการณ์และแจ้งเตือนภาวะการติดตายก่อนที่จะเกิดขึ้น ตัวจัดตารางเวลา AI สามารถจัดลำดับการร้องขอใหม่หรือปรับแต่งนโยบายการล็อก ซึ่งมีประโยชน์ในฐานข้อมูล แพลตฟอร์มคลาวด์ และระบบกระจาย

ใช่แล้ว GitHub Copilot สามารถตรวจจับลำดับการล็อกที่เสี่ยง แนะนำการได้มาซึ่งล็อกที่สม่ำเสมอ และสร้างการทดสอบที่เปิดเผยภาวะเดดล็อกได้ ให้ถือว่าผลลัพธ์ของมันเป็นเพียงการตรวจสอบเบื้องต้น และตรวจสอบตรรกะการทำงานพร้อมกันด้วยเครื่องมือวิเคราะห์ที่เหมาะสมต่อไป

สรุปโพสต์นี้ด้วย: