虚拟内存机制
1. 计算机的存储系统
2. 为什么要有虚拟内存
在早期的计算机中,是没有虚拟内存
的概念的。我们要运行一个程序,会把程序全部装入内存,然后运行。当运行多个程序时,经常会出现以下问题:
进程地址空间不隔离
,没有权限保护。
由于程序都是直接访问物理内存,所以一个进程可以修改其他进程的内存数据,甚至修改内核地址空间中的数据。内存使用效率低
当内存空间不足时,要将其他程序暂时拷贝到硬盘,然后将新的程序装入内存运行。由于大量的数据装入装出,内存使用效率会十分低下。程序运行的地址不确定
因为内存地址是随机分配的,所以程序运行的地址也是不确定的。
3. 进程的虚拟地址空间
- 每个进程都有自己独立的4G内存空间
- 虚拟内存空间通过MMU来和真实的物理内存产生联系
计算机实际没有折磨多内存,进程以为自己独自拥有4G内存(n个进程需要n*4G内存)
每个进程都存有自己的页表,是自己的虚拟内存和物理内存的映射,所以页表放在内核区
4. 虚拟内存和物理内存如何建立起联系的
- 虚拟地址空间分成若干个大小相等的分区,叫页,为了换入换出方便,物理内存也分成了大小相等的若干个块。叫页框。
页与页
框是实现虚拟内存的技术的基础
分页和分表
- 在系统启动后,操作系统将整个物理内存以4K为单位,划分各个页。之后进行内存分配时,都以页为单位。
- 操作系统虚拟内存和物理内存的映射就称为
页表
虚拟内存的页、物理内存的页框及页表
- 为了使得虚拟内存和物理内存进行映射,则需要将虚拟内存的页码和物理内存的页框码,放到页表中,一一对应。
虚拟地址、物理地址的转换
- 处理器遇到的地址都是虚拟地址,虚拟地址和物理地址都分成页码(页框)和偏移量俩部分组成。在
虚拟地址转换成物理地址的过程中,偏移值不变
,而页码和页框码之间的映射就在一个映射记录表——页表中
5. 页表共享
- 在多程序系统中,常常有多个程序需要共享同一段代码。可以
让多个程序共享同一个页面即可
- 具体方法:
相关程序的虚拟地址空间页面在页表中指向内存中的同一个页框。
6. 虚拟内存带来的好处
进程内存管理
内存的完整性
:每个进程误以为自己拥有4G的内存,虚拟地址允许程序不用将地址空间中的每一页都映射到物理内存,同时不需要映射连续的物理内存,这使得运行大程序称为可能。数据共享
:多个进程可能访问同一段代码,此时只需要将这些进程的页表的页框码指向同一个。- 让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
虚拟技术
- 虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中
内存交换与内存覆盖
内存覆盖及特点
由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分成为一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按照调用关系分段,首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统将其调入覆盖区,替换覆盖区中原有的段。
- 覆盖技术的特点:是打破了必须将一个进程的全部信息装入内存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行,再而,大家要注意到,内存中能够更新的地方只有覆盖区的段,不在覆盖区的段会常驻内存。
内存交换及特点
交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
- 换入:把准备好竞争CPU运行的程序从辅存移到内存。
- 换出:把处于等待状态(或CPU调度原则下被剥夺运行权力)的程序从内存移到辅存,把内存空间腾出来。
总结
页表当中存放的是虚拟地址与物理地址的映射
,当映射的物理地址存在,则直接从物理内存中取出数据,如果不存在,则需要进行页面置换,从磁盘当中换入所需要的页面。- 也就相当于
虚拟地址 = 物理内存 + 磁盘
- 也就相当于