建体彩网|中彩网双色球连号|
?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和記怡情娛:Linux 內存管理高端內存的映射方式

?

高端內存是指物理地址大年夜于 896M 的內存。

對付這樣的內存,無法在“內核直接映射空間”進行映射和記怡情娛。

為什么?

由于“內核直接映射空間”最多只能從 3G 到 4G,只能直接映射 1G 物理內存,對付大年夜于 1G 的物理內存,力所不及。

實際上,“內核直接映射空間”也達不到 1G, 還得留點線性空間給“內核動態映射空間” 呢。

是以,Linux 規定“內核直接映射空間” 最多映射 896M 物理內存。

對付高端內存,可以經由過程 alloc_page() 或者其它函數得到對應的 page,然則要想造訪現什物理內存,還得把 page 轉為線性地址才行(為什么?想想 MMU 是若何造訪物理內存的),也便是說,我們必要為高端內存對應的 page 找一個線性空間,這個歷程稱為高端內存映射。

高端內存映射有三種要領:

1、映射到“內核動態映射空間”

這種要領很簡單,由于經由過程 vmalloc() ,在“內核動態映射空間”申請內存的時刻,就可能從高端內存得到頁面(參看 vmalloc 的實現),是以說高端內存有可能映射到“內核動態映射空和記怡情娛間” 中。

2、永遠內核映射

假如是經由過程 al和記怡情娛loc_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() 可實現臨時映射。

下圖簡單簡單表達若何對高端內存進行映射

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

建体彩网
qq麻将大众馆规则 象棋口诀表 股票融资的方法和步骤 黑龙江十一选五走势图贴吧 头街欢乐斗地主 法甲积分榜最新积分表 信誉最好的棋牌平台 卖 游戏 赚钱吗 黑龙江快乐10分钟开奖结果查询 天天乐棋牌游戏大厅