Chinaunix首页 | 论坛 | 博客
  • 博客访问: 221401
  • 博文数量: 39
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 218
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-06 12:33
文章分类
文章存档

2017年(2)

2015年(11)

2014年(18)

2013年(8)

我的朋友

分类: LINUX

2013-11-28 18:27:19

开篇:
     在讲MMU之前我觉得有必要对四种地址做一个简单的介绍,哪四种地址呢?即:物理地址。虚拟地址。逻辑地址。线性地址。至于逻辑地址和线性地址我们不关心(如果对这四种地址感兴趣的可以参考下这篇博文,个人觉得写的挺好的),下面对另外两种地址作一个简单的介绍。
1)、物理地址。简单,就是实际的内存地址,注意:不要跟磁盘内存或者外部存储搞混了。
2)、虚拟地址。简单点就是地址总线所能寻址的空间大小,比如现在主流的32CPU,那么最大的寻址就是2^32也就是4G的空间大小,对应的地址就叫虚拟地址。也就说即使你的物理内存只有1G,我也可以存在4G的虚拟内存。简单点理解就是我把一个很大很大的程序分割成很多部分,把当前需要运行的程序装载入内存,其它还没用到的先放在磁盘中,这不就可以了。
问题来了,我的物理地址和虚拟地址要怎么联系起来呢?这就要引入映射的概念了,所谓映射,我理解的就是一个数组,你通过数组小标号来找到里面的内容。在MMU里面就是什么个意思呢,就是通过虚拟地址找到物理地址,看明白了没有,只不过他不是用的数组,他用的是一段连续的内存,并把这段内存抽象为指针,该指针里存的就是描述物理地址的内容,后面会讲到叫页项描述符。那具体要怎么实现呢?引入页的概念了,所谓页是什么,就是一块一块内存,就跟书一页一页一个意思,一本书就是一整个存储空间,显然每本书都有呆目录,这样找到具体的页是不是就很块了啊,OK,我们也就引出了也目录的概念,没什么好说的,就是页的集合而已,再简单点就是一个数组,本质是一块连续的内存区域。一般放在SRAM的起始位置。这里知识介绍一种简单的映射关系而已,怎么说简单,就是通过检索页目录立马就能够找到对应页项。举一反三,对于复杂的也一样,只不过检索的过程和内容变多了,怎么个复杂,他就是在页目录后面再加一个也目录,叫法不一样,就有所谓的PGD,PMD,的出现,无所谓,不关心这个,就跟你从书上找内容一样,从目录开始到哪一章,哪一节.....直到找到为止。下面来讲讲页描述的意义。
为什么我们要有页描述符这个东西的存在,按上面讲的意思,访问到物理内存不就可以了,不就可以读/写了吗?那你想过没有,我们没创建一个进程的时候,是不是都有一个独立的进程空间,而且每个进程空间的相互独立的,互不干扰的等等一些涉及到内存保护方面的知识。自然而然我们在分配一个内存的时候我们就得记录下这些信息不是吗?显然,我们就要有一个东西来记录这下东西,也就引出了也描述符这个概念,里面存的就是多当前这块内存也就是页的访问权限啊,访问方式啊你是要读还是要写还是可读可写,你支持不支持cache,TLB啊等等一些信息,显然只有一个字节也就是32是不够的,一般是4个字节的,所以就得出了一个页描述符的大小就是4字节,对于目前32位系统,我们可以推出页目录(对于一级目录来说),他的大小就是16KB(你不是有4G的虚拟空间吗?那不就是4*1024M,每个页的大小如果设为1M,那么就有4*1024个页,那么就的有4*1024*4个字节的存储空间来放,也就是16KB)。
(实际上虚拟地址到物理地址中间还有一个变换后的虚拟地址急MVA,这个不讲,你就把他全当作就一个虚拟地址就行了,也就是说到达MMU的地址就是个虚拟地址就行了)。
最后来模拟以下:CPU发出虚拟地址,MMU收到通过C13找到页表,开始各种检查页描述符(简单点就是对各个位域检查),最后执行相应操作。

这里知识讲了MMU管理的一个轮廓而已,具体的实现还是很复杂的。也讲好多,这篇博文主要帮助初学者能够对MMU有一个面是了解。

还是那句话,讲不对的地方还是大牛不吝赐教


阅读(1661) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~