Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Ch07ath

7,108 views

Published on

Operating System
ระบบปฏิบัติการคอมพิวเตอร์
by Nuttha Otanasap (ณัฏฐ์ โอธนาทรัพย์)
Computer Science Dept.,
South-east Asia University
Bangkok 10160 Thailand
email: auisuke@gmail.com
website:auisuke
auisuke.blogspot.com
Hi5:auisuke.hi5.com
Copyrights 2009 SE Asia University All Rights Reserved

Published in: Technology

Ch07ath

  1. 1. บทที่ 7 Classic Synchronization <ul><li>เบื้องหลัง Background </li></ul><ul><li>ปัญหาของส่วนงานวิกฤต The Critical-Section Problem </li></ul><ul><li>การทำงานเชิงสัมพันธ์ของฮาร์ดแวร์ Synchronization Hardware </li></ul><ul><li>ระบบอานัติสัญญาณ Semaphores </li></ul><ul><li>ปัญหาแบบดั้งเดิมของการทำงานเชิงสัมพันธ์ Classical Problems of Synchronization </li></ul><ul><li>การเฝ้าติดตาม Monitors </li></ul>
  2. 2. เบื้องหลัง Background <ul><li>การเข้าใช้ข้อมูลที่ต้องใช้ร่วมกันในเวลาเดียวกันอาจส่งผลต่อความถูกต้องของข้อมูล </li></ul><ul><li>การดูแลจัดการข้อมูลให้ถูกต้องสมบูรณ์ จำเป็นต้องอาศัยกลไกในการดำเนินการเพื่อมั่นใจได้ว่าเกิดการเอ็กซ์ซีคิวท์ตามลำดับที่ถูกต้องของโปรเซสแบบปฏิบัติการร่วม </li></ul><ul><li>ผลลัพท์ของหน่วยความจำที่ใช้ร่วม อาจเกิดปัญหาแบบเบาด์บัตเตอร์ ซึ่งมีเงื่อนไขอยู่บน คลาสของข้อมูล count </li></ul>
  3. 3. การแก้ไขปัญหาส่วนงานวิกฤต Solution to Critical-Section Problem <ul><li>1. Mutual Exclusion - การแยกการดำเนินการเมื่อเกิดการดำเนินการร่วม </li></ul><ul><li>หากโปรเซส P1 กำลังทำการเอ็กซ์ซีคิวท์ในส่วนงานวิกฤติ โปรเซสอื่นก็จะไม่สามารถทำการเอ็กซ์ซีคิวท์ในส่วนงานวิกฤติได้ </li></ul><ul><li>2. Progress - หากไม่มีโปรเซสใดกำลังเอ็กซ์ซีคิวท์ในส่วนงานวิกฤติ และมีโปรเซสอื่นใด อยู่ในส่วนงานวิกฤติ โปรเซสที่ถูกเลือกให้ทำการเอ็กซ์ซีคิวท์เป็นโปรเซสถัดไป ก็จะไม่สามารถถูกเลื่อนออกไปได้ </li></ul><ul><li>3. Bounded Waiting - ขอบเขตการรอคอย ขอบเขตการรอคอยขึ้นอยู่กับจำนวนเวลาที่โปรเซสใดๆ ได้รับสิทธิในการเข้าสู่ส่วนงานวิกฤติ หลังจาดโปรเซสนั้นได้ทำการร้องขอเพื่อเข้าสู่ส่วนงานวิกฤติ และก่อนที่การร้องขอนั้นจะได้รับอนุญาต </li></ul><ul><ul><li>สมมติให้โปรเซสนั้นทำการเอ็กซ์ซีคิวท์ที่ความเร็วไม่เป็นศูนย์ </li></ul></ul><ul><ul><li>ไม่มีทางเลือกอื่นที่สัมพันธ์กับโปรเซสที่ N </li></ul></ul>
  4. 4. Algorithm 1 <ul><li>เธรด แบ่งการใช้งานตัวแปรแบบจำนวนเต็มด้วยตัวแปร </li></ul><ul><li>turn Threads share a common integer variable turn </li></ul><ul><li>ถ้า turn==i เธรด i ก็จะได้รับอนุญาตให้ทำการเอ็กซ์ซีคิวท์ </li></ul><ul><li>If turn==i , thread i is allowed to execute </li></ul><ul><li>ไม่มีการอนุญาตคำร้องขออื่น </li></ul><ul><li>Does not satisfy progress requirement </li></ul><ul><ul><li>Why? </li></ul></ul>
  5. 5. Algorithm 2 <ul><li>Add more state information </li></ul><ul><ul><li>Boolean flags to indicate thread’s interest in entering critical section </li></ul></ul><ul><li>Progress requirement still not met </li></ul><ul><ul><li>Why? </li></ul></ul>
  6. 6. Algorithm 3 <ul><li>นำแนวคิดที่ 1 และ 2 มารวมกัน </li></ul><ul><li>Combine ideas from 1 and 2 </li></ul><ul><li>จะสามารถเข้าสู่ส่วนงานวิกฤติหรือไม่ </li></ul><ul><li>Does it meet critical section requirements? </li></ul>
  7. 7. การทำงานเชิงสัมพันธ์ของฮาร์ดแวร์ Synchronization Hardware <ul><li>มีระบบหลายระบบสามารถรองรับการทำงานของโค้ดส่วนงานวิกฤติได้ </li></ul><ul><li>Uniprocessors หน่วยประมวลผลเดี่ยว – ไม่ควรจะถูกขัดจังหวะในการทำงาน </li></ul><ul><ul><li>ในปัจจุบัน โค้ดที่ใช้ในการทำงานควรเอ็กซ์ซีคิวท์โดยปราศจากการคำนึงถึงระดับความสำคัญ </li></ul></ul><ul><ul><li>โดยทั่วไป ระบบที่มีหน่วยประมวลผลหลายหน่วยยังไม่มีประสิทธิภาพมากนัก </li></ul></ul><ul><ul><ul><li>เนื่องจาก ระบบปฏิบัติการยังไม่สามารถใช้งานส่วนต่างๆได้โดยครบถ้วน </li></ul></ul></ul><ul><li>เครื่องสมัยใหม่สามารถสั่งงานฮาร์ดแวร์แบบแบ่งส่วนได้ป็นอย่างดีโดยไม่มีการขัดจังหวะการทำงานใดๆ จากส่วนงานอื่นๆ </li></ul><ul><ul><ul><li>อตอมมิก คือ การที่ไม่ถูกขัดจังหวะจากส่วนงานอื่น </li></ul></ul></ul><ul><ul><ul><li>Atomic = non-interruptable </li></ul></ul></ul><ul><ul><li>โดยการทดสอบคำในหน่วยความจำและการกำหนดค่า </li></ul></ul><ul><ul><li>หรือการสลับสภาพแวดล้อมของคำในหน่วยความจำสองคำ </li></ul></ul>
  8. 8. ระบบอาณัติสัญญาณ Semaphore <ul><li>เครื่องมือเพื่อการทำงานเชิงสัมพันธ์จะต้องไม่มีการร้องขอการรอคอยแบบไม่ว่างงาน ( spin lock ) </li></ul><ul><li>อาณัติสัญญาณ S Semaphore S เป็นตัวแปรแบบจำนวนเต็ม </li></ul><ul><li>Two standard operations modify S: acquire() and release() </li></ul><ul><ul><li>Originally called P() and V() </li></ul></ul><ul><li>เกิดความยุ่งยากน้อยที่สุด </li></ul><ul><li>สามารถเข้าถึงโดยปฏิบัติการแบบอตอมมิกสองปฏิบัติการเท่านั้น </li></ul><ul><ul><ul><li>acquire(S) { </li></ul></ul></ul><ul><ul><ul><li>while S <= 0 </li></ul></ul></ul><ul><ul><ul><li>; // no-op </li></ul></ul></ul><ul><ul><ul><li>S--; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>release(S) { </li></ul></ul></ul><ul><ul><ul><li>S++; </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  9. 9. อาณัติสัญญาณโดยเครื่องมือเพื่อการทำงานเชิงสัมพันธ์แบบทั่วไป Semaphore as General Synchronization Tool <ul><li>Counting semaphore อาณัติสัญญาณการนับ เป็นค่าจำนวนเต็ม ที่สามารถมีขนาดเกินกว่าโดเมนที่ไม่กำหนด </li></ul><ul><li>Binary อาณัติสัญญาณแบบไบนารี่ เป็นค่าจำนวนเต็ม ที่สามารถมีขนาดได้ระหว่าง 0 และ 1 เท่านั้น ทั้งนี้สามารถใช้งานง่าย </li></ul><ul><ul><li>Also known as mutex locks </li></ul></ul><ul><li>สามารถกำหนดให้อาณัติสัญญาณการนับ S เป็นแบบอาณัติสัญญาณไบนารี่ </li></ul><ul><li>รองรับการทำงานแบบแยกการทำงานของการทำงานร่วม </li></ul><ul><ul><ul><li>Semaphore S; // initialized to 1 </li></ul></ul></ul><ul><ul><ul><li>acquire(S); </li></ul></ul></ul><ul><ul><ul><li>criticalSection(); </li></ul></ul></ul><ul><ul><ul><li>release(S); </li></ul></ul></ul>
  10. 10. การใช้งานอาณัติสัญญาณ Semaphore Implementation <ul><li>ต้องรับรองได้ว่าไม่เกิดการเอ็กซ์ซีคิวท์สองโปรเซสพร้อมกัน acquire() และ ปลดปล่อย release() อาณัติสัญญาณเดียวกันในเวลาเดียวกัน </li></ul><ul><li>การใช้งานเข้าสู่ปัญหาส่วนงานวิกฤติ </li></ul><ul><ul><li>ในขณะทำงานเกิดการรอคอยแบบไม่ว่างงานในการใช้งานส่วนงานวิกฤติ </li></ul></ul><ul><ul><ul><li>แต่การใช้งานโค้ดเป็นเพียงช่วงระยะเวลาสั้นๆ </li></ul></ul></ul><ul><ul><ul><li>การรอคอยแบบไม่ว่างงานเป็นเพียงช่วงระยะเวลาเล็กน้อยหากเกิดส่วนงานวิกฤติไม่บ่อยนัก </li></ul></ul></ul><ul><li>แอพพลิเคชั่นอาจจะต้องสูญเสียเวลามากในส่วนงานวิกฤติ </li></ul><ul><ul><ul><li>ในที่นี้จะไม่กล่าวถึงประสิทธิภาพ </li></ul></ul></ul>
  11. 11. ในที่นี้จะไม่กล่าวถึงประสิทธิภาพ Deadlock and Starvation <ul><li>Deadlock วงจรอับ หมายถึงโปรเซสตั้งแต่สองโปรเซสขึ้นไป เข้าสู่สถานะรอคอยอย่างไม่มีเวลาสิ้นสุด อันเนื่องมาจากโปรเซสใด โปรเซสหนึ่งเข้าสู่สถานะรอคอย </li></ul><ul><li>Let S and Q be two semaphores initialized to 1 </li></ul><ul><li>P 0 P 1 </li></ul><ul><li> acquire(S); acquire(Q); </li></ul><ul><li> acquire(Q); acquire(S); </li></ul><ul><li>. . </li></ul><ul><li>. . </li></ul><ul><li>. . </li></ul><ul><li> release(S); release(Q); </li></ul><ul><li> release(Q); release(S); </li></ul><ul><li>Starvation – การถูกละเลย หมายถึงการเกิดการขัดขวางแบบไม่สิ้นสุด โดยโปรเซสอาจไม่ถูกลบออกจากคิวของระบบอาณัติสัญญาณ ด้วยเหตุนี้โปรเซสนั้นก็จะถูกพักการทำงานไปโดยปริยาย </li></ul>
  12. 12. ปัญหาพื้นฐานของการทำงานเชิงสัมพันธ์ Classical Problems of Synchronization <ul><li>ปัญหาขอบเขตของบัฟเฟอร์ </li></ul><ul><li>Bounded-Buffer Problem </li></ul><ul><li>ปัญหาของตัวอ่านและตัวเขียน </li></ul><ul><li>Readers and Writers Problem </li></ul><ul><li>ปัญหาดินนิ่งไฟโลโซเฟอร์ </li></ul><ul><li>Dining-Philosophers Problem </li></ul>
  13. 13. ปัญหาดินนิ่งไฟโลโซเฟอร์ Dining-Philosophers Problem <ul><li>การแบ่งปันข้อมูล Shared data </li></ul><ul><li>Semaphore chopStick[] = new Semaphore[5]; </li></ul>
  14. 14. การเฝ้าติดตาม Monitors <ul><li>การเฝ้าติดตามเป็นแนวคิดระดับสูง ที่ทำให้การทำงานของเธรดเกิดความปลอดภัย </li></ul><ul><li>มีเพียงเธรดเดียวเท่านั้นที่กำลังทำงานในการเฝ้าติดตาม ณ ขณะเวลาใดๆ </li></ul><ul><ul><ul><li>monitor monitor-name </li></ul></ul></ul><ul><ul><ul><li>{ </li></ul></ul></ul><ul><ul><ul><li>// variable declarations </li></ul></ul></ul><ul><ul><ul><li>public entry p1(…) { </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>public entry p2(…) { </li></ul></ul></ul><ul><ul><ul><li>… </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  15. 15. ตัวแปรแบบมีเงื่อนไข Condition Variables <ul><li>condition x, y; </li></ul><ul><li>A thread that invokes x.wait is suspended until another thread invokes x.signal </li></ul>
  16. 16. Monitor with condition variables

×