内存管理之虚拟内存

       前面我们提到了关于解决内存过载的两种解决方法中的交换技术,现在我们介绍另一种解决方法:虚拟内存(Virtual Memory)。虚拟内存的基本思想是:每个程序都拥有自己的地址空间,这个空间被分割成多个块,每个块被称为页或页面(page)。每个页面有连续的地址范围。这些页被映射到内存,但并不是进程的所有页面都被映射到内存中进程才可以运行,当进程引用到一部分在物理内存中的地址空间时,由硬件立执行必要的映射。当进程引用到一部分不在物理内存中的地址空间时,由操作系统负责将缺失的页面调入到内存并且重新执行失败的指令。虚拟内存非常适合在多道程序设计系统中使用,许多程序的片段同时保持在内存中,每一个程序在等待它的一部分页面读入内存的同时,可以把CPU交给另一个进程使用。不同与交换技术,虚拟内存只需要保证引用到的虚拟地址空间所在的页面被映射到内存,进程就可以执行,这样就能使得内存中有尽可能多的进程。

  • 分页

  大部分虚拟内存系统都会使用到分页(paging)技术。当执行指令MOV REG, 1000时,它将内存地址为1000的内存单元中的内容复制到寄存器中(具体功能取决于不同的机器型号)。通常我们把由程序产生的地址称之为虚拟地址(virtual address),他们构成一个虚拟地址空间(virtual address space)。在没有虚拟内存的计算机上,系统直接将虚拟地址送到内存总线上,读写操作使用具有同样地址的物理内存字(如果使用地址重定向会进行相应的地址转换)。在使用虚拟内存时,系统不再把虚拟地址直接送到内存总线上,而是先把虚拟地址送到内存管理单元(Memory Management Unit,MMU)中,MMU把虚拟地址映射成物理内存再送到内存总线上。更多关于MMU的介绍可以参见MMU虚拟地址空间按照固定大小划分成多个成为页面的单元,在物理内存中对应的单元称之为页框(page frame),页面和页框的大小通常是一致的通常每个进程都会有自己的页表(page table),页表的作用:用于记录虚拟地址空间的页面在内存中的映射情况。我们举个例子来看看映射是如何工作的。这里有一个32KB内存的计算机,地址范围是0~32K,一个64KB的程序,地址范围是0-64K。虽然可以编写比物理内存大的的程序,但不能确保程序的所有页面都被调入到内存中,在磁盘(交换空间)上必须有一个最多64KB的程序核心映像的完整副本,以便保证程序片断在需要时能够被调入内存。映射关系如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值