深入Linux內核架構—內存管理(一)

內存管理是內核最複雜同時也是最重要的一部分。特點在於非常需要處理器和內核之間的協作。本章從技術方面講解具體的實現。

一、概述

內存管理的實現涵蓋了許多領域:

內存中的物理內存頁的管理;

分配大塊內存的夥伴系統;

分配較小塊內存的slab、 slub和slob分配器;

分配非連續內存塊的vmalloc機制;

進程的地址空間。

Linux內核一般將處理器的虛擬地址空間劃分爲兩個部分。底部比較大的部分用於用戶進程,頂部則專用於內核。雖然(在兩個用戶進程之間的)上下文切換期間會改變下半部分,但虛擬地址空間的內核部分總是保持不變。在IA-32系統上,地址空間在用戶進程和內核之間劃分的典型比例爲3∶ 1。給出4 GB虛擬地址空間, 3 GB將用於用戶空間而1 GB將用於內核。通過修改相關的配置選項可以改變該比例。但只有對非常特殊的配置和應用程序,這種修改纔會帶來好處。目前,只需假定比例爲3∶ 1,其他比例以後再討論。

可用的物理內存將映射到內核的地址空間中。訪問內存時,如果所用的虛擬地址與內核區域的起始地址之間的偏移量不超出可用物理內存的長度,那麼該虛擬地址會自動關聯到物理頁幀。這是可行的,因爲在採用該方案時,在內核區域中的內存分配總是落入到物理內存中。不過,還有一個問題。虛擬地址空間的內核部分小於CPU理論地址空間的最大長度。如果物理內存比可以映射到內核地址空間中的數量要多,那麼內核必須藉助於

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章