0
如何將自定義操作系統內核重定向到高內存,以便地址0xABCD
變爲0xFFFFFF800000ABCD
? (內核已經由引導加載程序從地址0x100000
開始加載。)我當前的解決方案會在未映射的地址上生成頁面錯誤,這會由於IDT尚未初始化而升級爲三重錯誤。將內核重新加載到高內存中
如何將自定義操作系統內核重定向到高內存,以便地址0xABCD
變爲0xFFFFFF800000ABCD
? (內核已經由引導加載程序從地址0x100000
開始加載。)我當前的解決方案會在未映射的地址上生成頁面錯誤,這會由於IDT尚未初始化而升級爲三重錯誤。將內核重新加載到高內存中
不要明確地移動你的內核。
而是使用分頁。首先,在低內存中設置所有內容,然後啓用分頁並將內核映射(不移動)爲高。沒有複製涉及的字節。
爲什麼這很重要?如果你要有一個帶有地圖的操作系統,只要把它放在自己的空間裏,無論方便。如果它已經加載了實際地址001xxxxx,並且設置了一張映射物理001xxxxx到虛擬01xxxxxx的映射,那麼它應該能夠實現虛擬到虛擬的轉換,而無需其他任何欺騙。如果你想然後在虛擬0xFFFFFF處複製操作系統頁面...所有你需要做的就是修改內存映射,但是一旦你到達這裏,我看不到太多的觀點。 –