返回信息流6.虚拟存储和MMU
个人感觉虚拟存储是为了多任务操作系统而生的,而MMU是在资源受限的前提下综合硬件加速和算法加速产生的一种存储管理机制,也是一种折衷的做法。
大家都知道多任务操作系统可以同时执行多个程序,每个程序之间虽然优先级不同,但都会在某一段时间内独自占用CPU,只是占用的时间有长短之分。这种,多个程序之间相互切换是通过中断来完成的,当中断发生时,系统首先要保存当前程序的相关信息,然后执行另一个程序,这种机制就使得各个应用程序的使用者都感觉是自己的程序一直在运行。而应用程序的开发者也不必考虑操作系统到底是单任务的还是多任务的,它只要编写好一个可运行的程序即可,至于究竟应用程序何时执行,执行多久等问题都交由内核来管理。
很容易理解,多任务的OS会产生冲突,如果处理不当系统就会崩溃。第一个就是处理器时间分配的冲突,还有存储空间的独有性,即某个应用程序的存储空间或者保存该程序必要信息的存储段不能被其他程序修改,否则会造成系统错误。解决第一个问题可以通过操作系统的内核机制,仔细研究一下就可以发现其原理(注意不同的处理器有不同的最小中断响应时间)。第二个问题可能需要借助硬件来解决。
虚拟存储实际上是硬件执行软件配置的一种方法。因为每个应用程序都有自己的虚拟存储空间,且都和系统寻址空间差不多,(如ARM,3G虚拟存储空间,最高1G留给I/O等固有资源),而他们实际能拥有的物理存储空间是有限的,这样就需要有一个合理的机制来协调虚拟存储和实际存储之间的关系。
如上图所示,两个应用程序都有4G的虚拟地址空间,而实际的物理地址也仅有4G,他们通过映射机制只占用一小段物理空间,这样就完成了多任务的共存。
熟悉Linux的人应该知道每个进程有一个pid(进程号),这个是做什么用的呢?实际上他就是为虚拟存储服务的,可以理解,每一个pid对应一个应用程序(尽管一个用户会有很多应用程序),这个pid加上指令的高位构成VPN(虚拟页号),然后通过内核的映射表成为实际的物理地址。
如上图所示,8bit的pid+20bit页号可以包含将近256百万的虚拟地址,后面的12bit偏移给出了具体某页(4K)中的地址。
注意:并不是所有的虚拟存储页都驻留在RAM里,它可以溢出到慢速存储介质(硬盘)上,这就涉及到了交换的知识。
当页表很大时,这种转换机制将会比较复杂,此时如果单纯用软件转换机制将会慢得无法忍受。因此,MMU诞生了。它可以记录访问历史,只要近期使用过的映射都可以快速被转换,大大加快了映射的速度,见下图
图中的TLB就是MMU的快表,它包含最近被访问的虚拟页的映射,如果命中就可以快速转换,否则只能走下面的慢速路径(具体的知识介绍我会在讲解ARM系统时专门将它的MMU原理)。
至于处理器更高级的超标量,超流水超长指令字,多核多线程,浮点算数和DSP的知识这里就不再赘述了,有兴趣的同学可以看看我之前在小组交流时讲过的ppt。
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #2312同步于 2008/11/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖
嵌入式硬件知识-------微处理器2
fzylijun886
2008/11/6镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
"熟悉Linux的人应该知道每个进程有一个pid(进程号),这个是做什么用的呢?实际上他就是为虚拟存储服务的,可以理解,每一个pid对应一个应用程序(尽管一个用户会有很多应用程序),这个pid加上指令的高位构成VPN(虚拟页号),然后通过内核的映射表成为实际的物理地址。"
这是哪个平台下的映射方式啊?PowerPC?