- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2008-07 徐铁柱 Linux内存管理介绍 大纲 ARM MMU原理 ARM Linux 内存布局 初始化过程 内存分配接口 ARM MMU 控制外部内存访问和转换虚拟地址(VA)到物理地址(PA) Instruction MMU(IMMU) Data MMU(DMMU) 支持段(section)和页(Page)方式映射 有TLB加速转换(Translation Lookaside Buffers) 特性 标准MMU映射功能,支持大小、域、访问保护 可以支持1KB,4KB,64KB 和1MB 映射大小 可以为1MB的段映射设置访问权限 可以把64KB和4KB的页分成4个子页分别设置访问权限 16个域 指令和数据TLB各有64个条目 指令和数据可以分开锁定 循环替换算法 支持软页表(soft page tables) 地址转换图示 一级页表有 2^12=4k项 二级粗页表有 2^8=256项 二级细页表有 2^10=1k项 段大小为 2^20=1MB 粗页大小为64KB或4KB 细页大小为4KB或1KB 地址转换图示(续) 地址转换伪代码 struct section{ uint32_t addr:12; uint32_t type:2 }; struct page{ uint32_t addr:20; uint32_t type:2; }; struct section l1_sect[4096]; //全局变量 uint32_t virt_to_phys(uint32_t va) { int i = va/1M; if( le_sect[i].type is error ) page_fault(); if( le_sect[i].type is section) return l1_sect[i].addr*1M + va%1M; else if( le_sect[i].type is page ){ struct page* page = (struct page*)(l1_sect[i].addr*1M);//可以是动态分配的 int j = (va%1M)/4K; if( page[j].type is error ) page_fault(); return page[j].addr*4K + va % 4K; }else{ fault(); } } 以1MB的段表和4KB的页表为例 一级页表的物理位置通常是固定的, 二级页表可以改变 段表和页表都可以通过缺页中断来动态分配,而不需要一开始指定 ARM Linux 内存布局 Document/arm/memory.txt 中建议的布局 copy_user_page clear_user_page ffff-ffff ffff-8000 Reserved ffff-7fff ffff-1000 Vector page ffff-0fff ffff-0000 DMA map fffe-ffff ffc0-0000 Reserved ffff-ffff ff00-0000 PLATFORM USE feff-ffff VMALLOC_END VMALLOC VMALLOC_END-1 VMALLOC_START Kernel direct-mapped RAM region High_memory-1 PAGE_OFFSET MODULE PAGE_OFFSET-1 TASK_SIZE TASK TASK_SIZE-1 0000-1000 Low Vector 0FFF 0000-0000 变量 值 VMALLOC_END E800-0000 VMALLOC_OFFSET 8*1024*1024 VMALLOC_START (high_memory + VMALLOC_OFFSET) ~(VMALLOC_OFFSET-1)) High_memory PAGE_OFFSET+MEMSIZE KERNEL_START PAGE_OFFSET+0x8000 PAGE_OFFSET C000-0000 MODULE_START PAGE_OFFSET-1 MODULE_END PAGE_OFFSET-16M TASK_SIZE BF00-0000 TASK_UNMAPPED_BASE 4000-0000 PHYS_OFFSET B000-0000 -- PXA310 Or 8000-0000 -- PXA300 物理内存使用段映射方式映射到PAGE_OFFSET Fee memory MEM_SIZE-1 KERNEL_END Kernel image KER
文档评论(0)