Linux記憶體管理之一 分段與分頁

來源:互聯網
上載者:User

現代作業系統的記憶體管理機制有兩種:段式管理和頁式管理。

段式記憶體管理,就是將記憶體分成段,每個段的起始地址就是段基地址。地址映射的時候,由邏輯地址加上段基地址而得到物理地址。純粹的段式記憶體管理的缺點很明顯,就是靈活性和效率比較差。首先是段的長度是可變的,這給記憶體的換入換出帶來諸多不便,如何選擇一個段的長度是一個棘手的問題;其次進程在運行過程中,可能會擴充地址空間,這就要增加段,從而造成進程的地址空間由很多小段構成,在進程運行過程中,訪問不同的段時,就需要頻繁切換段基地址;再一點,段式記憶體管理如果有太多的小段,在釋放段的時候,會造成外部片段。

頁式記憶體管理,記憶體分成固定長度的一個個頁片。地址映射的時候,需要先建立頁表,頁表中的每一項都記錄了這個頁的基地址。通過頁表,由邏輯地址的高位部分先找到邏輯地址對應的頁基地址,再由頁基地址位移一定長度就得到最後的物理地址,位移的長度由邏輯地址的低位部分決定。一般情況下,這個過程都可以由硬體完成,所以效率還是比較高的。頁式記憶體管理的優點就是比較靈活,記憶體管理以較小的頁為單位,方便記憶體換入換出和擴充地址空間。

嚴格說Linux採用段頁式記憶體管理,也就是既分段,又分頁。地址映射的時候,先確定對應的段,確定段基地址;段內分頁,再找到對應的頁表項,確定頁基地址;再由邏輯地址低位確定的頁位移量,就能找到最終的物理地址。但是,實際上Linux採用的是頁式記憶體管理。原因是Linux中的段基地址都是0,相當於所有的段都是相同的。這樣做的原因是某些體繫結構的硬體限制,比如Intel的i386。作為軟體的作業系統,必須要符合硬體體系。雖然所有段基地址都是0,但是段的概念在Linux核心中是確實存在的。比如常見的核心程式碼片段、核心資料區段、使用者態程式碼片段、使用者態資料區段等。除了符合硬體要求外,段也是有實際意義的。


邏輯地址分為兩部分組成:段標識符和指定段內相對位址的位移量。段描述符:用來存放段起始地址,段大小,儲存許可權等。
段描述符表:存放段描述的表項。
段寄存器:存放段標識符。6個段寄存器稱為cs(程式碼片段寄存器),ss(棧段寄存器),ds(資料區段寄存器),es,fs 和gs。
段基地址寄存器:指向段描述符表地址。


Linux分段機制:
Linux對分段使用非常有限。作為一個跨硬體體系的作業系統,要支援多種硬體體系,而一些硬體體繫結構式不支援分段的,Linux把所有段起始地址都設為0。
Linux採用4個段進行定址,使用者態程式碼片段,使用者態資料區段,核心態程式碼片段,核心態資料區段。


x86採用兩級頁表。
第一級為頁目錄表,儲存在一個4K位元組的頁中,每個表項包含了一個頁表的物理地址。線性地址最高的10位(22-31)用來產生第一級表索引,由該索引得到的表項中的內容定位了二級表中的一個表的地址,即下級頁表所在的記憶體塊號。
第二級為頁表,儲存在一個4K位元組頁中,每個表項包含了一個頁的物理地址。線性地址的中間10位(12-21)位進行索引,定位頁表表項,獲得頁的物理地址。頁物理地址的高20位與線性地址的低12位形成最後的物理地址。

分頁機制由CR0寄存器中的PG位啟用。如PG=1,啟用分頁機制,把線性地址轉換為物理地址。如PG=0,禁用分頁機制,直接段機制產生的線性地址當作物理地址使用。
頁目錄表的物理地址存放在CR3寄存器。每個進程有它自己的頁全域目錄和自己的頁表集。當發生進程切換時,Linux把CR3控制寄存器的內容儲存在前一個執行進程的描述符中,然後把下一個要執行進程的描述符的值裝入CR3寄存器中。這確保了當新進程重新開始在CPU上執行時,分頁單元指向一組正確的頁表。


Linux分頁機制:
作為一個通用的作業系統,Linux需要相容各種硬體體系,包括不同位元的CPU。對64位的CPU來說,兩級頁表仍然太少,一個頁表會太大,這會佔用太多寶貴的實體記憶體。Linux採用了通用的四級頁表。實際採用幾級頁表則具體受硬體的限制。


四種頁表分別稱為:
頁全域目錄、頁上級目錄、頁中間目錄、頁表。對於32位x86系統,兩級頁表已經足夠了。Linux通過使“頁上級目錄”位和“頁中間目錄”位全為0,徹底取消了頁上級目 錄和頁中間目錄欄位。不過,頁上級目錄和頁中間目錄在指標序列中的位置被保留,以便同樣的代碼在32位系統和64位系統下都能使用。

相關文章

聯繫我們

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