作業系統如何從硬體讀取頁面大小?

作業系統如何從硬體讀取頁面大小?

作業系統方面的書籍通常會提到頁面大小是由處理器架構決定的,例如Intel x86支援4KB頁面大小。我有一種感覺,當我們在硬體上安裝作業系統時,作業系統從硬體中讀取了4KB 的頁面大小,並在邏輯上將虛擬位址空間分別劃分為4KB 大小的頁面,並將記憶體劃分為幀。

如果我的看法是正確的,那麼作業系統從硬體中的何處或哪個位置從處理器讀取這個 4KB 的值?作業系統使用什麼機制來決定硬體提供的頁面大小?有人可以啟發我嗎? Intel 如何(On What Basis)決定保留 4KB 頁面大小。

答案1

作業系統根據體系結構(在某些情況下,建置時核心配置)對頁面大小進行硬編碼。例如,在 x86 上,基本頁面大小始終為 4KiB — 這是 CPU 架構的屬性;在 Linux 上你會看到這個定義include/asm/page_types。在 64 位元 ARM 上,頁面大小可以在建置時配置為 4KiB、16KiB 或 64KiB。某些架構在運行時具有多種頁面大小(例如x86 上的大頁面),但所有大小都是提前已知的,並且基本大小是固定的。

在 Linux 上,頁面大小的規範定義是PAGE_SIZE,您可以透過包含 來獲得它asm/page.h,這是特定於體系結構的(可能會引入其他標頭,就像 x86 上發生的那樣)。 Elixir 提供了一個方便的列表所有的PAGE_SIZE定義

Linux核心支援的大多數架構都支援4KiB頁面; Alpha、ARC、某些 Motorola 68k 系統、OpenRISC 和 64 位元 SPARC 是例外,它們都使用 8KiB 頁。許多架構可以配置為使用其他頁面大小。

相關內容