激情五月天婷婷,亚洲愉拍一区二区三区,日韩视频一区,a√天堂中文官网8

<ul id="buwfs"><strike id="buwfs"><strong id="buwfs"></strong></strike></ul>
    <output id="buwfs"></output>
  • <dfn id="buwfs"><source id="buwfs"></source></dfn>
      <dfn id="buwfs"><td id="buwfs"></td></dfn>
      <div id="buwfs"><small id="buwfs"></small></div>
      <dfn id="buwfs"><source id="buwfs"></source></dfn>
      1. <dfn id="buwfs"><td id="buwfs"></td></dfn>
        始創(chuàng)于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊(cè)有禮 登錄
        • 掛牌上市企業(yè)
        • 60秒人工響應(yīng)
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補(bǔ)償
        全部產(chǎn)品
        您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

        深入理解Linux內(nèi)存映射機(jī)制 (1)

        發(fā)布時(shí)間:  2012/8/15 18:17:27

        一. 緒 論
        二. X86的硬件尋址方法
        三. 內(nèi)核對(duì)頁表的設(shè)置
        四. 實(shí)例分析映射機(jī)制

        一. 緒 論
        我們經(jīng)常在程序的反匯編代碼中看到一些類似0x32118965這樣的地址,操作系統(tǒng)中稱為線性地址,或虛擬地址。虛擬地址有什么用?虛擬地址又是如何轉(zhuǎn)換為物理內(nèi)存地址的呢?本章將對(duì)此作一個(gè)簡要闡述。
        1.1 Linux內(nèi)存尋址概述
        現(xiàn)代意義上的操作系統(tǒng)都處于32位保護(hù)模式下。每個(gè)進(jìn)程一般都能尋址4G的物理空間。但是我們的物理內(nèi)存一般都是幾百M(fèi),進(jìn)程怎么能獲得4G的物理空間呢?這就是使用了虛擬地址的好處,通常我們使用一種叫做虛擬內(nèi)存的技術(shù)來實(shí)現(xiàn),因?yàn)榭梢允褂糜脖P中的一部分來當(dāng)作內(nèi)存使用。例外一點(diǎn)現(xiàn)在操作系統(tǒng)都劃分為系統(tǒng)空間和用戶空間,使用虛擬地址可以很好的保護(hù)內(nèi)核空間被用戶空間破壞。
        對(duì)于虛擬地址如何轉(zhuǎn)為物理地址,這個(gè)轉(zhuǎn)換過程有操作系統(tǒng)和CPU共同完成. 操作系統(tǒng)為CPU設(shè)置好頁表。CPU通過MMU單元進(jìn)行地址轉(zhuǎn)換。
        1.2 瀏覽內(nèi)核代碼的工具
        現(xiàn)在的內(nèi)核都很大, 因此我們需要某種工具來閱讀龐大的源代碼體系,現(xiàn)在的內(nèi)核開發(fā)工具都選用vim ctag cscope瀏覽內(nèi)核代碼,網(wǎng)上已有現(xiàn)成的makefile文件用來生成ctags/cscope/etags。
        一、用法:
        找一個(gè)空目錄,把附件Makefile拷貝進(jìn)去。然后在該目錄中選擇性地運(yùn)行如下make命令:
        $ make
        將處理/usr/src/linux下的源文件,在當(dāng)前目錄生成ctags, cscope
        注:SRCDIR用來指定內(nèi)核源代碼目錄,如果沒有指定,則缺省為/usr/src/linux/
        1) 只創(chuàng)建ctags
        $ make SRCDIR=/usr/src/linux-2.6.12/ tags
        2) 只創(chuàng)建cscope
        $ make SRCDIR=/usr/src/linux-2.6.12/ cscope
        3) 創(chuàng)建ctags和cscope
        $ make SRCDIR=/usr/src/linux-2.6.12/
        4) 只創(chuàng)建etags
        $ make SRCDIR=/usr/src/linux-2.6.12/ TAGS

        二、處理時(shí)包括的內(nèi)核源文件:
        1) 不包括drivers,sound目錄
        2) 不包括無關(guān)的體系結(jié)構(gòu)目錄
        3) fs目錄只包括頂層目錄和ext2,proc目錄

        三、最簡單的ctags命令
        1) 進(jìn)入
        進(jìn)入vim后,用
        :tag func_name
        跳到函數(shù)func_name
        2) 看函數(shù)(identifier)
        想進(jìn)入光標(biāo)所在的函數(shù),用
        CTRL ]
        3) 回退
        回退用 CTRL T

        1.3 內(nèi)核版本的選取
        本次論文分析, 我選取的是linux-2.6.10版本的內(nèi)核。最新的內(nèi)核代碼為2.6.25。但是現(xiàn)在主流的服務(wù)器都使用的是RedHat AS4的機(jī)器,它使用2.6.9的內(nèi)核。我選取2.6.10是因?yàn)樗芙咏?.6.9,現(xiàn)在紅帽企業(yè)Linux 4以Linux2.6.9內(nèi)核為基礎(chǔ),是最穩(wěn)定、最強(qiáng)大的商業(yè)產(chǎn)品。在2004年期間,F(xiàn)edora等開源項(xiàng)目為Linux 2.6內(nèi)核技術(shù)的更加成熟提供了一個(gè)環(huán)境,這使得紅帽企業(yè) Linux v.4內(nèi)核可以提供比以前版本更多更好的

        功能和算法,具體包括:
        • 通用的邏輯CPU調(diào)度程序:處理多內(nèi)核和超線程CPU。
        • 基于對(duì)象的逆向映射虛擬內(nèi)存:提高了內(nèi)存受限系統(tǒng)的性能。
        • 讀復(fù)制更新:針對(duì)操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的SMP算法優(yōu)化。
        • 多I/O調(diào)度程序:可根據(jù)應(yīng)用環(huán)境進(jìn)行選擇。
        • 增強(qiáng)的SMP和NUMA支持:提高了大型服務(wù)器的性能和可擴(kuò)展性。
        • 網(wǎng)絡(luò)中斷緩和(NAPI):提高了大流量網(wǎng)絡(luò)的性能。
        Linux 2.6 內(nèi)核使用了許多技術(shù)來改進(jìn)對(duì)大量內(nèi)存的使用,使得 Linux 比以往任何時(shí)候都更適用于企業(yè)。包括反向映射(reverse mapping)、使用更大的內(nèi)存頁、頁表?xiàng)l目存儲(chǔ)在高端內(nèi)存中,以及更穩(wěn)定的管理器。因此,我選取linux-2.6.10內(nèi)核版本作為分析對(duì)象。

         

        二. X86的硬件尋址方法
        請(qǐng)參考Intel x86手冊(cè)^_^

         

        三. 內(nèi)核對(duì)頁表的設(shè)置
        CPU做出映射的前提是操作系統(tǒng)要為其準(zhǔn)備好內(nèi)核頁表,而對(duì)于頁表的設(shè)置,內(nèi)核在系統(tǒng)啟動(dòng)的初期和系統(tǒng)初始化完成后都分別進(jìn)行了設(shè)置。
        3.1 與內(nèi)存映射相關(guān)的幾個(gè)宏
        這幾個(gè)宏把無符號(hào)整數(shù)轉(zhuǎn)換成對(duì)應(yīng)的類型
        #define __pte(x) ((pte_t) { (x) } )
        #define __pmd(x) ((pmd_t) { (x) } )
        #define __pgd(x) ((pgd_t) { (x) } )
        #define __pgprot(x) ((pgprot_t) { (x) } )

        根據(jù)x把它轉(zhuǎn)換成對(duì)應(yīng)的無符號(hào)整數(shù)
        #define pte_val(x) ((x).pte_low)
        #define pmd_val(x) ((x).pmd)
        #define pgd_val(x) ((x).pgd)
        #define pgprot_val(x) ((x).pgprot)

        把內(nèi)核空間的線性地址轉(zhuǎn)換為物理地址
        #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET)

        把物理地址轉(zhuǎn)化為線性地址
        #define __va(x) ((void *)((unsigned long)(x) PAGE_OFFSET))

        x是頁表項(xiàng)值, 通過pte_pfn得到其對(duì)應(yīng)的物理頁框號(hào), 最后通過pfn_to_page得到對(duì)應(yīng)的物理頁描述符
        #define pte_page(x) pfn_to_page(pte_pfn(x))

        如果對(duì)應(yīng)的表項(xiàng)值為0, 返回1
        #define pte_none(x) (!(x).pte_low)

        x是頁表項(xiàng)值, 右移12位后得到其對(duì)應(yīng)的物理頁框號(hào)
        #define pte_pfn(x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
        根據(jù)頁框號(hào)和頁表項(xiàng)的屬性值合并成一個(gè)頁表項(xiàng)值
        #define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))

        根據(jù)頁框號(hào)和頁表項(xiàng)的屬性值合并成一個(gè)中間表項(xiàng)值
        #define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))

        向一個(gè)表項(xiàng)中寫入指定的值
        #define set_pte(pteptr, pteval) (*(pteptr) = pteval)
        #define set_pte_atomic(pteptr, pteval) set_pte(pteptr,pteval)
        #define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
        #define set_pgd(pgdptr, pgdval) (*(pgdptr) = pgdval)

        根據(jù)線性地址得到高10位值, 也就是在目錄表中的索引
        #define pgd_index(address) (((address)>>PGDIR_SHIFT) & (PTRS_PER_PGD-1))

        根據(jù)頁描述符和屬性得到一個(gè)頁表項(xiàng)值
        #define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot))
        3.2內(nèi)核頁表的初始化
        內(nèi)核在進(jìn)入保護(hù)模式前, 還沒有啟用分頁功能, 在這之前內(nèi)核要先建立一個(gè)臨時(shí)內(nèi)核

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


        本文出自:億恩科技【mszdt.com】

        服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

      2. 您可能在找
      3. 億恩北京公司:
      4. 經(jīng)營性ICP/ISP證:京B2-20150015
      5. 億恩鄭州公司:
      6. 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
      7. 億恩南昌公司:
      8. 經(jīng)營性ICP/ISP證:贛B2-20080012
      9. 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
      10. 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話:0371-60135900
      11. 專注服務(wù)器托管17年
        掃掃關(guān)注-微信公眾號(hào)
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
          0
         
         
         
         

        0371-60135900
        7*24小時(shí)客服服務(wù)熱線