การกำหนดที่อยู่ใน RISC-V

ฉันกำลังใช้งานคอร์ RV64GC จำลองใน QEMU และกำลังพยายามทำความเข้าใจระบบย่อยหน่วยความจำเสมือนและกระบวนการแปลที่อยู่ใน RISC-V ให้ดียิ่งขึ้น ระบบจำลองของฉันทำงานด้วย OpenSBI, Linux Kernal v5.5 และ rootfs ขั้นต่ำ

ในการติดตามดีบักของ QEMU ฉันเห็นว่าบางครั้ง (โดยทั่วไปจะใช้ ecalls) การควบคุมจะถูกส่งผ่านไปยัง SBI และที่อยู่เปลี่ยนจากที่อยู่เคอร์เนล (เสมือน?) โดยมีออฟเซ็ต 0xffffffe000000000 เป็นสิ่งที่ดูเหมือนที่อยู่จริง ทางกายภาพ ใน RAM ตัวอย่างเช่น,

...

0xffffffe00003a192: 00000073 โทร

...

ใน: sbi_ecall_0_1_handler

0x0000000080004844: 00093603 ld a2,0(s2)

0x0000000080004848: 4785 เพิ่ม a5, ศูนย์, 1

0x000000008000484a: 00a797b3 sll a5,a5,a0

...

ในข้อกำหนดสิทธิพิเศษ RISC-V เวอร์ชัน 1.11 ส่วนที่ 4.1.12 นั้น satp CSR (การลงทะเบียนการควบคุมและสถานะ) ได้รับการกำหนดให้มีฟิลด์ MODE ที่กำหนดการกำหนดการแปลที่อยู่ MODE 0 หมายความว่าไม่มีการแปล (ที่อยู่ถือเป็นทางกายภาพ) MODE 8 หรือ 9 ต้องใช้ที่อยู่เสมือนตามเพจ Sv39 หรือ Sv48 ตามลำดับ และค่า MODE อื่นๆ จะถูกสงวนไว้

ตอนนี้ทั้งข้อกำหนดสิทธิพิเศษและไม่ได้รับสิทธิพิเศษของ RISC-V ดูเหมือนจะไม่พูดถึงเมื่อ satp อาจมีการเปลี่ยนแปลง (นอกเหนือจาก csrrw) ดังนั้นสิ่งนี้ทำให้ฉันมีคำถามต่อไปนี้:

เมื่อส่งการควบคุมให้กับ SBI (เช่นเดียวกับ ecall ด้านบน) satp MODE จะเปลี่ยนเป็น 0 หรือไม่ ถ้าใช่ นี่หมายความว่าควรรีเซ็ตโหมด satp ตามคำสั่ง u/s/mret หรือไม่ มีกรณีอื่น ๆ (นอกเหนือจาก csrrw) ที่ satp ควรจะเปลี่ยนแปลงหรือไม่

ถ้าไม่ มีกลไกอื่นใดที่ที่อยู่ถูกตีความและกำหนดให้เป็นที่อยู่ทางกายภาพหรือไม่? หรือที่อยู่ (ที่อยู่ 0x80XXXXXX ด้านบน) ถือเป็นเสมือนแทน และควรผ่านกระบวนการแปลที่อยู่เสมือนตามปกติ (ตามที่ระบุไว้ในส่วน 4.3.2 ของข้อกำหนดสิทธิพิเศษ RISC-V) หากเป็นกรณีนี้ รายการตารางเพจจะถูกสร้างขึ้นเพื่อการนี้เมื่อใด


person Josh    schedule 01.04.2020    source แหล่งที่มา


คำตอบ (1)


โมเดลหน่วยความจำของ RISC-V ทำงานในลักษณะต่อไปนี้:

โหมด M มีระบบป้องกันหน่วยความจำของตัวเองตามที่อธิบายไว้ในส่วน 3.6 ของข้อกำหนดพิเศษที่เรียกว่า PMP (การป้องกันหน่วยความจำกายภาพ) นี่เป็นการกำหนดการป้องกันหน่วยความจำในระดับสิทธิ์ที่ต่ำกว่าและโหมด M เองด้วย (หากใช้บิตล็อค) ไม่มีระบบหน่วยความจำเสมือนในโหมด M

ขณะนี้อยู่ในโหมด S มีระบบหน่วยความจำเสมือนแบบเพจซึ่งโหมด S สามารถใช้เพื่อตั้งค่าการแมปที่อยู่เสมือนเป็นฟิสิคัล และยังกำหนดข้อจำกัดหน่วยความจำในโหมด S เองและโหมด U ด้วย

ดังนั้นสิทธิ์แต่ละระดับจึงสามารถควบคุมทรัพยากรของตัวเองและทรัพยากรด้านล่างได้ แต่ไม่เคยควบคุมทรัพยากรของสิทธิ์ระดับที่สูงกว่าเลย นี่คือวิธีการทำงาน

โหมด M สามารถควบคุมหน่วยความจำที่สามารถเข้าถึงได้โดยโหมด M, S และ U และโหมด S สามารถควบคุมมุมมองหน่วยความจำ (หน่วยความจำเสมือน) และการเข้าถึงโหมด S และ U แต่ไม่ใช่โหมด M ดังนั้นโหมด satp จะไม่เปลี่ยนแปลงแม้แต่น้อยเมื่อเปลี่ยนไปใช้โหมด M เนื่องจากแผนที่ที่ชี้ไปนั้นไม่สามารถใช้ได้กับโหมด M ด้วยซ้ำ มีหน่วยป้องกันหน่วยความจำอยู่ในตัว

นี่จะเป็นช่องโหว่ด้านความปลอดภัยขนาดใหญ่หากระดับสิทธิ์ที่ต่ำกว่าอาจกำหนดข้อจำกัดของหน่วยความจำในระดับสิทธิ์ที่สูงกว่า

person R.k. Lohana    schedule 08.04.2020