亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 1527 | 回復(fù): 4
打印 上一主題 下一主題

[內(nèi)存管理] linux一級(jí)二級(jí)尋址 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2016-07-19 03:37 |只看該作者 |倒序?yàn)g覽
大家好:
    第一次來(lái)這個(gè)論壇,希望大家?guī)椭?br />     我的問(wèn)題是這樣的:
    head.S中建立了臨時(shí)頁(yè)表,是平坦方式的,而后在void __init create_mapping(struct map_desc *md)中建立頁(yè)表。
    我板子是
    0x8000 0000 - 0x8440 0000 為第一段mem bank
    0x8800 0000 - 0x9000 0000 為第二段mem bank

    我的疑問(wèn)是這樣的,linux運(yùn)行的時(shí)候,自身的代碼段 數(shù)據(jù)段 以及堆棧是采用二級(jí)頁(yè)表尋址還是一級(jí)段式頁(yè)表尋址?整個(gè)被管理的物理內(nèi)存都是通過(guò)段式映射,而沒(méi)有采用pte二級(jí)頁(yè)表的方式映射。那么我們平時(shí)談?wù)摰亩?jí)頁(yè)表方式轉(zhuǎn)化地址到底用在什么情況下?

    謝謝。

    static void __init alloc_init_section(pgd_t *pgd, unsigned long addr,
                                      unsigned long end, unsigned long phys,
                                      const struct mem_type *type)
    {
        pmd_t *pmd = pmd_offset(pgd, addr);

        /*
         * Try a section mapping - end, addr and phys must all be aligned
         * to a section boundary.  Note that PMDs refer to the individual
         * L1 entries, whereas PGDs refer to a group of L1 entries making
         * up one logical pointer to an L2 table.
         */
        if (((addr | end | phys) & ~SECTION_MASK) == 0) {
                pmd_t *p = pmd;

                if (addr & SECTION_SIZE)
                        pmd++;

                do {
                        *pmd = __pmd(phys | type->prot_sect);
                        phys += SECTION_SIZE;
                } while (pmd++, addr += SECTION_SIZE, addr != end);

                flush_pmd_entry(p);
        } else {
                /*
                 * No need to loop; pte's aren't interested in the
                 * individual L1 entries.
                 */
                alloc_init_pte(pmd, addr, end, __phys_to_pfn(phys), type);
        }
    }

    static void __init alloc_init_section(pgd_t *pgd, unsigned long addr,
                                      unsigned long end, unsigned long phys,
                                      const struct mem_type *type)
    {
        pmd_t *pmd = pmd_offset(pgd, addr);

        /*
         * Try a section mapping - end, addr and phys must all be aligned
         * to a section boundary.  Note that PMDs refer to the individual
         * L1 entries, whereas PGDs refer to a group of L1 entries making
         * up one logical pointer to an L2 table.
         */
        if (((addr | end | phys) & ~SECTION_MASK) == 0) {
                printk(“secions  phy %X addr %X \n”,addr,phys);
                pmd_t *p = pmd;

                if (addr & SECTION_SIZE)
                        pmd++;

                do {
                        *pmd = __pmd(phys | type->prot_sect);
                        phys += SECTION_SIZE;
                } while (pmd++, addr += SECTION_SIZE, addr != end);

                flush_pmd_entry(p);
        } else {
                printk(“ L2 phy %X addr %X \n”,addr,phys);
                /*
                 * No need to loop; pte's aren't interested in the
                 * individual L1 entries.
                 */
                alloc_init_pte(pmd, addr, end, __phys_to_pfn(phys), type);
        }
    }

打印效果如下:
section addr C0000000 phys 80000000
section addr C0200000 phys 80200000
section addr C0400000 phys 80400000
section addr C0600000 phys 80600000
section addr C0800000 phys 80800000
section addr C0A00000 phys 80A00000
section addr C0C00000 phys 80C00000
section addr C0E00000 phys 80E00000
section addr C1000000 phys 81000000
section addr C1200000 phys 81200000
section addr C1400000 phys 81400000
section addr C1600000 phys 81600000
section addr C1800000 phys 81800000
section addr C1A00000 phys 81A00000
section addr C1C00000 phys 81C00000
section addr C1E00000 phys 81E00000
section addr C2000000 phys 82000000
section addr C2200000 phys 82200000
section addr C2400000 phys 82400000
section addr C2600000 phys 82600000
section addr C2800000 phys 82800000
section addr C2A00000 phys 82A00000
section addr C2C00000 phys 82C00000
section addr C2E00000 phys 82E00000
section addr C3000000 phys 83000000
section addr C3200000 phys 83200000
section addr C3400000 phys 83400000
section addr C3600000 phys 83600000
section addr C3800000 phys 83800000
section addr C3A00000 phys 83A00000
section addr C3C00000 phys 83C00000
section addr C3E00000 phys 83E00000
section addr C4000000 phys 84000000
section addr C4200000 phys 84200000
section addr C8000000 phys 88000000
section addr C8200000 phys 88200000
section addr C8400000 phys 88400000
section addr C8600000 phys 88600000
section addr C8800000 phys 88800000
section addr C8A00000 phys 88A00000
section addr C8C00000 phys 88C00000
section addr C8E00000 phys 88E00000
section addr C9000000 phys 89000000
section addr C9200000 phys 89200000
section addr C9400000 phys 89400000
section addr C9600000 phys 89600000
section addr C9800000 phys 89800000
section addr C9A00000 phys 89A00000
section addr C9C00000 phys 89C00000
section addr C9E00000 phys 89E00000
section addr CA000000 phys 8A000000
section addr CA200000 phys 8A200000
section addr CA400000 phys 8A400000
section addr CA600000 phys 8A600000
section addr CA800000 phys 8A800000
section addr CAA00000 phys 8AA00000
section addr CAC00000 phys 8AC00000
section addr CAE00000 phys 8AE00000
section addr CB000000 phys 8B000000
section addr CB200000 phys 8B200000
section addr CB400000 phys 8B400000
section addr CB600000 phys 8B600000
section addr CB800000 phys 8B800000
section addr CBA00000 phys 8BA00000
section addr CBC00000 phys 8BC00000
section addr CBE00000 phys 8BE00000
section addr CC000000 phys 8C000000
section addr CC200000 phys 8C200000
section addr CC400000 phys 8C400000
section addr CC600000 phys 8C600000
section addr CC800000 phys 8C800000
section addr CCA00000 phys 8CA00000
section addr CCC00000 phys 8CC00000
section addr CCE00000 phys 8CE00000
section addr CD000000 phys 8D000000
section addr CD200000 phys 8D200000
section addr CD400000 phys 8D400000
section addr CD600000 phys 8D600000
section addr CD800000 phys 8D800000
section addr CDA00000 phys 8DA00000
section addr CDC00000 phys 8DC00000
section addr CDE00000 phys 8DE00000
section addr CE000000 phys 8E000000
section addr CE200000 phys 8E200000
section addr CE400000 phys 8E400000
section addr CE600000 phys 8E600000
section addr CE800000 phys 8E800000
section addr CEA00000 phys 8EA00000
section addr CEC00000 phys 8EC00000
section addr CEE00000 phys 8EE00000
section addr CF000000 phys 8F000000
section addr CF200000 phys 8F200000
section addr CF400000 phys 8F400000
section addr CF600000 phys 8F600000
section addr CF800000 phys 8F800000
section addr CFA00000 phys 8FA00000
section addr CFC00000 phys 8FC00000
section addr CFE00000 phys 8FE00000
section addr D0000000 phys 90000000
section addr D0200000 phys 90200000
section addr D0400000 phys 90400000
section addr D0600000 phys 90600000
section addr D0800000 phys 90800000
section addr D0A00000 phys 90A00000
section addr D0C00000 phys 90C00000
section addr D0E00000 phys 90E00000
section addr D1000000 phys 91000000
section addr D1200000 phys 91200000
section addr D1400000 phys 91400000
section addr D1600000 phys 91600000
section addr D1800000 phys 91800000
section addr D1A00000 phys 91A00000
section addr D1C00000 phys 91C00000
section addr D1E00000 phys 91E00000
section addr D2000000 phys 92000000
section addr D2200000 phys 92200000
section addr D2400000 phys 92400000
section addr D2600000 phys 92600000
section addr D2800000 phys 92800000
section addr D2A00000 phys 92A00000
section addr D2C00000 phys 92C00000
section addr D2E00000 phys 92E00000
section addr D3000000 phys 93000000
section addr D3200000 phys 93200000
section addr D3400000 phys 93400000
section addr D3600000 phys 93600000
section addr D3800000 phys 93800000
section addr D3A00000 phys 93A00000
section addr D3C00000 phys 93C00000
section addr D3E00000 phys 93E00000
section addr D4000000 phys 94000000
section addr D4200000 phys 94200000
section addr D4400000 phys 94400000
section addr D4600000 phys 94600000
section addr D4800000 phys 94800000
section addr D4A00000 phys 94A00000
section addr D4C00000 phys 94C00000
section addr D4E00000 phys 94E00000
section addr D5000000 phys 95000000
section addr D5200000 phys 95200000
section addr D5400000 phys 95400000
section addr D5600000 phys 95600000
section addr D5800000 phys 95800000
section addr D5A00000 phys 95A00000
section addr D5C00000 phys 95C00000
section addr D5E00000 phys 95E00000
section addr D6000000 phys 96000000
section addr D6200000 phys 96200000
section addr D6400000 phys 96400000
section addr D6600000 phys 96600000
section addr D6800000 phys 96800000
section addr D6A00000 phys 96A00000
section addr D6C00000 phys 96C00000
section addr D6E00000 phys 96E00000
section addr D7000000 phys 97000000
section addr D7200000 phys 97200000
section addr D7400000 phys 97400000
section addr D7600000 phys 97600000
section addr D7800000 phys 97800000
section addr D7A00000 phys 97A00000
section addr D7C00000 phys 97C00000
section addr D7E00000 phys 97E00000
section addr D8000000 phys 98000000
section addr D8200000 phys 98200000
section addr D8400000 phys 98400000
section addr D8600000 phys 98600000
section addr D8800000 phys 98800000
section addr D8A00000 phys 98A00000
section addr D8C00000 phys 98C00000
section addr D8E00000 phys 98E00000
section addr D9000000 phys 99000000
section addr D9200000 phys 99200000
section addr D9400000 phys 99400000
section addr D9600000 phys 99600000
section addr D9800000 phys 99800000
section addr D9A00000 phys 99A00000
section addr D9C00000 phys 99C00000
section addr D9E00000 phys 99E00000
section addr DA000000 phys 9A000000
section addr DA200000 phys 9A200000
section addr DA400000 phys 9A400000
section addr DA600000 phys 9A600000
section addr DA800000 phys 9A800000
section addr DAA00000 phys 9AA00000
section addr DAC00000 phys 9AC00000
section addr DAE00000 phys 9AE00000
section addr DB000000 phys 9B000000
section addr DB200000 phys 9B200000
section addr DB400000 phys 9B400000
section addr DB600000 phys 9B600000
section addr DB800000 phys 9B800000
section addr DBA00000 phys 9BA00000
section addr DBC00000 phys 9BC00000
section addr DBE00000 phys 9BE00000
section addr DC000000 phys 9C000000
section addr DC200000 phys 9C200000
section addr DC400000 phys 9C400000
section addr DC600000 phys 9C600000
section addr DC800000 phys 9C800000
section addr DCA00000 phys 9CA00000
section addr DCC00000 phys 9CC00000
section addr DCE00000 phys 9CE00000
section addr DD000000 phys 9D000000
section addr DD200000 phys 9D200000
section addr DD400000 phys 9D400000
section addr DD600000 phys 9D600000
section addr DD800000 phys 9D800000
section addr DDA00000 phys 9DA00000
section addr DDC00000 phys 9DC00000
section addr DDE00000 phys 9DE00000
section addr DE000000 phys 9E000000
section addr DE200000 phys 9E200000
section addr DE400000 phys 9E400000
section addr DE600000 phys 9E600000
section addr DE800000 phys 9E800000
section addr DEA00000 phys 9EA00000
section addr DEC00000 phys 9EC00000
section addr DEE00000 phys 9EE00000
section addr DF000000 phys 9F000000
section addr DF200000 phys 9F200000
section addr DF400000 phys 9F400000
section addr DF600000 phys 9F600000
section addr DF800000 phys 9F800000
section addr DFA00000 phys 9FA00000
section addr DFC00000 phys 9FC00000
section addr DFE00000 phys 9FE00000
pte add FFFF0000 phys 809E6000
section addr F8000000 phys 68000000
section addr FA000000 phys 48000000
section addr FA200000 phys 48200000
section addr FA300000 phys 48300000
section addr FE000000 phys 6E000000
section addr FC000000 phys 6C000000
section addr FD000000 phys 6D000000
section addr FB000000 phys 49000000
section addr FE800000 phys 54000000
section addr FEA00000 phys 54200000
section addr FEC00000 phys 54400000
section addr FEE00000 phys 54600000

   

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2016-07-19 16:01 |只看該作者
有大俠知道嗎?一般采用哪種方式映射地址,一級(jí)還是二級(jí)?

論壇徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
3 [報(bào)告]
發(fā)表于 2016-07-19 16:06 |只看該作者
整個(gè)low memory都采用的section映射
有一些寫(xiě)死的設(shè)備寄存器映射才會(huì)走到alloc_init_pte

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2016-07-25 13:42 |只看該作者
謝謝 arm-linu-gcc。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2016-08-28 00:36 |只看該作者
其實(shí)代碼注釋里面已經(jīng)寫(xiě)的很清楚了,虛擬地址在滿(mǎn)足SECTION_MASK邊界對(duì)齊情況下,優(yōu)先使用section映射,不對(duì)齊才會(huì)使用PTE;
你可以把bank1內(nèi)存的結(jié)束地址修改下(0x8440 0000->0x843f 0000),就能看見(jiàn)PTE了;
另外內(nèi)核通常使用3級(jí)頁(yè)表,PGD/PUD,PMD,PTE;PMD的每個(gè)表項(xiàng)可以映射2M地址空間,PTE有512個(gè)表項(xiàng),每個(gè)表項(xiàng)可以映射4K地址空間;

#define SECTION_MASK                (~(SECTION_SIZE-1))
/*
         * Try a section mapping - end, addr and phys must all be aligned
         * to a section boundary.  Note that PMDs refer to the individual
         * L1 entries, whereas PGDs refer to a group of L1 entries making
         * up one logical pointer to an L2 table.
         */
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP