004-2虚拟内存(完)

概述

  1. 在一个进程的执行过程中,该进程不需要所有页或所有段都在内存中
  2. 进程的常驻集:进程执行的任何时候都在内存中的部分
  3. 虚拟存储器的最大容量: m i n ( 内 存 + 外 存 , 2 n ) min(内存+外存,2^n) min(+2n) n n n为计算机中地址总线的位数
  4. 1 K B = 2 10 B 1 M B = 2 20 B 1 G B = 2 30 B 1KB = 2^{10}B\quad1MB=2^{20}B\quad1GB=2^{30}B 1KB=210B1MB=220B1GB=230B

在这里插入图片描述

虚存的作用*

  1. 虚存可以使每个进程只将一部分程序和数据装入内存中,因此内存中就可以装入更多的进程
  2. 由于进程只将一部分程序和数据装入内存中,因此处理器可以执行超过内存大小的程序
  3. 虚拟内存使每个程序的执行速度变慢

局部性原理*

  1. 虚存是基于局部性原理实现的
  2. 在任何一段很短的时间内,执行可能会局限在一段很小的程序中,且可能仅会访问一个或两个数据数组。因此若程序在被挂起或被换出前仅使用了一部分进程块,则为该进程给内存装入太多的块显然会带来巨大的浪费

系统抖动:*

  1. 定义: 如果一个内存块正好在将要用到之前换出,系统就不得不很快地将它取回,处理器大部分时间都在交换块而非执行指令
  2. 产生原因:
    (1)置换算法选择不合适
    (2)物理内存数量不足
    (3)运行的进程太多
  3. 抖动不会造成系统崩溃,只会导致CPU忙碌

硬件和控制结构

分页

  1. 基于分页的虚拟存储中,同样需要页表;
  2. 通常每个进程都有一个唯一的页表,但页表项会变得更加复杂

在这里插入图片描述

  1. P : P: P:所对应的页当前是否在内存中
  2. M : M: M:修改位,表示相应页的内容从上次装入到现在是否已发生改变,若未发生改变,则在把该页换出时,无须用页框中的内容更新该页

  • 页表组织:
  1. 每个进程可以占据大量的虚存空间,因此存放页表项内存空间很大
  2. 大多数内存方案都在虚存而非实存中保存页表,这意味着页表和其他也一样都服从分页管理。
  3. 某些处理器使用两级方案来组织大型页表,在这类方案中有一个页目录,其中的每一项指向一个页表

在这里插入图片描述
在这里插入图片描述

  • 倒排页表:
  1. 上述页表组织策略存在缺陷:页表的大小与虚拟地址空间的大小成正比
    2. 倒排:使用页框号而非虚拟页号来索引页表项

在这里插入图片描述

  1. 对于大小为 2 m 2^m 2m个页框的物理内存,倒排页表包含 2 m 2^m 2m个页表项。
  2. 由于多个虚拟地址可能映射到同一个散列表项中,因此需要使用一种链接技术来管理这种溢出。
  • 转换检测缓冲区(快表)*
  1. 什么是快表:
    (1)快表是一个特殊的高速缓存,也被称为转换检测缓冲区域(TLB)
    (2)快表中包含最近使用过的页表项
  2. 为什么需要使用块表:
    (1)每次虚存访问都可能会导致两次物理内存访问,首先去取相应的页表项,然后取需要的数据
    (2)简单的虚拟内存方案会导致内存访问时间加倍
  3. 包含快表的地址转换过程:
    (1)CPU给出逻辑地址后,由硬件算出页号和偏移量,处理器首先检查快表,若需要的页表项在其中(TLB命中),则检索页框号形成物理地址
    (2)若未找到需要的页表项(TLB未命中),则需要访问内存中的页表,找到页面存放的页框号,将页框号和页内偏移拼接形成物理地址,最后访问该物理地址所对应的内存单元
    (3)TLB未命中时,完成内存访问后,处理器会更新TLB,使其包含这个新页表项,以便后面可能的再次访问

在这里插入图片描述

  1. 虚存机制须与高速缓存系统(不是TLB高速缓存,而是内存高速缓存)进行交互:
    (1)通过TLB或页表查询形成实地址后,首先查看高速缓存中是否包含这个字的块(2)若有则把它返回给CPU,否则从内存中检索这个字

在这里插入图片描述

  • 页尺寸
考虑因素解释
内部碎片页越小,内部碎片的总量就越少
页表页越小,每个进程需要的页的数目就越多,页表越大
辅存设备页尺寸较大,能实现更有效的数据块传送
缺页中断较为复杂,见下图

在这里插入图片描述

  1. 若页尺寸非常小,那么每个进程在内存中就有较多数量的页,一段时间后,内存中的页都包含有最近访问的部分,因此缺页率较低。
  2. 当页尺寸增加时,每页包含的单元和任何一个最近访问过的单元越来越远,因此局部性原理的影响被削弱,缺页率开始增长。
  3. 当页尺寸接近整个进程的大小时(图中的P点),缺页率开始下降。
  1. 缺页率还取决于给一个进程分配的页框的数量
  2. 对于固定的页尺寸,当内存中的页数量增加是,缺页率会下降。

分段

在这里插入图片描述

  1. P : P: P:所对应的段当前是否在内存中
  2. M : M: M:修改位,表示相应段的内容从上次装入到现在是否已发生改变

在这里插入图片描述

段页式

  • 基本思想:
  1. 用户的地址空间被程序员划分为若干个逻辑段,每一段划分为若干个大小固定的页,页的大小等于内存中的页框大小
  1. 从程序员的角度看:逻辑地址 = 段号 + 段偏移
  2. 从系统的角度看: 段偏移可视为指定段中的一个页号和页偏移
  3. 在一个进程中,段表只有一个,而页表可能有多个(每段一个)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

操作系统软件

读取策略

  1. 读取策略决定某页何时读入内存
    (1)请求分页:只有当访问到某页中的一个单元时才将该页取入内存
    (2)预先分页:读取的页并不是缺页中断请求的页。
  • 预先分页 vs 交换技术:
  1. 预先分页 != 交换
  2. 某个进程被换出内存并置于挂起状态时,它的所有驻留页都会被换出。当该进程被唤醒时,所有以前在内存中的页都会被重新读入内存。

放置策略

  1. 放置策略决定一个进程块驻留在内存中的什么位置
  2. 对于纯分段系统中,放置策略并不是重要的设计问题,最佳适配、首次适配等都可供选择
  3. 对于纯分页系统段页式系统,如何放置通常无关紧要,因为地址转换硬件和内存访问硬件能以相同的效率为任何页框组合执行响应的功能

置换策略*

  1. 置换策略决定在计划置换的页集中,选择换出哪一页
  2. 所有置换策略的目标都是置换出最近最不可能访问的页
  3. 内存中某页页面可能是被锁定的,此时保存在该页框中的页是不能被置换的

在这里插入图片描述
在这里插入图片描述

  • 最佳(OPT)
  1. 置换下次访问距当前时间最长的页
  2. 可以使缺页中断最少,但不可能实现
  • 最近最少使用(LRU)
  1. 置换最长时间未被引用的页
  2. 性能近似于OPT策略,缺点是难以是实现困难,开销大
  • 先入先出(FIFO)
  1. 把分配给进程的页框视为一个循环缓冲区,并按循环方式移动页。
  2. 它只需要一个指针,该指针在页框中循环,因此FIFO是一种实现起来最简单的页面置换策略。
  3. 隐含的逻辑是:置换驻留在内存中时间最长的页
  • 时钟策略(Clock)
    在这里插入图片描述
  • 基本思路:
  1. 当某页首次被装入内存或被访问时,其使用位会被置为1
  2. 置换时,操作系统扫描循环缓冲区,查找使用位置为0的页框;
    (1)每当遇到一个使用位为1的页框,操作系统会将其使用位重新置为0;
    (2)操作系统置换第一个使用位为0的页框中的页,置换后将指针指向被置换页的下一页框
  • 时钟策略的改进: 同时考虑使用位修改位
  1. 为什么要进行改进:
    (1)将被置换的页面写回外存需要进行I/O操作(慢)
    (2)如果被置换的页面没有被修改过,就不需要执行I/O操作写回外存
    (3)除了考虑页面有没有被访问过之外,还应考虑页面有没有被修改过,应当优先淘汰没有修改过的页面,避免I/O操作
  2. 访问位表示下次被访问的可能性,修改位表示置换过程需要的开销大小
    (1) 优先选择访问位 == 0 && 修改位 == 0的页
    (2)其次选择访问位 == 0 && 修改位 == 1的页
    (3)再次选择访问位 == 1 && 修改位 == 0的页
    (4)最后选择访问位 == 1 && 修改位 == 1的页
  3. 执行过程:
    (1)从指针的当前位置开始,扫描页框缓冲区。这次扫描对使用位不做任何修改,选择遇到的第一个页框(u=0,m=0)用于置换
    (2)若第1步失败,则重新扫描,查找(u=0,m=1)的页框。选择第一个遇到的这种页框用于置换。在这一扫描过程中,将每个跳过的页框的使用位置为0
    (3)若第2步失败,则指针回到其最初的位置,且集合中所有页框的使用位均为0。重复第1步,并在必要时重复第2步。这样便可找到供置换的页框
  4. 为什么采用这种置换顺序:
    (1)查找自被取入至今未被修改且最近未访问的页,这样的页最适合于置换,并且由于未被修改,它不需要写回辅存
    (2)若第一次扫描过程中未找到候选页,则算法再次在缓冲区中开始循环,查找最近未被访问但被修改的页,即使这样的页必须先写回,但根据局部性原理,它不会很快又用到
    (3)若第2次扫描失败,则缓冲区中的所有页都被标记为最近未访问,执行第三次扫描
  • 页缓存:
  1. 置换修改过的页比置换未被修改过的页代价要大,前者需要写回辅存
  2. 页缓存是为了提高分页的性能,并允许使用较简单的页面置换策略的一种方法
  3. 不丢弃置换出的页,而是将它分配到以下两个表之一:
    (1) 若未被修改,则分配到空闲页链表中
    (2)若已被修改,则分配到修改页链表中
  4. 该页在内存中并不会物理性移动,移动的只是该页所对应的页表项,移动后的页表项放置在空闲页链表或修改页链表中
  • 优点:
  1. 被置换的页仍然留在内存中,因此若进程访问该页,则可迅速返回该进程的驻留集中,代价很小。
  2. 已修改的页按簇写回,大大减少了I/O操作的次数,进而减少了磁盘访问的时间。

驻留集管理

  • 驻留集的大小
  1. 决定给特定的进程分配多大的内存空间
  2. 分配给进程的内存越少,在任何时候驻留在内存中的进程数就越多,增加了操作系统至少找到一个就绪进程的可能性。
  3. 若一个进程在内存中的页数较少,尽管有局部性原理,缺页率仍相对较高
  4. 给特定进程分配的内存空间超过一定大小后,由于局部性原理,该进程的缺页率没有明显的降低
  • 管理策略:
  • 固定分配策略:
  1. 在内存中为一个进程分配固定数量的页框,以供执行时使用
  2. 一旦进程的执行过程中发生缺页中断,该进程的一页就被它所需要的页面置换。
  • 可变分配策略:
  1. 允许分配给一个进程的页框在进程的生命周期中不断地发生变化。
  2. 可变分配策略要求操作系统评估活动进程的行为,这必然增加操作系统的软件开销。

置换范围

置换范围含义
局部置换仅在产生此次缺页的进程的驻留集中选择
全局置换内存中所有未被锁定的页都被作为置换的候选页

在这里插入图片描述

  • 固定分配、局部范围:
  • 缺点:
  1. 总页数分配的过少会导致缺页率高,系统运行缓慢
  2. 总页数分配的过多会导致内存中进程数目少,处理器空闲时间多,大量时间花费在交换上。
  • 可变分配、全局范围:
  1. 在任何时刻,内存中都有许多进程,每个进程都分配到了一定数量的页框。
  2. 操作系统还会维护一个空闲页框列表,发生一次缺页中断时,一个空闲页框会被加入进程的驻留集,并读入该页。

清除策略

  1. 清除策略用于确定何时将已修改的一页写会内存,有请求式预约式两种
  2. 请求式: 只有一页被选择用于置换时才被写回辅存。
  3. 预约式: 将已修改的多页在需要使用它们所占据的页框之前成批写回辅存。
  1. 预约式清除允许成批地写回页,但这并无太大的意义,因为页中的大部分通常会在置换前又被修改
  2. 对于请求式清除,写回已修改的一页和读入新页是成对出现的,意味着发生缺页中断的进程在解除阻塞之前必须等待两次页传送,这可能会降低处理器的利用率
  • 结合页缓存技术:
  1. 只清除可用于置换的页,但去除了清除和置换操作间的成对关系。
  2. 通过页缓冲,被置换页可放置在两个表中:修改表和未修改表。
  3. 修改表中的页可以周期性地成批写出,并移到未修改表中。
  4. 未修改表中的一页要么因为被访问到而被回收,要么在其页框分配给另一页时被淘汰。

加载控制

  1. 加载控制能够影响到驻留在内存中的进程数量(系统并发度)
  2. 若某一时刻驻留的进程太少,那么所有进程都处于阻塞态的概率就比较大,因此会有许多时间用于交换。
  3. 若某一时刻驻留的进程太多,平均每个进程的驻留集大小就不够用,此时会频繁发生缺页中断,从而导致系统抖动。

在这里插入图片描述

  1. 当系统并发度从一个较小的值开始增加时,由于很少会出现驻留进程被阻塞的情况,因此会看到处理器的利用率增加。但当在到达某一点时,平均驻留集会不够用,此时中断数量迅速增加,从而处理器利用率下降。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_46427273

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值