老司机91精品网站在线观看-老司机67194免费观看-老司国产精品视频-老熟人老女人国产老太-中文字幕日本在线-中文字幕日本一区久久

始創于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業
  • 60秒人工響應
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
您的位置: 網站首頁 > 幫助中心>文章內容

深入理解Linux內存映射機制 (3)

發布時間:  2012/8/15 18:18:47

向了第768個表項。

然后函數開始一個循環即開始填充從768到1024這256個目錄項的內容。
one_md_table_init()函數根據pgd找到指向的pmd表。

它同樣在mm/init.c中定義:
static pmd_t * __init one_md_table_init(pgd_t *pgd)
{
pmd_t *pmd_table;

#ifdef CONFIG_X86_PAE
pmd_table = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE);
set_pgd(pgd, __pgd(__pa(pmd_table) | _PAGE_PRESENT));
if (pmd_table != pmd_offset(pgd, 0))
BUG();
#else
pmd_table = pmd_offset(pgd, 0);
#endif
return pmd_table;
}
可以看出, 如果內核不啟用PAE選項, 函數將通過 pmd_offset返回pgd的地址。因為linux的二級映射模型,本來就是忽略pmd中間目錄表的。
接著又個判斷語句:
>> if (pfn >= max_low_pfn)
>> continue;
這個很關鍵, max_low_pfn代表著整個物理內存一共有多少頁框。 當pfn大于max_low_pfn的時候,表明內核已經把整個物理內存都映射到了系統空間中, 所以剩下有沒被填充的表項就直接忽略了。因為內核已經可以映射整個物理空間了, 沒必要繼續填充剩下的表項。
緊接著的第2個for循環,在linux的3級映射模型中,是要設置pmd表的, 但在2級映射中忽略, 只循環一次,直接進行頁表pte的設置。
>> address = pfn * PAGE_SIZE PAGE_OFFSET;
address是個線性地址, 根據上面的語句可以看出address是從0xc000000開始的,也就是從內核空間開始,后面在設置頁表項屬性的時候會用到它.
>> pte = one_page_table_init(pmd);
根據pmd分配一個頁表, 代碼同樣在mm/init.c中:
static pte_t * __init one_page_table_init(pmd_t *pmd)
{
if (pmd_none(*pmd)) {
pte_t *page_table = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE));
if (page_table != pte_offset_kernel(pmd, 0))
BUG();
return page_table;
}
return pte_offset_kernel(pmd, 0);
}
pmd_none宏判斷pmd表是否為空, 如果為空則要利用alloc_bootmem_low_pages分配一個4k大小的物理頁面。 然后通過set_pmd(pmd, __pmd

(__pa(page_table) | _PAGE_TABLE));來設置pmd表項。page_table顯然屬于線性地址,先通過__pa宏轉化為物理地址,在與上_PAGE_TABLE宏,此時它們還是無符號整數,在通過__pmd把無符號整數轉化為pmd類型,經過這些轉換, 就得到了一個具有屬性的表項, 然后通過set_pmd宏設置pmd表項.

接著又是一個循環,設置1024個頁表項。

is_kernel_text函數根據前面提到的address來判斷address線性地址是否屬于內核代碼段,它同樣在mm/init.c中定義:

static inline int is_kernel_text(unsigned long addr)
{
if (addr >= (unsigned long)_stext && addr <= (unsigned long)__init_end)
return 1;
return 0;
}

_stext, __init_end是個內核符號, 在內核鏈接的時候生成的, 分別表示內核代碼段的開始和終止地址.

如果address屬于內核代碼段, 那么在設置頁表項的時候就要加個PAGE_KERNEL_EXEC屬性,如果不是,則加個PAGE_KERNEL屬性.

#define _PAGE_KERNEL_EXEC \
(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED)

#define _PAGE_KERNEL \
(_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_NX)

最后通過set_pte(pte, pfn_pte(pfn, PAGE_KERNEL));來設置頁表項, 先通過pfn_pte宏根據頁框號和頁表項的屬性值合并成一個頁表項值,

然戶在用set_pte宏把頁表項值寫到頁表項里。
當pagetable_init()函數返回后,內核已經設置好了內核頁表,緊著調用load_cr3(swapper_pg_dir);
#define load_cr3(pgdir) \
asm volatile("movl %0,%%cr3": :"r" (__pa(pgdir)))
將控制swapper_pg_dir送入控制寄存器cr3. 每當重新設置cr3時, CPU就會將頁面映射目錄所在的頁面裝入CPU內部高速緩存中的TLB部分. 現在內存中(實際上是高速緩存中)的映射目錄變了,就要再讓CPU裝入一次。由于頁面映射機制本來就是開啟著的, 所以從這條指令以后就擴大了系統空間中有映射區域的大小, 使整個映射覆蓋到整個物理內存(高端內存)除外. 實際上此時swapper_pg_dir中已經改變的目錄項很可能還在高速緩存中, 所以還要通過__flush_tlb_all()將高速緩存中的內容沖刷到內存中,這樣才能保證內存中映射目錄內容的一致性。
3.4 對如何構建頁表的總結
通過上述對pagetable_init()的剖析, 我們可以清晰的看到, 構建內核頁表, 無非就是向相應的表項寫入下一級地址和屬性。 在內核空間保留著一部分內存專門用來存放內核頁表.當cpu要進行尋址的時候,無論在內核空間,還是在用戶空間, 都會通過這個頁表來進行映射。對于這個函數, 內核把整個物理內存空間都映射完了, 當用戶空間的進程要使用物理內存時, 豈不是不能做相應的映射了? 其實不會的, 內核只是做了映射, 映射不代表使用, 這樣做是內核為了方便管理內存而已。

四. 實例分析映射機制
4.1示例代碼
通過前面的理論分析,我們通過編寫一個簡單的程序, 來分析內核是如何把線性地址映射到物理地址的。
[root@localhost temp]# cat test.c
#include <stdio.h>
void test(void)
{
printf("hello, world.\n");
}
int main(void)
{
test();
}
這段代碼很簡單, 我們故意要main調用test函數, 就是想看下test函數的虛擬地址是如何映射成物理地址的。
4.2 段式映射分析
我們先編譯, 在反匯編下test文件
[root@localhost temp]# gcc -o test test.c
[root@localhost temp]# objdump -d test
08048368 <test>:
8048368: 55 push %ebp
8048369: 89 e5 mov %esp,%ebp
804836b: 83 ec 08 sub $0x8,%esp
804836e: 83 ec 0c sub $0xc,%esp
8048371: 68

億恩科技地址(ADD):鄭州市黃河路129號天一大廈608室 郵編(ZIP):450008 傳真(FAX):0371-60123888
   聯系:億恩小凡
   QQ:89317007
   電話:0371-63322206


本文出自:億恩科技【www.ypdoo.com.cn】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線

     
     
    国产不卡高清| a级毛片免费全部播放| 国产伦精品一区二区三区无广告| 国产一区精品| 欧美激情伊人| 日韩在线观看视频网站| 成人a级高清视频在线观看| 亚洲天堂在线播放| 日韩中文字幕一区二区不卡| 99热精品在线| 精品视频在线观看一区二区三区| 精品毛片视频| 色综合久久久久综合体桃花网| 亚洲精品中文一区不卡| a级黄色毛片免费播放视频| 国产成人啪精品| 九九久久国产精品大片| 午夜欧美成人久久久久久| 毛片的网站| 午夜精品国产自在现线拍| 国产网站免费在线观看| 高清一级淫片a级中文字幕| 日韩中文字幕一区二区不卡| 日韩一级黄色| 美女免费精品高清毛片在线视| 台湾美女古装一级毛片| 日韩在线观看免费| 欧美大片aaaa一级毛片| 超级乱淫伦动漫| 欧美国产日韩精品| 天天做日日爱夜夜爽| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 91麻豆tv| 国产激情视频在线观看| 免费国产在线观看| 免费一级片在线| 日本特黄特黄aaaaa大片| 国产伦精品一区二区三区在线观看 | 午夜在线影院| 国产一区免费观看| 久久久久久久免费视频| 欧美国产日韩一区二区三区| 久久精品大片| 亚洲 激情| 欧美激情一区二区三区视频高清 | 国产不卡高清| 精品国产一区二区三区久| 四虎久久影院| 国产a毛片| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 色综合久久天天综合观看| 精品在线免费播放| 日韩男人天堂| 欧美激情一区二区三区在线| 久久久久久久网| 精品国产亚洲一区二区三区| 99久久精品国产免费| 美女免费精品高清毛片在线视| 韩国三级视频网站| 国产不卡在线观看| 欧美国产日韩久久久| 久久国产精品只做精品| 色综合久久天天综线观看| 国产网站免费视频| 天天做日日干| 国产原创中文字幕| 精品在线观看一区| 精品国产亚洲一区二区三区| 四虎影视库| 精品视频在线观看一区二区三区| 国产成人欧美一区二区三区的| 免费一级片在线| 二级片在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产高清在线精品一区二区| 一a一级片| 成人a大片在线观看| 青青久久国产成人免费网站| 99久久精品国产片| 国产成人女人在线视频观看| 欧美国产日韩精品| 九九精品影院| 欧美爱爱动态| 亚久久伊人精品青青草原2020| 999久久久免费精品国产牛牛| 天天做人人爱夜夜爽2020| 九九免费精品视频| 国产一区二区精品在线观看| 成人在激情在线视频| 国产麻豆精品hdvideoss| 香蕉视频久久| 欧美国产日韩一区二区三区| 久久精品店| a级毛片免费观看网站| 国产一区免费观看| 尤物视频网站在线观看| 99热精品在线| 亚洲女人国产香蕉久久精品| 国产91丝袜高跟系列| 国产综合91天堂亚洲国产| 四虎久久精品国产| 久久精品店| 韩国毛片免费大片| 成人影视在线播放| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 一级毛片视频播放| 人人干人人插| 一 级 黄 中国色 片| 亚洲精品中文字幕久久久久久| 91麻豆tv| 日日日夜夜操| 精品久久久久久中文字幕2017| 久久国产精品永久免费网站| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 99色视频在线| 尤物视频网站在线观看| 色综合久久久久综合体桃花网| 精品国产香蕉伊思人在线又爽又黄| 黄视频网站免费看| 中文字幕一区二区三区 精品| 四虎影视久久久免费| 日韩一级黄色片| 精品国产香蕉在线播出| 一级女性全黄久久生活片| 国产91丝袜在线播放0| 麻豆污视频| 国产成人精品一区二区视频| 久久久久久久男人的天堂| 亚洲 欧美 成人日韩| 午夜激情视频在线播放| 国产成a人片在线观看视频| 国产一区二区精品尤物| 色综合久久天天综合观看| 可以免费在线看黄的网站| 九九久久国产精品| 国产成人欧美一区二区三区的| 精品国产三级a| 麻豆污视频| 精品视频在线观看一区二区| 九九久久99| 精品久久久久久中文| 国产国语在线播放视频| 韩国三级香港三级日本三级| 精品国产一区二区三区免费| 一级毛片视频在线观看| 国产福利免费观看| 国产麻豆精品高清在线播放| 青草国产在线观看| 欧美激情一区二区三区在线播放| 999精品影视在线观看| 欧美激情一区二区三区视频 | 亚洲精品永久一区| 在线观看成人网| 亚洲第一页色| 91麻豆精品国产自产在线观看一区 | 国产一区二区精品尤物| 二级片在线观看| 欧美国产日韩精品| 91麻豆精品国产高清在线| 成人免费一级纶理片| 色综合久久久久综合体桃花网| 999精品视频在线| 国产伦久视频免费观看 视频| 四虎影视久久久免费| 91麻豆爱豆果冻天美星空| 国产一区精品| 999精品视频在线| 四虎久久精品国产| 国产成人女人在线视频观看| 精品视频在线看| 国产国语在线播放视频| 精品视频在线看| 亚洲爆爽| 欧美激情伊人| 国产网站在线| 日本在线播放一区| 99色视频| 亚洲精品久久久中文字| 午夜激情视频在线播放| 99久久网站| 高清一级做a爱过程不卡视频| 日韩在线观看网站| 黄色福利片| 精品国产亚洲一区二区三区| 久久精品欧美一区二区| 91麻豆精品国产自产在线 | 久久精品成人一区二区三区| 欧美爱色| 一a一级片| 日本免费乱人伦在线观看| 在线观看导航| 国产国语对白一级毛片| 欧美a级片免费看| 黄视频网站免费观看| 夜夜操网| 韩国毛片免费| 欧美另类videosbestsex久久| 欧美另类videosbestsex久久| 国产视频一区二区在线观看| 在线观看导航|