Linux核心高端記憶體管理

來源:互聯網
上載者:User

 

HIGHMEM  

刺蝟@http://blog.csdn.net/littlehedgehog

 

 

 

 

 

 

原先一直都對Linux高端記憶體的管理認識模模糊糊的,可能主要是初次接觸Linux kernel 是0.11版吧,當初的記憶體設計是16M,Linus對擁有32M的記憶體都是覬覦萬分,1G記憶體恐怕是天方夜譚了。16M記憶體哪裡還顧得上高端記憶體,腦子就一直沒有這種概念。先我們還是來看看為什麼要有高端記憶體?

 

80386的線性定址空間是4G,核心空間從3G開始,如果全部採用"線性映射"(物理地址和邏輯地址只差一個常量 PAGE_OFFSET ),最多管理1G實體記憶體,也就是1G的實體記憶體挨著挨著對應的是虛擬位址的3G到4G的位置。你想想如果多於1G的記憶體,我們用什麼線性地址來裝下這些多出的地址呢? 我朋友的機器有2G,據說玩遊戲巨爽(AMD64300+).顯然如果線性映射我的朋友就會浪費1G記憶體.為了使核心能夠訪問這些"高端記憶體",核心使用HighMem.做法是不將核心1G的虛擬位址空間全部映射成實體記憶體,而是預留一部分給高端記憶體做臨時映射使用.

 

其實核心不僅僅預留了highmem的地址空間,還給fixmap,vmalloc預留了虛存空間.實際上,系統初始化的時候預留128M虛存,896M用於"直接"映射實體記憶體。下面我們先貼上一幅圖,摘自《understand linux kernel 》

 

 

畢竟意淫是很考大家的空間想象能力的,所以我們還是依照圖片來看圖說話:

 

高端記憶體映射有三種方式:

1、映射到“核心動態映射空間”
這種方式很簡單,因為通過 vmalloc() ,在"核心動態映射空間"(的VMALLOC_START到VMALLOC_END)申請記憶體的時候,就可能從高端記憶體獲得頁面(參看 vmalloc 的實現),因此說高端記憶體有可能映射到"核心動態映射空間" 中。

2、永久核心映射
如果是通過 alloc_page() 獲得了高端記憶體對應的 page,如何給它找個線性空間?
核心專門為此留出一塊線性空間,從 PKMAP_BASE 到 FIXADDR_START (的倒數第二塊地區),用於映射高端記憶體。在 2.4 核心上,這個位址範圍是 4G-8M 到 4G-4M 之間。這個空間起叫“核心永久映射空間”或者“永久核心映射空間”。
這個空間和其它空間使用同樣的頁目錄表,對於核心來說,就是 swapper_pg_dir,對普通進程來說,通過 CR3 寄存器指向。

通常情況下,這個空間是 4M 大小,因此僅僅需要一個頁表即可,核心通過來 pkmap_page_table 尋找這個頁表。通過 kmap(), 可以把一個 page 映射到這個空間來。由於這個空間是 4M 大小,最多能同時映射 1024 個 page。因此,對於不使用的的 page,及應該時從這個空間釋放掉(也就是解除映射關係),通過 kunmap() ,可以把一個 page 對應的線性地址從這個空間釋放出來。

3、臨時映射

核心在 FIXADDR_START 到 FIXADDR_TOP 之間保留了一些線性空間用於特殊需求。這個空間稱為“固定映射空間”

在這個空間中,有一部分用於高端記憶體的臨時映射。

這塊空間具有如下特點:

1、每個 CPU 佔用一塊空間

2、在每個 CPU 佔用的那塊空間中,又分為多個小空間,每個小空間大小是 1 個 page,每個小空間用於一個目的,這些目的定義在 kmap_types.h 中的 km_type 中。

當要進行一次臨時映射的時候,需要指定映射的目的,根據映射目的,可以找到對應的小空間,然後把這個空間的地址作為映射地址。這意味著一次臨時映射會導致以前的映射被覆蓋。

通過 kmap_atomic() 可實現臨時映射。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.