Process Synchronization อ. รวินทร์ ไชยสิทธิพร
เราจะเรียนอะไรกันบ้าง การทำงานของโปรเซสมากกว่า 1 ตัว การกีดกันกันเอง (Mutual Exclusion) เขตวิกฤต (Critical Section) Producer-Consumer problem Semaphore Dining Philosophers Problem
ทบทวน ก่อนที่จะเรียนในเรื่องใหม่ ให้น.ศ. ลองทบทวน เรื่องเก่าก่อน ได้แก่เรื่องของโปรเซส ให้ น.ศ. ตอบคำถามต่อไปนี้ 1. PCB คืออะไร 2. โปรเซสมีความสำคัญอย่างไร 3. โปรเซสต้องการทรัพยากรอะไรบ้าง 4. Context Switch คืออะไร 5. Thread มีข้อดีอย่างไร
จากเดิม โปรเซสเดียวใช้ CPU Process CPU ง่าย DOS
แต่หากมีหลายโปรเซสล่ะ Process Process Process CPU ใช้ PCB – เกิด Context Switch ปัญหาอย่างอื่น – Deadlock, Loss of Data Integrity, etc.
ปัญหาของ Loss of Data Integrity ปัญหาจะไม่เกิด หากอยู่ส่วนใครส่วนมัน แต่จะเกิดเมื่อมีการใช้ทรัพยากรร่วมกัน เช่น ตัวแปร, ไฟล์, ฐานข้อมูล, Address Space เป็นต้น หน้าที่ของ OS คือ “จัดการ” ให้เกิดความถูกต้องและรวดเร็ว ให้นศ. แบ่งกลุ่มๆละ 5 คน เพื่อลองคิดว่าปัญหาเหล่านี้เกิดได้อย่างไร
ปัญหา Producer-Consumer ปัญหานี้เป็นปัญหาที่พบได้บ่อยในระบบคอมพิวเตอร์ เช่น การฟังเพลงจาก WinAmp, การอ่านข้อมูลของ Web Browser หลักการก็คือ จะมี Buffer ที่ใช้ในการเก็บข้อมูล และจะมี Process อยู่ 2 ตัว ได้แก่ Producer และ Consumer ตัวหนึ่งนำข้อมูลมาวางไว้ใน Buffer อีกตัวหนึ่งอ่านข้อมูลไปจาก Buffer Producer Consumer Data Buffer
ปัญหาเกิดขึ้นได้อย่างไร ? ให้เวลา น.ศ. ประมาณ 5 นาที ลองคิดถึงปัญหาที่จะเกิดขึ้นของการทำงานแบบ Producer-Consumer แล้วนำเสนอต่ออาจารย์ ….. ปัญหา การทำงานที่ไม่ประสานกัน หาก Producer ทำงานเร็ว/ช้าเกินไป หาก Consumer ทำงานเร็ว/ช้าเกินไป หาก Buffer เล็กเกินไป หาก Buffer ใหญ่เกินไป
วิธีแก้ปัญหา ให้เวลา น.ศ. ประมาณ 5 นาที ลองคิดถึงแนวทางการแก้ปัญหาของการทำงานแบบ Producer-Consumer แล้วนำเสนอต่ออาจารย์ ..... แนวทางการแก้ปัญหา สร้างการทำงานที่ประสานกัน (Synchronize) มีตัวคอยเตือนหากว่าเกิดการทำงานที่ไม่ประสานกัน Producer ทำงานเร็วไปแล้ว Consumer ทำงานช้าไปแล้ว
โค๊ดโปรแกรม กำหนดให้ Buffer เป็น อาเรย์ ที่มีขนาด n+1 Producer จะนำข้อมูลไปวางที่ตำแหน่ง in Consumer ก็จะอ่านข้อมูลจากตำแหน่ง out 1 2 n out in
ทำอย่างไรจึงจะเห็นภาพ ? LAB ให้ นศ. ทำการทดลอง โดยเข้าไปที่เว็บไซท์ของอาจารย์ และเข้าไปที่ลิงก์ O.S.2 แล้วเข้าส่วนของ LAB. ทำตามการทดลอง LAB os2-1 …… ให้เวลา 20 นาที ส่งผลการทดลอง เป็นการบ้าน
LAB os2-1 วัตถุประสงค์ ทฤษฏี 1. เพื่อให้ นศ. เข้าใจการทำงานของอาเรย์ อาเรย์คือ “กล่องใส่ข้อมูล ที่มีตัวเลขบอกตำแหน่ง” ตัวเลขนี้เรียกว่า “ดัชนี” (index) 1 2 n
ทดลองเขียนโดยภาษา C (มีต่อ)
ต่อ แล้วการทำงานของโปรเซสล่ะ ? ต้องสร้าง Process ของ Producer และ Consumer
ข้อจำกัดของการทดลอง การสร้างโปรเซสขึ้นมา 2 โปรเซส แล้วให้ใช้ อาเรย์ร่วมกันนั้นเป็นสิ่งที่ยาก เพราะแต่ละโปรเซสจะมีขอบเขตการใช้หน่วยความจำของตนเอง หากทดลองกับ Database หรือ ไฟล์ ก็อาจจะยากเกินไป ลองดูเทคโนโลยีอื่นๆ Thread หาก 2 Threads ใช้อาเรย์ร่วมกันล่ะ Java รองรับการทำงานแบบ Thread
ทบทวนเรื่อง Thread Thread คือ โปรเซสขนาดเล็ก (Light weight process) Thread จะใช้ Memory ใน Address Space ขอบเขตเดียวกัน Thread สามารถสลับกันทำงานได้ (Multi-threading) Process Thread CPU
ตัวอย่างโค๊ด Java เรื่อง Thread
ตามทฤษฎี ว่าอย่างไร ส่วนของ Producer
Consumer
ทำการทดลอง