内存知识梳理2. 不同架构页表建立入口比较
来源:互联网 发布:大数据徐子沛pdf 编辑:程序博客网 时间:2024/05/20 18:45
前面分别梳理了ARM 和 X86架构内存页表的建立过程, 先简单回顾下初始化的过程:
ARM32:
setup_arch -->paging_init -->map_lowmem -->create_mapping -->alloc_init_pud -->alloc_init_pmd -->alloc_init_pte
ARM64的过程和ARM32很接近, 只是没有用到pmd:
setup_arch -->paging_init -->map_mem -->create_mapping -->alloc_init_pud -->alloc_init_pmd -->set_pmd -->alloc_init_pte
其他架构大多数采用ARM 类似的过程, 由各自的 setup_arch 调用自己的paging_init(), 以Linux 3.10.0 内核为例, 符合这一规则的架构如下:
Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\alpha\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\arm64\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\arm\kernel):extern void paging_init(struct machine_desc *desc);Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\arm\kernel):paging_init(mdesc);Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\avr32\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\blackfin\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\c6x\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\cris\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\frv\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\h8300\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\ia64\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m32r\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\metag\kernel):paging_init(heap_end);Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\mips\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\mn10300\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\openrisc\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\parisc\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\s390\kernel): paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\score\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\sh\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\tile\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\unicore32\kernel):paging_init();Setup.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\xtensa\kernel):paging_init();Setup.h (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\unicore32\kernel):extern void paging_init(void);Setup_32.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\powerpc\kernel):paging_init();Setup_32.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\sparc\kernel):paging_init();Setup_64.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\powerpc\kernel):paging_init();Setup_64.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\sparc\kernel):paging_init();Setup_mm.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m68k\kernel):extern void paging_init(void);Setup_mm.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m68k\kernel):paging_init();Setup_no.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m68k\kernel):paging_init();Srmmu.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\sparc\mm):prom_printf("Something wrong, can't find cpu node in paging_init.\n");Sun3mmu.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m68k\mm):void __init paging_init(void)Um_arch.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\um\kernel):paging_init();
paging_init:
Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\alpha\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\avr32\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\blackfin\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\c6x\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\cris\arch-v10\mm):paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\cris\arch-v32\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\frv\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\h8300\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\hexagon\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\hexagon\mm):paging_init(); /* See Gorman Book, 2.3 */Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m32r\mm):void __init paging_init(void);Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m32r\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\m68k\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\metag\mm):void __init paging_init(unsigned long mem_end)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\microblaze\mm):static void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\microblaze\mm):paging_init();Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\mips\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\mn10300\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\openrisc\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\parisc\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\s390\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\score\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\sh\mm):void __init paging_init(void)Init.c (y:\code\kernel\linux-3.10.0\linux-3.10.0-514.el7\arch\tile\mm):void __init paging_init(void)
与上面的过程不太一样的是特立独行的X86:
setup_arch --> init_mem_mapping -->init_memory_mapping -->kernel_physical_mapping_init
自此,内存页表梳理告一段落,
阅读全文
0 0
- 内存知识梳理2. 不同架构页表建立入口比较
- 内存知识梳理2. Linux 页表的建立过程-x86
- 内存知识梳理2. Linux 页表的建立过程-ARM
- 三层架构知识梳理
- 【Redis】知识架构梳理
- 【三层架构】入门知识梳理
- iOS 知识梳理-内存
- 内存知识梳理 4. 内存管理
- 【三层架构】——知识梳理
- 建立内存管理架构
- 内存知识梳理 3. Bootmem机制
- 知识梳理
- 知识梳理
- 知识梳理
- 知识梳理
- 知识梳理
- 电商之梳理hadoop相关知识---分布式架构
- 电商之梳理dubbo相关知识---分布式架构
- SolrCloud路由学习总结
- nginx配置
- Codeforces #442 题解
- Java经典练习题
- 奇怪,Python有的函数调用需要两对括号?(2)
- 内存知识梳理2. 不同架构页表建立入口比较
- JSON.parse()和JSON.stringify()的区别
- MySQL数据库迁移(直接复制文件)
- HDFS体系架构(最全)
- docker部署pinpoint,监控docker中的Springboot项目
- myeclipse快捷键使用大全
- C语言--指向函数的指针
- 统计/etc/services文件里面的空行数量
- 32位的plsql,连接64位的oracle数据库解决办法