操作系统原理与Linux实践教程【第四章 存储管理】

4.1 存储器层次

存储管理的功能:

  • 内存分配和回收
  • 内存抽象和映射
  • 存储隔离和共享
  • 存储扩充

目前,计算机采用的是层次结构存储系统
在这里插入图片描述
主存储器: 操作系统存储管理的主要对象,是进程活动的重要场所。主存容量大,可以同时容纳多个进程。OS需要对内存分块管理。I/O操作也依托于主存。

磁盘和磁带存储的信息可长期保存。磁盘和磁带被看做I/O设备,属于设备管理的范畴。又由于磁盘和磁带是软件信息的主要存储场所,因此文件管理也会涉及磁盘及磁带空间的管理。

4.2 地址重定位、存储保护和存储共享

1.逻辑地址与物理地址

地址重定位或地址变换: 在执行程序时,将其中的逻辑地址转变为物理地址的过程。

逻辑地址是与程序在内存中的物理位置无关的访问地址。

在执行对内存的访问之前必须把逻辑地址转换为物理地址。
在这里插入图片描述

物理地址是程序运行时中央处理器实际访问的内存单元地址。

相对地址是逻辑地址的一个特例,是相对于已知点(通常是程序的开始处)的存储单元。

逻辑地址或相对地址也称为虚拟内存地址。

逻辑地址空间:一个用户作业的目标程序的逻辑地址集合称为该作业的逻辑地址空间。

物理地址空间:主存中实际存储单元的物理地址的总体构成用户程序实际运行的物理地址空间。
在这里插入图片描述
在这里插入图片描述
2.静态重定位和动态重定位

静态重定位

  • 概念:根据程序所装入的内存位置由装入程序依据重定位信息一次性将程序中所有的逻辑地址转变为物理地址,然后程序开始执行,这种重定位方式称为静态重定位(可重定位装入方式)。
  • 特点:静态重定位无须硬件支持,易于实现。静态重定位不允许程序在内存中移动位置。

动态重定位

  • 概念:**地址转换工作穿插在指令执行的过程中,每执行一条指令,CPU对指令中涉及的逻辑地址进行转换,**这种重定位方式称为动态重定位(动态运行时装入方式)。
  • 特点:动态重定位必须借助硬件地址转换机构实现。动态重定位允许程序在内存中移动位置。

动态重定位的具体操作:
程序装入内存后,其中的逻辑地址保持不变,程序内存的起始地址装入到硬件专用寄存器——重定位寄存器中。

地址变换公式:物理地址=逻辑地址+内存始址

重定位寄存器数目、程序地址结构、程序物理内存空间连续性:

  • 重定位寄存器可以有多个,分别用于程序段、数据段以及堆栈段等的重定位。
  • 这意味着程序地址结构是二维的,包括段地址和段内偏移。
  • 程序所在物理内存空间可以是离散的,不必连续。

在Intel x86 CPU中,CS、DS、ES、SS、FS、GS段寄存器即起到重定位寄存器的作用。

重定位寄存器与进程切换:
重定位寄存器内容是进程上下文的一部分,进程切换时,重定位寄存器内容要一并切换。

重定位寄存器的信息通常保存在进程控制块中。进程上下文切换时,当前运行进程的重定位寄存器的内容及其它信息保护在进程控制块中,新进程重定位寄存器的内容及其它信息从其进程控制块中恢复,进程从断点开始继续执行。

3.存储保护

存储保护包括:

  • 地址越界保护:对进程执行时所产生的所有主存访问地址进行检查,确保进程仅访问自己的主存区,这就是地址越界保护。各道程序只能访问自己的主存区而不能跳转到另一个进程中,尤其不能访问操作系统的任何部分。
  • 信息存取保护:进程访问分配给自己的主存区时,系统要对访问权限进行检查,如检查是否允许读、写、执行等,从而确保数据的安全性和完整性,防止有意无意的误操作而破坏主存信息,这就是信息存取保护。

4.存储共享
当多个进程执行一个程序,或者多个进程合作完成同一个任务需要访问相同的数据结构时,内存管理系统都要提供存储共享机制,以对内存共享区域进行受控访问

4.3 连续存储管理

一、固定分区存储管理

连续存储管理:连续存储管理对每个进程分配一个连续的存储区域。

目前流行的存储管理技术:基于分页和分段的虚拟存储管理系统。

连续存储管理包括:固定分区存储管理、可变分区存储管理

1.固定分区存储管理方案
固定分区存储管理将内存空间划分为若干个位置和大小固定的连续区域,每一个连续区域称为一个分区,各分区大小可相同,也可不同。

分区划分的时机和划分的数目:由系统操作员和操作系统初始化模块在系统开机启动时,根据当天作业情况把主存划分成大小可以不等但位置固定的分区。

固定分区方案的缺点:
(1)分区数目和大小在系统启动阶段已经确定,限制了系统中活动进程的数目,也限制了当前分区方案下可运行的最大进程。
(2)当分区长度大于其中进程长度时,造成存储空间浪费。

内部碎片:由于进程所在分区大于进程大小而造成的分区内部浪费部分称为内部碎片。

2.固定分区存储管理的数据结构
有分区号,起始地址, 长度,占用标志
在这里插入图片描述

3.固定分区存储管理的地址转换
在这里插入图片描述

4.作业进入固定分区排队策略
在这里插入图片描述
**每个分区一个调度队列:**其优点是减少了分区内部空间的浪费;缺点是可能造成各个分 区使用忙闲不均,一些能够装入进程但并不是最小的分区即使闲置也不能分配给正在等待较小分区的进程,存储器利用率不高

二、可变分区存储管理

可变分区存储管理方法:按照作业的大小划分分区,划分的时间、大小和位置都是动态的,属于一种动态分区方法。

1.可变分区分配及回收方法
在这里插入图片描述
可以采用压缩技术合并相邻空闲区,但是压缩技术很耗时间,浪费处理器时间,而且系统需要具备动态重定位的能力

2.内存分配数据结构
在这里插入图片描述

分区表:空闲分区表、已分配分区表

分区分配方法:从空闲分区表中找出足够容纳进程的空闲区,将该区一分为二。一部分用来装入作业,成为已分配区,并将其大小和起始地址登记在已分配区表中。另一部分作为空闲分区,修改空闲分区表中原空闲区的大小和起始地址。

分区分配演示:
在这里插入图片描述

内存回收方法:将作业所在分区作为空闲区登记在空闲分区表中,并考虑该空闲分区与相邻空闲分区的合并问题,同时从已分配区表中删除该区对应的表项。

分区链:空闲分区链、已分配区链

空闲分区链:空闲区开头单元存放本空闲区长度及下个空闲区起始地址,把所有空闲区都链接起来,设置头指针指向第一块空闲区。链表中的空闲区按照大小或分区地址有序排列。
在这里插入图片描述

3.可变分区分配算法
(1)最先适应分配算法(首次适应算法):从链首顺序查找,找到第一个满足要求的分区即行分配。
(2)下次适应分配算法(循环首次适应算法):每次不从链首顺序查找,而是从上次找到的空闲分区的下一个空闲分区开始查找。
(3)最优适应分配算法(最佳适应算法):每次从链首查找,直到找到一个能够满足要求的最小分区。但是空闲分区需按大小顺序链接。容易产生碎片。
(4)最坏适应分配算法:扫描整个空闲分区链,总是挑选一个最大的空闲区分割给作业使用。减少碎片产生。
(5)快速适应分配算法:为那些经常用到的长度的空闲区设立单独的空闲分区链表。

4.地址转换与存储保护
在这里插入图片描述

三、伙伴系统

伙伴系统:也称为buddy算法,是固定分区和可变分区折中的主存管理算法,由Knuth在1973年提出。
伙伴系统采用称为伙伴的可以分割、合并的不同规格的内存块作为分区单位。

1.伙伴的概念:两个大小相等且由同一个尺寸为2i的空闲块分割而来的内存块互为伙伴。
在这里插入图片描述

2.伙伴系统内存分配与回收

分配:运用伙伴系统分配内存空间的过程是一个对空闲内存区不断对半切分,直到切分出的内存块为大于或等于进程大小的最小伙伴为止的过程。

回收:伙伴系统回收内存的过程是不断将相邻空闲伙伴合并为更大伙伴单位,直到伙伴不空闲,无法合并为止的过程。

伙伴系统内存分配:
在这里插入图片描述

伙伴系统数据结构设计:
在这里插入图片描述

四、主存不足的辅助存储管理技术

主存不足问题解决:移动技术(主存紧凑)、交换技术、覆盖技术

1.移动技术(主存紧凑)

  • 方法:移动内存作业,合并小的空闲分区为大的空闲分区,使之满足新来的作业。
  • 细节:作业移动后,需修改作业基址/限长值
  • 缺点:开销大,执行设备输入/输出操作等原因被锁定的内存区不能移动。
  • 现状:现代操作系统已经采用离散内存分配技术,作业可就地分配到若干离散内存区,无需移动作业,合并空闲内存区。

2.对换技术

  • 方法:为平衡系统负载,将某些进程暂时移出到磁盘,同时将磁盘中的某个进程换进主存,使其投入运行,这种互换称为对换。
  • 换出进程的选择:对换时,把时间片耗尽或优先级较低的进程换出,因为短时间内它们不会投入运行。
  • 应用:用于实现虚拟存储管理技术,在内外存之间对换进程的全部或部分内容,平衡系统负载或者从逻辑上扩充内存空间。

3.覆盖技术

  • 思想:一个程序的若干个程序段,或几个程序的某些部分分时共享某一个存储空间,逻辑上扩充了内存空间。程序无需全部装入即可运行,从某种程度上实现了小容量内存上运行较大程序的功能。
  • 缺点:程序员需要自行规定程序片段的覆盖关系,加重程序员管理内存的负担。

4.4 分页存储管理

一、分页存储管理方案

存储管理分类:

  • 连续存储空间管理:固定分区和可变分区
  • 离散存储空间管理:分页和分段

1.页框和页

页框又叫物理块,分页存储管理将全部内存划分为长度相等的若干份,每一份称为一个物理块或页框。

页又叫做页面,作业自动被分页系统划分为与每个物理块相等的若干等份,每一份称为一页或一个页面。
在这里插入图片描述

分页系统存储分配方法:一个作业的任一页可以装入到内存任一空闲物理块,并不要求逻辑上相邻的页所在内存物理块也相邻。

进程的分页离散存储:
在这里插入图片描述

2.分页存储管理的地址结构
在这里插入图片描述

页号和页内地址算例:
若页面大小设置为4KB,地址总线宽度为32位,求:页内位移位数和页号位数
在这里插入图片描述

3.分页存储管理的地址变换

每个作业/进程都在内存中占有离散的物理块,系统如何知道哪个物理块属于哪个作业/进程呢?为解决此问题,操作系统需为每个作业建立一张页表,该表登记该作业的页号-物理块号对应信息

由于页内位移和块内位移相同,分页存储管理的地址变换演变为页号到物理块号的映射,即根据页号获得物理块号
在这里插入图片描述

页表
页表用于实现地址变换,页表记载了逻辑地址到物理地址的对应关系,操作系统需为每个作业建立一张页表,系统通过页表可以准确访问内存中属于一个作业的所有页面。

进程页表实例:
在这里插入图片描述

4.分页地址变换的硬件支持

分页存储管理采用动态重定位技术,重定位寄存器的设置方法有两种:

  • 第一种是为每个页面设立一个重定位寄存器,整个页表放在重定位寄存器中,造价较高。
  • 第二种方法是把页表存放在内存,系统另设一个页表始址寄存器和长度控制寄存器用来存放当前运行作业的页表始址和页表长。当前占有处理器的进程是页表寄存器的使用者,一旦进程出让了处理器,同时也应出让页表寄存器。

分页存储管理地址变换过程:
在这里插入图片描述

分页地址变换实例:
若页面大小设置为4KB,地址总线宽度为32位,则页内位移位数为12位,页号位数=32-12=20,逻辑地址60000在第几页?页内偏移是多少?
若该页被装进物理块1280中,则物理地址是多少?
在这里插入图片描述

二、快表

1.引入快表的原因
页表放在内存中降低了程序执行的速度
CPU每存取一个指令/数据时,需要两次访问内存
第一次访问页表取得物理块号以形成物理地址
第二次根据物理地址存取指令/数据,速度降低了一倍

CPU存取一个指令/数据时,两次访问内存的过程:
在这里插入图片描述

块表
为了减少分页存储管理系统中的内存访问速度下降一倍问题,在存储管理部件中增设一个专用的高速缓冲存储器,用来存放最近访问过的部分页表项,这种高速缓冲存储器称为快表或联想存储器。

Intel 80486的快表为32个单元

2.快表的使用

有了快表,根据页号查找对应的物理块号时,首先查找快表中的局部页表,若找到则将物理块号和页内地址(也是块内地址)拼接形成物理地址,根据该物理地址访问相应的内存单元。

若在快表中未找到物理块号,则再查找内存页表,获取物理块号,一方面形成物理地址,另一方面将该表项抄到快表中,以备下次再次访问该页面时从快表中获得物理块号。

查快表和查内存页表是同时进行的,一旦从快表中找到了对应项,则立即停止对内存页表的查找。

具有快表的分页地址变换过程:
在这里插入图片描述

3.快表性能分析

假定访问主存时间为100毫微秒,访问快表时间为20毫微秒,快表为32个单元时快表命中率可达90%,则按逻辑地址存取的平均时间为:
(访问快表的时间+访问内存数据的时间)×90%+ (访问内存页表的时间(同时包含访问快表的时间)+访问内存数据的时间)×(1-90%)
=(20+100)×90%+(100+100)×(1-90%)=128毫微秒

比两次访问主存的时间(100毫微秒×2=200毫微秒)下降了36%。若快表命中,则内存访问减少1次。

三、分页存储空间分配和释放

分页系统存储管理数据结构:
在这里插入图片描述
在这里插入图片描述

主存分配链表性能分析: 节点数目是影响主存分配链表使用效率的重要因素。当链表中的结点数目较多时,链表本身消耗较多内存空间,导致使用效率不高。

四、分页存储空间页面共享与保护

1.存储共享
分页系统实现存储共享时,必须区分:

  • 数据共享:允许不同的作业对共享的数据页使用不同的页号,只要令各自页表中的有关表目指向共享的数据信息块就行了。
  • 程序共享:被共享的程序段中的逻辑地址在不同的进程空间必须是相同的。即对共享的程序必须规定一个统一的页号。

分页系统程序共享时页号必须统一的解释:共享程序页在内存中只有一个副本,分配不同的页号将导致共享程序页中的虚地址不重合,无法共享程序页
在这里插入图片描述

2.信息保护
分页系统实现信息保护的办法是: 在页表中增加一些标志位,用来指出该页的信息操作权限:可读/写、只读、只可执行、不可执行

五、多级页表

1.多级页表的思想

页表离散存储,按需调入,如果页表很大,页表占用的内存物理块也允许是离散的,而且页表也可以按需装入内存,这样就需要再建立页表的页表,即页目录,这就是二级页表机制。需要的还可建立更多级的页表。

推论: 无论需要多少级页表,顶级页表必须完全驻留内存

二级页表机制:
系统为每个进程建一张页目录表,它的每个表项对应一个页表页,而页表页的每个表项给出页面和页框的对应关系。页目录表是一级页表,页表页是二级页表。

二级页表示例
在这里插入图片描述

2.两级页表的地址结构

两级页表的逻辑地址结构
在这里插入图片描述

3.两级页表的地址转换

地址分解:CPU送出的逻辑地址被分解为三个部分:页目录号、页表页号和页内位移。

1.查找一级页表:根据页目录号查找页目录表中相应表项,获得页表页所在物理块号;
2.查找二级页表:在该物理块中查找页表页号,获得该页所在内存物理块号,该物理块号与页内位移拼接形成要访问数据的内存物理地址。

六、反置页表

1.原理

页表的映射规则:页表是由虚拟地址到物理地址的映射表。
在这里插入图片描述

反置页表的映射规则:反置页表是从物理地址到虚拟地址的映射。
在这里插入图片描述
反置页表记录内存中每个物理块存放哪个进程的哪一页,即其内容是页号及其隶属进程的标识符。

系统为每个物理块设置一个页表项并按物理块号排序。

反置页表示例:
在这里插入图片描述

2.逻辑地址结构
在这里插入图片描述
3.地址变换
地址分解:首先将逻辑地址分解为:进程标识符、页号和页内位移。

检索反置页表:然后利用进程标识符和页号检索反置页表获得该页所在物理块号。

形成物理地址:如果检索到匹配表项,则该表项的序号i便是该页所在的物理块号,将该块号与页内地址一起构成物理地址。

查找失败处理:若检索完整个页表都未找到匹配页表项,表明此页尚未调入内存,请求调页或者地址出错。

反置页表地址变换图示:
在这里插入图片描述

4.5 分段存储管理

一.分段存储管理的引入

程序的结构特征:程序通常具有一定的逻辑结构,例如分成若干个段,每个段包含若干数据块或程序模块(函数、过程)。因此,程序具有二维地址结构:段和段内偏移。

程序结构示例:
在这里插入图片描述

内存的结构特征:内存对用户呈现一维线性结构

分页、分区存储管理与程序结构的不一致性:纯粹的分页和分区存储管理将程序视为与内存一致的线性结构,即使程序实际上为分段的二维逻辑结构,这样就导致内存中的程序不易按程序逻辑组成访问。

解决问题的办法:采用分段存储管理,依照程序的逻辑结构划分和分配内存空间

分段存储管理:分段存储管理以段为单位进行存储分配,作业每一段被分配一个连续的主存空间,各段存储位置不一定相邻,各段大小不一。

二.分段存储管理的逻辑地址结构

分段存储管理的逻辑地址是二维的,包括
在这里插入图片描述

分段地址结构对用户是可见的,用户知道逻辑地址如何划分为段号和段内位移。

每个段的最大长度受地址结构的限制,每一个程序中允许的最多段数也会受到限制。

三.分段存储管理的地址转换机构

分段存储管理数据结构:段表

操作系统需为每个作业建立一张段表,用以登记每个段的段号、该段所在内存始址和段长度。

分段存储管理硬件支持:段表控制寄存器

系统需设置一个段表控制寄存器用来存放当前占用处理器的作业的段表起始地址和长度

段表实例:
在这里插入图片描述

分段地址变换:
在这里插入图片描述

分段地址变换算例:
(1)若段长最大为16KB,计算机地址总线为32位,
则段号占用多少位?
逻辑地址空间最多包含多少段?
在这里插入图片描述

(2)有十六进制逻辑地址(3,2A60),段内偏移是多少?
若该段被装进物理起始地址1280中,则该逻辑地址对应的物理地址是多少?
在这里插入图片描述

注意:1280不是物理块号,而是段首地址,因此,1280不能再和权值相乘

四.段的共享和保护

共享段在内存中只有一个副本,不同作业段表中的项指向共享段基址。

与页共享类似,共享数据段在不同作业进程的段表中可以有不同的段号,共享代码段在不同作业进程的段表中须有相同的段号。

段共享实例:
在这里插入图片描述

五.分段和分页的比较

(1)分段是信息的逻辑单位,由源程序的逻辑结构决定,用户可见;分页是信息的物理单位,与源程序的逻辑结构无关,用户不可
见。
(2)段长可根据用户需要来规定,段起始地址可从任何主存地址开始;页长由系统确定,页面只能以页大小的整倍数地址开始。
(3)在分段方式中,源程序经链接装配后地址仍保持二维结构;在分页方式中,源程序经链接装配后地址变为一维结构。
在这里插入图片描述

4.6 虚拟存储管理

一、虚拟存储器原理

在这里插入图片描述

1.虚拟存储器的定义

在具有层次结构存储器的计算机系统中,采用自动实现部分装入和部分对换功能,为用户提供一个比物理主存容量大得多的,可寻址的一种“主存储器”称为虚拟存储器

虚拟存储器的好处:小内存运行大进程、小内存运行较多进程

虚拟存储器的代价:

  • 以时间换空间,以较小的内存空间运行大的进程或较多的进程将消耗较多的进程对换时间
  • 节省了空间,浪费了时间
  • 大型商业软件安装时都要求配置足够的内存容量

2.实现虚拟存储器的基础——程序执行的局部性原理

在一段时间内,程序访问的存储空间仅限于某个区域(这称为空间局部性),或者最近访问过得程序代码和数据很快会被再次访问(这称为时间局部性)

程序执行的局部性允许程序局部装入

在较小的一段时间内,整个作业空间中只有某一局部模块的指令和数据会被执行和访问到。作业其它部分暂时不会访问到。

这就允许仅在内存保留当前需要运行的程序部分,而其它部分暂时留在外存。

与局部性相关的事实:

第一、程序中只有少量分支和过程调用,大都是顺序执行的指令

第二、程序含有若干循环结构,由少量代码组成,而被多次执行

第三、过程调用的深度限制在小范围内,因而,指令引用通常被局限在少量过程中

第四、对数组、记录之类的数据结构的连续引用是对位置相邻的数据项的操作

第五、程序中有些部分彼此互斥,不是每次运行时都用到

3.实现虚拟存储器需要解决的问题

(1)主存辅存统一管理问题
(2)逻辑地址到物理地址的转换问题
(3)部分装入和部分对换问题

虚拟存储器的实现技术主要有:
(1)请求分页式虚拟存储管理
(2)请求分段式虚拟存储管理
(3)请求段页式虚拟存储管理

二、请求分页虚拟存储管理

1.请求分页虚拟存储系统基本原理
在进程开始运行之前,装入全部页面集合中的一个或几个页面,进程运行过程中,访问的页面不在内存时,再装入所需页面;
若内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。

2.请求分页系统的页表结构
在这里插入图片描述

外页表
定义:外页表是页面与磁盘物理地址的对应表,由操作系统管理,进程启动运行前,系统为其建立外页表,并把进程程序页面装入外 存。该表按进程页号的顺序排列。为节省主存,外页表可存放在磁盘中,当发生缺页中断需要查用时才被调入内存。外页表结构如下所
示。
在这里插入图片描述

3.分页虚拟存储系统的硬件支撑

分页虚拟存储系统需要内存管理部件MMU

MMU通常由一个或一组芯片组成,它接受虚拟地址(逻辑地址)作为输入,输出物理地址。

MMU的功能:
①管理硬件页表寄存器,装入将要占用处理器的进程页表
②分解逻辑地址为页号和页内地址
③管理快表:查找快表、装入表目和清除表目
④访问页表
⑤当要访问的页面不在内存时发出缺页中断,页面访问越界时发出越界中断
⑥设置和检查页表中的引用位、修改位、有效位和保护权限位等各个特征位

MMU操作的实体对象:
①页表寄存器:指向页表
②页表:访问、缺页中断、越界中断、设置和检查特征位
③快表:查找、装入、清楚

缺页中断与普通中断的差异:
(1)普通中断在两条指令之间才会响应;缺页中断涉及的指令在执行期间就需要响应缺页中断。
(2)当指令本身或者指令所处理的数据跨页时,在执行一条指令的过程中可能发生多次缺页中断。

4.请求分页的地址变换过程

当进程被调度到CPU上运行时,操作系统自动把该进程PCB中的页表始址装入到硬件页表基址寄存器中,此后,进程开始执行并访问某
个虚拟地址,MMU开始工作。
①MMU接受CPU传送过来的虚地址并分解为两部分:页号和页内地址
②以页号为索引搜索快表
③如果命中快表,则立即送出物理块号(页框号),并与页内地址拼接形成物理地址,然后访问相应内存单元
④如果不命中快表,则以页号为索引搜索内存页表
⑤在页表中查找相应表项,如果其状态位指示该页已在内存,则送出物理块号与页内地址拼接形成物理地址访问相应内存单元,同时要将该表项装入快表
⑥如果在页表中找到的相应表项,其状态位指示该页不在内存,则发出缺页中断,请求操作系统处理
⑦存储管理软件将所缺页面调入内存,修改页表

5.缺页中断处理过程

步1 挂起请求缺页的进程

步2 根据页号查外页表,找到该页存放的磁盘物理地址

步3 查看主存是否有空闲页框,如有则找出一个,修改主存管理表和相应页表项内容,转步6

步4 如主存中无空闲页框,则按替换算法选择淘汰页面,检查它曾被写过或修改过吗?若未则转步6;若是则转步5

步5 该淘汰页面被写过或修改过,则把它的内容写回磁盘原先位置

步6 进行调页,把页面装入主存所分配的页框中,同时修改进程页表项

步7 返回进程断点,重新启动被中断的指令

缺页中断处理过程总结:

①查看内存是否有空闲物理块,如有则装入页面到空闲物理块,同时修改页表相应项以及内存分配表

②如果内存中没有空闲物理块,则按替换算法选择一个页面淘汰,若该页面被写过或修改过,则写回外存;否则只简单淘汰该页面。淘汰页面之后要修改页表相应项,然后调入页面到淘汰页面释放的物理块中

6.页面装入策略和清除策略

页装入策略:决定何时把一个页面装入内存

主要有两种调入方式:

  • 请页式调入:需要访问程序和数据时,才把所需页面装入主存。缺点:处理缺页中断和调页的系统开销较大,每次仅调一页,磁盘I/O次数较多
  • 预调式调入:由系统预测进程将要使用的页面,使用前预先调入主存,每次调入若干页面,而不是仅调一页。优点:一次调入多页能减少磁盘I/O启动次数,节省寻道和搜索时间

页清除策略:考虑何时把一个修改过的页面写回外存
主要有两种清除方式:

  • 请页式清除:仅当一页选中被替换,且之前它又被修改过,才把这个页面写回外存
  • 预约式清除:对所有更改过的页面,在需要之前就把它们都写回外存

7.页框分配策略:决定系统为每个进程分配多少个页框用于装载页面

分配页框时考虑的因素:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.页面替换策略:为装入待访问的外存页面而选择某一内存页面用以置换的策略

主要有两种:

  • 局部替换:进程发生缺页时仅从该进程的页框中淘汰页面,以调入所缺页面
  • 全局替换:进程发生缺页时从系统中任一进程的页框中淘汰页面

9.页框分配和替换组合策略

页框分配和替换的常用组合策略有三种:

  • 固定分配局部置换
  • 可变分配全局置换:
    先为每个进程分配一定数目页框,系统保留若干空闲页框。
    进程发生缺页中断时,从系统空闲页框中选一个给进程,缺页中断次数减少。
    系统拥有的空闲页框耗尽时,从主存中选择任一进程的一页淘汰,这将使那个进程的缺页中断率上升
  • 可变分配局部置换
    ①新进程装入主存时,根据应用类型、程序要求,分配给一定数目页框
    ②产生缺页中断时,从该进程驻留页面集中选一个页面替换
    ③不时重新评价进程的缺页率,增加或减少分配给进程的页框以改善系统性能

10.缺页中断率

(1)缺页中断率

对于进程P的一个长度为A的页面访问序列,如果进程P在运行中发生缺页中断的次数为F,则f = F/A称为缺页中断率。

缺页中断率影响因素:
①进程分得的主存页框数:页框数多则缺页中断率低,页框数少则缺页中断率高
②页面大小:页面大则缺页中断率低,页面小则缺页中断率高
③页面替换算法的优劣决定缺页率
④程序特性:程序局部性好,则缺页中断率低;否则缺页中断率高

(2)抖动(或者颠簸)
在请求分页虚拟存储管理系统中,**刚被淘汰的页面立即又要访问,而调入不久即被淘汰,淘汰不久再被调入,如此反复,**使得系统的页面调度非常频繁,以致大部分时间消耗在页面调度上,而不是执行计算任务,这种现象称为“抖动”(或者颠簸)。

11.固定分配局部页面替换算法
常见算法:

  • 最佳页面淘汰算法(OPT):调入一页而必须淘汰一个旧页时,所淘汰的页是以后不再访问的页或距现在最长时间后再访问的页。OPT可用于衡量各种具体算法的标准
  • 先进先出页面淘汰算法(FIFO):先进先出页面淘汰算法总是淘汰最先调入主存的那一页,或者说在主存中驻留时间最长的那一页(常驻的除外)。
  • 最近最久未使用页面淘汰算法(LRU):淘汰的页面是在最近一段时间里较久未被访问的那一页

最佳页面淘汰算法(OPT)算例:
某程序在内存中分配三个页框,初始为空,页面走向为4,3,2,1,4,3,5,4,3,2,1,5。
用最佳页面淘汰算法分析页面置换过程。
在这里插入图片描述

先进先出页面淘汰算法(FIFO)算例
某程序在内存中分配三个页框,初始为空,页面走向为4,3,2,1,4,3,5,4,3,2,1,5。
用先进先出页面淘汰算法分析页面置换过程。
在这里插入图片描述

页缓冲技术
FIFO替换算法的一种改进,策略如下:
淘汰了的页面进入两个队列——修改页面和非修改页面队列。
修改页面队列中的页不时地成批写出并加入到非修改页面队列;
非修改页面队列中的页面被再次引用时回收,或者淘汰掉以作替换。

最近最久未使用页面淘汰算法(FIFO)算例
某程序在内存中分配三个页框,初始为空,页面走向为4,3,2,1,4,3,5,4,3,2,1,5。
用最近最久未使用页面淘汰算法分析页面置换过程。
在这里插入图片描述

最近最久未使用页面淘汰算法(LRU)的几种实现方法:

①引用位法

为每页设置一个引用标志位R,访问某页时,由硬件将R置1;
隔一定时间t将所有页的标志位R均清0。
发生缺页中断时,从标志位R为0的页中挑选一页淘汰。
挑选到淘汰页后,也将所有页的标志位R清0。

②计数器法

为每个页面设置一个计数器,每当访问一页时,该页对应的计数器加1。
发生缺页中断时,可选择计数值最小的对应页面淘汰,并将所有计数器全部清0。

③计时器法

为每个页面设置一个计时器,每当页面被访问时,系统的绝对时间记入计时器。
置换页面时,选取计时器值最小的页面淘汰。

第二次机会页面替换算法:

算法思想:最先进入主存的页面,如果最近还在使用,则仍然有机会作为一个新调入页面留在主存中。

算法实现:检查FIFO算法中队首页面(最早进入主存的页面)的“引用位”
在这里插入图片描述

时钟页面替换算法:
①页面首次装入主存时其“引用位”置1
②主存中的任何页面被访问时,“引用位”置1
③淘汰页面时,从指针当前指向的页面开始扫描循环队列,把遇到的“引用位”是1的页面的“引用位”清0,跳过这个页面;把所遇到的“引用位”是0的页面淘汰掉,指针推进一步
④扫描完循环队列,若未淘汰任何页,则再次扫描

时钟页面替换算法的改进算法:
把“引用位”r和“修改位”m结合起来使用,组合成四种情况

①最近没有被引用,没有被修改(r=0,m=0)——优先淘汰
②最近被引用,没有被修改(r=1,m=0)——扫描时r清0,转变为情况1和3
③最近没有被引用,但被修改(r=0,m=1)——次优先淘汰
④最近被引用过,也被修改过(r=1,m=1)——扫描时r清0,转变为情况1和3

12.局部页面替换算法的工作集模型

工作集:进程在某一段时间内反复(经常)访问的页面集合。

引入工作集的目的:一旦进程在近期经常访问的页面集合(即工作集)全部驻留在内存,缺页中断将不再发生。

工作集的变化特性:

  • 工作集包含的具体页面及其数目随观察进程访问页面轨迹的时间区间的不同而不同。
  • 因此,分配给进程的页框数不是固定的,而是随着进程在各个时刻工作集的不同而动态调整,确保特定时刻的工作集完全驻留在内存中。

工作集的参数:

  • 虚拟时刻t:确定工作集的参考时间点,该时间点由特定页面的访问顺序号决定,与访问页面的物理时钟无关。
  • 虚拟时间区间△:也称为工作集窗口或滑动窗口,即历史页面访问序列的长度,是为考察进程局部性而设置的长度固定的页面序列关注时间尺度,是整个页面访问序列中任意片段的长度。

工作集算法原理总结:
工作集模型是基于可变分配局部替换的最近最久未使用算法。
被替换的页面总是内存中离当前时间最远的历史页面。如果该页面包含在当前时刻的工作集中,则该页面不被替换,否则该页面被替换。

13.请求分段和请求段页式虚拟存储管理简介

请求分段虚拟存储管理:分段式虚拟存储系统把作业的所有分段的副本都存放在辅助存储器中,当作业被调度投入运行时,首先把当前需要的一段或几段装入主存,在执行过程中访问到不在主存的段时再把它们装入。

请求段页式虚拟存储管理基本原理:
(1)虚地址以程序的逻辑结构划分成段
(2)实地址划分成位置固定、大小相等的页框
(3)将每一段的线性地址空间划分成与页框大小相等的页面,于是形成了段页式存储管理的特征。

请求段页式存储管理的数据结构:
(1)作业表:登记进入系统中的所有作业及该作业段表的起始地址
(2)段表:至少包含这个段是否在内存,以及该段页表的起始地址
(3)页表:包含该页是否在主存(中断位)、对应主存块号

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
******************* 实践教学 ******************* 计算机与通信学院 2010年秋季学期 操作系统 课程设计 题 目:磁盘空间管理模拟实验 专业班级: 08级计算机1班 姓 名: 学 号: 指导教师: ****** 成 绩: 目 录 摘 要 3 前 言 4 正 文 5 1. 实验目的 5 2. 设计思想 5 3. 实验结构图 6 4. 各模块的伪码算法 7 5. 测试分析 10 6. 测试结果 10 7. 源程序 14 总 结 20 参考文献 21 致 谢 22 摘 要 要把文件信息存放在存储介质上,必须先找出存储介质上可供使用的空闲块。存储介 质上某个文件不再需要,又要收回它所占的存储空间作为空闲块。用户作业在执行期 间经常要求建立一个新文件或撤消一个不再需要的文件,因此,文件系统必须要为它们 分配存储空间或收回它所占的存储空间。如何实现存储空间的分配和收回,取决于对空 闲块的管理方法,主要有两种对磁盘存储空间的分配和收回的方法:位示图法(用一张 位示图(简称位图)来指示磁盘存储空间的使用情况),空闲块链接法(在UNIX操作系 统中,把磁盘存储空间的空闲块成组链接)。 关键词:磁盘的分配和回收管理;位示图;成组链接。 前 言 通过该题目的设计过程,掌握磁盘存储管理的原理、软件开发方法并提高解决实际问 题的能力。学习使用位示图管理磁盘空间的分配与回收,了解程序运行前和回收磁盘的 物理地址过程。学会用模拟UNIX系统的成组链接法实现磁盘空间的管理。了解UNIX的命 令及使用格式,熟悉UNIX/LINUX的常用基本命令,练习并掌握UNIX提供的vi编辑器来编 译C程序,学会利用gcc、gdb编译、调试C程序。希望通过本次设计过程可以提高自己的 分析问题的能力和实际动手的能力,将学到的知识用于实践中。 正 文 实验目的 磁盘格式化,系统把磁盘存储空间分成许多磁道。每个磁道又分成若干个扇区(又叫 做块)。这些空间就是用来存放用户文件的。当用户的文件不再需要,就应该删除。把 一个文件存放到磁盘上,可以组织成连续文件,链接文件,索引文件等。因此,磁盘空间 的分配方法也有两种,一种是连续空间的分配;一种是不连续空间的分配(又叫动态分配) 。如何充分有效的利用磁盘空间,是操作系统应解决的重要课题之一。通过本实验,使学 生对磁盘空间的分配与回收有一个较深入的理解。 设计思想 位示图法: 一个简单的管理方法是用一张位示图(简称位图)来指示磁盘存储空间的使用情况。 一个盘组的分块确定后,根据分配的总块数决定位图由多少个字组成,位图中的每一位与 盘组分块一一对应。位示图是一张可以反映磁盘空间是否被占有的模拟图,用一个二维 数组表示磁盘的空间,数组内每一个元素表示磁盘内相应的分块,数组元素为"1"表示该 块已被占,"0"表示该块为空。数组元素位置与磁盘分块一一对应,即可描述出磁盘空间 的利用情况。 成组链接法: 首先定义磁盘分配数组并初始化,9个一维数组分别表示9个空闲块,程序运行,先 将专用块A〔0〕复制到内存中,然后进行功能选择,分配,查MA,从中找出空闲块号 ,当一组的空闲块只剩第一块,应把该块中指出的下一组的空闲块数和块号复制到专 用块这,然后把该块分配给申请者,当一组的空闲块分配完后则把专用块内容(下一组 链接情况)复制到内存,再为申请者分配。 回收,输入待回收的块号,查找该块是否已被分配,若未分配,退出,否则,当前组 不满规定块数,将归还块登记入该组,若当前组已满,则另建一新组,这归还块作 为新一组的第一块,应把内存中登记的一组链接情况MA复制到归还块中,然后在MA这重 新登记一个新组。显示分组情况。系统初始化先将专用块内容读入 内存 ,当有申请空闲块要求,就直接在内存专用块中找到哪些块是空闲的,每分配一块后 把空闲块数减 1。但要把一组中第一块分配出去之前,可以先把登记在该块中的下一组的块号保存在专 用块中(此 ,原专用块中的信息巳经无用了 ,因它指示的一组空闲块都已分配掉)。当中文组空闲块分配完后,则将下一组内容读入 内存专用块中,以便继续分配查找。 实验结构图 各模块的伪码算法 1) 对位示图法 定义分配函数: void assign() { unsigned int n=0,i,s=1,j,k,q,m,sq,zhm,cid; for(i=0 ,k=0;i<5;i++) {q=size[i] ; j=0; while(1) { j++ ; if((q%2)==0) { if(j==1) size[i]+=1; else {for(m=1;m<j;m++) s*=2 ; size[i]+=s;} k=1; break ;/*完成后退出*/ } q=q/2; } if(k=

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值