日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 直接映射 页表大小,linux 启动过程临时页表到底映射了多大内存?

發(fā)布時間:2025/3/11 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux 直接映射 页表大小,linux 启动过程临时页表到底映射了多大内存? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

從linux-2.4內核開始,在建立臨時頁表的時候,一般的教科書都說是映射了8M的物理內存,但是為什么是映射8M呢?當時網上有資料說,8M足夠了,但為什么就足夠了,一直沒有徹底搞清楚,今天又重新分析這部分的代碼(linux-2.6.24)。 先看下面內存布局圖:

在建立臨時頁表時到底映射多大的內存取決于以下幾個方面:

(1)保護模式下內核的尺寸: 毫無疑問內核代碼必須被映射

(2)臨時頁表所占的空間尺寸: 假設臨時頁表映射整個4G的線性地址空間,那么:

頁面?zhèn)€數(shù) = 4G/4k = 1M個頁面

每個頁面對應一個頁表項,占4個字節(jié),那么總共占有4M的空間

(3)bootmem allocator是用來在真正的頁表建立好之前用于內存管理的,他用一個位圖表來管理整個內存,

每一bit代表一個頁框,假設有4G的物理內存,那么1M個頁面共占有空間 = 1M/8 = 128K。

(4)由于對齊占有的空間(可以忽略,感覺k的數(shù)量級吧)

綜合上述幾個方面,需要映射的物理內存大約等于:

保護模式內核尺寸 + 臨時頁表占用空間尺寸 + bootmem allocator位圖表尺寸 =

現(xiàn)在內核大約4M??????????最大4M???????????????? 128K?????????????? = 8M + 128K

在linux內核的head_32.S中下面代碼:

movl $(pg0 - __PAGE_OFFSET), %edi

movl $(swapper_pg_dir - __PAGE_OFFSET), %edx

movl $0x007, %eax???/* 0x007 = PRESENT+RW+USER */

10:

leal 0x007(%edi),%ecx???/* Create PDE entry */

movl %ecx,(%edx)???/* Store identity PDE entry */

movl %ecx,page_pde_offset(%edx)??/* Store kernel PDE entry */

addl $4,%edx

movl $1024, %ecx

11:

stosl

addl $0x1000,%eax

loop 11b

/* End condition: we must map up to and including INIT_MAP_BEYOND_END */

/* bytes beyond the end of our own page tables; the +0x007 is the attribute bits */

leal (INIT_MAP_BEYOND_END+0x007)(%edi),%ebp

cmpl %ebp,%eax

jb 10b

movl %edi,(init_pg_tables_end - __PAGE_OFFSET)

紅字部分與映射內存有關:

INIT_MAP_BEYOND_END =

BOOTBITMAP_SIZE + (PAGE_TABLE_SIZE + ALLOCATOR_SLOP)*PAGE_SIZE_asm

= 128K??????????? +?(4K????????????? +???? 4?????????)*4K

= 128K????????????+ 16M + 4K

所以是映射了8M物理內存,?即10:之后的代碼執(zhí)行了兩次,這完全滿足前面分析的需要映射的物理內存的大小。

總結

以上是生活随笔為你收集整理的linux 直接映射 页表大小,linux 启动过程临时页表到底映射了多大内存?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。