High Memory(使用者空間)和HighMem(核心空間)

High Memory(使用者空間)和HighMem(核心空間)

每個行程有2個記憶體區域:用戶空間(高記憶體)和核心空間(低記憶體)。在核心空間中,前 896 MB 是否用於映射核心程式碼(不是完全 1 GB)?這意味著,當用戶空間應用程式執行系統調用或與核心相關的任何操作時,核心將引用核心空間來執行系統調用,是嗎?

核心空間中保留的128MB(用於高階記憶體(使用者空間)存取),是否都是使用者空間記憶體區域的引用?那麼,核心進程可以透過引用該區域來存取任何使用者空間,這是真的嗎?

這就是為什麼這個區域在內核空間中被稱為highmem,不是嗎?

答案1

「高記憶體」和「低記憶體」不適用於進程的虛擬位址空間,而是涉及實體記憶體。

在進程的虛擬位址空間中,使用者空間佔據該線性位址空間的前3GB,核心空間佔據此線性位址空間的第四GB。

核心空間的前 896MB(不僅是核心程式碼,還有其資料)「直接」映射到實體記憶體的前 896MB。它是「直接」的,因為虛擬核心空間的896MB 部分的任何線性位址與其在實體記憶體中的對應位址之間始終存在0xc0000000 的偏移量(但請注意,MMU 已啟用,並且頁表條目實際上是用於此)。

虛擬核心空間的最後128MB部分是映射實體「高階記憶體」的一些部分(> 896MB):因此它一次只能映射不超過128MB的「高階記憶體」。

參考:“理解 Linux 核心”,第三版 - “8.1.3. 記憶體區域”和“8.1.6. 高記憶體頁幀的核心映射”部分。

答案2

注意:-記憶體分割僅發生在較舊的 Linux 系統中(32位)有關更多詳細信息,請參閱下面的評論。

高記憶體和低記憶體:

  • 記憶不足 :邏輯位址存在於核心空間中的記憶體。在您可能遇到的幾乎每個系統上,所有記憶體都是低記憶體。
  • 高記憶體:不存在邏輯位址的內存,因為它超出了為核心虛擬位址預留的位址範圍。

核心將虛擬位址分成兩部分使用者地址空間和核心地址空間。核心的程式碼和資料結構必須適合該空間,但核心位址空間的最大消耗者是實體記憶體的虛擬映射。因此,核心需要它自己的虛擬位址來儲存它必須直接接觸的任何記憶體。因此,核心可以處理的最大物理記憶體量是可以映射到虛擬位址空間的核心部分的量,減去核心程式碼使用的空間。

在此輸入影像描述

相關內容