มีสองเหตุผลหลัก
เหตุผลแรกคือแม้ว่า x86 CPUs จะเสนอการป้องกันหน่วยความจำสี่วง แต่การป้องกันที่มีระดับความละเอียดที่เสนอจึงอยู่ในระดับต่อเซ็กเมนต์เท่านั้น นั่นคือแต่ละเซ็กเมนต์สามารถตั้งค่าเป็นเสียงเรียกเข้าเฉพาะ ("ระดับสิทธิ์") จาก 0 ถึง 3 พร้อมกับการป้องกันอื่น ๆ เช่นการเขียนถูกปิดใช้งาน แต่ไม่มีตัวอธิบายเซกเมนต์จำนวนมากที่พร้อมใช้งาน ระบบปฏิบัติการส่วนใหญ่ต้องการให้มีการป้องกันหน่วยความจำที่ละเอียดยิ่งขึ้น กดไลค์ ... สำหรับแต่ละหน้า
ดังนั้นป้อนการป้องกันตามรายการตารางหน้า (PTE) ส่วนใหญ่ถ้าไม่ใช่ทุกระบบปฏิบัติการ x86 ที่ทันสมัยไม่มากก็น้อยก็เพิกเฉยต่อกลไกการแบ่งกลุ่ม (มากที่สุดเท่าที่จะทำได้) และพึ่งพาการป้องกันแบบ PTE นี่เป็นข้อมูลจำเพาะด้วยค่าสถานะบิตซึ่งต่ำกว่า 12 บิตในแต่ละ PTE - บวกบิต 63 บน CPU ที่ไม่สนับสนุนการดำเนินการ มีหนึ่ง PTE สำหรับแต่ละหน้าซึ่งปกติคือ 4K
หนึ่งในบิตตั้งค่าสถานะเหล่านี้เรียกว่าบิต "สิทธิพิเศษ" บิตนี้ควบคุมว่าตัวประมวลผลจะต้องอยู่ในระดับ "สิทธิ์" ระดับใดระดับหนึ่งเพื่อเข้าถึงหน้าหรือไม่ ระดับ "สิทธิพิเศษ" คือ PL 0, 1 และ 2 แต่เป็นเพียงหนึ่งบิตดังนั้นในระดับการป้องกันแบบทีละหน้าจำนวน "โหมด" ที่มีอยู่เท่าที่การป้องกันหน่วยความจำเกี่ยวข้องเพียงสอง: หน้า สามารถเข้าถึงได้จากโหมดที่ไม่มีสิทธิพิเศษหรือไม่ ดังนั้นเพียงสองวง
ในการมีสี่ริงที่เป็นไปได้สำหรับแต่ละหน้าพวกเขาจะต้องมีบิตการป้องกันสองรายการในแต่ละตารางเพจเพื่อเข้ารหัสหนึ่งในสี่หมายเลขริงที่เป็นไปได้ (เช่นเดียวกับตัวอธิบายเซกเมนต์) พวกเขาทำไม่ได้
เหตุผลที่สองคือเป้าหมายของการพกพาระบบปฏิบัติการ มันไม่ใช่แค่ x86; Unix สอนเราว่าระบบปฏิบัติการสามารถพกพาไปได้หลายสถาปัตยกรรมโปรเซสเซอร์และนั่นเป็นสิ่งที่ดี และโปรเซสเซอร์บางตัวรองรับเพียงสองวง โดยไม่ขึ้นอยู่กับหลาย ๆ วงในสถาปัตยกรรมผู้พัฒนาระบบปฏิบัติการทำให้ระบบปฏิบัติการพกพามากขึ้น
มีเหตุผลที่สามที่เฉพาะเจาะจงสำหรับการพัฒนา Windows NT นักออกแบบของ NT (David Cutler และทีมงานของเขาซึ่ง Microsoft จ้างจาก DEC Western Region Labs) เคยมีประสบการณ์เกี่ยวกับ VMS มาก่อน ในความเป็นจริงมีดและอีกไม่กี่คนอยู่ในกลุ่มนักออกแบบดั้งเดิมของ VMS และหน่วยประมวลผล VAX ที่ VMS ได้รับการออกแบบ (และในทางกลับกัน) มีสี่วง VMS ใช้สี่วง (อันที่จริง VAX มีบิตการป้องกันสี่บิตใน PTE อนุญาตให้ใช้การรวมกันเช่น "อ่านอย่างเดียวจากโหมดผู้ใช้ แต่สามารถเขียนได้จากวงแหวน 2 และด้านใน" แต่ฉันพูดนอกเรื่อง)
แต่ส่วนประกอบที่วิ่งในวงแหวนของ VMS 1 และ 2 (Record Management Services และ CLI, resp.) ถูกปล่อยออกจากการออกแบบ NT Ring 2 ใน VMS ไม่ได้เกี่ยวกับความปลอดภัยของระบบปฏิบัติการ แต่เป็นการรักษาสภาพแวดล้อม CLI ของผู้ใช้จากโปรแกรมหนึ่งไปยังอีกโปรแกรมหนึ่งและ Windows NT ไม่ได้มีแนวคิดนั้น CLI ทำงานเป็นกระบวนการปกติ สำหรับแหวน VMS ของ 1 รหัส RMS ในริง 1 ต้องโทรเข้าวงแหวน 0 ค่อนข้างบ่อยและการเปลี่ยนวงแหวนนั้นมีราคาแพง มันกลับกลายเป็นว่ามีประสิทธิภาพมากกว่าเพียงแค่ไปที่ริง 0 และทำด้วยมันแทนที่จะมีการเปลี่ยนริง 0 จำนวนมากภายในรหัสริง 1 (อีกครั้ง - ไม่ใช่ NT มีอะไรอย่างเช่น RMS อยู่แล้ว)
แต่ทำไมพวกเขาถึงอยู่ที่นั่น? สำหรับสาเหตุที่ x86 ใช้สี่วงในขณะที่ระบบปฏิบัติการไม่ได้ใช้งาน - คุณกำลังพูดถึงระบบปฏิบัติการที่มีการออกแบบล่าสุดมากกว่า x86 คุณสมบัติ "การเขียนโปรแกรมระบบ" จำนวนมากของ x86 ได้รับการออกแบบมานานก่อนที่จะใช้งาน NT หรือเคอร์เนล Unix-ish จริงและพวกเขาไม่รู้ว่าจะใช้ระบบปฏิบัติการใด (มันไม่ได้จนกว่าเราจะเพจจิ้งใน x86 - ซึ่งไม่ได้แสดงจนถึง 80386 - ว่าเราสามารถใช้เมล็ด Unix-ish หรือ VMS ที่เหมือนจริงได้โดยไม่ต้องคิดทบทวนการจัดการหน่วยความจำตั้งแต่ต้น)
ไม่เพียง แต่ระบบปฏิบัติการ x86 ที่ทันสมัยส่วนใหญ่จะไม่สนใจการแบ่งเซ็กเมนต์ (พวกเขาเพิ่งตั้งค่าเซ็กเมนต์ C, D และ S พร้อมที่อยู่พื้นฐาน 0 และขนาด 4 GB; บางครั้งเซ็กเมนต์ F และ G ถูกใช้เพื่อชี้ไปยังโครงสร้างข้อมูลระบบปฏิบัติการหลัก) ส่วนใหญ่ไม่สนใจสิ่งต่าง ๆ เช่น "ส่วนสถานะงาน" กลไก TSS ได้รับการออกแบบมาอย่างชัดเจนสำหรับการสลับบริบทของเธรด แต่ปรากฎว่ามีผลข้างเคียงมากเกินไปดังนั้นระบบปฏิบัติการ x86 ที่ทันสมัยจึงใช้ "มือ" ครั้งเดียวที่ x86 NT เปลี่ยนงานฮาร์ดแวร์ตัวอย่างเช่นสำหรับเงื่อนไขที่ยอดเยี่ยมบางอย่างเช่นข้อผิดพลาดสองเท่า
อีกครั้ง x64 มีคุณสมบัติที่เลิกใช้เหล่านี้จำนวนมาก (จากเครดิตของพวกเขาเอเอ็มดีได้พูดคุยกับทีมงานเคอร์เนลระบบปฏิบัติการจริงและถามสิ่งที่พวกเขาต้องการจาก x86 สิ่งที่พวกเขาไม่ต้องการหรือไม่ต้องการและสิ่งที่พวกเขาต้องการเพิ่ม) เซ็กเมนต์บน x64 มีอยู่เฉพาะในสิ่งที่อาจเป็น เรียกว่าแบบฟอร์มร่องรอยการเปลี่ยนสถานะงานไม่มีอยู่ ฯลฯ และระบบปฏิบัติการยังคงใช้วงแหวนเพียงสองวง