CPU Privilege Rings: ทำไมไม่ใช้วงแหวน 1 และ 2?


103

คำถามสองสามข้อเกี่ยวกับวงแหวนสิทธิ์ของ CPU x86:

  • เหตุใดระบบปฏิบัติการส่วนใหญ่จึงไม่ใช้วงแหวน 1 และ 2 เป็นเพียงการรักษาความเข้ากันได้ของรหัสกับสถาปัตยกรรมอื่น ๆ หรือมีเหตุผลที่ดีกว่านี้?

  • มีระบบปฏิบัติการใดที่ใช้วงแหวนเหล่านั้นจริงหรือไม่? หรือไม่ได้ใช้อย่างสมบูรณ์?


สิ่งนี้อาจช่วยได้compgroups.net/comp.lang.asm.x86/Privilege-levels-1-and-2
alexius

คำตอบ:


114

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

เจตนาของ Intel ในการมีวงแหวน 1 และ 2 คือเพื่อให้ระบบปฏิบัติการใส่ไดรเวอร์อุปกรณ์ในระดับนั้นดังนั้นพวกเขาจึงได้รับสิทธิพิเศษ แต่ค่อนข้างแยกออกจากส่วนที่เหลือของรหัสเคอร์เนล

วงแหวน 1 และ 2 เป็นไปในทางที่ "ส่วนใหญ่" มีสิทธิพิเศษ พวกเขาสามารถเข้าถึงหน้าหัวหน้างานได้ แต่หากพยายามใช้คำสั่งที่มีสิทธิพิเศษพวกเขาก็ยังคง GPF เหมือนวงแหวน 3 ดังนั้นจึงไม่ใช่สถานที่ที่แย่สำหรับไดรเวอร์ตามที่ Intel วางแผนไว้ ...

ที่กล่าวว่าพวกเขามีประโยชน์ในการออกแบบบางอย่าง ในความเป็นจริง OS ไม่ได้โดยตรงเสมอไป ตัวอย่างเช่นVirtualBoxซึ่งเป็นVirtual Machineทำให้รหัสเคอร์เนลของแขกอยู่ในวงแหวน 1 ฉันแน่ใจด้วยว่าระบบปฏิบัติการบางระบบใช้ประโยชน์จากระบบเหล่านี้ฉันไม่คิดว่ามันเป็นการออกแบบที่ได้รับความนิยมในขณะนี้


28
WHOA VirtualBox ใช้วงแหวน 1 หรือไม่! สุดยอดจริงๆ !! ขอบคุณมากสำหรับข้อมูลนี้เป็นคำตอบที่ดี! +1
user541686

10
OS / 2 ใช้ Ring 2 อย่างกว้างขวางสำหรับรหัส I / O นี่คือเหตุผลว่าทำไมการจำลองเสมือนจึงเป็นเรื่องยาก
kinokijuf

จากsuperuser.com/questions/1402537/… : "การเรียกใช้รหัสแหวน 0 ในวงแหวน 1 ทำให้เกิดข้อผิดพลาดของคำสั่งเพิ่มเติมจำนวนมากเนื่องจากวงแหวน 1 ไม่ได้รับอนุญาตให้ดำเนินการคำสั่งที่มีสิทธิพิเศษใด ๆ ซึ่งแหวน -0 ของแขกมีมากมายในแต่ละข้อ ข้อผิดพลาดเหล่านี้ VMM ต้องก้าวเข้ามาและเลียนแบบโค้ดเพื่อให้ได้พฤติกรรมที่ต้องการแม้ว่าจะได้ผล แต่การเลียนแบบข้อผิดพลาดหลายพันข้อเหล่านี้มีราคาแพงมากและส่งผลเสียต่อประสิทธิภาพของผู้เยี่ยมชมเสมือนจริง "
Dustin Oprea

24

จากมุมมองของการออกแบบระบบปฏิบัติการการมีวงแหวนที่มีสิทธิพิเศษหลายวงถือเป็นความแปลกของ x86 - ซีพียูอื่น ๆ ส่วนใหญ่มีเพียงสองโหมด (ผู้ควบคุมและผู้ใช้) ด้วยเหตุนี้การออกแบบ OS ให้ต้องการโหมดที่มีสิทธิพิเศษหลายโหมดจะป้องกันไม่ให้พอร์ตไปยัง CPU อื่น ๆ ในทันที นอกจากนี้แพคเกจการจำลองเสมือนที่ทันสมัยจำนวนมากไม่ได้จำลองระดับสิทธิ์อื่น ๆ นอกเหนือจาก 0 และ 3 อย่างถูกต้องทำให้ระบบปฏิบัติการที่ใช้ระดับเหล่านี้ทดสอบได้ยากขึ้นมาก


7

ตามหน้า Wikipedia ในRing Securityวงแหวน 1 และ 2 ใช้สำหรับไดรเวอร์ (วงแหวน 1) ระบบปฏิบัติการของแขก (วงแหวน 1) และรหัสพิเศษ i / o (วงแหวน 2) ไฮเปอร์ไวเซอร์จะอยู่ใน -1/0 (ขึ้นอยู่กับ hyper-visor) ไม่ใช่ 1 ตามที่ฉันเคยระบุไว้

อย่างไรก็ตามแหวนสองวงพิเศษไม่เคยช่วยได้จริงจึงไม่ค่อยได้ใช้ TBH รหัสส่วนใหญ่ที่ใช้วงแหวน 1 และ 2 เหล่านี้มีการเปลี่ยนองค์ประกอบกึ่งหนึ่งจากการใช้งานดั้งเดิม (เช่นไฮเปอร์ไวเซอร์) รหัสหน้าต่างส่วนใหญ่ในปัจจุบันดูเหมือนว่าจะถือว่าระบบมีเพียงสองระดับ (เคอร์เนลและผู้ใช้) อาจเป็นเพราะค่าใช้จ่ายที่เกี่ยวข้องกับการเข้าและออกจากเคอร์เนลแลนด์


1
ฉันคิดว่าคุณพลาด-ที่ไหนสักแห่ง แน่ใจหรือว่าไฮเปอร์ไวเซอร์ใช้วงแหวน 1
user541686

เฮ้ไม่ได้คิดว่าควรจะเป็นไฮเปอร์ - visors ใน -1 และ guest OSes ใน 1 จะอัปเดตอย่างรวดเร็ว
Necrolis

4
Windows ใช้วงแหวนสองวงเท่านั้นเนื่องจากได้รับการออกแบบมาให้ทำงานบนโปรเซสเซอร์อื่น (ปัจจุบันหมดอายุแล้ว) ซึ่งมีเพียงสองตัว
เดวิด

ในความคิดของฉันมีค่าใช้จ่ายเล็กน้อยในการสลับโหมด จากสิ่งที่ฉันเข้าใจมีเพียงฮาร์ดแวร์เท่านั้นที่สามารถกำหนดสิทธิ์พิเศษให้กับ cpu ได้ (เช่นหากเกิดการขัดจังหวะ IO สำเร็จรูป) หากการสลับสิทธิ์นี้เกิดขึ้นในฮาร์ดแวร์ฉันสงสัยว่าการสลับวงแหวนนั้นไม่ใช่เรื่องสำคัญ ฉันคิดว่า Windows, Linux หรือ MacOS ใช้วงแหวนที่รุนแรงที่สุดเพียงสองวงเท่านั้นเนื่องจากสถาปนิกสงวนวงแหวนตรงกลางไว้สำหรับสิ่งต่างๆเช่นการจำลองเสมือนที่โฮสต์โดยระบบปฏิบัติการ
Nate Symer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.