• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            巢穴

            about:blank

            linux內(nèi)核情景分析筆記-存儲管理

            第2章 存儲管理
            LINUX頁式管理
            PGD          PMD          PT        PTE
            頁表目標(biāo)     中間目錄     頁表     頁表項(xiàng)

            LINUX在32位地址下采取二層映射
            #define PGDIR_SHIFT 22
            #define PTRS_PER_PGD 1024

            #define PMD_SHIFT 22
            #define PTRS_PER_PMD 1

            #define PTRS_PER_PTE 1024
            根據(jù)以上宏定義,PMD被完美的架空了,而相當(dāng)于采取了二層映射

            其中PGD用了線性地址的最高10位 與  MMU 對應(yīng)
            線性地址的中間10位是所對應(yīng)的PTE在PT中的索引
            剩下的最低12位則是頁中的偏移量

            虛擬地址 = 段基地址:段偏移量
                                        16位      32位
            更準(zhǔn)確的講是段選擇子了吧

            在LINUX中段基地址 = 0(下面的____KERNEL_CS等),所以可以認(rèn)為線性地址與虛擬地址總是相等的,但其本質(zhì)不是一個東西


            0xC0000000-0xFFFFFFFF為內(nèi)核占用
            0x0-0xBFFFFFFF為用戶控件


            內(nèi)核的虛擬內(nèi)存為簡單的線性映射
            #__PAGE_OFFSET (0xC0000000)
            #define PAGE_OFFSET  ((unsigned long) __PAGE_OFFSET)
            #define __pa(x) ((unsigned long)(x) - PAGE_OFFSET)
            #define __va(x) ((void *)((unsigned long)(x) +PAGE_OFFSET)

            __pa是從虛擬地址轉(zhuǎn)換成物理地址
            __va是從物理地址轉(zhuǎn)換成虛擬地址


            在GDT中有4個段描述符
            其索引是2-5
            分別是
            __KERNEL_CS 內(nèi)核代碼段
            __KERNEL_DS 內(nèi)核數(shù)據(jù)段
            __USER_CS 用戶代碼段
            __USER_DS 用戶數(shù)據(jù)段

            #define start_thread(regs,new_eip,new_esp) do {\
             __asm__("movl %0,%%fs;movl %0,%%gs"::"r"(0)); \
             set_fs(USER_DS);
             regs->xds = __USER_DS; \
             regs->xes = __USER_DS; \
             regs->xss = __USER_DS; \
             regs->xcs = __USER_CS; \
             regs->eip = new_eip;   \
             regs->esp = new_esp;   \

            }while(0)

            通過這段宏可以看出,LINUX沒用段式存儲,雖然它也走了這個流程

             

            MMU的流程 MMU使用物理地址

            頁式映射
            從REG CR3拿PGD的地址
            找到頁面目錄,線性地址中的高10位為索引,找到頁面目錄項(xiàng),從中拿高20位作為頁面表的索引,頁面表與4k字節(jié)邊界對齊,CPU自動補(bǔ)充前12位為0得到頁面表地址。

            然后拿線性地址的中間10位,得到頁面表中的索引,拿到頁面表項(xiàng),頁面表項(xiàng)的高20位在低位補(bǔ)充12個0,再加上線性地址的低12位組成物理地址。


            mm_struct 任務(wù)相關(guān)的虛擬內(nèi)存
            vm_area_struct 一段虛擬內(nèi)存的抽象,也可以理解為段
            mm_struct中擁有vm_area_struct的指針
            在vm_area_struct多的時候使用avl樹來存儲
            mem_map_t  物理頁表
            zone_struct 物理內(nèi)存的區(qū)結(jié)構(gòu),zone_struct把物理內(nèi)存分成了幾個部分
            ZONE_DMA 0 供DMA使用
            ZONE_NORMAL 普通使用
            ZONE_HIGHMEN 高段內(nèi)存,內(nèi)核映射不到

            物理內(nèi)存之間區(qū)的劃分并不是強(qiáng)制的,如果某一個區(qū)已經(jīng)沒有內(nèi)存可用,是可以去別的區(qū)拿內(nèi)存的

            其實(shí)一直對內(nèi)核的尋址有些疑問
            不過剛剛似乎想通了
            內(nèi)核會做預(yù)映射,把PGD第768項(xiàng)以后的都做映射,也就是1G的空間
            而這種映射應(yīng)該是滿足__pa()宏,即線性地址與物理地址是線性映射的。
            所以最終__pa()宏被用作在內(nèi)核代碼中顯性的獲得某個線性地址所對應(yīng)的物理地址
            而MMU負(fù)責(zé)把一個線性地址隱式的轉(zhuǎn)成了物理地址,而這已轉(zhuǎn)換與內(nèi)核代碼無關(guān)。
            不知這樣理解是否正確?

            今天只看到了這里
            待續(xù)……

            說起來把這么個東西放到首頁很不好意思,主要目的是希望有看到的人幫我指正一下我所認(rèn)知的錯誤或者解惑。謝謝啦:)

            posted on 2011-03-15 17:47 Vincent 閱讀(1670) 評論(0)  編輯 收藏 引用 所屬分類: linux內(nèi)核


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            97超级碰碰碰碰久久久久| 国内精品久久久久影院网站| 一本色道久久88—综合亚洲精品| 嫩草伊人久久精品少妇AV| 国产精品久久久久久福利漫画| 国产成人精品久久一区二区三区av | 国产99久久久久久免费看| 久久噜噜久久久精品66| 久久亚洲精品无码VA大香大香| 国产精品99久久免费观看| 亚洲精品乱码久久久久久蜜桃 | 久久人做人爽一区二区三区| 国产Av激情久久无码天堂| 麻豆精品久久久久久久99蜜桃| 日本三级久久网| 韩国免费A级毛片久久| 伊人久久大香线蕉综合热线| 久久青青草原国产精品免费| 久久久久亚洲av综合波多野结衣| 成人精品一区二区久久 | 狠狠综合久久综合中文88| 久久人人爽人人人人片av| 久久久久亚洲?V成人无码| 久久久青草青青亚洲国产免观| 久久国语露脸国产精品电影| 精品水蜜桃久久久久久久| 国产精品久久一区二区三区| 久久这里只有精品18| 伊人久久大香线蕉综合网站| 青青草国产97免久久费观看| 久久精品国产一区二区三区不卡| 91精品国产91久久| 日韩精品久久久久久| 国产精品99久久精品爆乳| 青青草国产成人久久91网| 国产日产久久高清欧美一区| 国产亚洲美女精品久久久久狼| 97精品伊人久久大香线蕉app| 久久99久久99精品免视看动漫| 久久综合九色综合网站| 精品久久久久久中文字幕人妻最新|