โฮมเพจ » ทำอย่างไร » ทำไม x86 ซีพียูจึงใช้“ แหวน” สองในสี่เท่านั้น?

    ทำไม x86 ซีพียูจึงใช้“ แหวน” สองในสี่เท่านั้น?

    เมื่อเรียนรู้เพิ่มเติมเกี่ยวกับวิธีที่ระบบปฏิบัติการและฮาร์ดแวร์ที่ใช้ทำงานและโต้ตอบซึ่งกันและกันคุณอาจประหลาดใจเมื่อเห็นว่าสิ่งใดเป็นสิ่งแปลกหรือการใช้“ ทรัพยากร” ที่เกิดขึ้นไม่เพียงพอ ทำไมถึงเป็นอย่างนั้น? โพสต์ SuperUser คำถาม & คำตอบนี้มีคำตอบสำหรับคำถามของผู้อ่านที่อยากรู้อยากเห็น.

    เซสชั่นคำถามและคำตอบในวันนี้มาถึงเราด้วยความอนุเคราะห์จาก SuperUser - แผนกย่อยของ Exchange Exchange ซึ่งเป็นกลุ่มที่ขับเคลื่อนด้วยชุมชนของเว็บไซต์ถาม - ตอบ.

    ภาพถ่ายของ Lemsipmatt (Flickr).

    คำถาม

    ผู้อ่าน SuperUser AdHominem ต้องการทราบว่าเหตุใด x86 CPUs จึงใช้สองในสี่วงเท่านั้น:

    ระบบ x86 ที่ใช้ Linux และ Windows ใช้เท่านั้น แหวน 0 สำหรับโหมดเคอร์เนลและ แหวน 3 สำหรับโหมดผู้ใช้ ทำไมโปรเซสเซอร์ถึงแยกความแตกต่างของเสียงกริ่งที่แตกต่างกันสี่แบบถ้าพวกมันทั้งหมดจบลงด้วยการใช้สองวงเท่านั้นล่ะ? สิ่งนี้มีการเปลี่ยนแปลงด้วยสถาปัตยกรรม AMD64?

    เหตุใด x86 ซีพียูจึงใช้สองในสี่วงเท่านั้น?

    คำตอบ

    ผู้สนับสนุน SuperUser Jamie Hanrahan มีคำตอบสำหรับเรา:

    มีสองเหตุผลหลัก.

    อย่างแรกคือแม้ว่า x86 CPUs จะเสนอการป้องกันหน่วยความจำสี่วง แต่การป้องกันที่มีระดับความละเอียดที่เสนอจึงอยู่ในระดับต่อเซ็กเมนต์เท่านั้น นั่นคือแต่ละเซ็กเมนต์สามารถตั้งค่าเป็นเสียงเรียกเข้าเฉพาะ (ระดับสิทธิ์) พร้อมกับการป้องกันอื่น ๆ เช่นการเขียนถูกปิดใช้งาน แต่ไม่มีตัวอธิบายเซกเมนต์จำนวนมากที่พร้อมใช้งาน ระบบปฏิบัติการส่วนใหญ่ต้องการให้มีการป้องกันหน่วยความจำที่ละเอียดยิ่งขึ้นเช่น ... สำหรับแต่ละหน้า.

    ดังนั้นป้อนการป้องกันตารางตามหน้า ส่วนใหญ่ถ้าไม่ใช่ทั้งหมดระบบปฏิบัติการ x86 ที่ทันสมัยจะมากหรือน้อยก็เพิกเฉยต่อกลไกการแบ่งกลุ่ม (มากเท่าที่จะทำได้) และพึ่งพาการป้องกันที่มีอยู่จากบิตลำดับต่ำในรายการตารางหน้า หนึ่งในนั้นเรียกว่าบิต“ สิทธิพิเศษ” บิตนี้ควบคุมว่าตัวประมวลผลจะต้องอยู่ในระดับ“ สิทธิ์” ระดับใดระดับหนึ่งเพื่อเข้าถึงหน้าหรือไม่ ระดับ "สิทธิพิเศษ" คือ PL 0, 1 และ 2. แต่มันเป็นเพียงหนึ่งบิตดังนั้นในระดับการป้องกันแบบทีละหน้าจำนวนของ "โหมด" ที่มีอยู่เท่าที่การป้องกันหน่วยความจำเกี่ยวข้องนั้นมีเพียงสอง: หน้าสามารถเข้าถึงได้จากโหมดที่ไม่มีสิทธิพิเศษหรือไม่ ดังนั้นเพียงสองวง ในการมีสี่ริงที่เป็นไปได้สำหรับแต่ละหน้าพวกเขาจะต้องมีบิตการป้องกันสองรายการในแต่ละตารางเพจเพื่อเข้ารหัสหนึ่งในสี่หมายเลขริงที่เป็นไปได้ (เช่นเดียวกับตัวอธิบายเซกเมนต์) อย่างไรก็ตามพวกเขาทำไม่ได้.

    เหตุผลอื่นคือความต้องการในการพกพาระบบปฏิบัติการ มันไม่ได้เกี่ยวกับ x86 เท่านั้น Unix สอนเราว่าระบบปฏิบัติการสามารถพกพาไปได้หลายสถาปัตยกรรมโปรเซสเซอร์และมันก็เป็นสิ่งที่ดี และโปรเซสเซอร์บางตัวรองรับเพียงสองวง โดยไม่ขึ้นอยู่กับหลาย ๆ วงในสถาปัตยกรรมผู้พัฒนาระบบปฏิบัติการทำให้ระบบปฏิบัติการพกพาได้มากขึ้น.

    มีเหตุผลที่สามที่เฉพาะเจาะจงสำหรับการพัฒนา Windows NT นักออกแบบของ NT (David Cutler และทีมงานของเขาซึ่ง Microsoft จ้างจาก DEC Western Region Labs) เคยมีประสบการณ์เกี่ยวกับ VMS มาก่อน ในความเป็นจริงมีดและอีกไม่กี่คนอยู่ในกลุ่มนักออกแบบดั้งเดิมของ VMS และหน่วยประมวลผล VAX ที่ VMS ได้รับการออกแบบจะมีสี่วง (VMS ใช้สี่วง).

    แต่ส่วนประกอบที่รันใน VMS นั้น แหวน 1 และ 2 (บริการจัดการบันทึกและ CLI ตามลำดับ) ถูกปล่อยออกจากการออกแบบ NT. แหวน 2 ใน VMS ไม่ได้เกี่ยวกับความปลอดภัยของระบบปฏิบัติการ แต่เป็นการรักษาสภาพแวดล้อม CLI ของผู้ใช้จากโปรแกรมหนึ่งไปยังอีกโปรแกรมหนึ่งและ Windows ไม่ได้มีแนวคิดนั้น CLI ทำงานเป็นกระบวนการปกติ สำหรับ VMS แหวน 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 มีการใช้คุณสมบัติที่ไม่ได้ใช้งานเหล่านี้จำนวนมาก เครดิตของพวกเขาเอเอ็มดีได้พูดคุยกับทีมเคอร์เนลระบบปฏิบัติการจริงและถามสิ่งที่พวกเขาต้องการจาก x86 สิ่งที่พวกเขาไม่ต้องการหรือไม่ต้องการและสิ่งที่พวกเขาต้องการเพิ่ม เซ็กเมนต์บน x64 มีอยู่เฉพาะในสิ่งที่อาจเรียกว่าแบบฟอร์มร่องรอยการสลับสถานะงานไม่มีอยู่ ฯลฯ และระบบปฏิบัติการยังคงใช้วงแหวนสองวงต่อไป.


    มีสิ่งที่จะเพิ่มคำอธิบายหรือไม่ ปิดเสียงในความคิดเห็น ต้องการอ่านคำตอบเพิ่มเติมจากผู้ใช้ Stack Exchange คนอื่นหรือไม่ ลองอ่านหัวข้อสนทนาเต็มได้ที่นี่.