เมื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีที่ระบบปฏิบัติการและฮาร์ดแวร์ที่ทำงานและโต้ตอบกันคุณอาจแปลกใจที่เห็นสิ่งที่ดูเหมือนจะแปลกประหลาดหรือใช้ประโยชน์จาก "ทรัพยากร" น้อยเกินไป ทำไมถึงเป็นเช่นนั้น? โพสต์ถาม & ตอบ SuperUser วันนี้มีคำตอบสำหรับคำถามของผู้อ่านที่อยากรู้อยากเห็น
เซสชันคำถามและคำตอบของวันนี้มาถึงเราโดยได้รับความอนุเคราะห์จาก SuperUser ซึ่งเป็นแผนกย่อยของ Stack Exchange ซึ่งเป็นการรวมกลุ่มเว็บไซต์ถาม & ตอบโดยชุมชน
เอื้อเฟื้อภาพโดย Lemsipmatt (Flickr) .
คำถาม
ผู้อ่าน SuperUser AdHominem ต้องการทราบว่าเหตุใดซีพียู x86 จึงใช้วงแหวนสองในสี่วงแหวนเท่านั้น:
ระบบ x86 ที่ใช้ Linux และ Windows ใช้เท่านั้น แหวน 0 สำหรับโหมดเคอร์เนลและ แหวน 3 สำหรับโหมดผู้ใช้ เหตุใดโปรเซสเซอร์ถึงแยกวงแหวนที่แตกต่างกันสี่วงได้หากพวกเขาทั้งหมดใช้เพียงสองวง สิ่งนี้มีการเปลี่ยนแปลงด้วยสถาปัตยกรรม AMD64 หรือไม่?
เหตุใดซีพียู x86 จึงใช้วงแหวนเพียงสองในสี่วงเท่านั้น
คำตอบ
ผู้สนับสนุน SuperUser Jamie Hanrahan มีคำตอบให้เรา:
มีสองสาเหตุหลัก
ประการแรกคือแม้ว่าซีพียู x86 จะมีวงแหวนป้องกันหน่วยความจำสี่วง แต่ความละเอียดของการป้องกันที่มีให้จึงอยู่ที่ระดับต่อส่วน นั่นคือแต่ละส่วนสามารถตั้งค่าเป็นวงแหวนเฉพาะ (ระดับสิทธิ์) พร้อมกับการป้องกันอื่น ๆ เช่นปิดใช้งานการเขียน แต่มีตัวอธิบายกลุ่มไม่มากนัก ระบบปฏิบัติการส่วนใหญ่ต้องการให้มีการป้องกันหน่วยความจำที่ละเอียดกว่านี้มากเช่น ... สำหรับแต่ละหน้า
ดังนั้นป้อนการป้องกันตามตารางของเพจ ส่วนใหญ่ถ้าไม่ใช่ทั้งหมดระบบปฏิบัติการ x86 ที่ทันสมัยไม่มากก็น้อยละเว้นกลไกการแบ่งส่วน (เท่าที่จะทำได้) และพึ่งพาการป้องกันที่มีให้จากบิตลำดับต่ำในรายการตารางหน้า หนึ่งในนั้นเรียกว่าบิต "อภิสิทธิ์" บิตนี้ควบคุมว่าโปรเซสเซอร์จะต้องอยู่ในระดับ“ สิทธิพิเศษ” ระดับใดระดับหนึ่งเพื่อเข้าถึงเพจหรือไม่ ระดับ "สิทธิพิเศษ" คือ PL 0, 1 และ 2 . แต่เป็นเพียงบิตเดียวดังนั้นในระดับการป้องกันทีละหน้าจำนวน "โหมด" ที่มีให้เท่าที่เกี่ยวข้องกับการป้องกันหน่วยความจำมีเพียงสองหน้าเท่านั้น: สามารถเข้าถึงเพจได้จากโหมดที่ไม่ได้รับสิทธิพิเศษหรือไม่ก็ได้ ดังนั้นเพียงสองวง ในการมีวงแหวนที่เป็นไปได้สี่วงสำหรับแต่ละเพจพวกเขาจะต้องมีบิตป้องกันสองบิตในแต่ละรายการของตารางเพจเพื่อเข้ารหัสหนึ่งในสี่ของวงแหวนที่เป็นไปได้ (เช่นเดียวกับตัวอธิบายเซ็กเมนต์) อย่างไรก็ตามพวกเขาทำไม่ได้
อีกเหตุผลหนึ่งคือความต้องการในการพกพาระบบปฏิบัติการ ไม่ใช่แค่เรื่อง x86 เท่านั้น Unix สอนให้เรารู้ว่าระบบปฏิบัติการสามารถพกพาไปกับสถาปัตยกรรมของโปรเซสเซอร์หลายตัวได้และมันก็เป็นสิ่งที่ดี และโปรเซสเซอร์บางตัวรองรับวงแหวนเพียงสองวง โดยไม่ขึ้นอยู่กับวงแหวนหลายวงในสถาปัตยกรรมผู้ใช้ระบบปฏิบัติการจึงทำให้ระบบปฏิบัติการพกพาได้ง่ายขึ้น
มีเหตุผลประการที่สามที่เฉพาะเจาะจงสำหรับการพัฒนา Windows NT นักออกแบบของ NT (David Cutler และทีมงานของเขาซึ่ง Microsoft จ้างมาจาก DEC Western Region Labs) มีประสบการณ์เกี่ยวกับ VMS มาก่อน ในความเป็นจริงมีดและคนอื่น ๆ อีกสองสามคนเป็นหนึ่งในนักออกแบบดั้งเดิมของ VMS และโปรเซสเซอร์ VAX ที่ VMS ได้รับการออกแบบมีวงแหวนสี่วง (VMS ใช้วงแหวนสี่วง)
แต่ส่วนประกอบที่ทำงานใน VMS’s วงแหวน 1 และ 2 (บริการจัดการบันทึกและ CLI ตามลำดับ) ถูกทิ้งไว้จากการออกแบบ NT แหวน 2 ใน VMS ไม่ได้เกี่ยวกับความปลอดภัยของระบบปฏิบัติการ แต่เป็นการรักษาสภาพแวดล้อม CLI ของผู้ใช้จากโปรแกรมหนึ่งไปยังอีกโปรแกรมหนึ่งและ Windows ไม่มีแนวคิดนั้น CLI ทำงานเป็นกระบวนการปกติ ส่วน VMS’s แหวน 1 รหัส RMS ใน แหวน 1 ต้องโทรเข้า แหวน 0 ค่อนข้างบ่อยและการเปลี่ยนวงแหวนมีราคาแพง มันมีประสิทธิภาพมากกว่าที่จะไป แหวน 0 และทำกับมันมากกว่าที่จะมีจำนวนมาก แหวน 0 การเปลี่ยนภายใน แหวน 1 รหัส (อีกครั้งไม่ใช่ว่า NT มีอะไรเหมือน RMS อยู่ดี)
สำหรับเหตุผลที่ x86 ใช้วงแหวนสี่วงในขณะที่ระบบปฏิบัติการไม่ได้ใช้งานคุณกำลังพูดถึงระบบปฏิบัติการที่มีการออกแบบล่าสุดมากกว่า x86 คุณสมบัติการเขียนโปรแกรมระบบจำนวนมากของ x86 ได้รับการออกแบบมานานก่อนที่จะใช้เมล็ด NT หรือเมล็ด Unix-ish จริงและพวกเขาไม่รู้จริงๆว่าระบบปฏิบัติการจะใช้อะไร จนกระทั่งเราได้เพจบน x86 เราสามารถใช้เมล็ด Unix-ish หรือ VMS เหมือนจริงได้
ระบบปฏิบัติการ x86 ที่ทันสมัยไม่เพียง แต่เพิกเฉยต่อการแบ่งส่วน (พวกเขาเพียงแค่ตั้งค่าส่วน C, D และ S ด้วยที่อยู่ฐาน 0 และขนาด 4 GB บางครั้งกลุ่ม F และ G จะใช้เพื่อชี้ไปที่โครงสร้างข้อมูลระบบปฏิบัติการที่สำคัญ ) พวกเขายังเพิกเฉยต่อสิ่งต่างๆเช่น "เซ็กเมนต์สถานะงาน" กลไก TSS ได้รับการออกแบบมาอย่างชัดเจนสำหรับการสลับบริบทเธรด แต่ปรากฎว่ามีผลข้างเคียงมากเกินไประบบปฏิบัติการ x86 ที่ทันสมัยจึงทำ "ด้วยมือ" ครั้งเดียวที่ x86 NT เปลี่ยนงานฮาร์ดแวร์สำหรับเงื่อนไขพิเศษบางอย่างเช่นข้อยกเว้นความผิดพลาดสองครั้ง
เกี่ยวกับสถาปัตยกรรม x64 คุณลักษณะที่ไม่ได้ใช้งานเหล่านี้จำนวนมากถูกละทิ้ง สำหรับเครดิตของพวกเขา AMD ได้พูดคุยกับทีมเคอร์เนลระบบปฏิบัติการและถามว่าพวกเขาต้องการอะไรจาก x86 สิ่งที่พวกเขาไม่ต้องการหรือไม่ต้องการและสิ่งที่พวกเขาต้องการเพิ่ม เซ็กเมนต์บน x64 มีอยู่เฉพาะในสิ่งที่อาจเรียกว่ารูปแบบร่องรอยไม่มีการสลับสถานะงาน ฯลฯ และระบบปฏิบัติการยังคงใช้วงแหวนเพียงสองวง
มีสิ่งที่จะเพิ่มคำอธิบาย? ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange ที่เชี่ยวชาญด้านเทคโนโลยีคนอื่น ๆ หรือไม่? ดูกระทู้สนทนาฉบับเต็มได้ที่นี่ .