天天看点

操作系统知识盘点(五)(内存管理方式以及其他)

25、非连续分配管理方式

(1)基本分页存储管理方式

在分区存储管理中,要把作业放在一个连续的存储区中,因而会产生碎片问题(外部碎片)。尽管通过拼接方式可以解决碎片问题,但代价较高。如果允许将一个作业存放到许多不相邻接的分区中,那么就可以避免拼接,,从而有效解决外部碎片问题。基于这一思想引入了分页存储管理(或称页式存储管理)技术

1)分页管理

在分页存储管理中,用户作业的地址空间被划分称若干个大小相等的区域,称为页或页面。相应地,将主存的存储空间也分成与页面大小相等的区域,称为块或物理块。在为作业分配存储空间时,总是以块为单位来分配,可以将作业中的任意一页放入主存的任意一块中。

在调度作业运行时,必须将他的所有页面一次调入主存,若选择的页面较小,可使页内碎片较小并减少内存碎片的总空间,有利于提高内存利用率;但也会使每个进程要求较多的页面,从而导致页表过长,占用较多内存,还会降低页面换进换出的效率。若选择的页面较大,虽然可以减少页表长度,提高页面换进换出的效率,但又使页内碎片增大

因此,页面的大侠应选择适中,通常为2的整数幂,方便地址变换,一般为512B~4KB之间

2)页表

为了将逻辑地址上连续的页号映射到物理内存中后称为离散分布的多个物理块,需要将每个页面和每个物理块一一对应,这种映射关系就体现在页表上。页表中每个页表项都由页号和块号组成,根据页表项就可以找到每个也好所对应物理内存中物理块的块号。页表通常存放在内存中

3)基本地址变换机构

操作系统知识盘点(五)(内存管理方式以及其他)

整个变换过程都是由硬件自动完成的

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

若页表全部放在主存中,则存取一个数据或一条指令至少要访问两次主存,一次是访问页表,确定所存取的数据或指令的物理地址,第二次才根据所得到的物理地址存取数据或指令。显然,这种方法比通常执行指令的速度慢了一半

为了提高地址变换的速度,可以在地址变换机构中增设一个具有并行查找能力的高度缓冲存储器(又称联想存储器的快表),部分页表项放在这个高速缓冲存储器中。快表(TLB)一般是由半导体存储器实现的,其工作周期与CPU的周期大致相同,但造价较高。为了降低成本,通常是在快表中存放正在运行作业当前访问的那些页表项,页表的其余部分仍然存放在内存中

增加快表后地址变换过程为:

a)根据逻辑地址得出页号与页内位移

b)先将页号与快表中的所有页号进行对比,如果有匹配的页号,则直接读出对应的块号,与页内位移拼接得到物理地址,若没有匹配的页号,则还需要访问内存中的页表,从页表中取出物理块号,与页内位移拼接得到物理地址,并将此次的页表项存入快表中

c)用得到的物理地址访问内存

由于快表是寄存器,所以存储空间有限,往往放不了几个页表单元,所以在快表中不一定总能找到所需的页号对应的块号。每次查找页表之前都先查找快表,如果找到所需的页号,就直接读出块号,然后只需访问内存一次:如果没有找到所需的页号,那么只能再从页表中找块号,这样就需要访问内存两次,而且比没有快表时增加了访问快表所需的时间。所以要尽量保证快表中放常用的页号和对应的块号,这样才能真正的做到减少访问时间

5)两级页表和多级页表

a)页表大小计算 在基础分页系统中,页表长度M是由页号的位数决定的,而页表的大小可以理解为一个矩形的面积,这个矩形的长度就是页表的长度M,宽度是每个页表项的大小,及块号的位数。关于页表的计算通常第一步就是分析地址结构

b)两级页表 从页表的大小计算公式可知,页表的大小和页表长度成正比,而页表长度又随着页号的位数的增长而呈指数式增长。所以,如果系统的逻辑地址的位数较多,页表会非常大,而整张页表都需要连续的存放在内存中,这是件很困难的事。本来内存就不大,而且还要找个连续的空间来存放,于是就有了两级页表来解决这个难题

而两层页表机制下,无论是外层页号位数还是外层页内地址的位数都比一级页表机制少了很多,这样页表的长度就可以减少很多,相应的页表的大小也大大减小了

c)多级页表 对于32位机器(逻辑地址的位数是32位),采用两级页表结构是合适的,但对于64位的系统,两级页表机构会使页表的大小变得不可接受,所以可以通过继续增加页表的级数来减小页表的大小,不过会使页表的数量大大增加,多级页表最主要的缺点是要多次访问内存

6)页的共享和保护

在多道程序系统中,数据的共享是很重要的,在分页存储管理系统中,实现共享的方法是使共享用户地址空间中的页指向相同的物理块

在分页存储管理系统中实现共享比在分段系统中要困难。这是因为,分页存储管理系统中将作业的地址空间划分为页面的做法是对用户透明的,同时作业的地址空间是线性连续的,当系统将作业的地址空间分成大小相同的页面时,被共享的部分不一定被包含在夜歌完整的页面中,这样不应共享的数据也被共享了,不利于保密,另外,共享部分的起始地址在各作业的地址空间划分成页的过程中,在各自页面中的页内位移可能不同,这样也使得共享比较难

分页存储系统可以为内存提供两种保护方式。以是地址越界保护,即通过比较地址变化机构中的页表长度和所要访问的逻辑地址中的页号完成;另一种是通过页表中的访问控制信息对内存信息提供保护。例如,在页表中设置一个存储控制字段,根据页面使用情况将该字段定义为读、写、执行等权限,在进行地址变换·时,不仅要从页表的相应表目中得到该页对应的块号,同时还要检查本次操作与存取控制字段允许的操作是否相符,若不相符,则有硬件捕获并发出保护性中断

7)基本分页存储管理方式

优点:内存利用率高;实现了离散分配;便于存储访问控制;无外部碎片

缺点:需要硬件支持,尤其是快表;内存访问效率下降;共享困难;内部碎片

(2)基本分段存储管理方式

前面介绍的各种存储技术中,用户逻辑地址空间是一个线性连续的地址空间,而通常情况下,一个作业是由多个程序段和程序段组成的,这就要求编译链接程序将他们按照一维线性地址排列,从而给程序和数据的共享带来困难。另外,程序员一般希望按照逻辑关系将作业分段,每段有自己的名字,可以根据名字访问相应的程序段或者数据段。分段存储管理能较好的解决上述问题。因此,分段存储管理相较于分页存储管理有如下优点

  • 方便编程:用户把自己的作业按照逻辑关系划分为若干个段,每段都是从0开始编址,有自己的名称和长度
  • 信息共享:页面是存放信息的物理单位,没有完整的意义;而段时信息的逻辑单位,用户可以把需要共享的部分代码和数据放在同一段以便信息共享
  • 信息保护:由于每一段都包含相对独立的信息,因此对信息保护可以采取对段进行保护,信息保护相对于分页式方便许多

1)分段存储原理

在分段存储管理系统中作业的地址空间由若干个逻辑分段组成,每个分段是一组逻辑意义上相对完整的信息整合,每个分段都有自己的名字,每个分段都从0开始编址,并采用连续的一段地址空间。因此,整个作业的地址空间是二维的(段的分类是一维,段内位移是另一维)。分段存储管理中以段为单位分配内存,每段分配一个连续的内存区,但各段之间不要求连续。内存的分配与回收类似于动态分区分配

这里解释下为什么分页存储管理系统的地址空间是一维的,而分段存储管理系统就是二维的

大家可能比较疑惑,认为分页的地质结构也分为页号与页内位移,与分段类似,也应当是二维的。这里要注意段号与页号的来历是不同的,段号是程序员自己定义的,每个段都是有特定含义的,因此不同的段大小不同,代表的二意义也不相同,因此要找到某个数据或指令,需要指定段号和位移两个变量。而页号是系统自动生成的,本身地址是线性连续的,当腰访问特定地址时,只需要提供地址即可,系统会自动将地址划分为页号和页内位移,页号对于程序员来水哦是没有实际意义的,因此是一维的

2)段表及地址变换过程

与分页存储管理类似,为了实现从逻辑地址到物理地址的变换,系统为每个进程建立一个段表,其中每个表项描述一个分段的信息,表项中包含段号、段长和该段的内存起始地址。

为了实现从逻辑地址到物理地址的转换,在系统中设置了段表寄存器用于存放段表的起始地址(简称始址)和段表长度,在进行地址变换时,系统将逻辑地址中的段号和段表长度进行比较,若段号超过了段表长度,则表示段号越界,产生越界中断:否则根据段表起始地址和段号计算出该段表项的位置,从中读出该段在内存中的起始地址,然后检查段内位移是否超过该段段长,若超过,则同样产生了越界中断;否则将该段的起始地址与段内位移相加,从而得到要访问的物理地址。为了提高内存的访问速度,也可以使用快表。地址变换过程都是由硬件自动完成的

3)段的共享与保护

在分段管理系统中,分段的共享是通过多个作业的段表中相应表项都指向被共享段的同一个物理副本来实现的

在多道程序环境下,必须注意共享段中信息的保护问题。当一个作业正从共享段中读取数据时,必须防止另一个作业修改此共享段中的数据。在当今大多数实现共享的系统中,程序被分成代码区和数据区。不能修改的代码称为纯代码或可重入代码,这样的代码和不能修改的数据时可以共享的,而可修改的程序和数据则不能共享

与分页管理类似,分段管理的保护主要有两种:地址月结保护和访问控制保护

关于访问控制保护的实现方式已经介绍过。这里不再重复,而地址越界保护则是利用段表寄存器中的段表长度与逻辑地址中的段号比较,若段号越界,则产生越界中断;再利用段表项中的段长与逻辑地址中的段内位移进行比较,若段内位移大于段长,则会产生越界中断。不过在允许段动态增长的系统中,段内位移大于段长时允许的。为此,段表中应设置相应的而增补位以指示该段是否允许动态增长

4)基本分段存储管理方式的优缺点

优点:便于程序模块化处理和处理变换的数据结构;便于动态链接和共享;无内部碎片

缺点:与分页类似,需要硬件支持;满足分段的动态增长和减少外部碎片,要采用拼接技术;分段的最大吃醋才能收到主存可用空间的限制;有外部碎片

5)分段与分页的区别

分页存储管理与分段存储管理有许多相似之处。例如,两者都采用离散分配方式,且都要通过地址变换机构来实现地址变换,但也有很多区别,区别如下:

  • 页是信息的物理单位,分页是为了实现离散分配方式,以减少内存的碎片,提高内存的利用率。或者说,分页仅仅是处于系统管理的需要,而不是用户的需要。段时信息的逻辑单位,它含有一组意义相对完整的信息。分段的目的是更好的满足用户的需要
  • 页的大小固定费且由系统决定,把逻辑地址划分位页号和页内位移两部分,是由机器硬件实现的。段的长度不固定,是由用户所编写的程序决定的,通常由编译系统在对源程序进行编译时根据信息的性质来划分
  • 分页系统中作业的地址空间是一维的,即单一的象形地址空间,程序员只需要利用一个值来表示一个地址。分段系统中作业的地址空间是二维的,程序员在标识一个地方时,纪要给出段名,又要给出段内位移

(3)基本段页式存储管理方式

从上面的介绍可以看出,分页系统能有效提高内存利用率并能解决碎片问题,而分段系统能反映程序的逻辑结构并有利于段的共享。如果将这两种存储管理方式结合起来,就形成了段页式存储管理方式。

在段页式存储管理系统中,作业的地址空间首先被分成若干个逻辑分段,每段都有自己的段号,然后再将每一段分成若干个大小固定的页,对于主存空间的管理仍然和分页管理一样,将其分成若干个和页面大小相同的物理块,对于主存的分配以物理块为单位

在段页式存储管理系统中,作业的逻辑地质结构包含三部分:段号S、段内页号P和页内位移D

注意:段页式的确结合了段式和页式的优点,但是段页式的内部碎片并不是和页式一样少

段页式的确结合了段式和页式的优点,而且克服了段式的外部碎片问题,但是段页式的内部碎片并没有做到和页式的一样少。页式存储管理方式下平均一个程序有半页碎片,而段内式存储管理方式下平均一段就有半页碎片,而一个程序往往有很多段,所以平均下来段页式的内部碎片比页式要多

26、虚拟内存的概念

(1)虚拟内存的引入原因

前面介绍的若干种存储管理方法都是分析如何将多个程序装入内存中并行,这些方法都具有如下两个特点:一次性(作业全部装入内存后才能执行)和驻留性(作业常驻内存知道运行结束),难以满足较大的作业或者较多的作业进入内存执行

而程序在执行过程中,有些代码时较少用到的(比如错误处理部分),而且有的程序需要较长时间的I/O处理,导致很多内存空间的浪费。因此,引入了一种能够让作业部分装入就可以运行的存储管理技术,即虚拟内存管理技术

(2)局限性原理

大多数程序执行时,在一个较短时间内仅使用程序代码的一部分,相应的,程序所访问的存储空间也局限于某个区域,这就是程序执行的局部性原理,她可表现为:

时间局限性:即一条指令的一次执行和下次执行,一个数据的一次访问和下次访问,都集中在一个较短的时期内

空间局限性:即当前指令和邻近的几条指令,当前访问的数据和邻近的数据,都集中在一个较小的区域内

(3)虚拟内存的定义及特征

基于局部性原理,在程序装入时可以将程序的一部分放入内存,而将其余部分放在外存,然后启动程序。在程序执行过程中,党所访问的信息不在内存中时,再由操作系统所需的部分调入内存。另一方面,操作系统将内存中暂时不使用的内容换到外存上,从而腾出空间存放将要调入内存的信息。从效果上看,计算机系统好像为用户提供了一个存储容量比实际内存大得多的存储器,这个存储器称为虚拟存储器(简称虚存)

之所以将其称为虚拟存储器,是因为这种存储器实际上并不存在,系统只是提供了部分装入,请求调入和置换功能,给用户的感觉好像存在一个能满足作业地址空间要求的内存。

虚拟内存的意义是让程序存在的地址空间与运行时的存储空间分开,程序员可以完全不考虑实际内存的大小,而在地址空间内编写程序虚拟存储器的容量由计算机的地址结构决定,并不是无限大

虚拟内存具有如下特征:

  • 离散型:程序在内存中离散存储
  • 多次性:一个作业可以分成多次调入内存
  • 交换性:作业在运行过程中可以换入,换出
  • 虚拟性:从逻辑上扩充内存容量,用户可以使用的空间可以远大于实际内存容量

(4)实际虚拟内存的硬件支持

实现虚拟内存技术,需要有一定的物质基础

  • 要有相当数量的外存,足以存放多个用户的程序
  • 要有一定容量的内存,在处理器上运行的程序必须有一部分信息存放在内存中
  • 中断机构,当用户访问的部分不在内存中时中断程序的运行
  • 地址变换机构,以动态实现虚地址到实地址的地址变换
  • 相关数据结构 段表或页表

常用的虚拟存储技术有请求分页存储管理、请求分段存储管理和请求段页式存储管理

27、请求分页管理方式

分页存储管理方式虽然解决了内存中的外部碎片的问题,但他要求将作业的所有页面一次性调入内存。当内存可用空间不足或作业太大,就会限制一些作业进入主存运行。为此提出了请求分页(也称请求页式)存储管理方法,先将程序部分载入内存执行,当需要其他部分时在调入内存,很明显,这种方法是根据程序的局部性原理产生的

(1)请求分页原理

请求分页存储管理方法在作业地址空间的分页、存储空间的分块等概念上和分页存储管理完全一样,他是在分页存储管理系统的基础上,增加请求调页的功能、页面置换功能索性曾的一种虚拟存储系统,在请求分页存储管理中,作业运行之前,只需要将当前需要的一部分页面装入主存,便可以启动作业运行。在作业运行过程中,若所要访问的页面不在主存,则通过调页功能将其调入,同时还可以通过置换功能将暂时不同的页面换到外存上,以便腾出内存空间

可以说。请求分页=基本分页+请求调页功能+页面置换功能

(2)页表结构

在请求分页系统中使用的主要数据结构仍然是页表,其基本作用是将程序地址空间中的逻辑地址转换成内存空间中的物理地址。由于请求分页系统只将作业的一部分调入内存,还有一部分存放在磁盘上,故需要在页表中增加若干项,供操作系统在实现页面的调入、换出功能时参考

页表的个字段的作用如下:

  • 页号和物理块号:其在分页存储管理中已经定义过,这两个信息时进行地址变换所必需的
  • 状态位:用于判断页面是否在主存中。每当进行主存访问时,根据该位判断要访问的页面是否在主存,若不在主存中,则产生缺页中断
  • 访问字段:用于记录页面在一段时间内被访问的次数、或最近已有多久未被访问。供置换算法在选择换出页面时参考
  • 修改位:用于标识页面调入内存后是否被修改过。当处理器以写方式访问页面时,系统将设置该页面的修改位。有与内存中的页面在外存上都有副本,因此,若页面未修改,则在该页面换出时不需要将页面写到外存,以减少磁盘写的次数;若页面被修改,则必须将页面重新写到外存上
  • 外存地址:用于指出页面在外存上的存放地址,供调入页面时使用

(3)缺页中断与地址变换

在请求分页存储管理系统中,当所访问的页面在内存时,其地址变换过程与分页存储管理相同;当访问的页面不在内存时,则应先将该页面调入内存,再按照与分页存储管理相同的方式进行地址变换

当系统发现索要访问的页面不在内存时,便产生一个缺页中断信号,此时用户程序被中断,控制转到操作系统的缺页中断处理程序。缺页中断处理程序根据该页在外存的位置把他调入内存。在调页过程中,若内存有空闲空间,则缺页中断处理程序只需要把缺页装入任何一个空闲存储块中,再对页表中的相应表项进行修改(如填写物理块号、修改状态位、设置访问字段及修改位初始值等)即可;若内存中无空闲空间,则必须先淘汰内存中的某些页面,若被淘汰页曾被修改过,则要将其写回外存

缺页中断是一个比较特殊的中断,他与一般中断相比有明显的区别,主要表现在如下方面:

  • 在指令的执行期间产生和处理缺页中断。通常,CPU实在指令执行完毕后检查是否有中断请求到达,若有便响应。而缺页中断实在一条指令的执行期间,发现要访问的指令和数据不在内存时产生和处理的
  • 一条指令可以产生多个缺页中断。例如,一条双操作数的指令,每个操作数都不在内存中,则这条指令执行时至少将产生两个缺页中断

(4)请求分页管理方式的优缺点

优点:可以离散储存程序,降低了碎片数量;提供虚拟存储器,提高了主存利用率有利于多道程序运行,方便用户

缺点:必须有硬件支持;有些情况下系统会产生抖动现象;程序最后一页仍然存在违背利用的部分空间

28、页面置换算法

页面置换算法(也称为页面淘汰算法)是用来选择换出页面的算法。在请求页式存储管理方式中,由于一个进程运行的时候不是所有的页面都在内存中,所以会出现缺页中断。当缺页的时候内存没有空闲的物理块时就需要换出内存中的一页,具体换出哪一页面是由页面置换算法决定的,页面置换算法的优劣直接影响到系统的效率

  • 要注意把页面置换和连续分配方式中的交换区别开来,页面置换的单位是页面而不是整个进程,交换的单位是整个进程
  • 当发生缺页中断后,系统不一定会执行页面置换算法。因为发生缺页中断仅仅说明需要执行的页面没有在内存中,如果内存空间中还有空闲块的话,只需要用缺页中断处理程序把需要的页面从外存调入内存即可。不需要页面置换算法:只有内存中没有空闲块的时候才需要页面置换算法。所以,缺页中断不一定导致执行页面置换算法。

(1)最佳置换算法(OPT)

在预知一个进程的页面号引用串的情况下,每次都淘汰以后不再使用的或以后最迟再被使用的页面,这种算法就是最佳置换算法

显然,最佳置换算法是最优的,具有最低的缺页率。但由于实际操作中往往无法事先知道以后会引用到所有页面的信息,所以最佳置换算法无法实现,只能作为一个标准来衡量其他置换算法的优劣

(2)先进先出算法(FIFO)

FIFO算法是最简单的页面置换算法,每次总是淘汰最先进入内存的页面,也就是将在内存存驻留时间最长的页面淘汰掉

该算法实现简单,用一个队列的数据结构就可以实现,将页面按照次序排成一个队列,并设置指针指向最先进入的页面,每次需要淘汰页面时,将指针所指的页面淘汰即可

不过FIFO算法可能会产生Belady一场(缺页次数随着分配的物理块号的增加而增加),而且由于FIFO算法与进程实际运行规律不符,可能会选择淘汰程序经常使用的界面,实际效果不好

(3)最近最少使用算法(LRU)

选择最近最久没有被使用的页面予以淘汰,其思想是用以前的页面引用情况来预测将来会出现页面引用情况,也就是假设一个页面刚被访问,那么不久该页面还会被访问。即最佳置换算法是“向后看”,而“LRU”算法则是“向前看”

该算法可以用寄存器组和栈来实现,性能较好

(4)时钟置换算法(CLOCK)

时钟置换(CLOCK)算法也称为最近未使用算法(NRU),是LRU和FIFO的折中。作为LRU的近似算法,CLOCK算法给每个页面设置一个访问位,标识该页最近有没有被访问过。CLOCK维护一个内存中所有页面的循环链表,当程序需要访问链表中存在的页面时,该访问的访问位就被置为1:否则,若程序要访问的页面没有在链表中,那就需要淘汰一个内存中的页面,于是一个指针就从上次被淘汰页面的下一个位置开始顺序的去遍历这个循环链表,当这个指针指向的页面访问位为1时,就把该访问位置0,指针再向下移动,当指针所指的页面的访问位为0时,就选择这一页面淘汰掉,若遍历了一遍链表仍没找到可以淘汰的页,那么久继续遍历下去

CLOCK算法比LRU算法少了很多硬件的支持,实现比较简单,但比FIFO算法所需的硬件要求更多

29、工作集与页面分配策略

(1)工作集理论

为了解决抖动现象,引入了工作集的概念。工作集是基于局部性原理的假设的。如果能预知程序在某段时间间隔内要访问哪些页面,并能提前将他们调入内存,将会大大降低缺页率,从而减少置换工作,提高CPU利用率

工作及是最近n次内存访问的页面的集合,数字n被称为工作集窗口,也就是工作集的大小。经常会使用的页面会在工作集中,若一个页面不再被使用,则它会被从工作集中丢弃。当一个进程寻址一个不在工作集内的界面时,会产生一个缺页中断。在处理缺页中断时,更新工作集并在需要时从磁盘读出此界面

工作及模型的原理是:让操作系统监视各个进程的工作集,主要是监视各个工作集的大小。若有空闲的物理块,则可以再调一个进程到内存以增加多道的程度:若工作集的大小总和增加超过了所有可用物理块的数量总和,那么操作系统可以选择一个内存中的进程对换到磁盘中去,以减少内存中的进程数量来防止抖动的发生

正确的而选择工作集窗口的大小,即分配给进程的页面数,对存储器的有效利用率和系统吞吐率的提高,都将产生重要的影响。一方面,如果窗口选的很大,进程虽不易产生缺页,但存储器也将不会得到充分的利用。另一方面,如果窗口过小,则会使进程在运行过程中频繁产生缺页中断,反而降低了系统吞吐率

(2)页面分配策略

在请求分页存储管理系统中,可以采用两种页面分配策略,即固定分配和可变分配。在进行页面置换时,也可以采用两种策略,即全局置换和局部置换。将他们组合起来,有如下三种适合的策略(固定分配全局置换不合理,因此不存在这种策略)

固定分配局部置换:为每个进程分配一定数目的物理块,这个数目是确定的,进程运行期间都不会改变。这样进程和进程之间不会争夺物理块,会导致有些进程因为物理块太少而频繁的缺页中断,有些进程由于分配的物理块太多而浪费内存空间。采用固定分配策略时,需要用算法决定每个进程分配多少块物理块,常用的算法有平均分配算法、按比例分配算法、考虑优先权的分配算法

可变分配全局置换:操作系统维护一个空闲物理块队列,每次有进程缺页时都从空闲物理块队列上取下一个分配队列给它,若系统中已经没有空闲的物理块了,那么系统将有可能调出任何进程的其中一页

可变分配局部置换:为每个进程分配一定数量的物理块后,每次发生缺页中断且内存中没有空闲块的时候只让进程换处自己的某个内存页,但当一个进程频繁的发生缺页中断时OS为它分配额外的物理块直到缺页率降低到合适程度为止,当一个进程缺页率特别低的时候适当减少分配给它的物理块的数量。可变分配局部置换策略在可以获得较高的内存空间利用率的同时,保证每个进程有较低的缺页率

(3)页面调入策略

请求调页策略:一个页面只有在用到的时候才被调入到内存中,否则就放在外存中。这种调页方式在一个进程刚启动的时候会频繁的出现缺页中断,因为一开始内存中没有该进程的任何页面。该策略实现简单,但容易产生较多的缺页中断,时间开销大,容易产生抖动现象

预调页策略:是指将预计不久之后会被用到的页面一并调入内存,尽管他们暂时还没被用到。在程序启动之时,如果程序员能指出哪些页面是首先应该被调入的,并把它们放一起,那么通过预调页策略就可以一次性把他们调入内存,能节省不少时间,这是一种基于局部性原理的预测,通常用于程序的首次调入

(4)从何调入页面

请求分页系统中的外存分为两部分:用于存放文件的文件区和用于存放对换界面的对换区。通常,由于对换区是采用连续分配方式,而文件是采用离散分配方式,故对换区的磁盘I/O速度比文件区高。这样每当发生缺页请求时,系统应从何处将缺页调入内存,可分成如下三种情况:

系统拥有足够的对换区空间:这时可以全部从对换区调入所需界面页面,以提高调页速度。为此,在进程运行前,便须将与该进程有关的文件从文件区复制到对换区

系统缺少足够的对换区空间:这时凡是不会被修改的文件,都直接从文件区调入:而当换出这些界面时,由于他们未被修改而不必再将它们换出,以后再调入时,仍从文件区直接调入

UNIX方式:由于与进程有关的文件都放在文件区,故凡是未运行过的页面都应从文件区调入。对于曾经运行过但又被换出的页面,由于是被放在对换区,因此再下次调入时,应从对换区调入。由于UNIX系统允许页面共享,因此某进程所请求的页面有可能已被其他进程调入内存,此时也就无需再从对换区调入

30、抖动现象与缺页率

(1)Belady异常

FIFO置换算法的缺页率可能会随着所分配的物理块数的增加而增加,这种奇怪的现象就是Belady异常。例如对于引用串1,2,3,4,1,2,5,1,2,3,4,5.内存中物理块数为3的时候发生9次缺页中断,而物理块数为4的时候反倒会发生10次缺页中断,这种随着分配得到的物理块数的增加缺页率反而增加的现象就是Belady异常

产生Belady异常的原因是FIFO算法的置换特征与进程访问主存的动态特征是矛盾的,即被置换的页面并部署进程不会访问的。FIFO算法可能会出现Belady异常,而LRU算法和最佳置换算法永远不会出现Belady异常,被归类为堆栈算法的页面置换算法也不可能出现Belady异常

(2)抖动现象

若选用的页面置换算法不合适,可能会出现这种现象:刚被淘汰的页面,过后不久又要访问,而且调入不久后又调出,如此反复,是的系统把大部分时间用在了页面的调入调出上,而几乎不能完成任何有效的工作,这种现象称为抖动(或颠簸)

抖动产生的主要原因是在请求分页系统中每个进程只能分配到所需全部内存空间的一部分

(3)缺页率

假定一个作业共有n页,系统分配给该作业m页的空间(m<=n),如果该作业再运行中共需要访问A次页面(即引用串长度为A),其中所要访问的页面不在内存,需要将所需页调入内存的次数为F,则缺页率定义为f=F/A,命中率即为1-f

缺页率是衡量页面置换算法的重要指标。通常缺页率会受置换算法、分配的页面数量、页面大小等因素的影响。

缺页率对于请求分页管理系统是很重要的。如果缺页率过高,会直接导致读取页面的平均时间增加,显著降低进程执行速度,因此如何降低缺页率是一项非常重要的操作

31、请求分段

请求分段存储管理系统也与请求分页存储管理系统一样,为用户提供了一个比主存可用空间大得多的虚拟存储器。同样,虚拟存储器的实际容量由计算机的地址结构确定

在请求分段存储管理系统中,作业运行之前,只要将当前需要的若干段装入主存,便可启动作业运行。在作业运行过程中,如果要访问的分段不在主存,则通过调段功能将其调入,同时还可以通过置换功能将暂时不用的分段换到外存上,以便腾出内存空间。为此,应对段表进行扩充,扩充后的段表项如图所示

段号、段长和内存始址三个信息是进行地址变换所必需的,其他字段的含义与请求分页存储管理相同。当段在内存时,地址变换过程与分段存储管理相同;当段不在内存时,应先将该段调入内存,然后再进行地址变换

当被访问的段不在主存时,将产生一个缺段中断信号。操作系统处理该中断时,在主存中查找是否有足够大的分区存放该段。如果没有这样的分区,则检查空闲分区容量总和,确定是否需要对分区进行拼接,或者调出一个或几个段后再装入所需段

32、内存管理方式之间的对比与联系

在内存管理方式中,离散分配管理方式比连续分配管理方式重要得多:

操作系统知识盘点(五)(内存管理方式以及其他)