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