linux虛擬記憶體管理簡要總結

來源:互聯網
上載者:User

http://blog.csdn.net/gxfan/article/details/3173292

linux核心地址空間與使用者地址空間的差別

本文僅限在i386平台下討論一般情況。

1、使用者線性地址空間範圍0-3G,核心線性空間範圍3G-4G。
2、核心總是立即滿足核心空間的實體記憶體分配,並且分配結果對所有進程可見;而對於使用者空間的記憶體配置請求,linux總是先保留使用者線性地址空間的一段地區,然後修改頁表項使這段線性地區都指向一頁內容全為0的全域唯讀物理頁。當進程寫入這段線性地區時,將會產生一個缺頁異常,這時系統才會為對應的線性地址分配物理頁面,並且把物理頁對應的頁表項置為可寫。為了保持和全域唯讀物理頁內容一致,新分配的物理頁內容也會全置為0。
3、使用者線性空間是不可靠的,一般情況下它會隨著進程的切換而改變(在lazy TLB切換下除外);而核心線性空間對所有的進程都一樣,不會隨著進程的切換而改變

 

linux虛擬記憶體管理簡要總結

http://blog.csdn.net/gxfan/article/details/3122489

以下討論僅限i386平台,一般考慮典型情況

  1. linux核心對整個系統的實體記憶體是通過類型為struct page的數組mem_map來管理的。系統中的夥伴系統分配演算法最終是通過操作這個數組來記錄實體記憶體的分配、回收等操作。在這裡不要被系統的高端記憶體、低端記憶體等概念搞混淆了,高、低端記憶體的分類主要在於區分實體記憶體地址是否可以直接映射到核心線性地址空間中。

我們知道,linux的核心地址空間大小為1G(使用者空間0~3G,核心空間3G~4G,這種分法最常見),因此如果把這1G線性地址空間全部拿來直接一一映射實體記憶體的話,在核心態的所有進程(線程)能使用的實體記憶體總共最多隻有1G,為了能使在核心態的所有進程能使用更多的實體記憶體,linux採取了一種變通的形式:它將1G核心線性地址空間分為幾部分,第一部分為1G的前896M,這部分核心線性空間與實體記憶體的0~896M一一映射(相差一個為0xc0000000的常數),後面128M的線性空間拿來動態映射剩下的所有實體記憶體,由於動態映射的方法不一樣,後面的128M又分成了幾個部分,有興趣的可以查看相關資料。在這裡,前面896M線性空間對應的實體記憶體就是所謂的低端實體記憶體,剩下的實體記憶體就是高端實體記憶體。

從上面高、低端實體記憶體命名的由來我們可以知道,高、低端實體記憶體與具體的記憶體配置演算法無關,它們都是被mem_map數組控制起來,再由夥伴分配系統實施管理。

 

  1. 關於進程及其記憶體配置

首先要明白一個概念:進程中使用的所有地址都是虛地址,在linux下這個虛地址就是所謂的線性地址。linux中進程可運行在使用者態和核心態,(典型配置情況下)當進程運行在使用者態時,它使用的線性地址只能位於0~3G範圍內,當進程運行於核心態時,它使用的線性地址位址範圍為3G~4G。

為了把線性地址轉化為物理地址,每個進程都有自己私人的頁目錄和頁表。linux在建立進程頁目錄時,把使用者地址空間的頁目錄項(0~767項)清空而將核心頁目錄表(swapper_pg_dir)的第768項到1023項拷貝到進程的頁目錄表的第768項到1023項中。由於核心在初始化時也只映射了實體記憶體的前896M,我們可以知道核心也目錄表只能保證第768項開始的224項中有有效映射。從這裡我們可以知道,所有的進程都共用了其核心線性地址空間。

當一個進程在核心空間發生缺頁故障的時候,這主要發生在訪問核心空間動態映射區線性地址,在其處理常式中,就要通過0號進程的頁目錄(swapper_pg_dir)來同步本進程的核心頁目錄,實際上就是拷貝0號進程的核心頁目錄到本進程中(核心頁表與進程0共用,故不需要複製)。如果進程0的該地址處的核心頁目錄也不存在,則出錯,具體代碼可以參考vmalloc的實現源碼。

當進程運行於使用者態時,若其需要申請記憶體空間,核心首先會在其使用者線性空間中分配需要的線性地址空間,再通過夥伴分配系統分配實體記憶體並把分配的實體記憶體跟使用者空間線性地址映射起來,最後再修改進程的頁目錄項及頁表項寫入這些映射關係。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.