อ่าน 2 นาที
พีซีแอลเอสริง
PCLSRing (หรือที่รู้จักกันในชื่อ Program Counter Lusering [ 1 ] [ a ] ) เป็นคำที่ใช้ใน ระบบปฏิบัติการ ITS สำหรับหลักการความสอดคล้องในวิธีที่ กระบวนการ หนึ่ง เข้าถึง สถานะ...
พีซีแอลเอสริง
PCLSRing (หรือที่รู้จักกันในชื่อProgram Counter Lusering [ 1 ] [ a ] ) เป็นคำที่ใช้ในระบบปฏิบัติการ ITSสำหรับหลักการความสอดคล้องในวิธีที่กระบวนการ หนึ่ง เข้าถึงสถานะของกระบวนการอื่น[ 2 ]
สถานการณ์ปัญหา
สถานการณ์นี้ก่อให้เกิดความซับซ้อนเป็นพิเศษ:
- กระบวนการ A เรียกใช้ระบบที่ใช้เวลานานคำว่า "ใช้เวลานาน" ในที่นี้หมายความว่า ระบบจำเป็นต้องนำกระบวนการ A ไปไว้ในคิวรอ และสามารถกำหนดให้กระบวนการอื่นทำงานได้หากมีกระบวนการใดพร้อมใช้งาน ตัวอย่างที่พบได้ทั่วไปคือการดำเนินการด้านอินพุต/เอาต์พุต (I/O )
- ในขณะที่กระบวนการ A อยู่ในสถานะรอคอยกระบวนการ B จะพยายามโต้ตอบหรือเข้าถึงกระบวนการ A เช่น ส่งสัญญาณ ไปยังกระบวนการ A
สถานะที่ปรากฏของบริบทของกระบวนการ A ในขณะที่กระบวนการ B เข้าถึง ควรเป็นอย่างไร? ในความเป็นจริง กระบวนการ A กำลังดำเนินการเรียกใช้ระบบอยู่ แต่ ITS บังคับให้ดูเหมือนว่าการเรียกใช้ระบบนั้นไม่ปรากฏให้กระบวนการอื่นเห็น (หรือแม้แต่กระบวนการเดียวกันเองก็มองไม่เห็น)
โซลูชัน ITS: การเริ่มต้นใหม่ที่โปร่งใส
หากการเรียกใช้ระบบไม่สามารถเสร็จสมบูรณ์ก่อนการเข้าถึง จะต้องสามารถเริ่มต้นใหม่ได้ซึ่งหมายความว่าบริบทจะถูกสำรองไว้ที่จุดเริ่มต้นของการเรียกใช้ระบบ ในขณะที่อาร์กิวเมนต์การเรียกใช้จะได้รับการอัปเดตเพื่อสะท้อนถึงส่วนใดก็ตามของการดำเนินการที่เสร็จสมบูรณ์แล้ว[ 2 ]สำหรับการดำเนินการ I/O หมายความว่าที่อยู่เริ่มต้นของบัฟเฟอร์จะต้องเลื่อนไปข้างหน้าเหนือข้อมูลที่ถ่ายโอนแล้ว ในขณะที่ความยาวของข้อมูลที่จะถ่ายโอนจะต้องลดลงตามไปด้วย หลังจากที่การโต้ตอบของกระบวนการ B เสร็จสมบูรณ์ กระบวนการ A สามารถดำเนินการต่อได้ และการเรียกใช้ระบบจะดำเนินการต่อจากจุดที่หยุดไป
เทคนิคนี้สะท้อนสิ่งที่PDP-10ทำในฮาร์ดแวร์ในซอฟต์แวร์ คำสั่ง PDP-10 บางคำสั่ง เช่นBLTอาจไม่ทำงานจนเสร็จสมบูรณ์ ไม่ว่าจะเป็นเพราะการขัดจังหวะหรือ ข้อผิด พลาดของเพจ[ 2 ]ในระหว่างการประมวลผลคำสั่ง PDP-10 จะแก้ไขรีจิสเตอร์ที่มีอาร์กิวเมนต์ของคำสั่ง เพื่อที่ในภายหลังจะสามารถเรียกใช้คำสั่งนั้นอีกครั้งด้วยอาร์กิวเมนต์ใหม่ที่จะทำให้งานที่เหลือเสร็จสมบูรณ์ PCLSRing ใช้เทคนิคเดียวกันนี้กับระบบการเรียกใช้
สิ่งนี้ต้องการความซับซ้อนเพิ่มเติม ตัวอย่างเช่น หน้าหน่วยความจำในพื้นที่ผู้ใช้อาจไม่ถูกย้ายออกระหว่างการเรียกใช้ระบบใน ITS หากอนุญาตเช่นนั้น เมื่อการเรียกใช้ระบบถูก PCLSR และพยายามอัปเดตอาร์กิวเมนต์เพื่อให้สามารถยกเลิกการเรียกได้ หน้าที่มีอาร์กิวเมนต์อาจไม่มีอยู่ และการเรียกใช้ระบบจะต้องถูกบล็อก ทำให้ PCLSR ไม่ประสบความสำเร็จ เพื่อป้องกันสิ่งนี้ ITS จึงไม่อนุญาตให้หน้าหน่วยความจำในพื้นที่ผู้ใช้ถูกย้ายออกหลังจากที่เข้าถึงครั้งแรกระหว่างการเรียกใช้ระบบ และการเรียกใช้ระบบมักจะเริ่มต้นด้วยการสัมผัสหน้าในพื้นที่ผู้ใช้ที่พวกเขารู้ว่าจะต้องเข้าถึง[ 2 ]
วิธีแก้ปัญหาแบบ Unix: รีสตาร์ทเมื่อมีการร้องขอ
ลองเปรียบเทียบกับแนวทางที่ใช้ใน ระบบปฏิบัติการ UNIXซึ่งมีความสามารถในการเริ่มต้นใหม่ได้ แต่ไม่ใช่แบบโปร่งใส กล่าวคือ การดำเนินการ I/O จะส่งคืนจำนวนไบต์ที่ถ่ายโอนจริง (หรือ ข้อผิดพลาด EINTRหากการดำเนินการถูกขัดจังหวะก่อนที่จะมีการถ่ายโอนไบต์ใดๆ) และเป็นหน้าที่ของแอปพลิเคชันที่จะตรวจสอบและจัดการการเริ่มต้นใหม่ด้วยตนเองจนกว่าจะมีการถ่ายโอนไบต์ทั้งหมดเสร็จสิ้น ในปรัชญาของ UNIX นั้น Richard P. Gabrielได้ยกตัวอย่างนี้ขึ้นมาเพื่อเป็นตัวอย่างของหลักการ " ยิ่งแย่ยิ่งดี "
วิธีการแบบอะซิงโครนัส
แนวทางอื่นก็เป็นไปได้เช่นกัน จากที่กล่าวมาข้างต้นเห็นได้ชัดว่าการเรียกใช้ระบบจะต้องเป็นแบบซิงโครนัสนั่นคือ กระบวนการที่เรียกใช้จะต้องรอให้การดำเนินการเสร็จสมบูรณ์ อย่างไรก็ตาม นี่ไม่ใช่สิ่งที่หลีกเลี่ยงไม่ได้ ใน ระบบปฏิบัติการ OpenVMSการทำงาน I/O และการดำเนินการอื่นๆ ที่ใช้เวลานานทั้งหมดเป็น แบบ อะซิงโครนัส โดยธรรมชาติ ซึ่งหมายความว่าความหมายของการเรียกใช้ระบบคือ "เริ่มการดำเนินการ และดำเนินการแจ้งเตือนอย่างน้อยหนึ่งรายการเมื่อเสร็จสิ้น" หลังจากนั้นจะส่งกลับไปยังผู้เรียกใช้ทันที มีชุดการแจ้งเตือนมาตรฐานที่ใช้งานได้ (เช่น การตั้งค่าแฟล็กเหตุการณ์ หรือการส่งกับดักระบบแบบอะซิงโครนัส ) รวมถึงชุดการเรียกใช้ระบบสำหรับการระงับกระบวนการโดยชัดเจนในขณะที่รอการแจ้งเตือนเหล่านี้ ซึ่ง ก) สามารถเริ่มต้นใหม่ได้อย่างสมบูรณ์ในแง่ของ ITS และ ข) มีจำนวนน้อยกว่าชุดการเรียกใช้ระบบที่ใช้เวลานานจริงมาก
OpenVMS มีเวอร์ชันแบบซิงโครนัสทางเลือก "เริ่มการทำงานและรอจนเสร็จสมบูรณ์" สำหรับการเรียกใช้ระบบที่ใช้เวลานานทั้งหมด โดยจะใช้งานในรูปแบบ "ดำเนินการแบบอะซิงโครนัสจริง" ตามด้วย "รอจนกว่าการทำงานจะตั้งค่าแฟล็กเหตุการณ์" การเข้าถึงบริบทของกระบวนการในช่วงเวลานี้จะพบว่ากำลังจะเข้าสู่การเรียกใช้ wait-for-event-flag อีกครั้ง
หมายเหตุ
- ^เรียกกระบวนการนี้ว่า "การใช้โหมดผู้ใช้พีซี" (PC luser-ing) เพราะพีซีถูกบังคับให้เข้าสู่ "โหมดผู้ใช้พีซี" โดยที่ "ผู้ใช้พีซี" เป็นชื่อเรียกอย่างเป็นกันเองของ "ผู้ใช้" ที่ MIT
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ พีซีแอลเอสริง
PCLSRing (หรือที่รู้จักกันในชื่อ Program Counter Lusering [ 1 ] [ a ] ) เป็นคำที่ใช้ใน ระบบปฏิบัติการ ITS สำหรับหลักการความสอดคล้องในวิธีที่ กระบวนการ หนึ่ง เข้าถึง สถานะ...
สถานการณ์ปัญหา
สถานการณ์นี้ก่อให้เกิดความซับซ้อนเป็นพิเศษ:
โซลูชัน ITS: การเริ่มต้นใหม่ที่โปร่งใส
หากการเรียกใช้ระบบไม่สามารถเสร็จสมบูรณ์ก่อนการเข้าถึง จะต้องสามารถ เริ่มต้นใหม่ได้ ซึ่งหมายความว่า บริบท จะถูกสำรองไว้ที่จุดเริ่มต้นของการเรียกใช้ระบบ ในขณะที่อาร์กิวเมนต์การเรียกใช้จะได้รับการอัปเดตเพื่อสะท้อนถึงส่วนใดก็ตามของการดำเนินการที่เสร็จสมบูรณ์แล้ว...
วิธีแก้ปัญหาแบบ Unix: รีสตาร์ทเมื่อมีการร้องขอ
ลองเปรียบเทียบกับแนวทางที่ใช้ใน ระบบปฏิบัติการ UNIX ซึ่งมีความสามารถในการเริ่มต้นใหม่ได้ แต่ไม่ใช่แบบโปร่งใส กล่าวคือ การดำเนินการ I/O จะส่งคืนจำนวนไบต์ที่ถ่ายโอนจริง (หรือ ข้อผิดพลาด EINTR หากการดำเนินการถูกขัดจังหวะก่อนที่จะมีการถ่ายโอนไบต์ใดๆ)...