- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 领读经典-外国文学(1)(山东大学)中国大学MOOC慕课 章节测验期末考试客观题答案.docx VIP
- 《电机与拖动基础》课件(共十一章).ppt VIP
- 《PyTorch与深度学习实战》第2章 PyTorch深度学习通用流程.pptx VIP
- 简谱D 想着我Think of Me简谱歌剧魅影.pdf VIP
- 2023-2024学年安徽省马鞍山市第八中学九年级上学期期中考试化学试卷.pdf VIP
- 《PyTorch与深度学习实战》第3章 PyTorch深度学习基础.pptx VIP
- 好书推荐《朝花夕拾》读书分享名著导读PPT课件.pptx VIP
- 22个专业95个病种中医临床诊疗方案目录44.pdf VIP
- 精品解析:天津市第四十三中学2024-2025学年高一上学期第一次月考英语试题(解析版).docx VIP
- 2025年北京市东城区九年级初三一模语文试卷(含答案).docx
文档评论(0)