【操作系统】第五章-虚拟存储器

五、虚拟存储器

前言

虚拟存储器作为现代操作系统中存储器管理的一项重要技术,实现了内存扩充功能。但该功能并非是从物理上实际地扩大内存的容量,而是从逻辑上实现对内存空间更大的程序运行,或者让更多的用户程序并发运行。这样既满足了用户的需要,又改善了系统的性能。

1.虚拟存储器概述

1.1 常规存储器管理方式的特征和局部性原理

  1. 常规存储器管理方式的特征

    我们把前一章中所介绍的各种存储器管理方式统称为传统存储器管理方式,它们全都具有如下两个共同的特征:

    (1) 一次性,是指作业必须一次性地全部装入内存后方能开始运行。

    (2) 驻留性,是指作业被装入内存后,整个作业都一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。

  2. 局部性原理

    程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。

  3. 虚拟存储器的基本工作情况

    局域局部性原理可知,应用程序在运行之前没有必要将之全部装入内存,而仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),便发出缺页(段)中断请求,此时OS将利用请求调页(段)功能将它们调入内存,以使进程能继续执行下去。如果此时内存已满,无法再装入新的页(段),OS还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,是程序继续执行下去。这样,便可使一个大的用户程序在较小的内存空间中运行,也可在内存中同时装入更多的进程,使它们并发执行。

1.2 虚拟存储器的定义和特征

  1. 虚拟存储器的定义

    当用户看到自己的程序能在系统中正常运行时,它会认为,该系统所具有的内存容量一定比自己的程序大,或者说,用户感觉到的内存容量比实际内存容量大得多。但用户所看到的大容量只是一种错觉,是虚的,故人们把这样的存储器称为虚拟存储器。

    综上所述,所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。可见,虚拟存储技术是一种性能非常优越的存储器管理技术,故被广泛地应用于大、中、小型机器和微型机中。

  2. 虚拟存储器的特征

    (1) 多次性。

    (2) 对称性。

    (3) 虚拟性。

1.3 虚拟存储器的实现方法

  1. 分页请求系统

    分页请求系统是在分页系统的基础上增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。它允许用户程序只装入少数页面的程序(及数据)即可启动运行。以后,再通过调页功能及页面置换功能陆续地把即将运行的页面调入内存,同时把暂不运行的页面换出到外存上。置换时以页面为单位。为了能实现请求调页和页面置换功能,系统必须提供必要的硬件支持和实现请求分页的软件。

    (1) 硬件支持

    ①请求分页的页表机制。

    ②缺页中断机构。

    ③地址变换机构。

    (2) 实现请求分页的软件

    这里包括用于实现请求调页的软件和实现页面置换的软件。它们在硬件的支持下,将程序正在运行时所需的页面(尚未在内存中的)调入内存,再将内存中暂时不用的页面从内存置换到磁盘上。

  2. 请求分段系统

    请求分段系统是在分段系统的基础上,增加了请求调段及分段置换功能后所形成的段式虚拟存储系统。它运行用户程序只要装入少数段(而非所有的段)的程序和数据即可自动运行。以后通过调段功能和段的置换功能将暂不运行的段调出,再调入即将运行的段。置换是以段位单位进行的。为了实现请求分段,系统同样需要必要的硬件和软件支持。

    (1) 硬件支持

    ①请求分段的段表机制。

    ②缺段中断机构。

    ③地址变换机构。

    (2) 软件支持

    这里包括有用于实现请求调段的软件和实现段置换的软件。它们在硬件的支持下,先将内存中暂时不用的段从内存置换到磁盘上,再将程序正在运行时所需的段(尚未在内存中的)调入内存。虚拟存储器在实现上是具有一定难度的。相对于请求分段系统,因为分页系统换进和换出的基本单位都是固定大小的页面,所以在实现上要容易些。而请求分段系统换进换出的基本单位是段,其长是可变的,分段的分配类似于动态分区方式,它在内存分配和回收上都比较复杂。

2.请求分页存储管理方式

2.1 请求分页中的硬件支持

  1. 请求页表机制

    在请求分页系统中需要的主要数据结构是请求页表,其基本作用仍然是将用户地址空间中的逻辑地址映射为内存空间中的物理地址。为了满足页面换进换出的需要,在请求页表中有增加了四个字段。这样,在请求分页系统中的每个页表应含以下诸项:

    在这里插入图片描述

  2. 缺页中断机构

    在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断,请求OS将所缺页调入内存。缺页中断作为中断,它们同样需要经历诸如保护CPU环境、分析中断原因、转入缺页中断处理程序进行处理,以及在中断处理完成后再恢复CPU环境等几个步骤。但缺页中断又是一种特殊的中断,它与一般的中断相比有着明显的区别,主要标下在下面两个方面:

    (1) 在指令执行期间产生和处理中断信号。

    (2) 一条指令在执行期间可能产生多次缺页中断。

  3. 地址变换机构

    请求分页系统中的地址变换机构是在分页系统地址变换机构的基础上,为实现虚拟存储器,再增加了某些功能所形成的,如产生和处理缺页中断,以及从内存中换出一页的功能等等。下图示出了请求分页系统中的地址变换过程。

    在这里插入图片描述

2.2 请求分页中的内存分配

  1. 最小物理块数的确定

    一个显而易见的事实是,随着为每个进程所分配的物理块的减少,将使进程在执行中的缺页率上升,从而会降低进程的执行速度。为使进程能有效地工作,应为它分配一定数目的物理块,但这并不是最小物理块数的概念。

    最小物理块数是指能保证进程正常运行所需的最小物理块数,当系统为进程分配的物理块数少于此值时,进程将无法运行。至于进程应获得的最小物理块数,与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。对于某些简单的机器,若是单地址指令,且采用直接寻址方式,则所需的最少物理块数为2。其中,一块是用于存放指令的页面,另一块则是用于存放数据的页面。如果该机器允许间接寻址,则至少要求有三个物理块。对于某些功能较强的机器,其指令长度可能是两个或对于两个字节,因而其指令本身有可能跨两个页面,且源地址和目标地址所涉及的区域也都可能跨两个页面。正如前面所介绍的在缺页中断机构中要发生6次中断的情况一样,对于这种机器,至少为每个进程分配6块物理块,以装入6个页面。

  2. 内存分配策略

    在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。于是可组合出以下三种适用的策略。

    (1) 固定分配局部置换

    所谓固定分配,是指为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。所谓局部置换,是指如果进程在运行中发现缺页,则只能从分配给该进程的n个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。采用该策略时,为每个进程分配多少物理块是根据进程类型(交互性或批处理性等)或根据程序员、程序管理员的建议来确定的。

    (2) 可变分配全局置换

    所谓可变分配,是指先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。所谓全局置换,是指如果进程在运行中发现缺页,则将OS所保留的空闲物理块(一般组织为一个空闲物理块队列)取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块换出,然后将所缺页调入。这样,分配给该进程的内存空间就随之增加。可变分配全局置换这可能是最易于实现的一种物理块分配和置换策略,已用于若干个OS中。在采用这种策略时,凡产生缺页(中断)的进程,都将获得新的物理块,仅当空闲物理块队列中的物理块用完时,OS才能从内存中选择一页调出。被选择调出的页可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,这将导致其缺页率增加。

    (3) 可变分配局部置换

    该策略同样是基于进程的类型或根据程序员的要求,为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选择一页换出,这样就不会影响其他进程的运行。如果进程在运行中频繁地发生缺页中断,则系统须再为该进程分配若干附加的物理块,直至该进程的缺页率减少到适当程度为止。反之,若一个进程在运行过程中的缺页率特别低,则此时可适当减少分配给该进程的物理块数,但不应引起其缺页率的明显增加。

  3. 物理块分配算法

    在采用固定分配策略时,如何将系统中可供分配的所有物理块分配给各个进程,可采用下述几种算法:

    (1) 平均分配算法,即将系统中所有可供分配的物理块平均分配给各个进程。

    (2) 按比例分配算法,即根据进程的大小按比例分配物理块。

    (3) 考虑优先权的分配算法。

2.3 页面调入策略

  1. 何时调入页面

    (1) 预调页策略。

    (2) 请求调页策略。

  2. 从何处调入页面

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

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

    (2) 系统缺少足够的对换区空间,这时凡是不会被修改的文件,都直接从文件区调入;而当换出这些页面时,由于它们未被修改,则不必再将它们重写到磁盘(换出),以后再调入时,仍从文件区直接调入。但对于那些可能被修改的部分,在将它们换出时便须调到对换区,以后需要时再从对换区调入。

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

  3. 页面调入过程

    每当程序所要访问的页面未在内存时(存在位为“0”),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后转入缺页中断处理程序。该程序通过查找页表得到该页在外存的物理块后,如果此时内存能容纳新页,则启动磁盘I/O,将所缺页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法,从内存中选出一页准备换出;如果该页未被修改过(修改位为“0”),可不必将该页写回磁盘;但如果此页已被修改(修改位为“1”),则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位为“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。

  4. 缺页率

    假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m≤n)。如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A=S+F,那么该进程在其运行过程中的缺页率即为f=F/A。

    通常,缺页率受到以下几个因素的影响:

    (1) 页面大小。

    (2) 进程所分配物理块的数目。

    (3) 页面置换算法。

    (4) 程序固有特性。

3.页面置换算法

3.1 最佳置换算法和先进先出置换算法

  1. 最佳(Optimal)置换算法

    最佳置换算法所选择的被淘汰页面是以后永不使用的,或许是最长(未来)时间内不再被访问的页面。采用最佳置换算法通常可保证获得最低的缺页率。但由于人们目前还无法预知,一个进程在内存的若干个页面中,哪一页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其他算法。

  2. 先进先出页面置换算法

    FIFO算法是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法不能保证这些页面不被淘汰。

3.2 最近最久未被使用和最少使用的置换算法

  1. LRU(Least Recently Used)置换算法的描述

    最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做出决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t。当需淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。

  2. LRU置换算法的硬件支持

    (1) 寄存器

    为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为R=Rn-1Rn-2Rn-3···R2R1R0,当进程访问某物理块时,要将相应寄存器的Rn-1位置改成1。此时,定时信号将每隔一定时间将寄存器右移一位。如果我们把n位寄存器的数看作是一个整数,那么,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。

    (2) 栈

    可利用一个特殊的栈保存当前使用的各个页面的页面号。每当进程访问某个页面时,便将该页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。

  3. 最少使用(Least Frequently Used, LFU)算法

    在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面作为淘汰页。由于存储器具有较高的访问速度,例如100ns,在1ms时间内可能对某页连续访问成千上万次,因此,直接利用计数器来记录某页被访问的次数是不现实的,只能采用较大的时间间隔来记录对存储器某页的访问。在最少使用置换算法中采用了移位寄存器方式,每次访问某页时,便将该移位寄存器的最高位置1,再每隔一定时间右移一次。这样,在最近一段时间使用最少的页面将是 ∑ \sum Ri最小的页。

3.3 Clock置换算法

  1. 简单的Clock置换算法

    当利用简单Clock算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只需检查页的访问位,如果是0,就选择该页换出;若为1,则重新将它置0,暂不换出,给予该页第二次驻留内存的机会,再按照FIFO算法检查下一个页面。当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回到队首去检查第一个页面。

  2. 改进型Clock置换算法

    在改进型Clock算法中,除须考虑页面的使用情况外,还须再增加一个因素——置换代价。这样,选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面。把同时满足这两个条件的页面作为首选淘汰的页面。由访问位A和修改位M可以组合成下面四种类型的页面:

    1类(A=0, M=0):表示该页最近既未被访问,又未被修改,是最佳淘汰页。

    2类(A=0, M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。

    3类(A=1, M=0):表示最近已被访问,但未被修改,该页有可能再被访问。

    4类(A=1, M=1):表示最近已被访问且被修改,该页可能再被访问。

    在内存中的每个页,都必定是这四类页面之一。在进行页面置换时,可采用与简单Clock算法相类似的算法,其差别在于该算法须同时检查访问位与修改位,以确定该页是四类页面中的哪一种。其执行过程可分为以下三步:

    (1) 从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A。

    (2) 如果第一步失败,即查找一轮后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0。

    (3) 如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0。然后重复第一步,即寻找A=0且M=0的第一类页面,如果仍失败,必要时再重复第二步,寻找A=0且M=1的第二类页面,此时就一定能找到被淘汰的页。

3.4 页面缓冲算法(Page Buffering Algorithm, PBA)

  1. 影响页面换进换出效率的若干因素

    (1) 页面置换算法。

    (2) 写回磁盘的频率。

    (3) 读入内存的频率。

  2. 页面缓冲算法PBA

    PBA算法的主要特点是:①显著地降低了页面换进、换出的频率,是磁盘I/O的操作次数大为减少,因而减少了页面换进、换出的开销;②正是由于换入换出的开销大幅度减小,才能使其采用一种较简单的置换策略,如先进先出(FIFO)算法,它不需要特殊硬件的支持,实现起来非常简单。页面缓冲算法已在不少系统中采用,下面介绍VAX/XMS操作系统中所使用的页面缓冲算法。在该系统中,内存分配策略上采用了可变分配和局部置换方式,系统为每个进程分配一定数目的物理块,系统自己保留一部分空闲物理块。为了能显著地降低页面换进、换出的频率,在内存中设置如下两个链表:

    (1) 空闲页面链表

    实际上该链表是一个空闲物理块链表,是系统掌握的空闲物理块,用于分配给频繁发生缺页的进程,以降低该进程的缺页率。当这样的进程需要读入一个页面时,便可利用空闲物理块链表中的第一个物理块来装入该页。当有一个未被修改的页要换出时,实际上并不将它换出到外存,而是把它们所在在物理块挂在空闲链表的末尾。应当注意,这些挂在空闲链表上的未被修改的页面中是有数据的,如果以后某进程需要这些页面中的数据时,便可从空闲链表上讲它们取下,免除了从磁盘读入数据的操作,减少了页面换进的开销。

    (2) 修改页面链表

    它是由已修改的页面所形成的链表。设置该链表的目的是为了减少已修改页面换出的次数。当进程需要将一个已修改的页面换出时,系统并不立即把它换出到外存上,而是将它所在的物理块挂在修改页面链表的末尾。这样做的目的是:降低将已修改页面写回磁盘的频率,降低磁盘内容读入内存的频率。

3.5 访问内存的有效时间

与基本分页存储管理方式不同,在请求分页管理方式中,内存有效访问时间不仅要考虑访问页表和访问实际物理地址数据的时间,还必须要考虑到缺页中断的处理时间。这样,在具有快表机制的请求分页管理方式中,存在下面三种方式的内存访问操作,其有效访问时间的计算公式也有所不同:

(1) 被访问页在内存中,且其对应的页表项在快表中。

(2) 被访问页在内存中,且其对应的页表项不在快表中。

(3) 被访问页不在内存中。

4.“抖动”与工作集

  1. 多道程序度与处理机的利用率

    处理机的实际利用率如下图,其中横轴表示多道程序的数量,纵轴表示相应的实际利用率。当进程数很大时,利用率趋于0,出现这种情况的原因是在系统中发生了“抖动”。

    在这里插入图片描述

  2. 产生“抖动”的原因

    发生“抖动”的根本原因是,同时在系统中运行的进程太多,由此分配给每一个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程在运行时,频繁地出现缺页,必须请求系统所缺之页调入内存。这会使得在系统中排队等待页面调进/调出的进程数目增加。显然,对磁盘的有效访问时间也随之急剧增加,造成每个进程的大部分时间都用于页面的换进/换出,而几乎不能再去做任何有效的工作,从而导致发生处理机的利用率急剧下降并趋于0的情况。我们称此时的进程是处于“抖动”状态。

4.2 工作集

  1. 工作集的基本概念

    进程发生缺页率的时间间隔与进程所获得的物理块数有关,下图示出了缺页率与物理块数之间的关系。

    在这里插入图片描述

  2. 工作集的定义

    所谓工作集,是指在某段时间间隔 Δ \Delta Δ里,进程实际所要访问页面的集合。虽然程序只需要少量的几页在内存便可运行,但为了较少地产生缺页,应将程序的全部工作集装入内存中。然而我们无法预知程序在不同时刻将访问哪些页面,故仍只有项置换算法那样,用程序的过去某段时间内的行为作为程序在将来某段时间内行为的近似。具体地说,是把某进程在时间t的工作集记为w(t, Δ \Delta Δ),其中的变量 Δ \Delta Δ称为工作集的“窗口尺寸”(Window size)。下图示出了某进程访问页面的序列和窗口大小分别为3、4、5时的工作集。由此可将工作集定义为,进程在时间间隔(t- Δ \Delta Δ, t)中引用页面的集合。

    在这里插入图片描述

4.3 “抖动”的预防方法

  1. 采取局部置换策略
  2. 把工作集算法融入到处理机调度中
  3. 利用“L=S”准则调节缺页率
  4. 选择暂停的进程

5.请求分段存储管理方式

5.1 请求分段中的硬件支持

  1. 请求段表机制

    在请求分段式管理中所需的主要数据结构是请求段表。在该表中除了具有请求分页机制中有的访问字段A、修改位M、存在位P和外存始址四个字段外,还增加了存取方式字段和增补位。这些字段供程序在调进、调出时参考。下面给出请求分段的段表项。

    在这里插入图片描述

  2. 缺段中断机构

    在请求分段系统中采用的是请求调段策略。每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后,由缺段中断处理程序将所需的段调入内存。与缺页中断机构类似,缺段中断机构同样需要在一条指令的执行期间产生和处理中断,以及在一条指令执行期间,可能产生多次缺段中断。但由于分段是信息的逻辑单位,因而不可能出现一条指令被分割在两个分段中,和一组信息被分割在两个分段中的情况。缺段中断的处理过程如下图。由于段不是定长的,这使对缺段中断的处理要比对缺页中断的处理复杂。

    在这里插入图片描述

  3. 地址变换机构

    请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,所以在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。为此,在地址变换机构中又增加了某些功能,如缺段中断的请求及处理等。下图示出了请求分段系统的地址变换过程。

    在这里插入图片描述

5.2 分段的共享与保护

为了实现分段共享,还应配置相应的数据结构——共享段表,以及对共享段进行操作的过程。

  1. 共享段表

    为了实现分段共享,可在系统中配置一张共享段表,所有各共享段都在共享段表中有一表项。在表项的上面记录了共享段的段号、段长、内存始址、状态(存在)位、外存始址以及共享计数等信息。接下去就是记录了共享次分段的每个进程的情况。共享段表如下图所示。

    在这里插入图片描述

  2. 共享段的分配与回收

    (1) 共享段的分配

    由于共享段是供多个进程所共享的,因此,对共享段的内存分配方法,与非共享段的内存分配方法有所不同。在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的起址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写请求使用该共享段的进程名、段号和存取控制等有关数据,把count置为1。当又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址。在共享段的段表中增加一个表项,填上调用进程的进程名、该共享段在本进程中的段号、存取控制等,再执行count=count+1操作,以表明有两个进程共享该段。

    (2) 共享段的回收

    当共享此段的某进程不再需要该段时,应将该段释放,包括撤销在该进程段表中共享段所对应的表项,以及执行count=count-1操作。若结果为0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否则,只是取消调用者进程在共享段表中的有关记录。

  3. 分段保护

    在分段系统中,由于每个分段在逻辑上是相对独立的,因而比较容易实现信息保护。目前,常采用以下几种措施来确保信息的安全。

    (1) 越界检查

    (2) 存取控制检查

    (3) 环保护机构

猜你喜欢

转载自blog.csdn.net/m0_50833438/article/details/115014148