前文提到的存储器管理方式有一个共同的特点,即它们都要求将一个作业全部装入内存后方能运行。
但有两种特殊情况:
有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全部被装入内存,致使该作业无法运行;
有大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业装入内存让它们先运行,而将其它大量的作业留在外存上等待。
1. 虚拟存储器概述
1.1 常规存储管理方式的特征
传统存储器管理方式,它们全都具有如下两个共同的特征:
一次性:
- 指作业必须一次性地全部装入内存后方能开始运行。
-
在传统存储器管理方式中,无一例外地要求先将作业全部装入内存后方能运行。正是这一特征导致了大作业无法在小内存中运行,以及无法进一步提高系统的多道程序度,直接限制了对处理机的利用率和系统的吞吐量的提高。
-
事实上,许多作业在运行时,并非需要用到全部程序和数据,如果一次性地装入其全部程序和数据,显然也是对内存空间的一种浪费。
驻留性 :
-
指作业被装入内存后,整个作业都一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。
-
尽管运行中的进程会因O等原因而被阻塞,可能处于长期等待状态,或者有的程序模块在运行过一次后就不再需要(运行)了,它们都仍将驻留在内存中,继续占用宝贵的内存资源。
一次性及驻留性特征使得许多在程序运行中不用或暂时不用的程序(数据)占据了大量的内存空间,而一些需要运行的作业又无法装入运行,显然,这是在浪费宝贵的内存资源。
1.2 常规存储管理方式的局部性原理
程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
局限性又表现在下述两个方面:
-
时间局限性。
如果程序中的某条指令被执行,则不久以后该指令可能再次执行;如果某数据被访问过,则不久以后该数据可能再次被访问。
产生时间局限性的典型原因是在程序中存在着大量的循环操作。
-
空间局限性。
一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将被访问。
即程序在一段时间内所访问的地址可能集中在一定的范围之内,其典型情况便是程序的顺序执行。
1.3 虚拟存储器的基本工作情况
应用程序在运行之前没有必要将之全部装入内存,而仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。
-
程序在运行时如果它所要访问的页(段)已调入内存,便可继续执行下去;
-
但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),便发出缺页(段)中断请求,此时OS将利用请求调页(段)功能将它们调入内存,以使进程能继续执行下去。
-
如果此时内存已满,无法再装入新的页(段),OS 还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。
-
这样,便可使一个大的用户程序在较小的内存空间中运行,也可在内存中同时装入更多的进程,使它们并发执行。
1.4 虚拟存储器的定义和特征
虚拟存储器的定义:
-
指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
-
其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。
-
虚拟存储技术是一种性能非常优越的存储器管理技术,故被广泛地应用于大、中、小型机器和微型机中。
虚拟存储器的特征:
-
多次性。
多次性是相对于传统存储器管理方式的一次性而言的,是指一个作业中的程序和数据无需在作业运行时一次性地全部装入内存,而是允许被分成多次调入内存运行。
即只需将当前要运行的那部分程序和数据装入内存即可开始运行。
以后每当要运行到尚未调入的那部分程序时,再将它调入。
正是由于虚拟存储器的多次性特征,才使它具有从逻辑上扩大内存的功能。
无疑,多次性是虚拟存储器最重要的特征,它是任何其它的存储管理方式所不具有的。因此,我们也可以认为虚拟存储器是具有多次性特征的存储器管理系统
-
对换性。
对换性是相对于传统存储器管理方式的常驻性而言,是指一个作业中的程序和数据,无须在作业运行时一直常驻内存,而是允许在作业的运行过程中进行换进、换出。
即在进程运行期间,允许将那些暂不使用的代码和数据从内存调至外存的对换区(换出),待以后需要时再将它们从外存调至内存(换进)。甚至还允许将暂时不运行的进程调至外存,待它们重又具备运行条件时再调入内存。
换进和换出能有效地提高内存利用率可见,虚拟存储器具有对换性特征,也正是由于这一特征,才使得虚拟存储器得以正常运行。
如果虚拟存储器不具有换出功能,即不能把那些在存储器中暂时不运行的进程或页面(段)换至外存,不仅不能充分地利用内存,而且还会使在换入时,因无足够的内存空间,而经常以失败告终。
-
虚拟性。
虚拟性是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。
这样,就可以在小的内存中运行大的作业,或者能提高多道程序度。它不仅能有效地改善内存的利用率,还可提高程序执行的并发程度,从而可以增加系统的吞吐量。
这是虚拟存储器所表现出来的最重要的特征,也是实现虚拟存储器的最重要的目标。正是由于它具有这一特征,才使得虚拟存储器目前已成为在大、中、小及微机上最广泛采用的存储管理方式。
1.5 虚拟存储器的实现方法
分页请求系统:
-
硬件支持。
主要的硬件支持有:
-
请求分页的页表机制。
-
缺页中断机构。
-
地址变换机构。
-
-
实现请求分页的软件。
用于实现请求调页的软件和实现页面置换的软件
请求分段系统:
-
硬件支持。
主要的硬件支持有:
-
请求分段的段表机制。
-
缺页中断机构。
-
地址变换机构。
-
-
软件支持。
用于实现请求调段的软件和实现段置换的软件。
2. 请求分页存储管理方式
2.1 请求分页中的硬件支持
计算机系统除了要求一定容量的内存和外存外,还需要有请求页表机制、缺页中断机构以及地址变换机构。
请求页表机制:
-
在请求分页系统中需要的主要数据结构是请求页表,其基本作用仍然是将用户地址空间中的逻辑地址映射为内存空间中的物理地址。
-
为了满足页面换进换出的需要,在请求页表中又增加了四个字段。
缺页中断机构:
-
在指令执行期间产生和处理中断信号。
-
一条指令在执行期间可能产生多次缺页中断。
地址变换机构:
-
请求分页系统中的地址变换机构是在分页系统地址变换机构的基础上,为实现虚拟存储器,再增加了某些功能所形成的。
-
如产生和处理缺页中断,以及从内存中换出一页的功能等等。
2.2 请求分页中的内存分配
最小物理块数的确定:
-
最小物理块数是指能保证进程正常运行所需的最小物理块数,当系统为进程分配的物理块数少于此值时,进程将无法运行。
-
至于进程应获得的最少物理块数,与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。
-
随着为每个进程所分配的物理块的减少,将使进程在执行中的缺页率上升,从而会降低进程的执行速度。为使进程能有效地工作,应为它分配一定数目的物理块。
内存分配策略:
-
在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。
-
在进行置换时,也可采取两种策略,即全局置换和局部置换。
-
三种适用的策略:
-
固定分配局部置换(Fixed Allocation,Local Replacement)
**固定分配:**指为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。
**局部置换:**指如果进程在运行中发现缺页,则只能从分配给该进程的"个页面中选出一页换出,然后再调入一页,以保证分配给该进程的内存空间不变。
-
可变分配全局置换(Variable Allocation,Global Replacement)
**可变分配:**指先为每个进程分配一定数目的物理块,在进程运行期回、可据情况做适当的增加或减少。
**全局置换:**指如果进程在运行中发现页,则将OS保留的空闲物理块(一般组织为一个空闲物理块队列)取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块换出,然后将所缺之更调入。
-
可变分配局部置换(Variable Allocation,Local Replacement)
基于进程的类型或根据程序员的要求,为每个进程分配一定数目的物理块;
但当某进程发现缺贞时,只允许从该进程在内存的页面中选择一页换出,这样就不会影响其它进程的运行。
-
物理块分配算法:
在采用固定分配策略时,如何将系统中可供分配的所有物理块分配给各个进程,可采用下述几种算法:
-
**平均分配算法:**即将系统中所有可供分配的物理块平均分配给各个进程。
-
**按比例分配算法:**即根据进程的大小按比例分配物理块。如果系统中共有n个进程,每个进程的页面数为Si,则系统中各进程页面数的总和为:
假定系统中可用的物理块总数为m,则每个进程所能分到的物理块数为bi可由下式计算:
bi应该取整,它必须大于最小物理块数。
-
考虑优先权的分配算法:
在实际应用中,为了照顾到重要的、紧迫的作业能尽快地完成,应为它分配较多的内存空间。
通常采取的方法是把内存中可供分配的所有物理块分成两部分:
- 一部分按比例地分配给各进程;另一部分则根据各进程的优先权进行分配,为高优先进程适当地增加其相应份额。
在有的系统中,如重要的实时控制系统,则可能是完全按优先权为各进程分配其物理块的。
2.3 页面调入策略
何时调入页面:
-
预调页策略。
如果进程的许多页是存放在外存的一个连续区域中,一次调入若干个相邻的页会比一次调入一页更高效些。
但如果调入的一批页面中的大多数都未被访问,则又是低效的。
于是便考虑采用一种以预测为基础的预调页策略,将那些预计在不久之后便会被访问的页面预先调入内存。
-
请求调页策略。
当进程在运行中需要访问某部分程序和数据时,若发现其所在的页面不在内存,便立即提出请求,由OS将其所需页面谓入内存。
由请求调页策略所确定调入的页是一定会被访问的,再加之请求调页策略比较易于实现。
故在目前的虚拟存储器中,大多采用此策略。
但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘 IO 的启动频率。
从何处调入页面:
- 系统拥有足够的对换区空间,这时可以全部从对换区调入所需页面,以提高调页速度。
-
系统缺少足够的对换区空间,这时凡是不会被修改的文件,都直接从文件区调入;而当换出这些页面时,由于它们未被修改,则不必再将它们重写到磁盘(换出),以后再调入时,仍从文件区直接调入。但对于那些可能被修改的部分,在将它们换出时便须调到对换区,以后需要时再从对换区调入。
-
UNIX方式。
页面调入过程:
-
每当程序所要访问的页面未在内存时(存在位为"0"),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后转入缺页中断处理程序。
-
该程序通过查找页表得到该页在外存的物理块后,如果此时内存能容纳新页,则启动磁盘IO,将所缺之页调入内存,然后修改页表。
-
如果内存已满,则须先按照某种置换算法,从内存中选出一页准备换出:如果该页未被修改过(修改位为"0"),可不必将该页写回磁盘;
-
但如果此页已被修改(修改位为""),则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位为"1",并将此页表项写入快表中。
-
在缺页调入内存后,利用修改后的页表形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。
缺页率:
-
假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m≤n)。
-
如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A = S + F,那么该进程在其运行过程中的缺页率即为:
事实上,在缺页中断处理时,当由于空间不足,需要置换部分页面到外存时,选择被置换页面还需要考虑到置换的代价,如页面是否被修改过。没有修改过的页面可以直接放弃,而修改过的页面则必须进行保存,所以处理这两种情况时的时间也是不同的。
假设被置换的页面被修改的概率是β,其缺页中断处理时间为ta,被置换页面没有被修改的缺页中断时间为tb,那么,缺页中断处理时间的计算公式为:
3. 页面置换算法
在进程运行过程中,若其所要访问的页面不在内存,而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据送到磁盘的对换区中。但应将哪个页面调出,须根据一定的算法来确定。
通常,把选择换出页面的算法称为页面置换算法(Page-Replacement Algorithms)。置换算法的好坏将直接影响到系统的性能。
3.1 最佳(Optimal)置换算法
最佳置换算法是由Belady于1966年提出的一种理论上的算法。
-
其所选择的被淘汰页面将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。
-
采用最佳置换算法通常可保证获得最低的缺页率。
-
由于人们目前还无法预知,一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。
3.2 先进先出(FIFO)页面置换算法
FIFO算法是最早出现的置换算法。
-
该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
-
该算法实现简单,只需把一个进程已调入内存的页面按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
-
但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。
3.3 最近最久未使用(LRU)置换算法
FIFO置换算法的性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。
- 最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做出决策的。
LRU置换算法的硬件支持:
-
寄存器:
为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄存器,可表示为: R = Rn-1Rn-2Rn-3 ... R2R1R0
进程访问某物理块时,要将相应寄存器的Rn-1位置成1。此时,定时信号将每隔一定时间(例如100 ms)将寄存器右移一位。如果我们把n位寄存器的数看作是一个整数,那么,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。
-
栈:
可利用一个特殊的栈保存当前使用的各个页面的页面号。
每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。
3.4 最少使用(LFU)置换算法
在采用LFU算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。
- 该置换算法选择在最近时期使用最少的页面作为淘汰页。
3.5 Clock置换算法
简单的Clock置换算法:
- 当利用简单Clock算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。
改进型Clock置换算法:
-
在将一个页面换出时,如果该页已被修改过,便须将该页重新写回到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。
-
对于修改过的页面,在换出时所付出的开销比未修改过的页面大,或者说,置换代价大。
-
在改进型Clock算法中,除须考虑页面的使用情况外,还须再增加一个因素------置换代价。
3.6 页面缓冲算法(PBA)
影响页面换进换出效率的若干因素:
-
页面置换算法。
-
写回磁盘的频率。
-
读入内存的频率。
页面缓冲算法PBA:
-
PBA算法的主要特点是:
-
显著地降低了页面换进、换出的频率,使磁盘I/O的操作次数大为减少,因而减少了页面换进、换出的开销;
-
正是由于换入换出的开销大幅度减小,才能使其采用一种较简单的置换策略,如先进先出(FIFO)算法,它不需要特殊硬件的支持,实现起来非常简单。
-
为了显著降低页面换进、换出的频率,在内存中设置了如下两个链表:
- 空闲页面链表。
- 修改页面链表。
3.7 访问内存的有效时间
与基本分页存储管理方式不同,在请求分页管理方式中,内存有效访问时间不仅要考虑访问页表和访问实际物理地址数据的时间,还必须要考虑到缺页中断的处理时间。
4. "抖动"与工作集
由于请求分页式虚拟存储器系统的性能优越,在正常运行情况下,它能有效地减少内存碎片,提高处理机的利用率和吞吐量,故是目前最常用的一种系统。
但如果在系统中运行的进程太多,进程在运行中会频繁地发生缺页情况,这又会对系统的性能产生很大的影响,故还须对请求分页系统的性能做简单的分析。
4.1 多道程序度与"抖动"
多道程序度与处理机的利用率:
-
由于虚拟存储器系统能从逻辑上扩大内存,这时,只需装入一个进程的部分程序和数据便可开始运行,故人们希望在系统中能运行更多的进程。
-
即增加多道程序度,以提高处理机的利用率。
产生"抖动"的原因:
-
发生"抖动"的根本原因是同时在系统中运行的进程太多,由此分配给每一个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程在运行时,频繁地出现缺页,必须请求系统将所缺之页调入内存。
-
这会使得在系统中排队等待页面调进/调出的进程数目增加。
-
显然,对磁盘的有效访问时间也随之急剧增加,造成每个进程的大部分时间都用于页面的换进/换出,而几乎不能再去做任何有效的工作,从而导致发生处理机的利用率急剧下降并趋于0的情况,称此时的进程是处于"抖动"状态。
4.2 工作集
工作集的基本概念:
- 进程发生缺页率的时间间隔与进程所获得的物理块数有关。
-
关于工作集的理论是1968年由Denning提出并推广的。
-
Denning认为:基于程序运行时的局部性原理得知,程序在运行期间,对页面的访问是不均匀的,在一段时间内仅局限于较少的页面,在另一段时间内,又可能仅局限于对另一些较少的页面进行访问。
-
这些面被称为活跃页面。如果能够预知程序在某段时间间隔内要访问哪些页面,并将它们内存,将会大大降低缺页率,从而可显著地提高处理机的利用率。
工作集的定义:
-
工作集指在某段时间间隔Δ里,进程实际所要访问页面的集合。
-
Denning指出,虽然程序只需要少量的几页在内存便可运行,但为了较少地产生缺页,应将程序的全部工作集装入内存中。
-
然而我们无法事先预知程序在不同时刻将访问哪些页面,故仍只有像置换算法那样,用程序的过去某段时间内的行为作为程序在将来某段时间内行为的近似。
4.3 "抖动"的预防方法
采取局部置换策略:
-
在页面分配和置换策略中,如果采取的是可变分配方式,则为了预防发生"抖动",可采取局部置换策略。
-
根据这种策略,当某进程发生缺页时,只能在分配给自己的内存空间内进行置换,不允许从其它进程去获得新的物理块。
-
这样,即使该进程发生了"抖动",也不会对其它进程产生影响,于是可把该进程"抖动"所造成的影响限制在较小的范围内。
-
该方法虽然简单易行,但效果不是很好,因为在某进程发生"抖动"后,它还会长期处在磁盘IO的等待队列中,使队列的长度增加,这会延长其它进程缺页中断的处理时间,也就是延长了其它进程对磁盘的访问时间。
把工作集算法融入到处理机调度中:
-
当调度程序发现处理机利用率低下时,它将试图从外存调入一个新作业进入内存,改善处理机的利用率。
-
如果在调度中融入了工作集算法,则在调度程序从外存调入作业之前,必须先检查每个进程在内存的驻留页面是否足够多。
-
如果都已足够多,此时便可以从外存调入新的作业,不会因新作业的调入而导致缺页率的增加;反之,如果有些进程的内存页面不足,则应首先为那些缺页率居高的作业增加新的物理块,此时将不再调入新的作业。
利用"L=S"准则调节缺页率:
-
Denning于1980年提出了
L=S
的准则来调节多道程序度,其中L
是缺页之间的平均时间,S
是平均缺页服务时间,即用于置换一个页面所需的时间。 -
如果是
L
远比S
大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L
比S
小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L
与S
接近时,磁盘和处理机都可达到它们的最大利用率。 -
理论和实践都已证明,利用
L=S
准则,对于调节缺页率是十分有效的
选择暂停的进程:
-
当多道程序度偏高时,已影响到处理机的利用率,为了防止发生"抖动",系统必须减少多道程序的数目。
-
此时应基于某种原则选择暂停某些当前活动的进程,将它们调出到磁盘上,以便把腾出的内存空间分配给缺页率发生偏高的进程。
-
系统通常都是采取与调度程序一致的策略,即首先选择暂停优先级最低的进程,若需要,再选择优先级较低的进程,当内存还显拥挤时,还可进一步选择暂停一个并不十分重要、但却较大的进程,以便能释放出较多的物理块,或者暂停剩余执行时间最多的进程等。
5. 请求分段存储管理方式
5.1 请求分段中的硬件支持
为了实现请求分段式存储管理,应在系统中配置多种硬件机构,以支持快速地完成请求分段功能。与请求分页系统相似,在请求分段系统中所需的硬件支持有段表机制、缺段中断机构,以及地址变换机构。
请求段表机制:
- 在请求分段式管理中所需的主要数据结构是请求段表。在该表中除了具有请求分页机制中有的访问字段A、修改位M、存在位P和外存始址四个字段外,还增加了存取方式字段和增补位。这些字段供程序在调进、调出时参考。
缺段中断机构:
-
在请求分段系统中采用的是请求调段策略。
-
每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后,由缺段中断处理程序将所需的段调入内存。
-
与缺页中断机构类似,缺段中断机构同样需要在一条指令的执行期间产生和处理中断,以及在一条指令执行期间,可能产生多次缺段中断。
-
但由于分段是信息的逻辑单位,因而不可能出现一条指令被分割在两个分段中,和一组信息被分割在两个分段中的情况。
地址变换机构:
-
请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上形成的。
-
因为被访问的段并非全在内存,所以在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。
-
为此,在地址变换机构中又增加了某些功能,如缺段中断的请求及处理等。
5.2 分段的共享与保护
共享段表:
为了实现分段共享,可在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。
在表项的上面记录了共享段的段号、段长、内存始址、状态(存在)位、外存始址以及共享计数等信息。接下去就是记录了共享此分段的每个进程的情况。
-
共享进程计数count。
非共享段仅为一个进程所需要。当进程不再需要该段时,可立即释放该段,并由系统回收该段所占用的空间。而共享段是为多个进程所需要的,为记录有多少进程正在共享该分段,须设置共享进程计数count。当某进程不再需要而释放它时,系统并不立即回收该段所占内存区,而是检查count是否为0,若不是0,则表示还有进程需要它,仅当所有共享该段的进程全都不再需要它时,此时count为0,才由系统回收该段所占内存区。
-
存取控制字段。
对于一个共享段,应为不同的进程赋予不同的存取权限。例如,对于文件主,通常允许他读和写;而对其它进程,则可能只允许读,甚至只允许执行。
-
段号。
对于一个共享段,在不同的进程中可以具有不同的段号,每个进程可用自已进程的段号去访问该共享段。
共享段的分配:
-
共享段的分配由于共享段是供多个进程所共享的,因此,对共享段的内存分配方法,与非共享段的内存分配方法有所不同。
-
在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写请求使用该共享段的进程名、段号和存取控制等有关数据,把
count
置为1
。 -
当又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址。
-
在共享段的段表中增加一个表项,填上调用进程的进程名、该共享段在本进程中的段号、存取控制等,再执行
count=count+1
操作,以表明有两个进程共享该段。 -
以后,凡有进程需要访问此共享段的,都按上还方式在共享段的段表中增加一个表项。
共享段的回收:
-
当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享段所对应的表项,以及执行
count=count-1
操作。 -
若结果为
0
,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段否则(减1
结果不为0
),只是取消调用者进程在共享段表中的有关记录。
分段保护:
-
越界检查。
越界检查是利用地址变换机构来完成的。
-
在地址变换机构中设置了段表寄存器用于存放段表始址和段表长度信息。
-
在进行地址变换时,首先将逻辑地址空间的段号与段表长度进行比较,如果段号等于或大于段表长度,将发出地址越界中断信号。
-
此外,还在段表中为每个段设置有段长字段,在进行地址变换时,还要检查段内地址是否等于或大于段长,若大于段长,将产生地址越界中断信号,从而保证了每个进程只能在自己的地址空间内运行。
-
-
存取控制检查。
存取控制检查是以段为基本单位进行的。
-
在段表的每个表项中都设置了一个"存取控制"字段,用于规定对该段的访问方式。
-
通常的访问方式有:
只读,即只允许进程对该段中的程序或数据进行读访问:
只执行,即只允许进程调用该段去执行,但不准读该段的内容,更不允许对该目执行写操作:
读/写,即允许进程对该段进行读/写访问。
对于共享段面言,存取控制就显得尤为重要,因而对不同的进程应赋予不同的读写权限。
这时,既要保证信息的安全性,又要满足运行需要。
-
例如,对于一个企业的财务账目,应该只允许会计人员进行读或写,允许领导及有关人员去读。而对于一般人员,则既不准读,更不能写。值得一提的是,这里所介绍的存取控制检查是基于硬件实现的,它能较好地保证信息的安全,因为攻击者很难对存取控制字段进行修改。
-
环保护机构。
这是一种功能较完善的保护机制。在该机制中规定:低编号的环具有高优先权。
OS核心处于0号环内;某些重要的实用程序和操作系统服务占居中间环;而一般的应用程序,则被安排在外环上。
在环系统中,程序的访问和遇用应道循以下规则:
-
一个程序可以访问驻留在相同环或较低特权环(外环)中的数据;
-
一个程序可以调用驻留在相同环或较高特权环(内环)中的服务。
-
6. 补充
-
常规存储器管理方式具有哪两大特征? 它对系统性能有何影响?
常规存储器管理方式具有两大特征,即一次性 和驻留性。这两个特征对系统性能产生了显著的影响。
两大特征
-
一次性:指作业或进程必须一次性全部装入内存后才能开始运行。这意味着,在程序执行之前,所有需要的代码和数据都必须被加载到内存中。
-
驻留性:指在作业或进程装入内存后,会一直保持驻留在内存中,直到作业或进程结束。这意味着,即使某些程序或数据在程序运行过程中暂时不需要,它们也会继续占用内存空间。
对系统性能的影响
-
内存资源浪费:
-
由于一次性特征,如果程序很大,而可用内存不足以容纳整个程序,那么程序将无法运行。这会导致内存资源的浪费,因为即使程序的部分代码或数据在运行时并不需要,也必须全部加载到内存中。
-
由于驻留性特征,一些在程序运行过程中暂时不需要的程序或数据会继续占用内存空间,而一些需要运行的作业又无法再装进运行,这同样会导致内存资源的浪费。
-
-
系统性能下降:
-
当内存资源被大量占用时,系统的整体性能可能会受到影响。例如,如果内存不足,系统可能会频繁地进行磁盘I/O操作,以交换内存中的数据,这会导致程序运行速度的下降。
-
同时,由于内存资源的浪费,系统可能无法同时运行多个程序或进程,这也会限制系统的并发性和多任务处理能力。
-
综上所述,常规存储器管理方式的一次性和驻留性特征虽然简化了内存管理的复杂性,但也带来了内存资源浪费和系统性能下降的问题。因此,在现代操作系统中,通常采用更加灵活的存储器管理方式,如虚拟内存、分页存储管理等,以更好地利用内存资源并提高系统性能。
-
-
什么是程序运行时的时间局限性和空间局限性?
程序运行时的时间局限性和空间局限性是计算机科学中的两个重要概念,它们描述了程序在执行过程中访问指令和存储单元的特性。
时间局限性
时间局限性指的是,如果程序中的某条指令被执行,那么在不久的将来,该指令可能会再次被执行。同样地,如果某个存储单元被访问,那么在不久的将来,该存储单元也可能再次被访问。这种重复访问的特性通常是由于程序中存在大量的循环操作所导致的。在循环结构中,某些指令或存储单元会被反复执行或访问,因此它们具有较高的时间局部性。
空间局限性
空间局限性则是指,一旦程序访问了某个存储单元,那么在不久的将来,其附近的存储单元也可能被访问。这意味着,程序在一段时间内所访问的地址可能会集中在一定的范围内。这种特性通常是由于程序的顺序执行所导致的。在顺序执行的过程中,程序往往会按照一定的顺序访问存储单元,因此相邻的存储单元具有较高的空间局部性。
影响与意义
时间局限性和空间局限性对于程序设计和优化具有重要意义。了解这些特性可以帮助我们更好地设计存储结构和算法,以提高程序的执行效率和性能。例如,在缓存设计中,可以利用时间局部性和空间局部性来预测哪些数据或指令可能会被频繁访问,并将它们存储在缓存中以提高访问速度。此外,在操作系统中的虚拟内存管理中,页面置换算法也考虑了时间局限性和空间局限性,以决定哪些页面应该被保留在内存中,哪些页面应该被置换出去。
综上所述,程序运行时的时间局限性和空间局限性是描述程序访问指令和存储单元特性的重要概念。它们对于程序设计和优化具有重要意义,可以帮助我们更好地利用存储资源和提高程序的执行效率。
-
虚拟存储器有哪些特征? 其中最本质的特征是什么?
虚拟存储器具有多个显著特征,这些特征共同定义了其功能和性能。以下是虚拟存储器的主要特征及其最本质特征的探讨:
虚拟存储器的特征
-
虚拟性:
-
虚拟性是指虚拟存储器能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际的物理内存容量。
-
这是虚拟存储器所表现出的最重要的特征,也是其设计的主要目标之一。
-
-
离散性:
-
离散性是指内存分配时采用离散分配的方式,即内存空间被划分为多个小的、独立的存储单元(如页或段),这些单元可以独立地被分配和释放。
-
离散分配方式避免了连续分配方式可能导致的内存碎片问题,提高了内存的利用率。
-
-
多次性:
-
多次性是指一个作业或进程可以被分成多次调入内存运行。
-
在程序运行时,只将当前需要运行的那部分程序和数据装入内存,以后再需要时再从外存调入。
-
这种多次性特征使得程序可以更加灵活地利用内存资源,提高了系统的并发性和多任务处理能力。
-
-
对换性:
-
对换性是指允许在作业或进程运行过程中进行内存和外存之间的数据交换。
-
当内存中的某些页面或段暂时不需要时,可以将它们换出到外存中,以释放内存空间给其他需要的作业或进程。
-
当需要这些页面或段时,再从外存中调入内存。
-
最本质的特征
关于虚拟存储器最本质的特征,存在不同的观点。一种观点认为,离散性是虚拟存储器最本质的特征,因为离散分配方式使得内存空间可以被更加灵活地利用,避免了连续分配方式可能导致的内存碎片问题。另一种观点则认为,虚拟性是虚拟存储器最本质的特征,因为虚拟性使得用户能够看到一个比实际物理内存容量大得多的逻辑内存空间,从而提高了系统的灵活性和可扩展性。
从虚拟存储器的定义和功能来看,虚拟性确实是一个非常重要的特征。它使得系统能够为用户提供更大的内存空间,而无需增加实际的物理内存。然而,离散性也是虚拟存储器实现的基础之一,没有离散性就不可能实现虚拟存储器。因此,可以说虚拟性和离散性都是虚拟存储器的重要特征,而其中最本质的特征可能取决于具体的定义和视角。
综上所述,虚拟存储器具有虚拟性、离散性、多次性和对换性等特征。这些特征共同定义了虚拟存储器的功能和性能,并使得虚拟存储器成为现代操作系统中不可或缺的一部分。
-
-
实现虚拟存储器需要哪些硬件支持?
实现虚拟存储器需要以下硬件支持:
-
足够容量的外存:
-
外存(如硬盘、SSD等)是虚拟存储器的重要组成部分,用于存放当前未调入内存的程序和数据。
-
当需要时,可以从外存中调入数据到内存,以满足程序的运行需求。
-
-
一定容量的内存:
-
内存是程序运行时的主要存储空间,用于存放当前正在执行的程序和数据。
-
在虚拟存储器系统中,内存需要能够容纳一部分程序和数据,以便程序能够正常运行。
-
-
地址变换机构:
-
地址变换机构是实现虚拟存储器中的虚拟地址到物理地址映射的关键硬件。
-
它负责将程序中的虚拟地址转换为实际的物理地址,以便从内存中正确地读取或写入数据。
-
在现代计算机系统中,地址变换机构通常通过页表或段表等数据结构来实现。
-
-
请求分页/分段系统:
-
请求分页/分段系统是实现虚拟存储器的软件部分,但也需要硬件的支持。
-
在请求分页系统中,硬件需要提供页表机制、缺页中断机制和地址变换机构等。
-
在请求分段系统中,硬件则需要提供段表机制、缺段中断机制和地址变换机构等。
-
综上所述,实现虚拟存储器需要足够容量的外存、一定容量的内存、地址变换机构以及请求分页/分段系统的硬件支持。这些硬件支持共同构成了虚拟存储器的基础,使得系统能够为用户提供更大的内存空间,提高系统的灵活性和可扩展性。
-
-
实现虚拟存储器需要哪几个关键技术?
实现虚拟存储器需要以下几个关键技术:
-
分页技术:
-
分页技术是将物理内存和虚拟内存划分为固定大小的页(或称为块)。程序在执行时,只需将当前需要运行的页调入内存,其余页则保留在外存中。
-
分页技术使得程序可以在不需要全部加载到内存中的情况下运行,从而提高了内存的利用率。
-
-
页面置换算法:
-
页面置换算法用于在内存不足时,决定哪些页需要从内存中置换出去,以便为新的页腾出空间。
-
常见的页面置换算法包括FIFO(先进先出)、LRU(最近最少使用)、LFU(最不经常使用)和Clock算法等。
-
页面置换算法的选择对系统的性能有很大影响,需要根据具体的应用场景进行选择。
-
-
页面映射:
-
页面映射技术用于建立虚拟地址与物理地址之间的映射关系。
-
在程序运行时,CPU会产生虚拟地址,页面映射机制将这些虚拟地址转换为物理地址,以便程序能够正确地访问内存。
-
页面映射通常通过页表来实现,页表是一个数据结构,它记录了每个虚拟页面对应的物理页面地址。
-
-
内存保护:
-
内存保护技术用于保护不同进程的内存空间,防止进程间的干扰。
-
通过设置页面属性、用户权限等方式,可以确保每个进程只能访问其自己的内存空间,而不能访问其他进程的内存空间。
-
内存保护技术有助于提高系统的安全性和稳定性。
-
-
页面共享:
-
页面共享技术允许多个进程共享同一个物理内存页。
-
通过页面共享,可以减少内存开销,提高内存的利用率。
-
页面共享技术特别适用于需要运行多个相同或相似程序的场景。
-
-
缺页中断处理:
-
当CPU访问的页面不在物理内存中时,会触发缺页中断。
-
缺页中断处理程序负责从外存中调入所需的页面到内存中,并更新页表。
-
缺页中断处理是实现虚拟存储器不可或缺的一部分,它确保了程序在需要时能够访问到所需的页面。
-
综上所述,实现虚拟存储器需要分页技术、页面置换算法、页面映射、内存保护、页面共享以及缺页中断处理等关键技术。这些技术共同构成了虚拟存储器的基础,使得系统能够为用户提供更大的内存空间,提高系统的灵活性和可扩展性。
-
-
在请求分页系统中,页表应包括哪些数据项? 每项的作用是什么?
在请求分页系统中,页表是内存管理的重要数据结构,用于记录虚拟页面对应的物理页面信息。页表通常包含以下数据项,每项都有其特定的作用:
-
页号:
-
页号用于标识虚拟内存中的页面。
-
在页表中,页号是唯一的,用于区分不同的虚拟页面。
-
-
物理块号(或页框号):
-
物理块号用于标识物理内存中的页面或块。
-
它与页号相对应,表示虚拟页面在物理内存中的位置。
-
-
状态位P:
-
状态位P用于指示该页是否已调入内存。
-
当P=1时,表示该页已调入内存;当P=0时,表示该页未调入内存,需要从外存中调入。
-
状态位P为系统提供了页面是否存在的信息,有助于系统快速定位页面。
-
-
访问字段A:
-
访问字段A用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长时间未被访问。
-
这个字段供选择换出页面时参考,有助于系统实现页面置换算法,如LRU算法。
-
-
修改位M:
-
修改位M表示该页在调入内存后是否被修改过。
-
当M=1时,表示该页已被修改;当M=0时,表示该页未被修改。
-
修改位M在置换页面时非常重要,因为如果页面被修改过,在置换时需要将其写回外存,以保证外存中所保留的始终是最新副本。
-
-
外存地址:
-
外存地址用于指出该页在外存上的地址。
-
当页面未调入内存时,系统可以根据外存地址从外存中调入该页。
-
外存地址是页面调入和置换过程中的重要参考信息。
-
综上所述,页表中的这些数据项共同构成了虚拟存储器的基础,使得系统能够高效地管理内存,提高内存的利用率和系统的性能。每个数据项都有其特定的作用,共同支持着请求分页系统的正常运行。
-
-
试比较缺页中断机构与一般的中断,它们之间有何明显的区别?
缺页中断与一般的中断在计算机系统中有明显的区别。以下是对这两者的详细比较:
一、定义与产生时机
-
缺页中断:
-
在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断。
-
缺页中断是在指令执行期间,发现所要访问的指令或数据不在内存时产生和处理的。也就是说,它可能在一条指令执行的过程中多次发生(如指令跨越多个页面,且这些页面都不在内存时)。
-
-
一般中断:
-
一般中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序。
-
一般中断通常是在一条指令执行完毕后,当硬件中断装置发现有中断请求时才去响应与处理。
-
二、处理过程与结果
-
缺页中断:
-
缺页中断处理时,除了需要保护现场之外,还需要判断内存中是否有足够的空间存储所需的页,然后再把所需页调进来使用。
-
处理完毕后,由于原指令尚未执行完(因为所需页面之前不在内存),所以返回到原指令去重新执行。
-
-
一般中断:
-
一般中断处理时,主要任务是保护现场、分析中断原因、执行相应的中断处理程序。
-
处理完毕后,返回到被中断进程的下一条指令去执行(因为上一条指令已经执行完毕),或者根据系统需要重新调度,去执行别的进程程序。
-
三、特殊性与影响
-
缺页中断:
-
缺页中断是一种特殊的中断,因为它与内存管理紧密相关,是虚拟存储器实现的关键机制之一。
-
频繁的缺页中断可能会导致系统性能下降,因为每次缺页都需要从外存中调入页面,这会增加I/O操作的次数和时间。
-
-
一般中断:
-
一般中断是计算机系统中常见的现象,用于处理各种异常情况或外部事件。
-
一般中断对系统性能的影响取决于中断的类型和频率,以及中断处理程序的复杂性和执行时间。
-
综上所述,缺页中断与一般的中断在定义与产生时机、处理过程与结果以及特殊性与影响等方面都存在明显的区别。这些区别使得缺页中断成为虚拟存储器实现中的关键机制,而一般中断则是计算机系统中处理异常情况或外部事件的重要手段。
-
-
试说明请求分页系统中的地址变换过程。
请求分页系统中的地址变换过程涉及将程序的逻辑地址(或称为虚拟地址)转换为物理地址,以便CPU能够正确地访问内存。以下是该过程的详细步骤:
-
分解逻辑地址:
- 首先,系统需要将程序的逻辑地址分解为页号(P)和页内偏移量(w)。逻辑地址通常由两部分组成:高位的页号和低位的页内偏移量。
-
查找页表:
- 接着,系统使用页号作为索引,在页表中查找对应的页表项。页表是一个数据结构,它记录了每个逻辑页面在物理内存中的位置(即物理块号)以及其他相关信息。
-
检查中断位:
- 在找到对应的页表项后,系统需要检查该页的中断位(也称为存在位或有效位)。如果中断位为1,表示该页已在内存中,可以继续进行下一步的地址变换。如果中断位为0,表示该页不在内存中,此时会产生缺页中断,系统需要暂停当前进程,从外存中调入所需的页面,并更新页表。
-
更新页表项(如适用):
- 如果产生了缺页中断并成功调入了页面,系统需要更新页表项中的相关信息,如物理块号、访问位、修改位等。
-
计算物理地址:
- 在确认页面已在内存中后,系统可以使用页表项中的物理块号和页内偏移量来计算物理地址。物理地址的计算公式通常为:物理地址 = 物理块号 × 页面大小 + 页内偏移量。
-
(可选)快表查找:
- 在一些现代计算机系统中,为了提高地址变换的速度,通常会设置一个快表(也称为TLB或转换后备缓冲器)。快表是一个小型的缓存,用于存储最近访问过的页表项。在进行地址变换时,系统可以先尝试在快表中查找对应的页表项。如果找到,则可以直接使用快表中的信息进行地址变换,而无需访问主存中的页表。这样可以大大减少访问主存的次数,提高系统的性能。
综上所述,请求分页系统中的地址变换过程是一个复杂而关键的过程,它涉及多个步骤和组件的协同工作。通过这个过程,系统能够将程序的逻辑地址转换为物理地址,从而实现虚拟存储器的功能。
-
-
何谓固定分配局部置换和可变分配全局置换的内存分配策略?
固定分配局部置换和可变分配全局置换是内存分配策略中的两种重要方式,它们各自具有不同的特点和应用场景。
固定分配局部置换
-
定义:
-
固定分配是指为每个进程分配一组固定数目的物理块(或称为页面框),在进程运行期间这些物理块的数量不再改变。
-
局部置换是指如果进程在运行中发现缺页(即所需的页面不在内存中),则只能从分配给该进程的这些物理块中选出一页换出(即移出内存),然后再调入一页,以保证分配给该进程的内存空间总量不变。
-
-
特点:
-
优点:实现相对简单,因为物理块的数量是固定的,不需要动态调整。
-
缺点:难以确定每个进程应分配多少物理块。如果分配的物理块太少,可能导致频繁的缺页中断和性能下降;如果分配的物理块太多,则可能浪费内存资源。
-
-
应用场景:
- 适用于对内存需求相对稳定、变化不大的进程。
可变分配全局置换
-
定义:
-
可变分配是指先为每个进程分配一定数目的物理块,在进程运行期间,这些物理块的数量可以根据情况做适当的增加或减少。
-
全局置换是指如果进程在运行中发现缺页,则从操作系统(OS)所保留的空闲物理块队列中取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块换出(即选择一个进程的一个页面移出内存),然后将所缺之页调入。
-
-
特点:
-
优点:能够根据进程的实际需求动态调整物理块的数量,提高了内存的利用率和系统的灵活性。
-
缺点:实现相对复杂,需要维护一个空闲物理块队列,并在缺页时执行全局置换算法。此外,全局置换可能导致某些进程的物理块数量减少,进而增加其缺页率。
-
-
应用场景:
- 适用于对内存需求变化较大的进程,或者需要高效利用内存资源的系统。
综上所述,固定分配局部置换和可变分配全局置换是两种不同的内存分配策略,它们各自具有优缺点和适用的场景。在实际应用中,需要根据系统的具体需求和进程的特点来选择合适的策略。
-
-
在请求分页系统中,应从何处将所需页面调入内存?
在请求分页系统中,当发生缺页中断时,系统需要从某个位置将所需的页面调入内存。具体应从何处调入,取决于系统的具体情况和配置。以下是几种可能的来源:
-
对换区(或称为交换区):
-
当系统拥有足够的对换区空间时,可以优先从对换区调入所需页面。这是因为对换区通常采用连续分配方式,磁盘I/O速度相对较高,可以加快页面的调入速度。
-
在进程运行前,可以将与该进程有关的文件从文件区拷贝到对换区,以便在需要时快速调入。
-
对于曾经运行过但被换出的页面,如果它们被保存在对换区中,那么下次需要时可以从对换区直接调入。
-
-
文件区:
-
当系统缺少足够的对换区空间时,或者某些页面未被修改过(即修改位为0),可以直接从文件区调入所需页面。
-
文件区通常采用离散分配方式,磁盘I/O速度可能相对较低,但仍然是页面调入的一个重要来源。
-
对于那些不会被修改的文件页面,或者已经被换出且未被修改过的页面,可以直接从文件区调入。
-
-
UNIX系统特有的方式:
-
在UNIX系统中,如果某进程请求的页面有可能已调入内存(例如,通过页面共享机制),则可以直接使用而不再调入。
-
对于未运行过的页面,通常从文件区调入。
-
对于曾经运行过但被换出的页面,如果它们被保存在对换区中,则下次需要时从对换区调入;如果它们未被保存在对换区中但仍在文件区中,则从文件区调入。
-
综上所述,在请求分页系统中,所需页面的调入来源可以是对换区、文件区或者(在UNIX系统中)已调入内存的共享页面。具体选择哪个来源取决于系统的配置、页面的修改状态以及页面的使用情况。
-
-
试说明在请求分页系统中页面的调入过程。
在请求分页系统中,页面的调入过程是一个关键步骤,它确保了当程序需要访问某个不在内存中的页面时,系统能够自动地从外存中调入该页面。以下是该过程的详细说明:
一、缺页中断的产生
-
当程序试图访问一个不在内存中的页面时,硬件会检测到这一错误,并向CPU发出一个缺页中断。
-
CPU响应缺页中断,并暂停当前程序的执行,同时保存当前的环境(如寄存器内容、程序计数器等),以便在调入页面后能够继续执行。
二、缺页中断的处理
-
保护CPU环境:中断处理程序首先会保护CPU的当前环境,防止在处理缺页中断时破坏程序的执行状态。
-
分析中断原因:接着,中断处理程序会分析缺页中断的原因,确认是由于页面未调入内存导致的。
-
转入缺页中断处理程序:一旦确认是缺页中断,系统会转入专门的缺页中断处理程序来处理这一事件。
三、页面的调入
-
查找页表:缺页中断处理程序会查找页表,确定缺页的页号,并获取该页在外存上的物理块号(或地址)。
-
检查内存状态:
-
如果此时内存有足够的空闲空间来容纳新页面,系统会直接启动磁盘I/O操作,将所缺页面从外存调入内存。
-
如果内存已满,系统则需要按照某种置换算法(如LRU、FIFO等)从内存中选出一页准备换出。
-
-
页面置换:
-
如果被选中的页面未被修改过(即修改位为0),则可以直接将该页面从内存中移除,无需写回外存。
-
如果被选中的页面已被修改过(即修改位为1),则必须先将该页面写回外存,以更新外存中的数据。
-
-
调入新页面:
在成功置换出旧页面(如果需要的话)后,系统会启动磁盘I/O操作,将所缺页面从外存调入内存,并更新页表中的相应表项。
-
将新页面的物理块号写入页表。
-
将新页面的存在位设置为1,表示该页面已调入内存。
-
如果系统有快表(TLB),还需要更新快表中的相应表项。
-
四、恢复程序执行
-
在成功调入新页面后,系统会利用修改后的页表形成所要访问的物理地址,并恢复之前保存的CPU环境。
-
然后,系统会继续执行之前被暂停的程序,从产生缺页中断的下一条指令开始执行。
整个页面的调入过程对用户是透明的,用户无需关心页面是如何被调入内存的。系统通过缺页中断和页面置换等机制,确保了程序的连续执行和内存的有效利用。
-
-
在请求分页系统中,常采用哪几种页面置换算法?
在请求分页系统中,常用的页面置换算法主要有以下几种:
-
最佳(Optimal,OPT)置换算法:
-
原理:选择在将来最长时间内不再被访问的页面淘汰出去。
-
优点:可保证获得最低的缺页中断率,是一种理想化的置换算法,性能最好。
-
缺点:要求操作系统能知道进程"将来"页面的使用情况,但这是不可能实现的,因为程序的执行是不可预测的。
-
-
先进先出(First In First Out,FIFO)置换算法:
-
原理:总是淘汰最先进入内存的页面。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针(称为替换指针),使它总是指向最老页面。
-
优点:实现简单。
-
缺点:与进程实际运行的规律不相适应,没有考虑到动态变化情况。对于某一特定的页面走向,先进先出算法会出现缺页中断率随着被分配的内存块增加反而上升的反常现象,即Belady现象。
-
-
最近最久未使用(Least Recently Used,LRU)置换算法:
-
原理:选择最近的过去中最久未访问的页面淘汰出去。
-
优点:考虑了页面调入内存后的使用情况,具有较好的性能。
-
缺点:要快速地找出最近最久未被使用的页面,需要花费巨大的系统开销,往往需要较多的硬件支持。因此,在实际系统中往往使用其近似算法。
-
-
CLOCK置换算法:
-
原理:也被称为最近未使用(Not Recently Used,NUR)置换算法,是LRU算法的近似算法。它根据访问位和修改位的检查结果,按照特定的顺序(如未被访问且未被修改、未被访问但被修改、已被访问但未被修改、已被访问且被修改)淘汰页面。
-
优点:实现相对简单,且能够在一定程度上模拟LRU算法的行为。
-
缺点:性能略低于LRU算法,但通常优于FIFO算法。
-
综上所述,这些页面置换算法各有优缺点,适用于不同的应用场景。在实际系统中,需要根据具体需求和资源情况选择合适的算法。
-
-
实现LRU算法所需的硬件支持是什么?
实现LRU(Least Recently Used)算法所需的硬件支持主要包括寄存器和栈(或类似的硬件结构)。以下是详细的解释:
-
寄存器:
-
寄存器在LRU算法中用于记录某进程在内存中各页的使用情况。具体来说,寄存器可以保存页面的访问时间戳或某种形式的"最近使用"标记。
-
当进程访问某个页面时,系统会更新该页面在寄存器中的时间戳或标记,以反映其最近的使用情况。
-
寄存器具有较快的访问速度,能够高效地支持LRU算法的实现。
-
-
栈:
-
栈在LRU算法中用于保存当前使用的各个页面的页面号。栈的特点是后进先出(LIFO),这与LRU算法的思想在某种程度上是相似的,因为最近使用的页面往往会被频繁访问,并因此而被保留在栈顶。
-
当进程访问某个页面时,如果该页面不在栈中,则将其页面号压入栈顶;如果页面已在栈中,则将其从栈中移除并重新压入栈顶,以更新其"最近使用"的标记。
-
当需要置换页面时,可以从栈底(即最久未使用的页面)选择页面进行置换。
-
需要注意的是,虽然栈在概念上与LRU算法有一定的契合度,但在实际实现中,由于栈的操作(如压栈、弹栈)相对简单,而LRU算法需要更复杂的访问历史记录和比较操作,因此通常不会直接使用栈来实现LRU算法。相反,更常见的是使用数组、链表或哈希表等数据结构来模拟LRU算法的行为。
此外,现代计算机系统中还可能采用专门的硬件结构(如LRU缓存标签)来支持LRU算法的实现,以提高算法的性能和效率。这些硬件结构通常与处理器的缓存系统紧密结合,能够快速地识别并置换最久未使用的缓存行。
综上所述,实现LRU算法所需的硬件支持主要包括寄存器和栈(或类似的硬件结构),但具体实现方式可能因系统架构和性能需求而有所不同。
-
-
试说明改进型Clock置换算法的基本原理。
改进型Clock置换算法的基本原理是在传统的Clock置换算法基础上,增加了一个考虑因素------置换代价。具体来说,它引入了一个修改位(M位),用于指示页面是否被修改过。在选择淘汰页面时,改进型Clock算法会优先考虑那些既未使用过又未被修改过的页面,因为这些页面在置换出内存时不需要写回磁盘,从而降低了置换代价。
以下是改进型Clock置换算法的基本步骤:
-
初始化:
-
为每个页面设置一个访问位(A位)和一个修改位(M位)。
-
访问位(A位):用于记录页面是否被访问过,每次访问页面时将其置为1。
-
修改位(M位):用于记录页面是否被修改过,如果页面被修改过则置为1,否则为0。
-
-
循环扫描:
-
从一个起始位置开始,循环扫描内存中的页面。
-
在每次扫描过程中,根据页面的A位和M位来判断是否满足置换条件。
-
-
选择淘汰页面:
-
首选淘汰页面:寻找A=0且M=0的页面,即最近既未被访问又未被修改的页面。这样的页面是最佳淘汰页,因为它们在置换出内存时不需要写回磁盘。
-
次选淘汰页面:如果找不到A=0且M=0的页面,则寻找A=0且M=1的页面,即最近未被访问但被修改过的页面。这样的页面虽然不是最佳淘汰页,但在必要时也可以被置换出内存。在置换出之前,需要将其内容写回磁盘。
-
-
更新访问位:
-
在每次成功置换页面后,需要将新调入的页面访问位A置为1,表示该页面已被访问过。
-
同时,将扫描过的所有页面的访问位A都置为0(这一步在首次扫描时可能不执行,具体取决于算法的实现)。
-
-
重复扫描:
- 如果在一次扫描过程中没有找到合适的淘汰页面,则继续从起始位置开始重复扫描,直到找到满足条件的页面为止。
-
置换页面:
- 一旦找到满足条件的淘汰页面,就将其内容置换出内存,并将新调入的页面写入内存中的相应位置。
-
更新修改位:
- 如果新调入的页面是从磁盘中读取的,并且其内容在内存中发生了修改,则需要将其修改位M置为1。
通过引入修改位M并考虑置换代价,改进型Clock置换算法能够在保证较低缺页率的同时,减少页面置换时的磁盘I/O操作,从而提高系统的整体性能。
-
-
影响页面换进换出效率的若干因素是什么?
影响页面换进换出效率的因素主要包括以下几个方面:
-
页面置换算法:
-
页面置换算法是影响页面换进换出效率的最重要因素。不同的置换算法会导致不同的缺页率和页面置换开销。
-
常见的置换算法如LRU(最近最少使用)、FIFO(先进先出)、OPT(最佳)以及Clock算法等,它们各有优缺点,适用于不同的应用场景。
-
LRU算法通常能够获得较低的缺页率,但实现起来较为复杂,需要额外的硬件支持。FIFO算法实现简单,但可能导致较高的缺页率。OPT算法理论上最优,但无法实现,因为它需要预知未来的页面访问情况。Clock算法则是一种折中的选择,它结合了LRU和FIFO的特点,实现相对简单且性能较好。
-
-
写回磁盘的频率:
-
写回磁盘的频率也是影响页面换进换出效率的重要因素。如果每次页面被置换出内存时都立即写回磁盘,那么磁盘I/O操作的次数将非常频繁,从而增加页面置换的开销。
-
为了减少磁盘I/O操作的次数,可以在系统中建立一个已修改换出页面链表。当页面被置换出内存时,如果它已被修改过,则将其挂在链表上而不是立即写回磁盘。只有当链表中的页面数量达到一定值时,再将它们一起写回到磁盘上。这样可以显著减少磁盘I/O操作的次数,提高页面换进换出的效率。
-
-
读入内存的频率:
-
读入内存的频率同样对页面换进换出效率有重要影响。如果频繁地从磁盘中读取页面到内存中,那么磁盘I/O操作的次数也会相应增加,从而降低页面换进换出的效率。
-
为了减少读入内存的频率,可以利用已修改换出页面链表中的页面。当需要访问某个页面时,如果它已经在链表中存在,那么可以直接从链表中获取而不需要从磁盘中读取。这样可以减少磁盘I/O操作的次数,提高页面换进的效率。
-
-
页面大小:
-
页面大小也会影响页面换进换出的效率。较大的页面可以减少页面置换的次数,因为每次置换可以覆盖更多的数据。但是,较大的页面也可能导致更高的内部碎片率,因为不是所有的页面都能被完全填满。
-
因此,在选择页面大小时需要权衡利弊,根据具体的应用场景和系统需求来确定合适的页面大小。
-
-
进程所分配的物理块的数目:
-
进程所分配的物理块的数目也会影响页面换进换出的效率。如果分配给进程的物理块数目较少,那么进程在运行过程中更容易发生缺页中断,从而增加页面置换的频率和开销。
-
相反,如果分配给进程的物理块数目较多,那么进程在运行过程中发生缺页中断的概率就会降低,页面置换的频率和开销也会相应减少。但是,过多的物理块分配也可能导致内存资源的浪费和内部碎片的增加。
-
-
程序固有特性:
-
程序的固有特性也会对页面换进换出的效率产生影响。例如,如果程序具有局部性原理(即程序在一段时间内通常只访问一个局部区域内的数据),那么页面置换的频率和开销就会相对较低。
-
相反,如果程序的数据访问模式比较随机或不规则,那么页面置换的频率和开销就会相对较高。
-
综上所述,影响页面换进换出效率的因素是多方面的,包括页面置换算法、写回磁盘的频率、读入内存的频率、页面大小、进程所分配的物理块的数目以及程序的固有特性等。在实际应用中,需要根据具体的应用场景和系统需求来综合考虑这些因素,并采取相应的优化措施来提高页面换进换出的效率。
-
-
页面缓冲算法的主要特点是什么? 它是如何降低页面换进、换出的频率的?
页面缓冲算法(Page Buffering Algorithm)的主要特点及其降低页面换进、换出频率的机制可以归纳如下:
主要特点
-
显著降低页面换进、换出频率:页面缓冲算法通过优化页面置换策略,显著减少了页面在内存和磁盘之间的频繁交换,从而降低了系统开销。
-
减少磁盘I/O操作次数:由于页面换进、换出频率的降低,磁盘I/O操作的次数也相应减少,这有助于提高系统的整体性能。
-
采用简单置换策略:由于页面缓冲算法能够显著降低页面置换的开销,因此可以采用较为简单的置换策略,如先进先出(FIFO)算法等,这些策略实现起来相对简单且不需要特殊硬件的支持。
-
优化内存分配策略:页面缓冲算法通常与可变分配和局部置换策略相结合,以更好地管理内存资源并降低页面置换的频率。
降低页面换进、换出频率的机制
-
空闲页面链表:
-
页面缓冲算法在内存中设置了一个空闲页面链表,用于管理空闲的物理块。
-
当有进程发生缺页时,系统可以从空闲页面链表中分配一个物理块给该进程。
-
如果某个页面需要被置换出内存,但尚未被修改,则可以将该页面所在的物理块重新挂回空闲页面链表的末尾,以便后续再次使用。
-
-
修改页面链表:
-
页面缓冲算法还设置了一个修改页面链表,用于管理已被修改但尚未写回磁盘的页面。
-
当一个页面被修改后,它会被加入到修改页面链表中。
-
系统会定期或根据需要将修改页面链表中的页面写回磁盘,从而降低已修改页面被频繁置换出内存并写回磁盘的开销。
-
-
页面置换策略:
-
页面缓冲算法采用各种页面置换策略来优化页面置换过程。
-
这些策略包括但不限于先进先出(FIFO)、最近最少使用(LRU)、最不常用(LFU)等。
-
通过选择合适的页面置换策略,系统可以更有效地管理内存资源并降低页面置换的频率。
-
-
预测和预加载:
-
一些高级的页面缓冲算法还使用预测算法来尝试预测未来的页面访问模式。
-
根据预测结果,系统可以预先加载可能会被访问的页面到内存中,从而降低缺页率并减少页面换进、换出的频率。
-
综上所述,页面缓冲算法通过优化页面置换策略、管理空闲和修改页面链表以及采用预测和预加载技术等方式,显著降低了页面换进、换出的频率并减少了磁盘I/O操作的次数。这些特点使得页面缓冲算法在提高系统整体性能方面具有重要作用。
-
-
在请求分页系统中,产生"抖动"的原因是什么?
在请求分页系统中,产生"抖动"(Thrashing)的原因主要是由于以下几个方面的因素相互作用:
一、CPU利用率和多道程序度的矛盾
-
为了提高CPU的利用率,系统可能会尝试提高多道程序度,即同时运行更多的进程。
-
然而,单纯提高多道程序度会导致每个进程分配到的物理块数减少,进而增加缺页率。
-
高缺页率会导致CPU频繁地处于等待页面调入的状态,从而降低CPU的利用率。
-
系统调度程序为了再次提高CPU利用率,可能会继续增加多道程序度,形成恶性循环。
二、物理块数不足
-
分配给进程的物理块数太少,不能满足进程正常运行的基本要求。
-
这会导致进程在运行过程中频繁地出现缺页中断,必须请求系统将所缺之页调入内存。
三、页面淘汰算法不合理
-
如果页面淘汰算法不够合理,可能会导致刚被换出的页面很快又被访问,需要重新调入。
-
这种频繁的页面置换会占用大量的系统时间,导致系统性能急剧下降。
四、系统资源竞争
-
在多进程环境中,各个进程之间会竞争有限的内存资源。
-
当多个进程同时发生缺页中断时,系统会陷入频繁的页面置换中,进一步加剧抖动现象。
五、具体表现
-
抖动现象发生时,系统的大部分时间都用于页面的调进换出,而几乎不能完成任何有效的工作。
-
这会导致处理机的利用率急剧下降并趋于0,系统性能严重受损。
综上所述,抖动现象是请求分页系统中一个严重的问题,它主要由CPU利用率和多道程序度的矛盾、物理块数不足、页面淘汰算法不合理以及系统资源竞争等因素共同作用而产生。为了避免抖动现象的发生,系统需要合理分配物理块数、选择合适的页面淘汰算法以及优化进程调度策略等。
-
-
何谓工作集? 它是基于什么原理确定的?
工作集(Working Set)是指在某段时间间隔内,进程实际所要访问的页面集合。这个概念在操作系统中的虚拟内存管理中具有重要意义。
工作集的定义
工作集描述了进程在特定时间段内频繁访问的页面集合。这些页面通常是进程运行所必需的,因此将它们保留在内存中可以提高系统的性能。工作集的大小可以根据时间的变化而动态调整,以适应进程的运行需求。
工作集确定的原理
工作集的确定基于局部性原理。局部性原理指出,程序在运行过程中往往会表现出一种趋势,即它们倾向于在一段时间内重复访问同一组页面。这种趋势可以分为时间局部性和空间局部性:
-
时间局部性:如果某个页面在最近被访问过,那么在未来的一段时间内,该页面很有可能再次被访问。
-
空间局部性:如果某个页面被访问,那么与该页面相邻的页面(在内存中的位置相近)在不久的将来也很有可能被访问。
基于局部性原理,操作系统可以预测进程未来的页面访问模式,并据此确定工作集的大小。具体来说,系统可以通过跟踪进程在过去一段时间内的页面访问情况,来确定哪些页面是频繁访问的,并将这些页面纳入工作集。
工作集的应用
工作集的概念在操作系统中有多种应用,包括:
-
页面置换算法:许多页面置换算法(如Clock算法、LRU算法等)都会考虑工作集的大小。当内存中的页面数量超过物理块的限制时,这些算法会根据工作集的大小和页面的访问情况来决定哪些页面应该被置换出内存。
-
内存分配:操作系统可以根据进程的工作集大小来为其分配内存。如果进程的工作集较小,那么可以为其分配较少的物理块;如果工作集较大,则需要为其分配更多的物理块。
-
性能优化:通过监控和分析进程的工作集,操作系统可以发现潜在的内存瓶颈,并采取相应的优化措施来提高系统的性能。
综上所述,工作集是操作系统中用于描述进程在特定时间段内频繁访问的页面集合的概念。它的确定基于局部性原理,并广泛应用于页面置换算法、内存分配和性能优化等方面。
-
-
当前可以利用哪几种方法来防止"抖动"?
在请求分页系统中,为了防止"抖动"(Thrashing)现象的发生,可以采取以下几种方法:
一、采取局部置换策略
如果页面采用可变分配方式,则可以限制某进程从其他进程获取物理块,把抖动限制在该进程内。当某进程发生缺页时,它只能在分配给自己的内存空间内进行置换,不允许从其他进程那里获得新的物理块。这种方法可以防止一个进程占用过多物理块而导致其他进程频繁缺页。
二、把工作集算法融入处理机调度中
工作集是指进程在某一时间间隔内实际要访问的页面集合。把工作集算法融入处理机调度中,可以在调度程序从外存调入新作业之前,先检查每个进程在内存的驻留页面是否足够多。如果都已足够多,此时便可以从外存调入新的作业,而不会因新作业的调入而导致缺页率的增加。反之,如果有些进程的内存页面不足,则应首先为那些缺页率高的作业增加新的物理块,此时将不再调入新的作业。
三、利用L=S准则调节缺页率
L是缺页之间的平均时间,S是平均缺页服务时间,即置换一个页面所需的时间。当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用L=S准则对于调节缺页率是十分有效的。通过调整系统参数,使得L和S尽可能接近,可以降低缺页率,从而减少页面置换的频率,防止抖动现象的发生。
四、选择性暂停进程
当多道程序度偏高时,已影响到处理机的利用率,为了防止发生抖动,系统必须减少多道程序的数目。此时可以基于某种原则选择暂停某些当前活动的进程,将它们调出到磁盘上,以便把腾出的内存空间分配给缺页率高的进程。这种方法通过动态调整进程的数量和内存分配,来保持系统的稳定性和高效性。
综上所述,为了防止抖动现象的发生,可以从局部置换策略、工作集算法融入处理机调度、利用L=S准则调节缺页率以及选择性暂停进程等方面入手。这些方法各有优缺点,在实际应用中需要根据系统的具体情况和需求进行选择和调整。
-
试说明如何利用"L=S"准则来调节缺页率,以避免"抖动"的发生。
"L=S"准则是Dening于1980年提出的一种用于调节多道程序度的方法,其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。利用"L=S"准则调节缺页率以避免"抖动"的发生,可以从以下几个方面进行说明:
一、L与S的关系及其对系统性能的影响
-
L远大于S:
-
这种情况下,说明很少发生缺页,磁盘的能力尚未得到充分的利用。
-
系统可能处于空闲状态或进程对内存的需求较低。
-
-
L远小于S:
-
这种情况下,说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。
-
系统可能处于过载状态,导致处理机频繁等待页面调入,从而降低系统性能。
-
这就是"抖动"现象的典型表现。
-
-
L接近S:
-
这种情况下,磁盘和处理机都可达到它们的最大利用率。
-
系统性能处于最佳状态,既不会因缺页而频繁等待,也不会因磁盘空闲而浪费资源。
-
二、利用"L=S"准则调节缺页率的策略
-
动态调整多道程序度:
-
从系统启动开始,每当要创建新进程或要为现有进程分配新空闲块时,就计算L值和S值。
-
若L>S,则表明系统有足够的资源来处理更多的进程,可以进行新进程的创建或空闲块的分配。
-
当L值接近S值时,应谨慎添加新进程或分配空闲块,以免导致缺页率上升和"抖动"的发生。
-
-
优化页面置换算法:
-
根据"L=S"准则,选择合适的页面置换算法以优化内存使用。
-
例如,当L接近S时,可以选择LRU(最近最少使用)算法等能有效利用内存访问模式的算法。
-
-
调整内存分配策略:
-
根据进程的内存需求和系统资源情况,动态调整进程的内存分配。
-
对于内存需求较大的进程,可以分配更多的物理块以减少缺页率;对于内存需求较小的进程,则可以适当减少其物理块分配以节省资源。
-
三、避免"抖动"发生的具体措施
-
监控L与S的变化:
-
实时监控系统中的L与S值,以及它们之间的比值关系。
-
当发现L值迅速下降并接近S值时,应立即采取措施进行干预。
-
-
减少进程数量:
-
当多道程序度过高导致系统性能下降时,可以通过减少进程数量来降低缺页率。
-
例如,可以选择性地暂停一些优先级较低的进程或释放一些不再需要的进程资源。
-
-
增加内存资源:
-
如果系统经常处于"抖动"状态且无法通过调整多道程序度或优化页面置换算法来解决问题时,可以考虑增加系统的内存资源。
-
这可以通过添加物理内存或扩展虚拟内存来实现。
-
综上所述,利用"L=S"准则调节缺页率以避免"抖动"的发生需要综合考虑多道程序度、页面置换算法、内存分配策略以及系统资源情况等多个因素。通过动态调整这些参数和策略,可以保持系统的稳定性和高效性。
-
-
为了实现请求分段式存储管理,应在系统中增加配置哪些硬件机构?
为了实现请求分段式存储管理,应在系统中增加配置以下硬件机构:
一、请求段表机制
请求段表是请求分段式存储管理中的主要数据结构。它除了包含请求分页机制中的访问字段A、修改位M、存在位P和外存始址等字段外,还增加了存取方式字段和增补位。这些字段供程序在调进、调出时参考。具体来说:
-
存取方式字段:用于标识本分段的存取属性,如只执行、只读或允许读/写。
-
访问字段A:记录该段被访问的频繁程度,用于优化页面置换算法。
-
修改位M:表示该段在调入内存后是否被修改过,供置换页面时参考。
-
存在状态位P:指示该段是否已调入内存,供程序访问时参考。
-
增补位:这是请求分段式管理中所特有的字段,用于表示本段在运行过程中是否做过动态增长。
-
外存始址:指示本段在外存中的起始地址,即起始盘块号。
二、缺段中断机构
在请求分段系统中,采用的是请求调段策略。每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号。进入操作系统后,由缺段中断处理程序将所需的段调入内存。与缺页中断机构类似,缺段中断机构同样需要在一条指令的执行期间产生和处理中断,并且在一条指令执行期间可能产生多次缺段中断。但由于分段是信息的逻辑单位,因此不可能出现一条指令被分割在两个分段中或一组信息被分割在两个分段中的情况。
三、地址变换机构
请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,所以在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。为此,在地址变换机构中又增加了某些功能,如缺段中断的请求及处理等。
综上所述,为了实现请求分段式存储管理,系统中需要增加配置请求段表机制、缺段中断机构和地址变换机构等硬件机构。这些机构共同协作,使得系统能够高效地管理内存资源,满足进程的内存需求。
-
-
在请求段表机制中,应设置哪些段表项?
在请求段表机制中,应设置的段表项主要包括以下几项:
-
段名:用于唯一标识一个段,方便系统进行管理和访问。
-
段长:表示段的长度,即段在内存中所占用的空间大小。这个信息对于内存分配和地址变换都是必要的。
-
段基址:也称为段的起始地址,表示段在内存中的起始位置。结合段长,可以确定段在内存中的范围。
-
存取方式:标识本段的存取属性,如只执行、只读或允许读/写等。这有助于系统对段的访问进行权限控制。
-
访问字段A:记录该段被访问的频繁程度。这个信息可以用于优化页面置换算法,提高内存利用率。
-
修改位M:表示该段在进入内存后是否已被修改过。这对于页面的置换和内存的一致性维护非常重要。
-
存在位P:指示该段是否已调入内存。当进程访问一个段时,系统可以通过检查存在位来判断该段是否在内存中,从而决定是否需要进行缺段中断处理。
-
增补位:表示本段在运行过程中是否做过动态增长。这对于动态内存管理非常重要,因为系统需要知道一个段是否可能会增长,以便为其预留足够的空间。
-
外存始址:表示本段在外存的起始地址,即起始盘块号。这对于段的换入换出操作是必要的,因为系统需要知道如何从外存中读取或写入段的数据。
这些段表项共同构成了请求段表机制的核心数据结构,为系统的内存管理和进程访问提供了必要的支持和保障。
-
-
说明请求分段系统中的缺页中断处理过程。
在请求分段系统中,缺页中断处理是一个关键过程,它允许系统在需要时动态地将缺失的段或页面调入内存。以下是缺页中断处理过程的详细说明:
一、缺页中断的产生
-
当进程执行到某条指令,需要访问某个段或页面时,系统会首先检查该段或页面是否已在内存中。
-
如果发现所需段或页面不在内存中(即存在位P为0),则会产生一个缺页中断。
二、缺页中断的处理
缺页中断的处理过程与一般的中断处理类似,但也有一些特殊之处。以下是处理过程的详细步骤:
-
保护CPU现场:
- 当缺页中断发生时,系统会暂停当前进程的执行,并保存当前CPU的上下文环境(如寄存器值、程序计数器等),以便在中断处理完毕后能够恢复执行。
-
分析中断原因:
- 系统会检查中断原因,确认是由于缺页而产生的中断。
-
转入缺页中断处理程序:
- 根据中断原因,系统会转入缺页中断处理程序。该程序负责查找缺失的段或页面,并将其调入内存。
-
查找并调入缺失段或页面:
-
缺页中断处理程序会首先查找请求段表,确定缺失段或页面的外存地址。
-
然后,系统会通过I/O操作,从外存中读取缺失段或页面的数据,并将其调入内存。
-
如果内存已满,系统还需要选择一个不再需要的段或页面进行置换。
-
-
修改段表或页表:
- 在缺失段或页面被调入内存后,系统需要更新段表或页表,将存在位P设置为1,并更新其他相关字段(如访问字段A、修改位M等)。
-
恢复CPU现场并继续执行:
-
在完成上述步骤后,系统会恢复之前保存的CPU上下文环境。
-
然后,系统会重新执行导致缺页中断的那条指令,此时该指令所需的段或页面已经调入内存,因此可以成功执行。
-
三、缺页中断处理的特殊性
与一般的中断处理相比,缺页中断处理具有以下特殊性:
-
在指令执行期间产生和处理:缺页中断是在指令执行期间产生的,并且需要在指令执行期间进行处理。这要求系统能够快速响应缺页中断,并尽快将缺失的段或页面调入内存。
-
一条指令可能产生多次缺页中断:由于分段是信息的逻辑单位,因此一条指令可能会访问多个段或页面。如果其中某些段或页面不在内存中,就会产生多次缺页中断。这要求系统能够高效地处理多次缺页中断,以提高程序的执行效率。
-
缺页中断返回时执行原指令:与一般的中断返回时执行下一条指令不同,缺页中断返回时需要重新执行导致缺页中断的那条指令。这是因为该指令在缺页中断发生时尚未成功执行,因此需要重新执行以确保程序的正确性。
综上所述,请求分段系统中的缺页中断处理过程是一个复杂而关键的过程,它允许系统在需要时动态地将缺失的段或页面调入内存,从而确保程序的正确执行和系统的稳定性。
-
-
请对共享段表中的各项作简要说明。
共享段表是实现分段共享的重要数据结构,在系统中配置一张共享段表,所有共享段都在共享段表中占有一表项。共享段表中的各项内容对于管理共享段至关重要,以下是对各项的简要说明:
-
段号:
-
用于唯一标识一个共享段。
-
不同的进程可以各用不同的段号去共享同一个段。
-
-
段长:
-
表示共享段的长度,即该段在内存中所占用的空间大小。
-
用于进行越界检查,确保访问的地址不越出段界。
-
-
内存起始地址:
-
指示共享段在内存中的起始位置。
-
结合段长,可以确定共享段在内存中的范围。
-
-
存在位:
-
表示该共享段是否已调入内存。
-
当存在位为1时,表示该段已在内存中;当存在位为0时,表示该段尚未调入内存。
-
-
共享进程计数(count):
-
记录当前有多少个进程正在共享该段。
-
当一个进程开始共享该段时,count加1;当一个进程不再需要该段而释放它时,count减1。
-
仅当count为0时,系统才回收该段的物理内存,并取消在共享段表中该段所对应的表项。
-
-
存取控制字段:
-
用于规定对该共享段的访问方式。
-
常见的访问方式包括只读、只执行、读/写等。
-
对于不同的进程,可以赋予不同的存取权限,以确保信息的安全性和满足运行需要。
-
-
其他信息:
- 根据需要,共享段表还可以包含其他信息,如外存起始地址(用于在需要时从外存调入该段)、段的属性(如是否可动态增长)、段的类型(如代码段、数据段等)等。
共享段表通过记录上述信息,实现了对共享段的有效管理和控制。它使得系统能够跟踪哪些段正在被共享、哪些进程正在共享这些段以及这些段的存取权限等关键信息,从而确保了系统的稳定性和安全性。
-
-
如何实现共享分段的分配和回收?
共享分段的分配和回收是实现分段共享的关键过程。以下是这两个过程的详细说明:
一、共享分段的分配
-
首次分配:
-
当第一个进程请求共享某个分段时,系统会为该分段分配一个物理内存区域。
-
将该物理内存区域的起始地址填入请求进程的段表中。
-
在共享段表中为该分段增加一项,记录该分段的基本信息(如段号、段长、内存起始地址等)以及共享该分段的进程信息(如进程名、进程号、存取控制权限等)。
-
设置共享进程计数(count)为1,表示当前有一个进程正在共享该分段。
-
-
后续分配:
-
当其他进程也需要共享该分段时,由于该分段已被调入内存,系统无需再为其分配物理内存区域。
-
只需在调用进程的段表中增加一项,记录该分段的物理地址。
-
在共享段表中,更新该分段的信息,增加调用进程的进程名和存取控制权限等。
-
将共享进程计数(count)加1,表示又有一个进程开始共享该分段。
-
二、共享分段的回收
-
释放分段:
-
当某个进程不再需要共享某个分段时,会执行释放操作。
-
系统会撤销该进程段表中与该分段对应的表项。
-
在共享段表中,将该分段的共享进程计数(count)减1。
-
-
回收内存:
-
如果共享进程计数(count)减为0,表示没有任何进程在共享该分段。
-
此时,系统会回收该分段所占用的物理内存区域。
-
同时,在共享段表中删除该分段的表项,表示该分段已被完全回收。
-
-
注意事项:
-
在共享分段被多个进程共享时,应尽量避免淘汰该分段,以保证系统的稳定性和性能。
-
对于共享分段,应严格控制其存取权限,以确保信息的安全性和完整性。
-
通过上述过程,系统实现了对共享分段的有效分配和回收。这有助于提高内存利用率、保证系统的稳定性和安全性,并满足多个进程对同一分段进行共享的需求。
-