a毛片毛费观看-a毛片在线-a毛片在线观看-a毛片在线免费观看-国产成人综合洲欧美在线-国产成人综合高清在线观看

始創于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.ibaoshan.net】

服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!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小時客服服務熱線

     
     
    97超级碰碰碰久久久久| 美女自拍高潮流白浆| 1000部精品久久久久久久久| 无码国内精品久久人妻| 免费A级毛片在线播放| 国产精品久久久久7777按摩| 中文字幕亚洲欧美专区| 无码一区二区三区老色鬼| 麻豆精品久久久久久中文字幕无码 | 无码AV在线一本无码| 六月丁香婷婷色狠狠久久| 国产精品久久777777| 666西方大但人文艺术| 亚洲AⅤ无码天堂在线观看| 欧美精产国品一二三类产品特点| 果冻十麻豆十天美十老师| 扒开双腿疯狂进出爽爽爽免费| 亚洲AV综合色区无码4区| 人妻少妇精品视频无码专区| 精品一区二区三区在线播放视频| 东京热人妻系列无码专区| 又粗又黄又猛又爽大片APP| 我的娇妻QUEEN| 欧美成天堂网地址| 极品教师动漫在线观看免费完整版| 草莓视频APP在线下载| 夜夜躁日日躁狠狠久久AV| 无码囯产精品一区二区免费| 女人被弄高潮视频免费| 国内国外日产一区二区| 超碰人人透人人爽人人看| 一本到午夜92版福利| 无码AV人片在线观看天堂| 欧美成性视頻XXXⅩXXX| 精品人妻一区二区三区三区换着玩| 大乳丰满人妻中文字幕日本| 中文字幕人妻丝袜乱一区三区| 性色AV免费网站| 日本高清WWW色视频| 老色鬼永久精品网站| 国产无遮挡无码很黄很污很刺激| 被按摩的人妻中文字幕| 又黄又爽又无遮挡免费的网站| 亚欧美日乱码视频在线观看 | 日韩人妻无码一区二区三区久久 | 妺妺晚上扒我内裤玩我J| 国内女人喷潮完整视频| 成年午夜免费韩国做受| 一本加勒比波多野结衣高清| 无码一区二区三区视频| 清区二三区国产好的精华液| 久久久久AV综合网成人| 国产精品天干天干在线观看| 被俩个黑人前后破苞的女人| 中国老熟女重囗味HDXX| 亚洲VA中文字幕无码久久不卡| 色欲丰满熟妇人妻av一区二区 | 中文天堂在线最新版在线WWW| 亚洲AV无码成H人动漫网站| 日日躁狠狠躁死你H| 男女性色大片免费网站| 精品久久国产综合婷婷五月| 国产经典一区二区三区蜜芽| 八戒八戒看片在线WWW看| 欲しがる人妻 波多野结衣| 亚洲AV日韩AV高潮喷潮无码天| 色欲AV综合AV无码AⅤ| 欧美日韩人妻精品一区二区在线 | 天美传媒剧国产MV在线看| 欧美人伦禁忌DVD放荡欲情| 久久久久亚洲AV无码专| 国精产品无人区一码二码三蘑菇 | 日韩精品人妻AV一区二区三区| 毛片TV网站无套内射TV网站| 激情欧美日韩一区二区| 国产很色很黄很大爽的视频| 巴西女人与禽2O2O性论交| 最新欧美精品一区二区三区| 亚洲人妻AV伦理| 午夜福利国产成人A∨在线观看 | 暴行JAPANESE人妻| 在线观看中文最近最新观看| 亚洲VA成无码人在线观看| 凸凹人妻人人澡人人添医| 人妻少妇啊灬啊灬用力啊快| 免费人成视在线观看不卡| 久久99精品久久久久久9| 国产强伦姧在线观看无码| 福利姬国产精品一区在线| 啊灬啊灬啊灬快灬高潮了霸总| 中国熟妇老熟女妓女9| 亚洲欧美日韩久久精品第一区| 无码人妻精品一区二区三区免费看 | 51国偷自产一区二区三区| 亚洲熟妇无码av叧娄本色| 亚洲AV日韩综合一区| 我的好妈妈中文字幕| 日韩国产欧美亚洲V片| 欧美人妻一区二区三区| 蜜臀AV 国内精品久久久| 久久精品国产久精国产果冻传媒| 海角精产国品一二三区别| 国产精品麻豆成人AV电影艾秋| 东欧av性无码高清| JAPANESEHD春药2| 自拍偷自拍亚洲精品播放| 一本久久伊人热热精品中文字幕| 亚洲精品成人无码| 无线乱码一二三区免费看| 色综合久久中文综合网| 人人妻人人躁人人爽精品| 女人被暴躁C到高潮容易怀孕| 浪潮国产AV一区二区熟女| 久久精品久久电影免费| 精品国产AⅤ一区二区三区 | 久久国产精品99精品国产987| 国色天香精品卡一卡二卡三二百| 国产精品成人网站| 国产 国语对白 露脸| 成人A级毛片免费播放| JZZIJZZIJ亚洲乱熟无码| 99国产精品无码专区| 中文字幕人妻无码专区APP| 一区二区三区AV| 亚洲小说图区综合在线| 亚洲欧美国产精品久久| 亚洲国产一区二区三区波多野结衣| 亚洲AV无码专区里番在线观看| 性CHINESE新婚VIDEO| 西西顶级艺术WWW日本超大胆| 无码精品人妻一区二区| 天天想你在线视频免费观看高清版| 色欲狠狠躁天天躁无码中文字幕| 日韩A片无码一区二区五区电影| 人妻少妇精品视频aaa| 欧美在线 | 亚洲| 漂亮人妻偷人精品视频| 欧美亚洲熟妇少妇性A爱| 欧美熟女一区二区三区| 欧美人妻少妇精品视频专区| 欧美黑人又粗又大高潮喷水| 欧美XXXxX高潮喷水| 女人高潮喷水毛片免费| 女人自熨全过程视频免费| 牛和人交VIDE欧关ⅩXOO| 拧花蒂尿用力按凸起喷水尿AV| 男女无遮挡猛进猛出免费观看视频| 浪潮AV色综合久久天堂| 久久伊人精品一区二区三区| 久久婷婷大香萑太香蕉AV人| 久久无码中文字幕免费影院| 久久人人爽人人爽人人片DVD | 国产在线拍揄自揄视频网站| 国产熟女一区二区三区五月婷| 国产午夜亚洲精品理论片八戒| 国产偷国产偷亚洲高清日韩| 国产亚洲AV手机在线观看| 国产午夜亚洲精品不卡| 国产又粗又猛又爽又黄的视频免费黑人了| 国产熟女真实乱精品视频| 国产在线超清日本一本| 好儿子妈妈今天就是你的女人 | 综合在线视频精品专区| 45歳の▽バツ1熟女とハメ撮り| 777亚洲精品乱码久久久久久| ASSPICS亚洲美女裸体CHINESE| FREE性中国熟女HD| А√天堂资源官网在线资源 | 国产成人精品久久久久精品日日| 国产成人精品综合久久久久| 国产精品白浆无码流出 | 一区二区三区国产精华护肤品| 在线V观看免费国岛国片| 中国熟妇色XXXXX| 99RE热这里只有精品| Y111111少妇影院无码| 超碰97人人射妻| 夫前人妻被灌醉侵犯在线| 国产成人愉拍免费视频| 国产麻豆精品精东影业AV网站| 国产在线无码一区二区三区| 激情无码人妻又粗又大| 久久99精品久久久久麻豆| 久久天天躁狠狠躁夜夜AV不卡| 蜜桃中文字日产乱幕4区| 农村风流大炕作爱| 欧洲精品VA无码一区二区三区| 日本高清二区视频久二区| 色欲AV伊人久久大香线蕉影院| 我把护士日出水了视频90分钟| 亚洲AV第一成肉网肉片AV| 亚洲乱妇熟女爽到高潮| 泑女网址WWW呦女| 99精品久久久久久久婷婷| 波多野结衣的电影有哪些| 公车掀起老师裙子进入在线| 国产乱码精品一区二区三区中文 | WWW无人区一码二码三码区别| 差差差很疼视频30分钟应用| 公侵犯玩弄漂亮人妻优|