Linux
Linux上的高記憶體和低記憶體是什麼?
我對 Highmem 和 Lowmem 之間的區別感興趣:
- 為什麼會有這樣的差異化?
- 我們這樣做有什麼收穫?
- 各有什麼特點?
在 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*
查看為您的核心選擇了哪個選項。