天天看點

linux 記憶體區

    GFP_DMA 和 GFP_HIGHMEM 都有一個平台相關的角色, 盡管對所有平台它們的使用都 有效.

Linux 核心知道最少 3 個記憶體區: DMA-能夠 記憶體, 普通記憶體, 和高端記憶體. 盡管通常地 配置設定都發生于普通區, 設定這些剛剛提及的位的任一個請求從不同的區來配置設定記憶體. 這個 想法是, 每個必須知道特殊記憶體範圍(不是認為所有的 RAM 等同)的計算機平台将落入這 個抽象中.

DMA-能夠 的記憶體是位于一個優先的位址範圍, 外設可以在這裡進行 DMA 存取. 在大部分 的健全的平台, 所有的記憶體都在這個區. 在 x86, DMA 區用在 RAM 的前 16 MB, 這裡傳 統的 ISA 裝置可以進行 DMA; PCI 裝置沒有這個限制.

高端記憶體是一個機制用來允許在 32-位 平台存取(相對地)大量記憶體. 如果沒有首先設定 一個特殊的映射這個記憶體無法直接從核心存取并且通常更難使用. 如果你的驅動使用大量 記憶體, 但是, 如果它能夠使用高端記憶體它将在大系統中工作的更好. 高端記憶體如何工作以 及如何使用它的詳情見第 1 章的"高端和低端記憶體"一節.

無論何時配置設定一個新頁來滿足一個記憶體配置設定請求, 核心都建立一個能夠在搜尋中使用的内 存區的清單. 如果 GFP_DMA 指定了, 隻有 DMA 區被搜尋: 如果在低端沒有記憶體可用, 配置設定失敗. 如果沒有特别的标志存取, 普通和 DMA 記憶體都被搜尋; 如果 GFP_HIGHMEM 設定了, 所有的 3 個區都用來搜尋一個空閑的頁. (注意, 但是, kmalloc 不能配置設定高端 記憶體.)

繼續閱讀