操作系统知识点复习(2):内存管理

一.内存管理


(一)内存管理的基本概念

贯穿本小节的三个问题“

①为什么要进行内存管理?

②页式管理中每个页表项的大小的下限如何决定?

见(三)2.1 ,(4)小节部分

③多级页表解决了什么问题?又会带来什么问题?

见(三)2.1,(6)小节部分
解决:页表过长占用较多内存空间
问题:访存次数增加

0.内存管理

内存管理——操作系统对内存的划分和动态分配

  • 内存空间的分配与回收
  • 地址转换:解决逻辑地址和物理地址不一致的问题
  • 内存扩充:虚拟存储技术或自动覆盖技术
  • 存储保护:各道作业的独立运行

为什么进行内存管理?

–虽然内存容量已经在不断增长,但是也不可能将所有用户进程和系统所需要的全部程序和数据放入主存中。

1.从源程序到进程:程序装入和链接

  1. 创建进程首先要将程序和数据装入内存,将用户源程序变为可在内存中执行的程序,有以下步骤:
    • 编译:编译程序将用户源代码编译成若干个目标模块。
    • 链接:由链接程序将编译后形成的一组目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。
    • 装入:由装入程序将装入模块装入内存运行。

在这里插入图片描述

  1. 程序的链接方式

    名称 链接时机 说明
    静态链接 链接环节 程序运行之前,已经将各个目标模块以及库函数链接成一个可执行程序
    装入时动态链接 装入环节 在装入内存的时候,将各个模块边链接边装入
    运行时动态链接 程序运行的时候 某些目标模块,只在程序运行需要的时候才进行链接;便于修改和更新,便于实现对目标模块的共享。
  2. 模块的装入方式

    名称 装入时机 说明 特点
    绝对装入 装入环节 在编译的时候,已知程序在内存中驻留的地址,编译程序会直接产生绝对地址的目标代码,则可以直接装入 只适合单道程序环境
    可重定位装入 装入环节 多道程序环境下,目标模块的地址通常都是以0开始的相对地址,但是放进内存时,需要根据当前内存使用情况改成实际地址,在装入时对目标程序中指令和数据进行修改
    地址变换是在装入时一次完成
    重定位:对目标程序中指令和数据的修改过程;
    一个作业装入内存必须得到要求的全部内存,一旦装入内存,运行期间也不能在内存中移动和重新申请空间
    动态运行时装入 程序执行的时候 装入模块装入内存的时候,相对地址还没有转换成绝对地址;在真正要执行的时候,通过重定位寄存器获得当前可用内存首地址,再进行地址的转换 可以将程序分配到不连续的存储区中
    程序运行之前可以只装入部分代码就可以运行
    程序运行期间可以根据需要动态申请内存
    可以给用户提供一个大于存储空间的地址空间

2.逻辑地址空间与物理地址空间

①逻辑地址空间:一个程序块内部各个语句块的相对地址,首语句从0号地址开始编址。比如说编译后得到的各个目标模块都是从0号单元编址,目标模块中的地址就是逻辑地址。用户程序和程序员都只知道一段程序中的逻辑地址,对于内存管理具体机制是透明的。

②物理地址空间:内存中物理单元的集合,是地址转换的最终地址。进程在运行时,执行指令和访问数据最后都要通过物理地址从主存中存取。

③(复习一遍)地址重定位:在装入程序将可执行代码装入内存的时候,需要通过地址转换将逻辑地址转换成物理地址。——发生在静/动态重定位装入的时候。

3.内存保护

  1. 内存保护的原因:在对一个可执行程序进行内存分配的时候,需要保护操作系统不受用户进程的影响,保护用户进程不受其他用户进程的影响。
  2. 内存保护的方法:
    • 在CPU中设一对上、下限寄存器,存放用户作业在主存中的上下限地址,CPU需要访问一个地址的时候就要和两个寄存器的值比较是否越界。
    • 采用重定位寄存器(基址寄存器)+界地址寄存器(限长寄存器);每次要装入某一程序时,先将程序的最大逻辑地址与界地址寄存器进行比较,如果未越界,就通过重定位寄存器获得相应的物理地址。(起始逻辑地址+重定位寄存器值=物理地址)

(二)覆盖与交换


技术名称 基本思想 说明
覆盖 将用户空间划分为固定区和若干个覆盖区,将程序中经常活跃的代码放在固定去,其余部分按照调用关系分成段,把即将要访问的段放入到覆盖区中,其余的放在外层,在需要调用时再调入覆盖区。 若同时运行的程序的代码量大于主存容量时覆盖是不可行的
交换 换出:把处在内存中但是为等待状态的程序移到外存中
换入:准备好竞争CPU运行的程序从外层移入内存
进程管理中的中级调度就是采用了交换技术;
交换需要备份存储;
进程执行时间应该比交换时间要长才能有效使用CPU;

(三)内存分配方式


1.连续分配管理方式

  1. 单一连续分配

    • 机制:内存=系统区(OS专用,低地址区)+用户区
    • 缺点:只适用于单道程序环境,有内部碎片,存储器利用小懒虫低。
    • 优点:可以采用覆盖技术,因为是单用户单任务所以不需要内存保护,永远只有一道程序。
  2. 固定分区分配

    • 机制:将用户内存空间划分成多个固定(注意,这里固定是确定的意思,并不是每个都相等的意思)大小的区域,每个分区只装入一道作业,当有空闲分区的时候,再从外存的后备作业队列中选择适当大小的作业装入该分区。

    • 数据结构:通常需要建立一张分区说明表,记录分区的起始地址、大小和状态(是否已分配)

    • 固定分区分配的分区划分的技术

      • 分区大小相等:可控制多个相同对象的场合
      • 分区大小不等:多个小分区,适量中分区和少量大分区
    • 评价:
      缺点:程序太大以至于放不进任何一个分区的时候,只得使用覆盖技术;主存利用率低,存在内部碎片。

      优点:最简单的多道程序存储分配技术,无外部碎片

  3. 动态分区分配(可变分区分配)

    • 概述:不预先将内存进行划分,在进程装入内存的时候,根据进程的大小动态地建立分区,系统中分区的大小和数目均为可变的
    • 机制:若当前内存中有空闲,则直接将对应的进程块放入内存,否则会基于某种策略对内存和外存的程序进行换入换出操作:
      • 首次适应算法(First Fit):空闲分区以地址递增的次序链接,分配内存的时候按顺序查找,找到大小能满足要求的第一个分区。是所有策略中最好的也是最快的,也是最简单的。
      • 最佳适应(Best Fit):空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区
      • 最坏适应(Worst Fit):最大适应算法,空闲分区以容量递减的次序链接,找到第一个能满足要求的空闲分区。
      • 邻近适应算法(Next Fit):循环首次适应算法,由首次适应算法演变而成,不同之处就是分配内存时从上次查找结束的位置开始继续查找

在这里插入图片描述

2.非连续分配管理方式

非连续分配允许一个程序分散地装入到不相邻的内存分区中,当然这也需要额外的空间去存储它们的索引(分散区域),使得非连续分配方式的存储密度低于连续存储方式。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KLSJ2mGz-1593314731438)(C:\Users\Dell\AppData\Roaming\Typora\typora-user-images\image-20200624171415915.png)]

2.1基本分页存储管理方式

(1)思想:把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时以块为单位逐个申请主存中的块空间

(2)特点:基于“内存的使用能尽量避免碎片的产生”的思想,引入分页的技术。

(3)相关术语和概念:

  1. 页:进程中划分的块;页框:内存中的块;块:外存中的块划分;
    进程在执行的时候需要申请主存空间,就是要为每个页面分配主存中的可用页框,产生了页和页框的一一对应。
    页面大小一般是2的整数幂,页面大小应该适中。

  2. 地址结构:页号P+页内偏移量W,地址长度共32位,则0-11位是页内地址,每页有4KB大小;12-31位就是页号,地址空间最多有2^20页。

地址结构决定了虚拟内存的虚拟寻址空间有多大

  1. 页表与地址:为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程都建立了一张页表,记录进程中的每一个页面对应的物理块号;页表一般存放在内存中。
结构名称 第一部分 第二部分
地址 页号 页内偏移
页表项 页号 物理内存中的块号

配置了页表之后,在进程执行的时候,通过查找页表可以找到每页在内存中的物理块号。页表的实际作用就是实现从页号到物理块号的地址映射。

(4)基本地址变换机构

  1. 基本任务:借助页表将逻辑地址转换为物理地址

  2. 变换机制:系统中设有一个页表寄存器PTR,用于存放页表在内存中的起始地址F和页表长度M。进程还未执行的时候,页表的起始地址和长度存放在进程的进程控制块中,当进程执行时,再将始址和长度存在PTR中。

  3. 变换过程:设页面大小为L,逻辑地址为A,物理地址为E

  • 计算页号P(P = A/L),页内偏移地址W(W = A%L)

  • 比较页号P和页表长度M,若P≥M,则产生越界中断,否则继续执行。[页号是从0开始的]

  • 页表中页号P对应的页表项地址=页表起始地址F+页号Px页表项长度,得到对应的页表项地址后,取出该页表项内容b,就是对应的物理块号

  • 计算E=b x L+W,用得到的物理地址E去访问内存

[^P.S.]①上述地址变换过程都是由硬件自主完成的
②页式管理中地址空间是一维的,只需要给出一个整数就能确定对应的物理地址,因为页面大小L是固定的。

  1. 评价:①每次访存都需要进行逻辑地址到物理地址的转换,且地址转换的郭晨必须足够块,否则访存速度会降低②每个进程都引入了页表,用于存储映射机制,页表不能过大,否则会降低内存利用率。

(5)具有快表的地址变换机构

  1. 背景:由前文的分析可知——使用基本的地址变换机构,页表全都放在内存中,那么每次取一个数据或一条指令需要访问两次内存(访问页表+访问物理地址);因为在地址变换机构中设一个具有并行查找能力的高速缓冲(TLB),用来存放当前访问的若干页表项,对应主存中存放的页表就称为慢表。

  2. 地址变换过程

  • 在CPU给出逻辑地址后,由硬件进行地址转换并将页号送到TLB中,将当前页号和快表中的所有页号进行比较

  • 找到匹配的页号,就说明要找的页表项在快表中,可以直接从快表中取出该页对应的页框号,和页偏移量拼接形成物理地址。这样只需要一次访问内存就可以取到数据。

  • 但若在快表中未找到,说明需要访问主存中的页表,在读出页表项之后,应同时将其存入快表,以便后面可能的再次访问;若快表满了,则需要按照一定的算法对旧的页表项进行替换。

(6)两级页表——延伸页表建立的思想,对页表的页表进行映射

  1. 背景:假设要将逻辑空间中的所有页进行映射,那么需要(2^20x4B)4MB的主存空间,不实际;那么对于一般地逻辑地址空间(40MB)较大的进程而言,有页表项40MB/4kB*4B=40KB的页表项大小,将这些页表项全都存放在内存中,那么10个页框,但是40MB的程序在运行时一次最多也只有几十个页面同时装入,所以相比起来内存利用率还是较低。

  2. 策略:引入页表的时候是希望可以不用一次性申请一大片连续的地址空间存放程序与数据,引入二级页表的目的也是希望可以不用一次连续地存入所有的页表数据。如果不把页表连续的存放,(此时光始址和长度已经无法唯一地对页表项进行定位了)那么就需要额外建立一个索引表

  3. 机制:为了查询方便,顶级页表要求最多只能有1个页面,那么顶级页表最多只能容纳4KB/4B=1K个页表项,则在顶级页表内的表内偏移地址占据的位数为log1K = 10位,之前计算过页内的偏移为12位,则32位的逻辑地址空间划分如下:10+10+12

一级页号 二级页号 页内偏移

2.2基本分段存储管理方式

“分页管理方式是从计算机得到角度考虑设计的,以提高内存的利用率,提升计算机的性能;分页是通过硬件机制实现的,对用户完全透明;但是分段管理方式主要考虑的是用户和程序员,满足编程、信息保护和共享、动态增长及动态链接的需要”

(1)基本概念

  1. 分段:按照用户进程中的自然段划分逻辑空间;若用户进程由主程序、两个子程序、栈和一段数据组成那么就可以把用户进程划分成5个段,每一段都是从0开始编址的,并且段内分配连续的地址空间,段间不要求连续。
  1. 地址结构:32位的逻辑地址空间中,段号为16位,段内偏移量也是16位,一个作业最多可以有2^16=65536个段,最大的段长是64KB
31…16 15…0
段号S 段内偏移量W
  1. 段表:每一个进程同样需要配备一张表,称为段表,段表是记录进程中的逻辑地址到内存空间的映射。
段号 段长 本段在主存的起始地址

段表项和页表项的构成不太相同,因为分页管理每一页的大小是确定的,因此页号就唯一地标注了页的起始、终止地址;但是段式管理每一段的大小不尽相同,因此段表中必须注明该段的起始地址

(2)地址变换机构

  1. 段表寄存器:存放的是段表始址F和段表长度M

  2. 转换过程:

  3. 从逻辑地址A中取出前16位为段号S,后16位段内偏移量W,一般地址多以二进制给出

  4. 比较段号S和段表长度M,如果S≥M,产生越界中断,否则继续执行

  5. 段号S所对应的段表项地址=段表始址F+段号S*段表项长度;(注意,这里有二次比较),找到对应的段表项之后,取出段长C,如果偏移量W≥C,则产生越界中断,否则继续执行

  6. 取出段表项中该段的起始地址b,计算E=b+W,用得到的物理地址E去访问内存。

(3)段的共享与保护

  1. 存取控制保护
  2. 地址越界保护,地址越界保护的详细过程都写在上面了,一是段表长度判断,二是段长判断。

2.3 段页式管理方式

(1)基本概念

  1. 段页式管理就是结合了段式管理(方便对段进行共享)和页式管理(提高内存利用率)的优点

  2. 地址结构:作业的地址空间首先划分成若干个逻辑段,每个段都有自己相应的段号,再将每一个段根据页面的大小划分成若干页面;对内存空间的管理仍然和分页存储管理一样,将内存空间分成若干和页面大小相同的存储块,对内存空间的分配也是以块为单位。
    作业的逻辑地址空间=段号+页号+页内偏移

段号S 页号P 页内偏移量W

(2)地址变换机构

  1. 段表:为每个进程建立一张段表,存储了当前段的段号,段长以及在内存中的段对应页表的始址
  2. 页表:因为每一个段会继续划分成页,所以每一段会对应一个页表,页表中就包含了段中各个页所对应的页号和块号
  3. 段表寄存器:指出作业的段表始址和段表长度;页表寄存器:存放页表的始址和页表的长度
    段/页表寄存器的作用:①寻址②越界判断

在这里插入图片描述


二.虚拟内存管理


(一)虚拟内存的基本概念

  1. 传统存储管理方式的特征
    上述内存管理机制引入的动机:为了同时将多个进程保存在内存中,以便允许多道程序设计
    但是这些内存管理机制具有以下特点:

    1. 一次性:需要一次性将作业全都装入内存,才能运行。若作业过大无法装入,程序无法运行;若大量作业要求运行但内存容量不够,则多道程序度下降。

    2. 驻留性:作业被装入内存后,一直驻留在内存中,直到作业结束前,作业的任何部分都不会换出,若运行的进程要等待某个I/O操作,会处于忙等待。

  2. 局部性原理

    高速缓存技术:诸如快表、页高速缓存,虚拟内存技术

    高速缓存技术依赖的是局部性原理,局部性原理既适用于数据结构,也适用于程序结构。

    局部性原理表现在以下两个方面:

    1. 时间局部性:程序中正在执行或访问的某条指令或数据,不久后很可能再次被执行或访问。
      原因:程序中存在大量循环操作
    2. 空间局部性:程序在一段时间内所访问的地址,可能集中在一定的范围之内。
      原因:指令通常是顺序存放和执行的,数据也常常以向量、数组、表的形式聚在一起。

    针对局部性原理可以做的硬件改善:

    时间局部性:将最近使用的指令和数据保存到告诉缓存中,使用高速缓存的层次结构来实现

    空间局部性:使用较大的告诉缓存,将预取机制集成到告诉缓存控制逻辑中

    虚拟内存技术本质上:建立了“内存-外存”的两级存储器结构,利用局部性原理实现高速缓存。

  3. 虚拟存储器的定义和特征

    1. 虚拟存储器的定义:系统对内存提供了部分装入(程序装入时值装入其中一部分)、请求调入(把运行需要的部分程序调入内存)和置换(把内存中暂时不使用的部分换成到外存上)功能,如此,似乎给用户提供了一个比实际内存空间更大的存储器,这个就称为虚拟存储。
    2. 虚拟存储器具有的特征:
      • 多次性:程序和作业可以被分成多次依次调入内存
      • 对唤醒:部分作业可以在作业运行的过程中进行换入和换出
      • 虚拟性:从逻辑上扩充内存的容量
  4. 虚拟存储技术的实现

    如果要实现虚拟存储的技术,必须要借助离散分配的内存管理机制,而不是连续的内存分配机制。

    因为采用连续的内存分配技术的话,内存中会有一部分的内存空间暂时或长期处于空闲不得用的状态。
    我的理解是:在对空间进行连续分配的时候,会出现很多碎片,下次连续分配的时候无法再使用。

    ①虚拟内存实现方式

    1. 请求分页存储管理
    2. 请求分段存储管理
    3. 请求段页式存储管理

    ②硬件支持

    1. 一定容量的内外存
    2. 页表机制(段表)
    3. 中断机构(请求调入的时候是通过中断的方式)
    4. 地址变化机构(逻辑地址到物理地址的变换)

(二)请求分页管理方式

请求分页管理 = 基本分页系统 + 请求调页功能+页面置换功能

在请求分页系统中,只需要将当前需要的一部分页面装入内存,便可以启动作业运行。在作业执行过程中,当所要访问的页面不存在的时候,就可以通过调页功能将其调入,同时还可以通过置换功能将暂时不用的页面换出到外存。

  1. 页表机制
    比起基本的分页机制,请求分页的管理还需要处理两个重要问题:如何发现要访问的页面不在内存的情况?如何处理要访问的页面不在内存的情况?

    页号 物理块号 状态位 访问字段 修改位 外存地址
    • 状态位P:用于指示该页是否已调入内存,供程序访问的时候进行参考
    • 访问字段A:记录本页在一段时间内被访问的次数,记录本页最近已有多长时间未被访问,供置换算法换出页面时参考
    • 修改位M:标识该页在调入内存后是否被修改过
    • 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时进行参考
  2. 缺页中断机构

    • 基本过程:在请求分页系统中,每当所要访问的页面不在内存的时候,便会产生一个缺页中断,请求操作系统将所缺的页调入内存。此时如果内存还有空闲块,直接调入并修改页表项;否则先将某页进行换出(换出的页若在内存期间被修改过,则要重新写回外存)
    • 缺页中断作为中断,也具有以下过程:保护CPU环境、分析中断原因、转入缺页中断处理程序、恢复CPU环境等。
    • 缺页中断和一般中断相比,具有以下特点:属于内部中断,在指令执行期间产生和处理中断信号;一条指令执行期间可能产生多次缺页中断。
  3. 地址变换机构

在这里插入图片描述

(三)页面置换算法

在请求分页管理方式中,若当前需要访问的页面不在内存中且内存已经没有空闲空间的话,就需要从内存中调出一页程序或者数据,送入磁盘的对换区。

页面置换算法:选择调出页面的算法

一个较好的页面置换算法会给整个请求分页系统带来较低的页面更换频率。所以应该将以后不会再访问或在较长时间内都不会再访问的页面先调出。

  1. 最佳置换算法(OPT)

    • 最佳置换算法就是选择的被淘汰的页面是以后最长时间内不再被访问的,这样可以保证获得最低的缺页率。
    • OPT需要预先知道进程在内存下的若干个页面的调度情况,因此OPT无法实现,只是用来评估其他算法。
    • 注意OPT中的淘汰的标准是“最长时间不被访问”,这个和后文会讲到的“访问次数最小”是有区别的。
  2. 先进先出页面置换算法(FIFO)

    • FIFO采取的是最先进入内存的进程最先淘汰,只需要将调入内存的页面按照先后次序链接成一个队列即可。
    • FIFO不太符合进程运算的规律,所以缺页率较高。且FIFO还会出现Belady异常现象。
    • Belady异常:分配的物理块数增大而页故障数不减反增,只有FIFO会出现Belady异常
  3. 最近最久未使用(LRU)

    • LRU就是借助页表项中的访问字段,将过去一段时间未访问过的页面进行淘汰

    • LRU的性能较好,但是需要寄存器和栈得到硬件支持。LRU是堆栈类算法。

      理论可证,堆栈类算法不可能出现Belady异常。

  4. 时钟置换算法(CLOCK)

    时钟算法是想要用最小的开销接近OPT性能的页面置换算法类中的一种,也称为最近未使用(NRU)算法。

    ①简单的CLOCK算法:

    • 数据结构:给每一个帧关联一个附加位,称为使用位,当某一页首次装入内存或者随后再次被访问,使用位都会置1。
    • 循环缓冲区:页替换算法选择替换候选帧的一个集合,每当需要替换一页的时候,操作系统扫描缓冲区,查找使用位被置为0的那一帧,每当遇到使用位为1的帧,操作系统就将这个位置为0;
      按照上述的描述,如果所有帧均为1,那么指针在缓冲区中完整地循环一周,把所有位都设置为0又回到最初的位置上。如果所有帧均为0,那么就选择遇到的第一个帧。

    ②改进的CLOCK算法:

    • 数据结构:使用位u+修改位m
      1. 最近未被访问,也未被修改,u,m=0
      2. 最近被访问但未修改,u=1,m=0
      3. 最近未被访问,被修改u=0,m=1
      4. 最近被访问且修改 u,m=1
    • 算法执行步骤:
      1. 从指针当前位置开始扫描缓冲区,先选择u,m=0(未使用且未修改过)的页面,在这个过程不对使用位做变化
      2. 第一步若未查找到,则重新扫描,查找(u=0,m=1)虽然未使用但是修改过的帧,且对于每个跳过的帧,将使用位转化为0;
      3. 若第二步也查找失败,那么再次重复第一步(若需要的话也或重复到第二步),因为此时所有的帧的使用位都已经置为0,所以总能找到

    ③比较:

    1. 简单版的CLOCK算法只是考虑页面是否访问过
    2. 但是改进版的CLOCK算法将使用过的页面按照是否修改过进行划分,优先替换没有修改过的页面,可以节省写回的时间。

(四)页面分配策略

  1. 驻留集大小:也就是考虑每一个进程能够分配得到内存的页面大小。
    驻留集大小和驻留在主存中的进程数目是呈反比的,在合理的趋势下是可以提高处理机的时间利用效率。

    • 驻留集过小,缺页率相对会较高
    • 驻留集过大,由于局部性原理对于进程的缺页率没有较大改善且降低了进程的并发度

    基于上述因素,现代OS中往往采取以下三种策略

    比较项 固定+局部 可变+全局 可变+局部
    进程的物理块数 数目一定,不改变 数目初始一定,后续可在空闲物理块队列中进行增加分配 初始一定,系统根据进程的缺页情况动态增减
    置换机制 每个进程只能在自己驻留在内存中的物理块中进行置换 系统从空闲物理块队列中取出物理块进行分配 只能在自己驻留在内存的而部分置换,但是自己驻留的大小动态改变
    评价 物理块数大小难以确定 盲目为进程增加物理块数降低并发能力 在降低了缺页率的情况下也保持了系统的多道程序并发能力,但是实现更加复杂,开销也更大
  2. 调入页面的时机

    1. 预调页策略:根据局部性原理,一次调入若干相邻页,但是成功率只有50%,多用于首次调入进程,由程序员自主确定调入的页面。
    2. 请求调页策略:当发生缺页再提出请求。
  3. 从何处调入

    • 请求分页系统中的外存构成=文件区+对换区
      文件区采取的是离散分配方式,对换区采取的是连续分配方式,由此可知,对换区进行IO的速度要更快。
    • 调入页面的三种方式
      1. 系统拥有足够对换区空间:全部从对换区调入所需页面,提高IO速度,在进程运行前,就将与进程有关的文件从文件区复制到对换区
      2. 缺少足够对换区空间:不会被修改的文件直接从文件区调入,对于可能被修改的部分,要从对换区进行换出和调入。
      3. UNIX方式:首次调入都从文件区,但是运行过后备换出的页面就放在对换区

(五)抖动

  1. 定义:频繁的页面调度行为,如刚刚换出的页面马上换入主存,刚刚换入的页面马上换出。
  2. 原因:其中一个主要原因在于某个进程频繁访问的页面数目高于可用的物理页帧数目。

(六)工作集

  1. 工作集(驻留集):在某段时间间隔内,进程要访问的页面集合。经常要使用的页面应该放在工作集中,长期不被使用的页面要从工作集中被丢弃。

  2. 工作集模型的原理:让OS跟踪每个进程的工作集,为进程分配大于其工作集的物理块;若有空闲的物理块,可以考虑增加进程;如果所有进程的工作集之和超过了可用物理块数,那么系统就要咋听一个进程。

    正确地选择工作集的大小,对于存储器的利用率和系统吞吐率的提高,将产生重要影响。


三.参考文档

《王道2019年操作系统考研复习指导》

猜你喜欢

转载自blog.csdn.net/kodoshinichi/article/details/106995428