簡體   English   中英

如果 64 位架構中不存在 LDT,那么使用它的 32 位系統如何在 64 位架構上進行仿真?

[英]If LDT does not exist in 64-bit architecture how are 32-bit systems that use it emulated on a 64-bit architecture?

我讀到 LDT(本地描述符表)在 64 位架構中不存在,並且想知道如何模擬使用它的 32 位系統。

你的前提不正確。 即使在運行 64 位 kernel 時,x86-64 仍然可以使用 LDT。 lldt在 64 位模式下有效。 更具體地說,評論是否需要 LDT? 表示 64 位 Windows 禁止使用它,但這只是 Windows,而不是 x86-64 ISA。 例如,x86-64 Linux 仍然支持modify_ldt()系統調用。 (不過,IIRC,Linux 並沒有費心添加功能來讓您使用它創建 64 位代碼段。但是純 32 位進程不需要這樣做。)

但這僅與需要創建 LDT 條目的 32 位用戶空間進程相關。

您詢問的是 32 位系統,即啟動一個完全不了解 x86-64 的舊 kernel。

傳統模式(即運行 32 位內核)的 x86-64 CPU 與根本不支持 64 位模式的 CPU 完全相同。 (除非您將某些位放在正確的位置,它將切換到 64 位模式。)因此,具有 64 位能力的 CPU 與運行完全 32 位系統無關。


如果您真正的意思是emulated ,那么底層硬件是無關緊要的。 用任何圖靈完備的語言編寫您的模擬器,並包含該功能。 (或使用現有的,如 BOCHS 或 Qemu。)

如果您的意思是硬件虛擬化(例如 Intel VT 或 AMD-V),那么 VM 來賓可以做任何它想做的事情,包括在傳統模式下運行並啟動 32 位 Windows 或運行您自己的自定義裸機操作系統,受保護,或長模式。 如果主機 VM 運行 64 位 Windows 或其他什么,則無關緊要,來賓的 LDT 是它自己的業務,不涉及主機上的 LDT。

如果您的意思是沒有硬件支持的虛擬化,就像在 Intel VT 和 AMD-V 之前的糟糕過去那樣,那就更難了,但是虛擬機管理程序在任何來賓之外,所以它們仍然相互獨立。 這很難,因為 x86 有一些“敏感”(在虛擬化意義上)不會陷入困境的指令。 這就是為什么大多數人只在硬件支持的情況下進行 x86虛擬化的原因。 如果這不可用,只需進行模擬,例如使用 BOCHS 或 Qemu 的 JIT 動態重新編譯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM