operating system
Download
Skip this Video
Download Presentation
Operating System

Loading in 2 Seconds...

play fullscreen
1 / 71

Operating System - PowerPoint PPT Presentation


  • 85 Views
  • Uploaded on

Operating System. บทที่ 7 วงจรอับ (DEADLOCK). รูปแบบของปัญหา (System Model). รูปแบบของปัญหา (System Model). รูปแบบของปัญหา (System Model).

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Operating System' - prescott-adams


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
operating system

Operating System

บทที่ 7 วงจรอับ

(DEADLOCK)

system model2
รูปแบบของปัญหา (System Model)
  • เพื่อที่จะแสดงให้เห็นภาพของสถานะวงจรอับ เราจะมาพิจารณา ระบบที่ประกอบไปด้วยเครื่องขับเทป 3 เครื่อง สมมติว่า มีกระบวนการอยู่ 3 กระบวนการ และแต่ละกระบวนการ กำลังใช้เครื่องขับเทปอยู่ กระบวนการละเครื่อง ต่อมาถ้าแต่ละกระบวนการ ร้องขอเครื่องขับเทปเพิ่มอีกกระบวนการละ 1 เครื่อง ทั้ง 3 กระบวนการ จะติดอยู่ในวงจรอับทันที โดยแต่ละกระบวนการกำลังรอสถานการณ์ที่ “เครื่องขับเทปถูกปล่อยคืนสู่ระบบ” ซึ่งเป็นสถานการณ์ที่ขึ้นกับกระบวนการอื่น ในวงจร (ที่กำลังรอคอยทรัพยากรอยู่เช่นกัน) ตัวอย่างที่ยกมานี้เป็นการแสดงภาพของวงจรอับที่เกิดจากการที่กระบวนการพยายามที่จะแย่งกันใช้ทรัพยากรประเภทเดียวกัน
resource allocation graph
กราฟการจัดสรรทรัพยากร(Resource-Allocation Graph)
  • P = { P1, P2, … , Pn} เป็นเซตของกระบวนการทั้งหมดที่มีอยู่ในระบบ
  • และเซต R = { R0, R1, … , Rn } เป็นเซตของทรัพยากรที่มีอยู่ในระบบ
  • โดยที่ลูกศรจาก Pi ไปยัง Rj (Pi Rj) นั้นเรียกว่า “เส้นร้องขอ” (Request Edge)
  • และลูกศรจาก Rj ไปยัง Pi (Rj Pi) เรียกว่า “เส้นถือครอง” (Assignment Edge)
resource allocation graph1
กราฟการจัดสรรทรัพยากร(Resource-Allocation Graph)
  • ในการเขียนกราฟ เราจะใช้วงกลมแทนกระบวนการ และใช้สี่เหลี่ยมแทนทรัพยากร และใช้จุด แทนจำนวนทรัพยากรแต่ละตัว ซึ่งจะอยู่ภายในสี่เหลี่ยม โดยที่เส้นร้องขอจะต้องชี้ไปยังกรอบสี่เหลี่ยม (ทรัพยากร Rj) เท่านั้น แต่เส้นถือครอง จะต้องชี้ไปยังจุดใดจุดหนึ่งในสี่เหลี่ยม
resource allocation graph2
กราฟการจัดสรรทรัพยากร(Resource-Allocation Graph)
  • กราฟการจัดสรรทรัพยากรในรูปข้างต้น แสดงสถานะของระบบ ดังนี้
  • เซต P = { P1 , P2, P3}
  • เซต R = { R1 , R2 , R3 , R4 }
  • เซต E = { P1 R1, P2 R3 , R1 P2 , R2 P2 ,R2 P1 , R3 P3 }
  • ทรัพยากรในระบบ
  • ทรัพยากรประเภท R1 = 1 ตัว
  • ทรัพยากรประเภท R2 = 2 ตัว
  • ทรัพยากรประเภท R3 = 1 ตัว
  • ทรัพยากรประเภท R4 = 3 ตัว
resource allocation graph3
กราฟการจัดสรรทรัพยากร(Resource-Allocation Graph)
  • สถานะของกระบวนการ
  • กระบวนการ P1 กำลังถือครองทรัพยากรประเภท R2 และกำลังรอคอยที่จะใช้ทรัพยากรประเภท R1
  • กระบวนการ P2 กำลังถือครองทรัพยากรประเภท R1 และ R2 และกำลังรอคอยที่จะใช้ทรัพยากรประเภท R3
  • กระบวนการ P3 กำลังถือครองทรัพยากรประเภท R3 อยู่
resource allocation graph4
กราฟการจัดสรรทรัพยากร(Resource-Allocation Graph)
  • ถ้าเป็นระบบที่ทรัพยากรแต่ละประเภทมีเพียง 1 ตัว เมื่อมีวงจรในกราฟ ก็จะต้องมีวงจรอับในระบบแน่นอน
  • แต่ถ้าทรัพยากรแต่ละประเภทมีจำนวนมากกว่า 1 ตัว วงจรที่เกิดขึ้นในกราฟ ไม่อาจเป็นตัวบอกได้เสมอไปว่า เกิดวงจรอับในระบบ
  • สมมติว่ากระบวนการ P3 ได้ร้องขอทรัพยากรประเภท R2 แต่เนื่องจากไม่มีทรัพยากรตัวใด ในประเภท R2 ว่างเลย ดังนั้นเส้นร้องขอ P3 R2 จึงถูกใส่เพิ่ม เข้าไปในกราฟ ซึ่งแสดงในรูปถัดไป
resource allocation graph6
กราฟการจัดสรรทรัพยากร(Resource-Allocation Graph)
  • ณ จุดนี้ จะเกิดวงจรอย่างน้อย 2 วง ขึ้นในระบบ คือ
  • P1 R1 P2 R3 P3 R2 P1
  • P2 R3 P3 R2 P2
resource allocation graph9
กราฟการจัดสรรทรัพยากร(Resource-Allocation Graph)
  • แต่อย่างไรก็ตามวงจรนี้จะไม่ก่อให้เกิดวงจรอับ โดยสังเกตว่า กระบวนการ P4 จะปล่อยทรัพยากรประเภท R2 ที่ตนเองถือครองอยู่ เมื่อใช้เสร็จ ซึ่งเมื่อทรัพยากร R2 ถูกปล่อยกลับสู่ระบบแล้วระบบก็สามารถที่จะจัดทรัพยากรประเภท R2 ให้แก่กระบวนการ P3 ได้ วงจรก็จะขาดทันที
  • เราอาจกล่าวโดยสรุปได้ว่า ถ้าไม่มีวงจรในกราฟการจัดสรรทรัพยากรแล้ว ระบบจะไม่อยู่ในสถานะวงจรอับ แต่ในทางกลับกัน ถ้ามีวงจรในกราฟแล้ว ระบบอาจจะเกิดวงจรอับ หรือไม่เกิดก็ได้
methods for handing deadlocks
การจัดการปัญหาวงจรอับ (Methods for Handing Deadlocks)
  • การจัดการปัญหาวงจรอับมีอยู่ 3 วิธีหลัก ๆ คือ
  • กำหนดกฎเกณฑ์บางอย่างในการใช้ทรัพยากร เพื่อให้แน่ใจว่าระบบจะไม่มีทางเกิดวงจรอับได้
  • ไม่ต้องป้องกันใด ๆ เลย ปล่อยให้ระบบเกิดวงจรอับขึ้นก่อน แล้วค่อยตามแก้ไขทีหลัง
  • มองข้ามปัญหาทั้งหมด แล้วแสร้งทำว่าวงจรอับไม่เคยเกิดขึ้นในระบบ วิธีการแก้ปัญหาวิธีนี้เป็นวิธีการหนึ่งที่ถูกใช้ในระบบปฏิบัติการส่วนใหญ่ รวมทั้ง UNIX ด้วย <restart>
deadlock prevention
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • ห้ามใช้ทรัพยากรร่วมกัน(Mutual Exclusion)
  • เงื่อนไขในข้อนี้ คือ การที่ระบบ ไม่อนุญาตให้ มีการใช้ทรัพยากรร่วมกัน เช่น เครื่องพิมพ์จะไม่สามารถ ให้กระบวนการหลาย ๆ กระบวนการ ใช้พร้อม ๆ กันได้ แต่ถ้าเรายอมให้ในระบบมีการใช้ทรัพยากรร่วมกันได้ ปัญหาวงจรอับก็จะไม่เกิด เช่น แฟ้มข้อมูลที่อ่านได้อย่างเดียวสามารถใช้ร่วมกันได้
  • อย่างไรก็ตาม การที่เราจะป้องกันการเกิดวงจรอับในระบบ โดยการป้องกันเงื่อนไขนี้ ไม่สามารถทำได้เสมอไป เพราะยังมีทรัพยากรบางประเภท ที่ไม่มีทางใช้ร่วมกันได้
deadlock prevention1
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • การถือครองแล้วรอคอย(Hold and Wait)
  • คือ การที่จะไม่ให้เกิด “การถือครองแล้วรอคอย” ขึ้นในระบบ โดยจะต้องกำหนดว่า เมื่อกระบวนการหนึ่งจะร้องขอทรัพยากร กระบวนการนั้นจะต้องไม่ได้ถือครองทรัพยากรใด ๆ อยู่ในขณะนั้น ซึ่งอาจทำได้ 2 วิธีการ คือ
  • ให้กระบวนการร้องขอทรัพยากรที่ต้องการใช้ทั้งหมด (ตลอดการทำงาน) ก่อนที่จะเริ่มต้นทำงาน
  • ยอมให้กระบวนการร้องขอทรัพยากรได้ ก็ต่อเมื่อกระบวนการนั้นมิได้ถือครองทรัพยากรใดไว้เลย
deadlock prevention2
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • เราจะเห็นความแตกต่างของ 2 วิธีนี้ โดยการพิจารณาจากตัวอย่าง กระบวนการหนึ่งต้องการ
  • คัดลอกข้อมูลจากเทปลงไปเก็บที่แฟ้มข้อมูลในดิสก์
  • เรียงลำดับข้อมูลของแฟ้มข้อมูลในดิสก์
  • พิมพ์ผลลัพธ์ออกสู่เครื่องพิมพ์
  • ถ้าทรัพยากรทั้งหมดต้องถูกร้องขอในตอนเริ่มต้นงานของกระบวนการ (นั่นคือใช้วิธีแรก) แสดงว่ากระบวนการนี้ ก็จะถือครองเครื่องพิมพ์ ไว้ตลอดเวลาที่กระบวนการทำงานอยู่ ถึงแม้ว่ากระบวนการนี้ จะใช้เครื่องพิมพ์เฉพาะในตอนท้ายของการทำงานเท่านั้น
deadlock prevention3
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • สำหรับวิธีที่ 2 ให้กระบวนการร้องขอทรัพยากรในตอนเริ่มต้น แค่เครื่องขับเทป และแฟ้มข้อมูลในดิสก์ โดยเมื่อได้รับทรัพยากรแล้ว กระบวนการจะคัดลอกข้อมูล จากเทปลงไปสู่ดิสก์จากนั้นก็จะคืนทั้งเครื่องขับเทป และแฟ้มข้อมูลในดิสก์กลับสู่ระบบ จากนั้นกระบวนการก็จะต้องร้องขอแฟ้มข้อมูลในดิสก์และเครื่องพิมพ์ใหม่อีกครั้งหนึ่ง เมื่อพิมพ์เสร็จเรียบร้อยแล้วกระบวนการก็จะคืนทรัพยากรกลับสู่ระบบ เป็นอันสิ้นสุดการทำงานของกระบวนการ
deadlock prevention4
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • วิธีการแรก มีข้อเสียคือ การใช้ทรัพยากรจะมีประสิทธิผลต่ำมาก อาจมี ปัญหาการแช่เย็น (starvation) อีกด้วย โดยถ้ามีบางกระบวนการต้องการใช้ทรัพยากร (ที่เป็นที่นิยมใช้กันมาก) หลาย ๆ ตัว อาจต้องรอคอย อย่างไม่มีที่สิ้นสุด
  • ส่วนวิธีการหลังก็มีข้อเสียคือ ต้องคืนทรัพยากรที่ถือครองอยู่ เพื่อที่จะร้องขอกลับมาใหม่อีก ร่วมกับทรัพยากรตัวใหม่ ทำให้เสียเวลาโดยเปล่าประโยชน์
deadlock prevention5
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • ห้ามแทรกกลางคัน(No Preemption)
  • เราอาจกำหนดกฎเกณฑ์ดังนี้
  • ถ้ากระบวนการหนึ่ง (ที่กำลังถือครองทรัพยากรบางส่วนอยู่) ร้องขอทรัพยากรเพิ่ม และระบบยังไม่สามารถจัดให้ได้ในทันที (แสดงว่ากระบวนการที่ร้องขอจะต้องรอ) เราจะให้ทรัพยากรทั้งหมด ที่กระบวนการนี้ถือครองอยู่ ถูกแทรกกลางคัน นั่นคือ ทรัพยากรที่กระบวนการนี้ถือครองอยู่ทั้งหมดจะถูกปล่อยคืนสู่ระบบโดยปริยาย กระบวนการที่ถูกแทรกกลางคันนี้จะต้องรอคอยทรัพยากร ทั้งที่ร้องขอไว้ตั้งแต่แรก และที่ถูกแทรกกลางคันไป ก่อนที่จะสามารถทำงานต่อไปได้
deadlock prevention6
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • วิธีการนี้มักใช้กับทรัพยากรที่สามารถเก็บค่าสถานะและติดตั้งค่ากลับคืนมาได้ง่าย เช่น ค่าในรีจีสเตอร์ (ของหน่วยประมวลผลกลาง) เนื้อที่ในหน่วยความจำหลัก เป็นต้น แต่จะไม่สามารถใช้กับทรัพยากรทั่ว ๆ ไป เช่น เครื่องพิมพ์ และ หน่วยขับเทป เป็นต้น
deadlock prevention7
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • วงจรรอคอย(Circular Wait)
  • เราอาจป้องกันการเกิดวงจรอับ โดยการป้องกันไม่ให้เกิดเงื่อนไขวงจรรอคอย ซึ่งสามารถทำได้โดย การกำหนดลำดับของทรัพยากรทั้งหมดในระบบ และกำหนดให้ กระบวนการต้องร้องขอใช้ทรัพยากร เรียงตามเลขลำดับนี้
  • กำหนดให้ R = { R1 , R2, … , Rm } โดย R เป็นเซตของทรัพยากรในระบบ และ กำหนดให้ทรัพยากรแต่ละประเภทมี ค่าเลขลำดับเป็น เลขจำนวนเต็ม ที่ไม่ซ้ำกัน เขียนแทนด้วย F(Ri) เพื่อให้เราสามารถเปรียบเทียบทรัพยากร 2 ประเภทได้ว่าตัวใดมีลำดับก่อน-หลัง ตัวอย่างเช่น ถ้า
deadlock prevention8
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • F (เครื่องขับเทป) = 1
  • F (เครื่องขับดิสก์) = 5
  • F (เครื่องพิมพ์) = 12
  • และกำหนดวิธีการในการร้องขอทรัพยากรในระบบดังนี้
  • กระบวนการแต่ละตัวสามารถร้องขอทรัพยากรได้ ในลำดับที่เพิ่มขึ้นเท่านั้น คือ เริ่มต้นกระบวนการอาจร้องขอทรัพยากรใด ๆ ก็ได้ เช่น ทรัพยากร Ri แต่ต่อจากนี้กระบวนการจะร้องขอทรัพยากร Rj ได้ก็ต่อเมื่อ F(Rj) > F(Ri) ถ้าเป็นการร้องขอทรัพยากร ประเภทเดียวกันหลาย ๆ ตัว กระบวนการจะต้องร้องขอทรัพยากรทีละตัว
  • ในทางตรงกันข้าม ถ้ากระบวนการต้องการร้องขอทรัพยากรประเภท Rj กระบวนการจะต้องปล่อยทรัพยากร Ri ซึ่ง F(Ri) F(Rj) คืนสู่ระบบทุกตัวเสียก่อน เช่นถือครอง R5 อยู่อยากได้ R1 ต้องคืน R5 ก่อน R5 R1
deadlock prevention9
การป้องกันการเกิดวงจรอับ (Deadlock Prevention)
  • พึงสังเกตว่า การกำหนดค่าเลขลำดับของทรัพยากร ควรเรียงตามลำดับการใช้งานตามปกติในระบบ เช่น ปกติเรามักใช้เครื่องขับเทป ก่อนเครื่องพิมพ์เสมอ จึงควรกำหนดลำดับให้ F (เครื่องขับเทป) < F (เครื่องพิมพ์)
deadlock avoidance
การหลีกเลี่ยงวงจรอับ (Deadlock Avoidance)
  • สถานะปลอดภัย (Safe State)
  • ระบบจะอยู่ในสถานะปลอดภัย (Safe State) ก็ต่อเมื่อมีลำดับการจัดสรรทรัพยากรอย่างปลอดภัยแก่กระบวนการ (Safe Sequence) โดยเราจะถือว่าลำดับของกระบวนการ <P1, P2 , … , Pn> เป็นลำดับที่ปลอดภัย สำหรับสถานะของการจัดสรรทรัพยากรปัจจุบัน
deadlock avoidance1
การหลีกเลี่ยงวงจรอับ (Deadlock Avoidance)
  • แต่ถ้าไม่สามารถหาลำดับกระบวนการที่ปลอดภัยในระบบได้ แสดงว่าระบบอยู่ในสถานะไม่ปลอดภัย (unsafe state)
  • สถานะปลอดภัยเป็นสถานะที่ไม่มีวงจรอับ และในทางกลับกัน สถานะไม่ปลอดภัยเป็นสถานะที่อาจเกิดวงจรอับได้ แต่ก็ไม่ได้หมายความว่า สถานะไม่ปลอดภัยทั้งหมดจะก่อให้เกิดวงจรอับเสมอไป ดังรูป
deadlock avoidance2
การหลีกเลี่ยงวงจรอับ (Deadlock Avoidance)
  • ตัวอย่างเช่น ระบบหนึ่งมีเครื่องขับเทป 12 เครื่อง และมีกระบวนการ 3 กระบวนการอยู่ในระบบ คือ P0 , P1 และ P2 โดยกระบวนการ P0 , P1 และ P2 ต้องการใช้เครื่องขับเทปสูงสุด 10 , 4 และ 9 เครื่อง ตามลำดับ ถ้า ณ เวลา T0 กระบวนการ P0 , P1 และ P2 ได้รับเครื่องขับเทป กระบวนการละ 5 , 2 และ 2 เครื่อง ตามลำดับ (แสดงว่า ณ เวลานั้นมีเครื่องขับเทปว่าอยู่ 3 เครื่อง)
deadlock avoidance3
การหลีกเลี่ยงวงจรอับ (Deadlock Avoidance)

ณ เวลา T0 ลำดับกระบวนการ < P1, P0 , P2 > แสดงว่า ระบบอยู่ในสถานะปลอดภัย

deadlock avoidance4
การหลีกเลี่ยงวงจรอับ (Deadlock Avoidance)
  • บางครั้งระบบอาจจะเปลี่ยนจะสถานะปลอดภัย ไปเป็นสถานะไม่ปลอดภัยได้ เช่น สมมติว่า ณ เวลา T 1 กระบวนการ P2 ร้องขอเครื่องขับเทปเพิ่มอีก 1 เครื่อง และได้รับการจัดสรรจะทำให้สถานะของระบบกลายเป็นสถานะไม่ปลอดภัยทันที
  • โดยใช้แนวคิดของสถานะปลอดภัยนี้ เราสามารถสร้างขั้นตอนวิธีการหลีกเลี่ยงวงจรอับซึ่งจะประกันได้ว่า จะไม่เกิดวงจรอับขึ้นในระบบ โดยเมื่อใดก็ตามที่กระบวนการร้องขอทรัพยากรเพิ่มและทรัพยากรยังมีว่างพอ ระบบต้องตัดสินใจว่าจะให้ทรัพยากรตามที่ร้องขอทันทีหรือไม่ให้ (ให้กระบวนการรอไปก่อน) โดยพิจารณาจากว่าถ้าจัดสรรให้ตามที่ร้องขอแล้วระบบจะยังคงอยู่ในสถานะปลอดภัยหรือไม่
resource allocation graph algorithm
อัลกอริทึมของกราฟการจัดสรรทรัพยากร(Resource-Allocation Graph Algorithm)
  • โดยขั้นตอนวิธีนี้จะเพิ่มเส้นความต้องการ (Claim Edge) ขึ้นมาในกราฟการจัดสรรทรัพยากร โดยเส้นความต้องการที่ลากจาก Pi ไปยัง Rj (Pi Rj) หมายถึง ในอนาคตกระบวนการ Pi อาจจะร้องขอทรัพยากรประเภท Rj จะเห็นว่า เส้นความต้องการมีทิศทางเดียวกันกับ เส้นร้องขอ (จาก Pi ไป Rj) แต่จะต่างกันตรงที่เส้นความต้องการในกราฟการจัดสรรทรัพยากร จะแสดงด้วยเส้นประ แต่เส้นร้องขอแสดงด้วยเส้นทึบ
resource allocation graph algorithm1
อัลกอริทึมของกราฟการจัดสรรทรัพยากร(Resource-Allocation Graph Algorithm)
  • สมมติว่ากระบวนการ Pi ได้ร้องขอทรัพยากรประเภท Rj ระบบจะอนุมัติการร้องขอนี้ ถ้าการเปลี่ยนเส้นร้องขอ (Pi Rj) ไปเป็นเส้นถือครอง (Rj Pi) ไม่ทำให้เกิดวงจรขึ้น แต่ถ้าพบว่าเส้นถือครองที่เกิดใหม่ทำให้เกิดวงจร กระบวนการนั้นจะต้องรอจนกว่าในระบบจะมีทรัพยากรว่างมากขึ้น และเส้นถือครองของกระบวนการที่ร้องขอจะไม่ก่อให้เกิดวงจรในกราฟการจัดสรรทรัพยากร
  • ถ้าไม่มีวงจรในกราฟ การอนุมัติทรัพยากรจะทำให้ระบบอยู่ในสถานะปลอดภัย ถ้าเกิดมีวงจรในกราฟแล้วการอนุมัติทรัพยากร จะทำให้ระบบอยู่ในสถานะไม่ปลอดภัย
  • เราจะแสดงขั้นตอนวิธีดังกล่าวโดยพิจารณากราฟการจัดสรรทรัพยากร ดังรูป
resource allocation graph algorithm3
อัลกอริทึมของกราฟการจัดสรรทรัพยากร(Resource-Allocation Graph Algorithm)
  • สมมติว่า P2 ร้องขอ R2 ระบบจะไม่อนุมัติการร้องขอดังกล่าว ถึงแม้ว่าทรัพยากร R2 จะว่างอยู่ก็ตาม เพราะว่าถ้าระบบอนุมัติ การร้องขอดังกล่าวแล้ว เส้นถือครอง R2 P2 จะก่อให้เกิดวงจรในกราฟการจัดสรรทรัพยากร ดังรูป
resource allocation graph algorithm4
อัลกอริทึมของกราฟการจัดสรรทรัพยากร(Resource-Allocation Graph Algorithm)
  • ซึ่งจะทำให้ระบบอยู่ในสถานะไม่ปลอดภัย โดยอาจเกิดวงจรอับขึ้นในระบบ ถ้ากระบวนการ P1 เกิดร้องขอทรัพยากรประเภท R2 และ P2 ร้องขอ R1
banker s algorithm
อัลกอริทึมของนายธนาคาร (Banker’s Algorithm)
  • เมื่อมีกระบวนการใหม่เกิดขึ้นในระบบ กระบวนการนั้นจะต้องประกาศจำนวนทรัพยากรสูงสุดที่ต้องการในแต่ละประเภท โดยจำนวนที่ต้องการนี้จะต้องไม่เกินกว่าจำนวนที่มีอยู่จริงในระบบ และเมื่อกระบวนการร้องขอทรัพยากร ระบบจะต้องพิจารณาว่าเมื่อจัดสรรทรัพยากรให้แต่ละกระบวนการแล้ว จะทำให้ระบบอยู่ในสถานะปลอดภัยหรือไม่ ถ้าอยู่ระบบก็จะจัดสรรทรัพยากรให้ตามที่ขอ แต่ถ้าไม่กระบวนการที่ร้องขอก็จะต้องรอจนกว่ากระบวนการอื่นได้คืนทรัพยากรบางส่วนให้แก่ระบบจนเพียงพอ
  • ระบบต้องเก็บโครงสร้างข้อมูลหลายตัวเพื่อใช้ในขั้นตอนวิธีแบบนายธนาคาร โครงสร้างข้อมูลเหล่านี้ เป็นตัวบอกสถานะของการจัดสรรทรัพยากรในระบบ
  • กำหนดให้ n เป็นจำนวนกระบวนการในระบบ และ
  • m เป็นจำนวนของประเภททรัพยากร
banker s algorithm1
อัลกอริทึมของนายธนาคาร (Banker’s Algorithm)
  • โครงสร้างข้อมูลที่จำเป็นมีดังนี้
  • Available : เป็นเวคเตอร์ขนาด m ซึ่งใช้เก็บ ค่าจำนวนทรัพยากรที่ว่างของทรัพยากรแต่ละประเภท เช่น Available[j] = k หมายถึง ทรัพยากรประเภท Rj มีจำนวนทรัพยากรว่างอยู่ k ตัว
  • Max : เป็นเมทริกซ์ขนาด n x m ซึ่งใช้เก็บค่าจำนวนสูงสุดของทรัพยากรแต่ละประเภทที่กระบวนการแต่ละตัวต้องการใช้ เช่น Max[i,j] = k หมายถึง กระบวนการ Pi ต้องการทรัพยากรประเภท Rj มากที่สุด k ตัว
banker s algorithm2
อัลกอริทึมของนายธนาคาร (Banker’s Algorithm)
  • Allocation : เป็นเมทริกซ์ขนาด n x m ซึ่งใช้เก็บค่าจำนวนทรัพยากรแต่ละประเภทที่กระบวนการแต่ละตัว กำลังถือครองอยู่ เช่น Allocation[i,j] = k หมายถึง กระบวนการ Pi กำลังถือครองทรัพยากรประเภท Rj อยู่ k ตัว
  • Need : เป็นเมทริกซ์ขนาด n x m ซึ่งใช้เก็บค่าจำนวนทรัพยากรแต่ละประเภทที่กระบวนการแต่ละตัว อาจร้องขอเพิ่มอีกได้ เช่น Need[i,j] = k หมายถึง กระบวนการ Pi อาจร้องขอทรัพยากรประเภท Rj ได้อีก k ตัว จะเห็นว่า Need [i,j] = Max[i,j] – Allocation[i,j]
safety algorithm
ขั้นตอนวิธีตรวจดูสถานะปลอดภัย(Safety Algorithm)
  • ขั้นตอนวิธีในการตรวจสอบว่า ระบบจะอยู่ในสถานะปลอดภัยหรือไม่ เป็นดังนี้
  • กำหนดให้ Work และ Finish เป็นเวคเตอร์ขนาด m และ n ตามลำดับ และกำหนดค่าเริ่มต้น ดังนี้
  • Work := Available;
  • For i := 1 TO n DO
  • Finish[i] := FALSE;
safety algorithm1
ขั้นตอนวิธีตรวจดูสถานะปลอดภัย(Safety Algorithm)
  • ให้ i = 1
  • WHILE i n DO BEGIN
  • IF Finish[i] = FALSE AND Need[i] Work
  • THEN BEGIN
  • Work := Work + Allocation[i];
  • Finish[i] := TRUE;
  • i := i +1; END
  • ELSE i := i+1;
  • END
  • IF some Finish[i] = FALSE THEN “unsafe” ELSE “safe”
resource request algorithm
อัลกอริทึมร้องขอทรัพยากร(Resource-Request Algorithm)
  • ให้ Requestiเป็นเวคเตอร์ แสดงคำร้องขอของกระบวนการ Pi โดยที่ Requestiหมายถึง กระบวนการ Pi ได้ร้องขอทรัพยากรประเภท Rj เป็นจำนวน k ตัว
  • เมื่อกระบวนการ Pi ร้องขอทรัพยากร ระบบจะจัดการ ดังนี้
  • 1. ถ้า Requesti > Neediแล้ว ระบบจะแจ้งข้อผิดพลาดว่า “กระบวนการขอทรัพยากรมากกว่าที่ระบุ” แล้วกระบวนการจะถูกขับออกจากระบบ แต่ถ้า Requesti Neediแล้ว จะไปทำงานในขั้นตอนที่ 2
resource request algorithm1
อัลกอริทึมร้องขอทรัพยากร(Resource-Request Algorithm)
  • 2. ถ้า Requesti > Available แล้วให้ Pi รอจนกว่าทรัพยากรที่ร้องขอจะว่าง จากนั้นจึงไปทำงานในขั้นตอนที่ 3 แต่ถ้า Requesti Available แล้ว จะไปทำงานในขั้นตอนที่ 3 ทันที
  • 3. ระบบจะสมมติว่าได้จัดสรรทรัพยากรให้ตามที่กระบวนการ Pi ร้องขอมา โดยระบบจะมีสถานะเปลี่ยนไป ดังนี้
  • Available := Available – Requesti;
  • Allocationi := Allocationi + Requesti;
  • Needi := Needi – Requesti;
resource request algorithm2
อัลกอริทึมร้องขอทรัพยากร(Resource-Request Algorithm)
  • แล้วตรวจสอบดูว่าสถานะของการจัดสรรทรัพยากรขณะนี้เป็นสถานะปลอดภัยหรือไม่ ถ้าเป็นระบบก็จะจัดสรรทรัพยากรให้ตามที่สมมติทันที แต่ถ้าระบบอยู่ในสถานะไม่ปลอดภัยแล้วระบบก็จะให้กระบวนการ Pi รอ และ ถอยกลับไปอยู่ในสถานะเดิม (ก่อน การสมมติค่า Available , Allocationiและ Neediเป็นค่าเดิม)
an illustrative example
ตัวอย่าง(An Illustrative Example)
  • ระบบหนึ่งมีกระบวนการอยู่ 5 ตัว คือ P0 , P1 , P2 , P3 และ P4 มีทรัพยากรอยู่ 3 ประเภท คือ A , B และ C โดยที่ในแต่ละประเภท มีจำนวนทรัพยากร 10 , 5 และ 7 ตัว ตามลำดับ
an illustrative example2
ตัวอย่าง(An Illustrative Example)
  • และเนื่องจาก เมทริกซ์ Need เกิดจาก Max – Allocation ดังนั้นจะได้ว่า
an illustrative example3
ตัวอย่าง(An Illustrative Example)
  • และ เราพบว่า ระบบอยู่ในสถานะปลอดภัยเนื่องจากกระบวนการอาจทำงานได้ตามลำดับ
  • <P1, P3, P4 , P2 , P0> ซึ่งเป็นไปตามเงื่อนไขของสถานะปลอดภัย
  • สมมติว่า กระบวนการ P1 ร้องขอทรัพยากรประเภท A และ C เพิ่มอย่างละ 1 และ 2 ตัวตามลำดับ ดังนั้น Request1 = (1,0,2) ระบบจะตัดสินใจว่าจะอนุมัติทรัพยากรให้ ตามที่ร้องขอหรือไม่ตามขั้นตอนดังนี้
  • Request1 Need1 เนื่องจาก (1,0,2) (1,2,2)
  • Request1 Available เนื่องจาก (1,0,2) (3,3,2)
an illustrative example4
ตัวอย่าง(An Illustrative Example)
  • เมื่อผ่าน 2 ขั้นแรกแล้ว ระบบก็จะสมมติว่า ได้จัดสรรทรัพยากรให้ตามที่ร้องขอ ทำให้ระบบมีสถานะใหม่ดังนี้
an illustrative example5
ตัวอย่าง(An Illustrative Example)
  • จากนั้นก็จะตรวจสอบว่า สถานะใหม่นี้จะเป็นสถานะปลอดภัยหรือไม่ โดยใช้ขั้นตอนวิธีสถานะปลอดภัย (safety algorithm) ตรวจสอบ และเราจะพบว่า กระบวนการอาจทำงานได้ ตามลำดับ <P1, P3, P4, P0, P2> ซึ่งเป็นไปตามเงื่อนไข ของสถานะปลอดภัย เมื่อเป็นเช่นนี้ ระบบจะสามารถอนุมัติการร้องขอของ P1 ได้
  • ในบางกรณี ระบบอาจไม่อนุมัติการร้องขอของกระบวนการ เช่น จากตัวอย่างเดิมข้างต้น ถ้า P4 ร้องขอทรัพยากร (3,3,0) เพิ่ม ระบบไม่อาจอนุมัติให้ได้ เพราะมีทรัพยากรไม่พอ หรือถ้า P0 ร้องขอทรัพยากร (0,2,0) เพิ่ม ระบบก็จะไม่อนุมัติ แม้ว่าจะมีทรัพยากรพอ เพราะว่าเมื่อระบบลองสมมติว่าได้จัดสรรทรัพยากรให้ตามที่ขอแล้วพบว่าสถานะใหม่เป็นสถานะไม่ปลอดภัย
deadlock detection
การตรวจหาวงจรอับ (Deadlock Detection)
  • ถ้าในระบบปฏิบัติการไม่มีการป้องกันหรือหลีกเลี่ยงวงจรอับแล้ว ในที่สุดระบบก็อาจจะตกอยู่ในสถานะวงจรอับได้ ดังนั้นระบบจึงจำต้องมีวิธีอื่นทดแทนคือ
  • ขั้นตอนวิธีที่จะตรวจหาวงจรอับในระบบว่าเกิดขึ้นแล้วหรือยัง
  • ขั้นตอนวิธีในการแก้ไขวงจรอับ
single instance of each resource type
ระบบที่มีทรัพยากรแต่ละประเภทเพียงตัวเดียว (Single Instance of Each Resource Type)
  • โดยนำกราฟการจัดสรรทรัพยากรมาแปลงสภาพเล็กน้อยเป็น กราฟการรอคอยทรัพยากร (Wait-for-Graph) การแปลงสภาพทำโดยเอาสี่เหลี่ยมที่แทนทรัพยากรออก และยุบรวมลูกศรเข้าด้วยกัน ดังนี้
  • ถ้ามีลูกศรจาก Pi ไป Pj ในกราฟการรอคอยทรัพยากร แสดงว่า Pi กำลังรอทรัพยากรซึ่ง Pj ถือครองอยู่
  • ตัวอย่างเช่น
single instance of each resource type1
ระบบที่มีทรัพยากรแต่ละประเภทเพียงตัวเดียว (Single Instance of Each Resource Type)

(a) เป็นต้นแบบกราฟการจัดสรรทรัพยากร (b) แปลงเป็นกราฟการรอคอยทรัพยากร

single instance of each resource type2
ระบบที่มีทรัพยากรแต่ละประเภทเพียงตัวเดียว (Single Instance of Each Resource Type)
  • ถ้าในกราฟการรอคอยทรัพยากรมีวงจรแล้วก็จะเกิดวงจรอับ และในทางกลับกัน ถ้าเกิดวงจรอับแล้ว ก็จะมีวงจรในกราฟการรอคอยทรัพยากร ระบบต้องเก็บข้อมูลของกราฟการรอคอยทรัพยากรไว้ และใช้ขั้นตอนวิธีการตรวจหาวงจรในกราฟ เพื่อตรวจหาวงจรอับในระบบ โดยคอยตรวจดูทุก ๆ ช่วงเวลา
several instances of a resource type
ระบบที่มีทรัพยากรแต่ละประเภทหลายตัว(Several Instances of a Resource Type)
  • ขั้นตอนวิธีในการตรวจหาวงจรอับนี้คล้ายกับ Banker’s Algorithm ซึ่งจำเป็นต้องใช้โครงสร้างข้อมูลดังต่อไปนี้
  • Available : เป็นเวคเตอร์ขนาด m แสดงจำนวนทรัพยากรแต่ละชนิด ที่ยังว่างอยู่ (ไม่ได้ถูกกระบวนการใดถือครองอยู่)
  • Allocation : เป็นเมทริกซ์ n x m ใช้เก็บค่าจำนวนทรัพยากรแต่ละชนิดที่กระบวนการแต่ละตัวถือครองอยู่
  • Request : เป็นเมทริกซ์ n x m ใช้เก็บค่าจำนวนทรัพยากรแต่ละชนิดที่กระบวนการแต่ละตัวกำลังร้องขอ
several instances of a resource type1
ระบบที่มีทรัพยากรแต่ละประเภทหลายตัว(Several Instances of a Resource Type)
  • ขั้นตอนวิธีตรวจหาวงจรอับ
  • 1. Work := Available;
  • 2. FOR i:= 1 TO n DO
  • IF Allocationi 0
  • THEN Finish[i] := FALSE
  • ELSE Finish[i] := TRUE;
several instances of a resource type2
ระบบที่มีทรัพยากรแต่ละประเภทหลายตัว(Several Instances of a Resource Type)
  • 3. i := 1;
  • WHILE i n DO BEGIN
  • IF Finish[i] = FALSE AND Request[i] Work
  • THEN BEGIN
  • Work := Work + Allocationi;
  • Finish[i] := TRUE;
  • i := i+1; END
  • ELSE i := i+1;
  • END;
  • 4. FOR i=1 TO n DO
  • IF Finish[i] = FALSE THEN process Pi is in a deadlocked.
  • 6. IF Finish[i] = TRUE ทั้งหมด แสดงว่าขณะนี้ระบบไม่เกิดวงจรอับ.
slide60
ตัวอย่าง
  • ให้ระบบมี 5 กระบวนการ P0 , P1 , P2 , P3 และ P4 และมีทรัพยากรชนิด A 7 ตัว , ชนิด B 2 ตัว , ชนิด C 6 ตัว ณ เวลา T0 ระบบอยู่ในสถานะดังนี้
slide61
ตัวอย่าง
  • เราจะสรุปได้ว่า ขณะนี้ไม่มีวงจรอับเกิดขึ้นหรือระบบไม่ได้อยู่ในสถานะวงจรอับ โดยการดำเนินตามขั้นตอนวิธีตรวจหาวงจรอับ (Deadlock Detection) ดังกล่าวข้างต้น
  • เราจะพบว่ามีลำดับการทำงานหนึ่ง คือ <P0 , P2 , P3 , P1 , P4> ซึ่งจะให้ Finish[i] = TRUE ทั้งหมด
p2 c 1
สมมติว่ากระบวนการ P2 ร้องขอทรัพยากรประเภท C เพิ่มอีก 1 ตัว สถานะของระบบจะกลายเป็น

เราจะพบว่า ขณะนี้มีวงจรอับเกิดขึ้นในระบบ แม้ว่า P0 อาจทำงานเสร็จ แล้วคืนทรัพยากรชนิด B สู่ระบบ กระบวนการอื่น ๆ ก็ไม่อาจทำงานต่อได้ เพราะทรัพยากรที่ว่างอยู่ ไม่พอตามคำร้องขอ ดังนั้นระบบจึงตกอยู่ในสถานะวงจรอับ โดยมีกระบวนการ P1 , P2 , P3 และ P4 อยู่ในวงจรอับ

detection algorithm usage
การใช้วิธีการตรวจหาวงจรอับ(Detection-Algorithm Usage)
  • เราจะใช้วิธีการตรวจหาวงจรอับ เมื่อใดบ้าง ขึ้นอยู่กับ 2 ปัจจัย คือ
  • 1. ความถี่ของการเกิดวงจรอับในระบบ
  • 2. จำนวนกระบวนการที่ติดอยู่ในวงจรอับ
  • วงจรอับจะเกิดขึ้นเมื่อมีเหตุการณ์ที่บางกระบวนการร้องขอทรัพยากรแล้วระบบไม่สามารถอนุมัติให้ได้ทันที เราจึงอาจตรวจหาวงจรอับโดยตรวจทุกครั้งที่เหตุการณ์นี้เกิดขึ้น
  • การตรวจหาวงจรอับบ่อยเกินไป ย่อมทำให้เสียค่าใช้จ่าย(เวลา)มาก เพื่อที่จะประหยัดค่าใช้จ่าย เราอาจตรวจหาทุก ๆ ช่วงเวลาแทน เช่น ทุก ๆ 1 ชั่วโมง หรือ เมื่อประสิทธิผลของการใช้หน่วยประมวลผลกลางลดต่ำกว่า 40 %
recovery from deadlock
การแก้ไขวงจรอับ (Recovery from Deadlock)
  • เมื่อตรวจพบว่าเกิดวงจรอับขึ้นในระบบแล้ว ระบบอาจจัดการได้ 2 วิธี คือ
  • 1. รายงานให้ผู้ควบคุมเครื่องทราบว่าขณะนี้เกิดวงจรอับขึ้นในระบบแล้ว และให้ผู้ควบคุมจัดการแก้ไขวงจรอับเอง
  • 2. ระบบแก้ไขวงจรอับเองโดยอัตโนมัติ ซึ่งอาจทำได้ 2 วิธี คือ
    • ยกเลิกกระบวนการที่ติดอยู่ในวงจรอับบางกระบวนการเพื่อที่จะตัดวงจรอับ
    • อนุญาตให้มีการแทรกกลางคันทรัพยากรบางส่วนที่ติดอยู่ในวงจรอับได้เพื่อทำให้ระบบกลับคืนสู่สภาวะปกติ
process termination
การยกเลิกกระบวนการ (Process Termination)
  • วิธีการในการแก้ไขวงจรอับ โดยการยกเลิกกระบวนการในวงจรอับ มีอยู่ 2 วิธี (ทั้ง 2 วิธีนี้ เมื่อกระบวนการถูกยกเลิก ทรัพยากรที่กระบวนการถือครองอยู่จะคืนกลับสู่ระบบ)
  • ยกเลิกกระบวนการทั้งหมดที่ติดอยู่ในวงจรอับ
  • ยกเลิกกระบวนการในวงจรอับทีละกระบวนการ จนกระทั่งระบบกลับสู่สภาวะปกติ
slide66
สำหรับวิธีการยกเลิกกระบวนการทีละตัวสำหรับวิธีการยกเลิกกระบวนการทีละตัว
  • การพิจารณาค่าใช้จ่ายต่ำที่สุด อาจพิจารณาได้จากหลายปัจจัยดังนี้
    • พิจารณาลำดับความสำคัญของกระบวนการ (Priority)
    • พิจารณาว่ากระบวนการนั้นทำงานมานานเท่าไรแล้ว และจะใช้เวลาอีกนานเท่าไรกว่างานจะเสร็จสมบูรณ์
    • พิจารณาว่ากระบวนการนั้นได้ถือครองหรือใช้ทรัพยากรประเภทใดไปเท่าไรแล้ว
    • พิจารณาว่ากระบวนการยังต้องการทรัพยากรอีกเท่าไร จึงจะทำงานจนเสร็จสมบูรณ์ได้
    • พิจารณาว่ามีกี่กระบวนการที่จะต้องถูกยกเลิก
    • พิจารณาว่ากระบวนการเป็นประเภทใด (แบบโต้ตอบ (interactive) หรือแบบกลุ่ม(batch))
resource preemption
การแทรกกลางคัน(Resource Preemption)
  • ในการเลือกใช้วิธีการแทรกกลางคัน เราจะต้องพิจารณาผลที่จะเกิด 3 ข้อดังนี้
    • การเลือกผู้รับเคราะห์ (Selection a victim) โดยการเลือกว่ากระบวนการใดในวงจรอับที่จะถูกแทรกกลางคันแล้ว จะเสียค่าใช้จ่ายน้อยที่สุด
    • การถอยกลับ (Rollback) ให้กระบวนการนั้นถอยกลับไปอยู่ในจุดที่ปลอดภัย และให้เริ่มทำงานใหม่อีกครั้งจากจุดนี้
    • การแช่เย็น (Starvation) เราจะรับประกันได้อย่างไรว่าจะไม่เกิดการแช่เย็น เช่น มีกระบวนการหนึ่งถูกแทรกกลางคันทรัพยากรที่กำลังใช้อยู่เสมอ ๆ
combined approach to deadlock handling
การจัดการปัญหาวงจรอับโดยวิธีผสมผสาน (Combined Approach to Deadlock Handling)
  • เราอาจพิสูจน์ได้ว่าระบบที่ใช้วิธีผสมผสานนี้จะไม่เกิดวงจรอับ ดังนี้คือ
  • วงจรอับไม่อาจจะเกิดข้ามกลุ่มของทรัพยากรได้ เพราะเราใช้วิธีการจัดเรียงลำดับทรัพยากร
  • ในแต่ละกลุ่มก็จะไม่เกิดวงจรอับเพราะเราได้เลือกวิธีจัดการ 1 ใน 3 วิธี ที่กล่าวมาแล้ว ดังนั้นระบบโดยรวมจะไม่เกิดวงจรอับ
slide69
ตัวอย่าง
  • สมมติว่าระบบของเราประกอบไปด้วยทรัพยากร 4 ประเภท คือ
  • ทรัพยากรภายในของระบบ (Internal Resources) คือ ทรัพยากรที่ระบบใช้เอง เช่น PCB (Process Control Block)
  • หน่วยความจำหลัก (Central Memory) ซึ่งผู้ใช้ระบบต้องใช้
  • อุปกรณ์ต่าง ๆ ในระบบ (Job Resources) เช่น อุปกรณ์ทางกายภาพ อุปกรณ์ทางตรรกะ
  • หน่วยความจำสำรอง (Swappable space) พื้นที่ในจานบันทึก (Backing Store) สำหรับสำรองแต่ละงาน
slide70
ตัวอย่าง
  • เราจัดการปัญหาวงจรอับในระบบนี้ โดยจัดแบ่งกลุ่มของทรัพยากรเป็น 4 กลุ่ม ตามที่กล่าวมาและในแต่ละกลุ่มใช้วิธีจัดการดังนี้
  • ทรัพยากรภายในของระบบ ป้องกันโดยการจัดลำดับทรัพยากร เพราะกระบวนการที่ร้องขอทรัพยากรเหล่านี้ ล้วนเป็นกระบวนการภายในของระบบเอง
  • หน่วยความจำหลัก ป้องกันโดยการให้มีการแทรกกลางคันได้ เพราะอาจย้ายงานแต่ละชิ้นออกจากหน่วยความจำหลักไปเก็บไว้ในหน่วยความจำสำรอง (Backing Store) ได้โดยง่าย เมื่อมีกระบวนการต้องการใช้หน่วยความจำเพิ่ม และหน่วยความจำเต็มแล้ว
slide71
ตัวอย่าง
  • อุปกรณ์ต่าง ๆ ในระบบ ใช้วิธีการหลีกเลี่ยง เพราะข้อมูลเกี่ยวกับความต้องการสูงสุดของแต่ละงานอาจรู้ล่วงหน้าได้ เช่น จากบัตรควบคุมงาน (Job Control Card) ในกรณีที่ใช้บัตรเจาะรู (Punch cards)
  • หน่วยความจำสำรอง ป้องกันโดย การจัดสรรล่วงหน้า เพราะจำนวนหน่วยความจำสำรองสูงสุดของแต่ละงาน มักจะถูกกำหนดไว้แล้ว
ad