ARMMMUL1L2页表计算说明剖析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 第 PAGE # 页 共 47 页 ARM 的存储管理单元 MMU 知识点介绍 1 ARM MMU 页表设置计算 9 ARM 的存储管理单元 MMU 知识点介绍 由于ARM勺MM知识体系比较庞大,只总结必须知道了解的 MMI知识点。 (一) MM内存管理单元的作用 ( 1 )虚拟存储空间到物理存储空间的映射 ( 2)存储器访问权限控制 (3)设置虚拟存储空间的缓冲特性 (二) MMU勺地址变换的内存块单元 (1)段单元:按大小为1M的内存块单元为单位进行的虚拟地址物理地址之间的变换。 2)大页单元:按大小为 64K 的内存块单元为单位进行的虚拟地址物理地址之间的变换 (3)小页单元:按大小为 4K 的内存块单元为单位进行的虚拟地址物理地址之间的变换。 (4)极小页单元:按大小为 1K 的内存块单元为单位进行的虚拟地址物理地址之间的变换。 Linux在最初的汇编代码中使用段单元的映射机制来实现 MM的开启。当Linux系统启动之后采用的是小页单元的映射机制,因 为我们知道 Linux 把物理内存和虚拟内存的管理是按页来管理的,每个页大小为 4k 字节。 (三)MMU勺地址变换方式 ( 1)一级页表地址映射 0 0 第 第 PAGE #页共47页 Modified virtual addrss 20 19 鹫畜鞘怎SB蠡畫鵠辭虚财址Section index一级描述符Table「idex一级描述符地址Phy steal address20 19图】31 14 130 鹫畜鞘怎SB蠡畫鵠辭虚财址 Section index 一级描述符 Table「idex 一级描述符地址 Phy steal address 20 19 图】 31 14 13 0 TransiatiDn base Translation tabl包 base 31 14 13 2 t 0 Transit:cn base 0 0 Section first-level descriptor Section t)利呂口 ^ddTS3Si SBZ AP □ Domain 1 c B 1 a 内存物理地址 一级页表地址段映射,是指按1M大小的内存块单元进行的地址映射,查找的过程就是找到页表基地址和当前需要转化的虚拟地址 的高12位为索引的页目录项,由于每个目录项都是 4字节对齐的,所以应该为:页表基地址 +虚拟地址高12位X 4,从上图中可看出 根据图 根据图 2,我们为了取得被映射的物理地址基地址,需要将物理地址右移 20 位: 第 第 PAGE # 页 共 47 页 第 第 PAGE #页共47页 一级描述符的地址总是4字节对齐的,即后两位为0. 一级描述符地址中存放的是一级描述符,一级描述符的格式定义如下: 31 20 19Section base address 31 20 19 Section base address 映射实例: 题目:把内存的地址从 0x100000-0x200000空间映射成虚拟地址 0xc0100000-0xc0200000的地址空间. (第一步)根据图1的介绍,我们先把内存虚拟地址右移 20位: Table in dex = (0xc0100000 20) = 0xc01 (第二步)我们打算用内存地址 0x4000-0x8000的内存空间内作为存放页表的内存地址。 所以把0x4000写到CP15:C2寄存器。注意0x4000正好是16k对齐。所以这里的一级描述符地址为: 一级描述符地址:(0x4000 + (0xc01 2)) = 0x4000 + 0x3004 = 0x7004 (第三步)我们根据需要把该虚拟地址映射到实际的物理地址的需求,来构建一级页表描述符: Sectionbase address = (0x100000 20) = 0x1 APQomain, C,B属性在实例中不做设置。所以最终的一级页表描述符为: 1cb1O =0b10010=0x12 一级页表描述符 = (0x1 20) + 0x12 =0x100000 + 0x12 = 0x100012 然后把这个0x100012(一级页表描述符)写到一级描述符地址0x7004指向的内存中去。 这样当我们需要访问虚拟内存地址 0xc0100000的时候,CPU需要做的事情就是读取 C2寄存器,找到页表基地址0x4000,然后根 据0xc0100000 20的index索引找到一级描述符基地址(0x4000 + (0xc01 2)),然后读取这个地址里面的一级描述符: 0x100012, 得到段映射的物理基地址 0x100012 20, 然后再与虚拟地址的低 20位相加,得到对应的物理地址 0x100000. Modified vir

文档评论(0)

wangxing1张 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档