虚拟内存的起因

随着技术发展,程序对内存的需求越来越大

我们需要更大的内存更强的机器才能让软件跑起来

程序规模的增长远大于存储器容量的增长速度

需要让更多的程序跑在有限的内存里

理想中的存储器:

  • 更大
  • 更快
  • 更便宜
  • 非易失性存储器
image-20200419172905391

覆盖技术

目标

  • 在较小可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。

原理

  • 把程序按照其自身逻辑结构,划分为若干功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行
    • 必要部分的代码和数据常驻内存
    • 可选部分在其他程序模块中实现,平时放在外存,需要时装入内存
    • 不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖,即他们可以公用一个分区
  • 例子:

image-20200419174839065

缺点:

  • coder 把一个大程序分为若干小功能模块并确定覆盖关系,费时费力,增加编程复杂度
  • 覆盖模块实际上是时间换空间

交换技术

目标

多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源

原理

  • 将暂时不能运行的程序送到外存
  • OS 将一个进程的地址空间保存到外存(换出),再将外存中某个进程的地址空间读入到内存(换入)。(换入换出大小是整个程序的地址空间)

需要考虑的问题

  • 何时交换?

    内存不够或有不够的危险时

  • 交换区的大小?

    必须足够大来存放所有用户进程的所有内存映像拷贝

  • 换出再换入后地址需要一样嘛?

    最好采用动态地址映射的方法(建立页表)

交换与覆盖区别

交换发生在程序之间,不需要程序员操作

覆盖发生在程序之内,需要程序员!

虚存技术

目标

  • 覆盖技术:程序员负担大
  • 交换技术:处理器开销大
  • 充分解决覆盖技术与交换技术存在的问题

程序局部性原理

  • 程序的局部性原理:程序在执行过程中的一个较短时期,所执行的指令地址和指令操作数地址分别局限于一定区域

    • 时间局部性
    • 空间局部性
    image-20200419183544017 image-20200419183746684

基本概念

image-20200419184200800

基本特征

image-20200419184449532

虚拟页式内存管理

image-20200419184621909

hhh,偷懒直接截屏了~~~

  • 需要用到的功能:
    • 请求调页
    • 页面置换
image-20200419185124939 image-20200419185256585

image-20200419185600279image-20200420122547152

image-20200420122547152