Kernel

MMU 在 Unix/Linux 核心中嗎?還是只是在具有自己記憶體的硬體設備中?

  • March 20, 2021

所以我一直認為 MMU 是 unix 核心的一部分,它將地址轉換為物理地址,但在 MMU wiki 頁面中,它說它是一種通常有自己記憶體的電腦硬體,但該頁面並沒有過多談論 Unix/Linux 作業系統

所以我很困惑,是否所有的翻譯都發生在硬體和核心中不做任何翻譯?基本上作業系統對真實的物理地址一無所知?

我問的是基於 Unix 的作業系統,但是如果您了解其他作業系統以及 Windows 等,或者它在現代電腦中是通用的,請告訴我,謝謝。

MMU(記憶體管理單元)是電腦系統的物理組件,通常是 CPU 的一部分(但不一定)。它將虛擬地址(在 x86 世界中也稱為線性地址)轉換為物理地址;它還可以強制執行記憶體訪問控制、記憶體控制和匯流排仲裁。它通常沒有自己的記憶體,它依賴於系統主記憶體中的數據來執行。

MMU 通過使用儲存在諸如頁表之類的資料結構中的資訊來執行這種轉換;這些指定哪些物理地址範圍對應於線性地址範圍(如果有的話——一個頁面可以“不存在”)。頁表由核心設置,核心決定映射應該是什麼——因此物理地址的最終權威是核心,但它總是在 MMU 的幫助下執行。換句話說,CPU 總是線上性地址上執行,這些地址由 MMU 轉換為物理地址,但是核心知道這些轉換並程式 MMU 來執行它們。

使用者空間程序忽略了所有這些,並且(通常)不知道與它們使用的線性地址相對應的物理地址,並且通常也無法訪問映射。在某些情況下,物理映射會洩漏,但這些通常被認為是安全漏洞並很快得到解決。但是,在 Linux 中,具有足夠權限的程序可以在/proc/<pid>/pagemap.

對於 Linux,請參閱記憶體管理文件,尤其是檢查頁表部分

引用自:https://unix.stackexchange.com/questions/473274