操作系统:虚拟内存

虚拟内存的需求背景

  • 理想中的存储器:容量更大、速度更快、价格更便宜的非易失性存储器
  • 实际中的存储器

  • 计算机系统时常出现内存空间不够用,解决方案:
    • 覆盖(overlay):应用程序手动把需要的指令和数据保存在内存中
    • 交换(swapping):操作系统自动把暂时不能执行的程序保存到外存中
    • 虚拟存储:在有限容量的内存中,以页为单位自动装入更多更大的程序

覆盖技术

  • 目标:在较小的可用内存中运行较大的程序
  • 方法:
    • 依据程序逻辑结构,将程序划分为若干功能相对独立的模块;将不会同时执行的模块共享同一块内存区域
    • 必要部分(常用功能)的代码和数据常驻内存
    • 可选部分(不常用功能)放在其他程序模块中,只在需要用到时装入内存
    • 不存在调用关系的模块可相互覆盖,共用同一块内存区域

  • 缺点:
    • 增加编程困难
    • 增加执行时间

交换技术

  • 目标:增加正在运行或需要运行的程序的内存
  • 实现方法:可将暂时不能运行的程序放到外存
    • 换入换出的基本单位:整个进程的地址空间
    • 换出(swap out):把一个进程的整个地址空间保存到外存
    • 换入(swap in):将外存中某进程的地址空间读入到内存
  • 交换面临的问题
    • 交换时机
    • 交换区带澳
    • 程序换入时的重定位:换出后再换入时要放在原处吗?(采用动态地址映射的方法)
  • 比较
覆盖 交换
只能发生在没有调用关系的模块间 以进程为单位
程序员须给出模块间的逻辑覆盖结构 不需要模块间的逻辑覆盖结构
发生在运行程序的内部模块间 发生在内存进程间

局部性原理(principle of locality)

  • 程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域
    • 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
    • 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内
    • 分支局部性:一条跳转指令的两次执行,很可能跳到相同的内存位置
  • 局部性原理的意义
    • 从理论上来说,虚拟存储技术是能够实现的,而且可取得满意的效果

虚拟存储的基本概念

  • 思路:将不常用的部分内存块暂存到外存
  • 原理:
    • 装载程序时:只将当前指令执行需要的部分页面或段装入内存
    • 指令执行中需要的指令或数据不在内存(称为缺页或缺段)时:处理器通知操作系统将相应的页面或段调入内存
    • 操作系统将内存中暂时不用的页面或段保存到外存
  • 基本特征:
    • 不连续
      • 物理内存分配非连续
      • 虚拟地址空间使用非连续
    • 大用户空间:
      • 提供给用户的虚拟内存可大于实际的物理内存
    • 部分交换
      • 虚拟存储只对部分虚拟地址空间进行调入和调出
  • 实现方式:
    • 虚拟页式存储
    • 虚拟段式存储
  • 支持技术:
    • 硬件:页式或短时存储中的地址转换机制
    • 操作系统:管理内存和外存间页面或段的换入和换出

虚拟页式存储

  • 思路
    • 当用户程序要装载到内存运行时,只装入部分页面,就启动程序运行
    • 进程在运行中发现有需要的代码或数据不在内存时,则向系统发出缺页异常请求
    • 操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得进程能继续运行
  • 虚拟页式存储中的地址转换

  • 虚拟页式存储页表项结构:
    • 驻留位:表示该页是否在内存
    • 修改位:表示在内存中的该页是否被修改过
    • 访问位:表示该页面是否被访问过(读或写)
    • 保护位:表示该页的允许访问方式

首先,根据10位Dir找到一级页表对应记录(4K/4B = 1024,正好1024条记录,1条记录4个字节32位,故Dir为10位);然后再由一级页表的PPN找到对应的二级页表(一个PNN对应一张二级页表);然后Table找到该记录,二级页表的PNN即为物理地址的帧号

缺页异常

  • 缺页异常的处理流程

    A. 在内存中有空闲物理页面时,分配一物理页帧f,转第E步;

    B. 依据页面置换算法选择将被替换的物理页帧f,对应逻辑页q

    C. 如q被修改过,则把它写回外存;

    D. 修改q的页表项中驻留位置为0;

    E. 将需要访问的页p装入到物理页面f

    F. 修改p的页表项驻留位为1,物理页帧号为f;

    G. 重新执行产生缺页的指令

  • 在何处保存未被映射的页?
    • 应能方便地找到在外存中的页面内容
    • 交换空间(磁盘或者文件):采用特殊格式存储未被映射的页面
  • 虚拟页式存储中的外存选择:
    • 代码段:可执行二进制文件
    • 动态加载的共享库程序段:动态调用的库文件
    • 其它段:交换空间
  • 性能
    • 有效存储访问时间(effective memory access time EAT)
    • EAT = 访存时间 * (1-p) + 缺页异常处理时间 * 缺页率p

eg:访存时间10 ns,磁盘访问时间5 ms,缺页率p,页修改概率q,则:

EAT = 10(1–p) + 5,000,000p(1+q)

猜你喜欢

转载自blog.csdn.net/qiuxy23/article/details/81348938