没有合适的资源?快使用搜索试试~ 我知道了~
首页MMU与CACHE详解
MMU与CACHE详解
4星 · 超过85%的资源 需积分: 19 27 下载量 195 浏览量
更新于2023-03-16
评论
收藏 730KB DOC 举报
MMU与CACHE详解 讲解了arm下mmu的工作原理 以及cache的工作原理 以及他们之间的关系 注意点
资源详情
资源评论
资源推荐
ARM920T 的 MMU 与 Cache
目录
虚拟地址和物理地址的概念
虚拟内存管理
ARM920T 的 CP15 协处理器
MMU
Cache
操作 MMU 和 Cache 的内核启动代码
参考资料 索引
虚拟地址和物理地址的概念
CPU 通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果 CPU 没有
MMU(Memory Management Unit,内存管理单元),或者有 MMU 但没有启用,CPU 核
在取指令或访问内存时发出的地址将直接传到 CPU 芯片的外部地址引脚上,直接被内存芯片
(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以
下简称 PA),如下图所示。
图 1. 物理地址示意图
如果 CPU 启用了 MMU,CPU 核发出的地址将被 MMU 截获,从 CPU 到
MMU 的地址称为虚拟地址(Virtual Address,以下简称 VA),而 MMU 将
这个地址翻译成另一个地址发到 CPU 芯片的外部地址引脚上,也就是将虚拟地
址映射成物理地址,如下图所示[1]。
图 2. 虚拟地址示意图
MMU 将虚拟地址映射到物理地址是以页(Page)为单位的,对于 32 位
CPU 通常一页为 4K。例如,虚拟地址 0xb700 1000~0xb700 1)f 是一个页,
可能被 MMU 映射到物理地址 0x2000~0x2)f,物理内存中的一个物理页面也
称为一个页框(Page Frame)。
虚拟内存管理
现代操作系统充分利用 MMU 提供的 VA 到 PA 的映射机制来做内存管理,以下
称为虚拟内存管理(Virtual Memory Management)。首先看下面的例子:
例 1. 进程的地址空间
这是 bash 进程的虚拟地址空间,32 位 CPU 的虚拟地址空间是 4GB,也就
是 0x0000 0000-0x)) )),该进程占用的地址范围近似为 0x0000 0000-
0xb)f )),地址范围 0xc000 0000-0x)) )) 由内核占用,用户进程不允许
访问。在这个 bash 进程的地址空间中,从 0x0804 8000 开始的 668K 的权
限为 r-x--,表示代码段,从 0x080e f000 开始的 24K 的权限是 rw---,表示
数据段,从 0x080f 5000 开始的 2056K 的权限也是 rw---,但是没有对应任
何磁盘文件,而是用[ anon ](anonymous,匿名)来表示,这是堆所占的
空间,从 0xb7c6 d000 开始是共享库和资源文件的映射空间,每个共享库也
分为代码段和数据段,用不同的权限表示,可以看到,从堆空间到下面的共享
库映射空间之间有很大的地址空洞,最末从 0xbfad 4000 开始的 84K 是栈空
间。
为什么需要虚拟内存管理呢?可以从以下几个方面来理解。
第一,让每个进程有独立的地址空间是引入虚拟内存管理的最主要目的。所
谓独立的地址空间是指,不同进程中的同一个 VA 被 MMU 映射到不同的 PA,
并且在某一个进程中访问任何地址都不可能访问到另外一个进程的数据,这样
使得任何一个进程由于程序 BUG 或恶意代码所导致的非法内存访问都不会意外
改写其它进程的数据,不会影响其它进程的运行,从而保证了整个系统的稳定
性。另一方面,每个进程都认为自己独占 4GB 的地址空间,编写程序会比较方
便,不必为每个进程分配一个地址范围,而是每个进程都可以使用一个完整的
地址空间中的任何地址。
我们继续用上面的例子来理解,再打开一个 shell 窗口,用 pmap 命令看一
下这个新的 bash 进程的地址空间,可以发现和刚才的地址空间布局差不多:
该进程也占用了 0x0000 0000-0xb)f )) 的地址空间,代码段也是从
0x0804 8000 开始的 668K,数据段也是从 0x080e f000 开始的 24K,共享
库的内存布局也差不多。这个进程和刚才的例子是同一个系统中同时运行着的
两个进程,它们都认为自己占有 0x0000 0000-0xb)f )) 的地址空间,并且
它们的数据段的地址范围是重合的,但是两个进程各自干各自的事情,显然数
据段中的数据是不同的,正是因为不同进程中的同一个 VA 被映射到了不同的
PA,所以两个进程的数据段其实是在不同的物理地址上,如下图所示。
图 4. 进程地址空间是独立的
从图中还可以看到,两个进程都是 bash 进程,代码段是一样的,并且代码
段是只读的,不会被改写,因此操作系统会安排两个进程的代码段共享相同的
物理内存。由于每个进程都有自己的一套 VA 到 PA 的映射表,整个地址空间中
的任何 VA 都在每个进程自己的映射表中查找相应的物理地址,因此不可能访
问到其它进程的地址,也就没有可能意外改写其它进程的数据。
第二,引入 VA 到 PA 的映射也会给分配和释放内存带来方便,物理上不连
续的空间可以映射为逻辑上连续的虚拟地址空间。比如要 malloc 一块很大的
内存空间,而物理内存虽然有足够的空闲内存,却没有足够大的连续空闲内存,
这时就可以分配多个不连续的物理页面,而映射为连续的虚拟地址范围。如下
图所示。
图 5. 不连续的 PA 可以映射为连续的 VA
第三,一个系统如果同时运行着很多进程,为各进程分配的内存之和可能会
大于实际可用的物理内存,虚拟内存管理使得这种情况下各进程仍然能够正常
运行。因为各进程分配的只不过是虚拟内存的页,这个页的内容可以映射到物
理内存的页框,也可以临时保存到磁盘上而不占用物理内存的页框,磁盘上这
一部分称为交换设备(Swap Device),可能是一个磁盘分区,也可能是一个
磁盘文件。当物理内存不够时将物理内存中不常用的页框临时保存到磁盘上,
而当用到这些页框时再从磁盘加载回内存,这称为换页(Paging)因此:
系统中可分配的内存总量 = 物理内存的大小 + 交换设备的大小
如下图所示。第一张图是换出(Page out),将物理页面的内容保存到磁
盘,并解除地址映射,释放物理页面。第二张图是换入(Page in),从空闲
的物理页面中分配一个,将磁盘暂存的页面加载回内存,并建立地址映射。
剩余25页未读,继续阅读
mmhhkk2
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- stc12c5a60s2 例程
- Android通过全局变量传递数据
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论4