บทที่  7 Classic Synchronization <ul><li>เบื้องหลัง  Background </li></ul><ul><li>ปัญหาของส่วนงานวิกฤต The Critical-Sectio...
เบื้องหลัง  Background <ul><li>การเข้าใช้ข้อมูลที่ต้องใช้ร่วมกันในเวลาเดียวกันอาจส่งผลต่อความถูกต้องของข้อมูล </li></ul><u...
การแก้ไขปัญหาส่วนงานวิกฤต  Solution to Critical-Section Problem <ul><li>1. Mutual Exclusion  -  การแยกการดำเนินการเมื่อเกิ...
Algorithm 1 <ul><li>เธรด แบ่งการใช้งานตัวแปรแบบจำนวนเต็มด้วยตัวแปร  </li></ul><ul><li>turn Threads share a common integer ...
Algorithm 2 <ul><li>Add more state information </li></ul><ul><ul><li>Boolean flags to indicate thread’s interest in enteri...
Algorithm 3 <ul><li>นำแนวคิดที่  1  และ  2  มารวมกัน </li></ul><ul><li>Combine ideas from 1 and 2 </li></ul><ul><li>จะสามา...
การทำงานเชิงสัมพันธ์ของฮาร์ดแวร์  Synchronization Hardware <ul><li>มีระบบหลายระบบสามารถรองรับการทำงานของโค้ดส่วนงานวิกฤติไ...
ระบบอาณัติสัญญาณ  Semaphore <ul><li>เครื่องมือเพื่อการทำงานเชิงสัมพันธ์จะต้องไม่มีการร้องขอการรอคอยแบบไม่ว่างงาน   ( spin ...
อาณัติสัญญาณโดยเครื่องมือเพื่อการทำงานเชิงสัมพันธ์แบบทั่วไป  Semaphore as General Synchronization Tool <ul><li>Counting  s...
การใช้งานอาณัติสัญญาณ  Semaphore Implementation <ul><li>ต้องรับรองได้ว่าไม่เกิดการเอ็กซ์ซีคิวท์สองโปรเซสพร้อมกัน  acquire(...
ในที่นี้จะไม่กล่าวถึงประสิทธิภาพ  Deadlock and Starvation <ul><li>Deadlock  วงจรอับ หมายถึงโปรเซสตั้งแต่สองโปรเซสขึ้นไป เข...
ปัญหาพื้นฐานของการทำงานเชิงสัมพันธ์  Classical Problems of Synchronization <ul><li>ปัญหาขอบเขตของบัฟเฟอร์ </li></ul><ul><l...
ปัญหาดินนิ่งไฟโลโซเฟอร์  Dining-Philosophers Problem <ul><li>การแบ่งปันข้อมูล  Shared data  </li></ul><ul><li>Semaphore ch...
การเฝ้าติดตาม  Monitors <ul><li>การเฝ้าติดตามเป็นแนวคิดระดับสูง ที่ทำให้การทำงานของเธรดเกิดความปลอดภัย  </li></ul><ul><li>...
ตัวแปรแบบมีเงื่อนไข   Condition Variables <ul><li>condition x, y; </li></ul><ul><li>A thread that invokes  x.wait  is susp...
Monitor with condition variables
Upcoming SlideShare
Loading in...5
×

Ch07ath

5,606

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
1 Comment
7 Likes
Statistics
Notes
No Downloads
Views
Total Views
5,606
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
1
Likes
7
Embeds 0
No embeds

No notes for slide
  • Transcript of "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

    ×