Synchronization น.ส.จิรภัทร ทองนพคุณ รหัสนิสิต 50036207 กลุ่ม 1 Operating System
สาระสำคัญของบทที่ 6
1. The producer/ consumer problem ปัญหานี้เป็นปัญหาที่นิยมกันมากและใช้เป็นตัวอย่างแนวคิด คล้ายกับว่ามีโรงงานแห่งหนึ่ง ในโรงงานก็จะมีส่วนที่เป็นส่วนโรงงาน และส่วนประกอบอื่น ๆ รวมอยู่ โรงง่านจะแบ่งออกเป็นส่วน ๆ สามารถกล่าวให้เข้าใจง่าย ๆก็คือ ส่วนของโรงงานจะเป็น “produces” และส่วนอื่น ๆ ก็จะเป็น “consumer” นั่นเอง
2. Lost Update ถ้าคุณมี psuedo code ทั้งสองแบบ คือ producer และ consumer แต่ละตัวจะสามารถทำงานได้เมื่อมีการทำงานตัวเดียว และอีกตัวหนึ่งก็สามารถทำงานได้เช่นเดียวกับตัวแรก แต่ถ้าคุณทำการแทรกอีกตัวหนึ่งเข้าไปขณะที่ตัวแรกกำลังทำงานอยู่ ระบบมันจะหยุดการทำงานทันที
3. การเรียนรู้วิธีการที่จะแก้ปัญหา เราจะต้องเรียนรู้เกี่ยวกับเรื่อง “critical section” critical section คือ ส่วนของพื้นที่ที่มีการแบ่งทรัพยากรซึ่งได้รับสิทธิที่จะทำการแก้ไข ปรับปรุง เปลี่ยนแปลง สำหรับตัวอย่าง ตัวแปร Global นั้นจะ incremented หรือ decremented จากตัวอย่างของ producer และ consumer ซึ่งมีการใช้ตัวแปรร่วมกันเป็นจำนวนนับ
4. โพรเซสแต่ละส่วนของเซกเมนต์สำหรับ Code เรียกว่า a critical section ในส่วนของโพรเซสอาจจะมีการเปลี่ยนแปลงตัวแปรปกติทั่วไป การปรับปรุงค่าในตาราง การเขียนข้อมูลลงในไฟล์ และส่วนที่เกี่ยวข้อง คุณสมบัติที่สำคัญของระบบนั้น เมื่อ มีโพรเซสหนึ่งกำลังทำการ Execution ใน critical section ไม่มีโพรเซสอื่นที่จะยอมรับการ Execution ลงใน critical section ได้อีกในเวลาเดียวกัน
วิธีการแก้ปัญหา critical section ต้องอาศัยความเข้าใจในเรื่องความต้องการ 3 ข้อ ต่อไปนี้ 1. การห้ามอยู่พร้อมกัน (mutual exclusion ) ถ้ากระบวนการใดทำงานอยู่ ห้ามมีกระกวนการอื่นเข้ามาทำงานร่วม
2. ความก้าวหน้า (Progress) ถ้ายังไม่มีกระบวนการใดทำงานอยู่ในเขตที่กำหนด และมีกระบวนการใดต้องการที่จะเข้าไปในเขตนั้น กระบวนการเหล่านั้นจะต้องถูกนำมาตัดสินใจว่าใครจะได้เข้าไปในเขตนั้นเป็นลำกับถัดไป การคัดเลือกนี้จะต้องชัดเจน จะมีการเลื่อนสลับที่กันไม่ได้
และก่อนหน้านั้นการร้องขอเข้าไปในเขตที่กำหนดนั้นได้รับอนุญาตแล้ว 3. การรอคอยอย่างมีขอบเขต (bounded waiting) ต้องมีขอบเขตของเวลาเพื่อให้กระบวนการอื่นได้เข้าไปในเขตที่กำหนด หลังจากที่กระบวนการได้ร้องขอเข้าเขตที่กำหนด และก่อนหน้านั้นการร้องขอเข้าไปในเขตที่กำหนดนั้นได้รับอนุญาตแล้ว
วิธีการแก้ปัญหา critical section วิธีการที่ 1 Peterson’s Solution (ใช้ได้สำหรับซอฟแวร์เท่านั้น ไม่สามารถทำงานบนเครื่องรุ่นใหม่ได้ จะใช้ได้ดีสำหรับการทำงาน 2 processes/threads) วิธีการที่ 2 การทดสอบและตั้งค่า (Test and Set) (ฮาร์ดแวร์ เช่น เครื่อง Mainframe) วิธีการที่ 3 การแลกเปลี่ยน (Swap) (ฮาร์ดแวร์ เช่น เครื่อง PC)
(ควรที่จะใช้ภาษา perl, python, tcl หรือ ภาษาสคริปอื่นๆ) วิธีการที่ 2 และ 3 จะทำงานได้ดี แต่ต้องมี Code ในภาษาแอสแซมบลีหรือภาษาเครื่อง แต่จะมีการทำงานที่ไม่สะดวกสบายนัก และบางครั้งก็อาจจะเป็นไปไม่ได้เลย (ควรที่จะใช้ภาษา perl, python, tcl หรือ ภาษาสคริปอื่นๆ)
... อุปกรณ์นำสัญญาณที่ใช้ ระบบเลขฐานสองหรือจำนวนนับนั่นเอง ... ดังนั้นเราจะสามารถใช้อะไรที่จะสามารถทำได้ เรากำลังรอมันอยู่...... ... คิดออกแล้ว..... ... อุปกรณ์นำสัญญาณที่ใช้ ระบบเลขฐานสองหรือจำนวนนับนั่นเอง ...