กระบวนการ Syncการทำเวลา: ปัญหาส่วนสำคัญในระบบปฏิบัติการ
กระบวนการคืออะไร Syncพรหมลิขิต?
กระบวนการ Syncการทำให้เป็นพงศาวดาร เป็นงานในการประสานงานการดำเนินการของกระบวนการในลักษณะที่ไม่มีสองกระบวนการสามารถเข้าถึงข้อมูลและทรัพยากรที่ใช้ร่วมกันได้
มีความจำเป็นเป็นพิเศษในระบบที่มีหลายกระบวนการ เมื่อหลายกระบวนการทำงานพร้อมกัน และมีกระบวนการมากกว่าหนึ่งกระบวนการพยายามเข้าถึงทรัพยากรหรือข้อมูลที่แชร์เดียวกันในเวลาเดียวกัน
สิ่งนี้อาจนำไปสู่ความไม่สอดคล้องของข้อมูลที่ใช้ร่วมกัน ดังนั้นการเปลี่ยนแปลงที่เกิดขึ้นจากกระบวนการหนึ่งอาจไม่สะท้อนให้เห็นเมื่อกระบวนการอื่นเข้าถึงข้อมูลที่ใช้ร่วมกันชุดเดียวกัน เพื่อหลีกเลี่ยงความไม่สอดคล้องของข้อมูลประเภทนี้ กระบวนการต่างๆ จำเป็นต้องซิงโครไนซ์กัน
วิธีการดำเนินการ Syncการทำให้เที่ยงตรงใช้งานได้หรือไม่?
ตัวอย่างเช่น กระบวนการ A เปลี่ยนแปลงข้อมูลในตำแหน่งหน่วยความจำ ในขณะที่กระบวนการ B อื่นพยายามอ่านข้อมูลจาก เดียวกัน ตำแหน่งหน่วยความจำ มีความเป็นไปได้สูงที่ข้อมูลที่อ่านโดยกระบวนการที่สองจะผิดพลาด
ส่วนของโปรแกรม
องค์ประกอบสำคัญสี่ประการของส่วนสำคัญมีดังนี้:
- ส่วนรายการ: มันเป็นส่วนหนึ่งของกระบวนการที่ตัดสินการเข้าสู่กระบวนการเฉพาะ
- ส่วนสำคัญ: ส่วนนี้อนุญาตให้กระบวนการหนึ่งป้อนและแก้ไขตัวแปรที่แชร์
- ส่วนทางออก: ส่วนทางออกช่วยให้กระบวนการอื่นที่กำลังรออยู่ในส่วนรายการสามารถเข้าสู่ส่วนสำคัญได้ นอกจากนี้ยังตรวจสอบว่าควรลบกระบวนการที่ดำเนินการเสร็จสิ้นแล้วผ่านส่วนนี้หรือไม่
- ส่วนที่เหลือ: ส่วนอื่นๆ ทั้งหมดของหลักจรรยาบรรณซึ่งไม่อยู่ในส่วนวิกฤต การเข้า และออก เรียกว่าส่วนส่วนที่เหลือ
ปัญหาส่วนสำคัญคืออะไร?
ส่วนที่สำคัญคือส่วนของโค้ดที่สามารถเข้าถึงได้โดยกระบวนการสัญญาณ ณ จุดเวลาที่กำหนด ส่วนนี้ประกอบด้วยแหล่งข้อมูลที่ใช้ร่วมกันซึ่งกระบวนการอื่นจำเป็นต้องเข้าถึง
- การเข้าสู่ส่วนวิกฤติได้รับการจัดการโดยฟังก์ชัน wait() และแสดงเป็น P()
- ทางออกจากส่วนวิกฤติจะถูกควบคุมโดยฟังก์ชัน signal() ซึ่งแสดงเป็น V()
ในส่วนที่สำคัญ สามารถดำเนินการได้เพียงกระบวนการเดียวเท่านั้น กระบวนการอื่นๆ ที่รอดำเนินการในส่วนที่สำคัญ ต้องรอจนกว่ากระบวนการปัจจุบันจะดำเนินการเสร็จสิ้น
กฎเกณฑ์สำหรับมาตราที่สำคัญ
ส่วนที่สำคัญจะต้องบังคับใช้กฎทั้งสามข้อ:
- การยกเว้นร่วมกัน: Mutual Exclusion คือเซมาฟอร์ไบนารีชนิดพิเศษที่ใช้สำหรับควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกัน ประกอบด้วยกลไกการสืบทอดลำดับความสำคัญเพื่อหลีกเลี่ยงปัญหาการผกผันลำดับความสำคัญที่ขยายออกไป สามารถดำเนินการได้ไม่เกินหนึ่งกระบวนการในส่วนที่สำคัญในคราวเดียว
- ความคืบหน้า โซลูชันนี้ใช้เมื่อไม่มีใครอยู่ในส่วนวิกฤติ และมีคนต้องการเข้าร่วม จากนั้น กระบวนการเหล่านั้นที่ไม่อยู่ในส่วนตัวเตือนควรตัดสินใจว่าใครควรเข้าไปภายในระยะเวลาอันจำกัด
- ผูกพันรอ: เมื่อกระบวนการส่งคำขอเพื่อเข้าสู่ส่วนวิกฤติ มีข้อจำกัดเฉพาะเกี่ยวกับจำนวนกระบวนการที่สามารถเข้าสู่ส่วนวิกฤติได้ ดังนั้นเมื่อถึงขีดจำกัด ระบบจะต้องอนุญาตให้มีการร้องขอไปยังกระบวนการเพื่อเข้าสู่ส่วนที่สำคัญ
แนวทางแก้ไขในส่วนสำคัญ
อยู่ในขั้นตอน Syncการแก้ไขส่วนสำคัญมีบทบาทหลักเพื่อให้ปัญหาต้องได้รับการแก้ไข
ต่อไปนี้เป็นวิธีการที่ใช้กันอย่างแพร่หลายในการแก้ปัญหาส่วนวิกฤติ
โซลูชั่นปีเตอร์สัน
วิธีแก้ปัญหาของ Peterson เป็นวิธีการแก้ปัญหาที่ใช้กันอย่างแพร่หลายสำหรับปัญหาส่วนวิกฤต อัลกอริธึมนี้ได้รับการพัฒนาโดยนักวิทยาศาสตร์คอมพิวเตอร์ชื่อปีเตอร์สัน จึงเป็นเหตุให้มันถูกตั้งชื่อว่าเป็นวิธีแก้ปัญหาของปีเตอร์สัน
ในโซลูชันนี้ เมื่อกระบวนการดำเนินการในสถานะวิกฤติ กระบวนการอื่นจะดำเนินการเฉพาะโค้ดที่เหลือเท่านั้น และสิ่งตรงกันข้ามสามารถเกิดขึ้นได้ วิธีนี้ยังช่วยให้แน่ใจว่ามีเพียงกระบวนการเดียวเท่านั้นที่ทำงานในส่วนที่สำคัญในเวลาที่กำหนด
ตัวอย่าง
PROCESS Pi FLAG[i] = true while( (turn != i) AND (CS is !free) ){ wait; } CRITICAL SECTION FLAG[i] = false turn = j; //choose another process to go to CS
- สมมติว่ามีกระบวนการ N (P1, P2, … PN) และทุกกระบวนการ ณ จุดใดจุดหนึ่งจำเป็นต้องเข้าสู่ส่วนวิกฤต
- อาร์เรย์ FLAG[] ขนาด N จะถูกคงไว้ซึ่งโดยค่าเริ่มต้นจะเป็นเท็จ ดังนั้นเมื่อใดก็ตามที่กระบวนการจำเป็นต้องเข้าสู่ส่วนที่สำคัญ กระบวนการนั้นจะต้องตั้งค่าแฟล็กเป็นจริง ตัวอย่างเช่น ถ้า Pi ต้องการป้อน ก็จะตั้งค่า FLAG[i]=TRUE
- ตัวแปรอื่นที่เรียกว่า TURN ระบุหมายเลขกระบวนการที่กำลังต้องการเข้าสู่ CS
- กระบวนการที่เข้าสู่ส่วนวิกฤติขณะออกจะเปลี่ยน TURN เป็นหมายเลขอื่นจากรายการกระบวนการที่พร้อม
- ตัวอย่าง: เทิร์นเป็น 2 จากนั้น P2 จะเข้าสู่ส่วนวิกฤต และขณะออกจากเทิร์น=3 ดังนั้น P3 จึงหลุดออกจากลูปการรอ
Syncฮาร์ดแวร์เสียงสะท้อน
บางครั้งปัญหาของส่วนวิกฤตก็ได้รับการแก้ไขโดยฮาร์ดแวร์ด้วย ระบบปฏิบัติการบางระบบมีฟังก์ชันล็อกที่กระบวนการจะล็อกเมื่อเข้าสู่ส่วนวิกฤตและปลดล็อกเมื่อออกจากส่วนนั้น
ดังนั้นเมื่อกระบวนการอื่นพยายามเข้าสู่ส่วนสำคัญ กระบวนการนั้นจะไม่สามารถเข้าไปได้เนื่องจากถูกล็อค สามารถทำได้ก็ต่อเมื่อมันว่างโดยการรับล็อคมาเอง
มูเท็กซ์ล็อค
Syncฮาร์ดแวร์ hronization ไม่ใช่วิธีการง่ายๆ สำหรับทุกคน ดังนั้น จึงมีการใช้วิธีซอฟต์แวร์ที่เข้มงวดที่เรียกว่า Mutex Locks ด้วยเช่นกัน
ในแนวทางนี้ ในส่วนการป้อนข้อมูลของโค้ด จะได้รับ LOCK เหนือทรัพยากรสำคัญที่ใช้ภายในส่วนสำคัญ ในส่วนทางออกที่ล็อคจะถูกปลดล็อค
Semaphore Solution
Semaphore เป็นเพียงตัวแปรที่ไม่เป็นลบและใช้ร่วมกันระหว่างเธรด เป็นอีกอัลกอริธึมหรือวิธีแก้ไขปัญหาส่วนวิกฤติ เป็นกลไกการส่งสัญญาณและเธรดที่รออยู่บนเซมาฟอร์ซึ่งสามารถส่งสัญญาณโดยเธรดอื่นได้
ใช้การดำเนินการแบบอะตอมสองอย่าง 1) รอ และ 2) สัญญาณสำหรับการซิงโครไนซ์กระบวนการ
ตัวอย่าง
WAIT ( S ): while ( S <= 0 ); S = S - 1; SIGNAL ( S ): S = S + 1;
สรุป
- การซิงโครไนซ์กระบวนการคือหน้าที่ในการประสานการดำเนินการของกระบวนการในลักษณะที่ไม่มีกระบวนการใดสองกระบวนการสามารถเข้าถึงข้อมูลและทรัพยากรที่ใช้ร่วมกันได้
- องค์ประกอบสี่ประการของส่วนวิกฤติคือ 1) ส่วนรายการ 2) ส่วนสำคัญ 3) ส่วนออก 4) ส่วนการแจ้งเตือน
- ส่วนที่สำคัญคือส่วนของโค้ดที่สามารถเข้าถึงได้โดยกระบวนการสัญญาณ ณ จุดเวลาที่กำหนด
- กฎสามข้อที่ต้องบังคับใช้ตามส่วนที่วิกฤติคือ: 1) การยกเว้นร่วมกัน 2) วิธีแก้ปัญหากระบวนการ 3) การรอแบบผูกมัด
- Mutual Exclusion คือเซมาฟอร์ไบนารีชนิดพิเศษที่ใช้สำหรับควบคุมการเข้าถึงทรัพยากรที่ใช้ร่วมกัน
- โซลูชันกระบวนการจะใช้เมื่อไม่มีใครอยู่ในส่วนวิกฤติ และมีคนต้องการเข้าไป
- ในโซลูชันการรอแบบผูกมัด หลังจากที่กระบวนการส่งคำขอเพื่อเข้าสู่ส่วนที่สำคัญแล้ว จะมีขีดจำกัดสำหรับจำนวนกระบวนการอื่น ๆ ที่สามารถเข้าสู่ส่วนวิกฤติได้
- วิธีแก้ปัญหาของ Peterson เป็นวิธีแก้ปัญหาที่ใช้กันอย่างแพร่หลายสำหรับปัญหาส่วนวิกฤต
- ปัญหาของส่วนวิกฤตยังได้รับการแก้ไขด้วยการซิงโครไนซ์ฮาร์ดแวร์
- Syncฮาร์ดแวร์การทำ hronization ไม่ใช่วิธีง่ายๆ สำหรับทุกคน ดังนั้นจึงมีการใช้วิธีซอฟต์แวร์ที่เข้มงวดที่เรียกว่า Mutex Locks ด้วยเช่นกัน
- Semaphore เป็นอีกอัลกอริธึมหรือวิธีแก้ไขปัญหาส่วนวิกฤติ