Linux

Linux上的高記憶體和低記憶體是什麼?

  • January 28, 2021

我對 Highmem 和 Lowmem 之間的區別感興趣:

  1. 為什麼會有這樣的差異化?
  2. 我們這樣做有什麼收穫?
  3. 各有什麼特點?

在 32 位架構上,定址 RAM 的地址空間範圍是:

0x00000000 - 0xffffffff

4'294'967'295(4 GB)。

linux 核心將其分成 3/1(也可以是 2/2 或 1/3 1)分別為使用者空間(高記憶體)和核心空間(低記憶體)。

使用者空間範圍:

0x00000000 - 0xbfffffff

每個新生成的使用者程序都會在該區域內獲得一個地址(範圍)。使用者程序通常不受信任,因此被禁止訪問核心空間。此外,它們被認為是非緊急的,作為一般規則,核心嘗試將記憶體分配推遲到這些程序。

核心空間範圍:

0xc0000000 - 0xffffffff

核心程序在此處獲取其地址(範圍)。核心可以直接訪問這 1 GB 的地址(嗯,不是完整的 1 GB,有 128 MB 保留用於高記憶體訪問)。

在核心空間中產生的程序是可信的、緊急的並且假定沒有錯誤,記憶體請求會立即得到處理。

如果願意,每個核心程序也可以訪問使用者空間範圍。為了實現這一點,核心將一個地址從使用者空間(高記憶體)映射到其核心空間(低記憶體),上面提到的 128 MB 是專門為此保留的。


1分割是3/1、2/2還是1/3由CONFIG_VMSPLIT_...選項控制;您可能可以在下面/boot/config*查看為您的核心選擇了哪個選項。

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