OperatingSystem第4章存储管理-存储管理的原理_第1页
OperatingSystem第4章存储管理-存储管理的原理_第2页
OperatingSystem第4章存储管理-存储管理的原理_第3页
OperatingSystem第4章存储管理-存储管理的原理_第4页
OperatingSystem第4章存储管理-存储管理的原理_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统

OperatingSystemOperatingSystem第4章存储管理-存储管理的原理第4章存储管理§4.1存储管理的原理§4.2连续分配存储管理§4.3离散分配存储管理§4.4内核主存管理§4.5虚拟存储技术§4.6虚拟页式存储管理§4.7虚拟段式存储管理§4.8存储管理实例OperatingSystem第4章存储管理-存储管理的原理§4.5虚拟存储技术§4.5.1程序局部性原理§4.5.2虚拟存储的实现虚拟内存技术(VirtualMemory)诞生于1961年。广泛使用是从上个世纪70年代初以后,今天几乎所有的操作系统都采用虚拟内存技术来管理内存。这是一种利用虚拟存储器来逻辑扩充物理内存的技术。其基本思想是用软硬件技术把内存与外存这两级存储器当成一级存储器来用,从而给用户提供了一个比内存也比任何应用程序大得多的虚拟存储器,使得用户编程时再也不用考虑内存大小的限制了,给用户编程带来极大的方便。虚拟内存技术的实现也利用了自动覆盖和交换技术。OperatingSystem第4章存储管理-存储管理的原理§4.5.1程序局部性原理1.局部性原理(principleoflocality):指程序在执行过程中的一个较短时期内,所执行的指令地址和指令的操作数地址,分别局限于一定区域。2.局部性主要表现:时间局部性:是指一段指令在某一时间段内会被反复执行。即程序某一部分的数据或指令被重复性地访问,它们对应于程序结构中的循环、子程序、常用到的变量及数据等;空间局部性:是指一旦某一个存储单元被访问,那么它附近的单元也将很快被访问。这对应于程序结构中的顺序执行的指令、线性数据结构以及在相邻位置存放的数据或变量等。而程序中的分支和调用子程序只是将程序的访问空间从一处移到另外一处,仍具有局部性。OperatingSystem第4章存储管理-存储管理的原理排他性:程序运行不但体现在时间、空间的局部性,还体现在某些程序段执行的排他性。即程序设计者编程时要考虑程序执行时所能遇到的各种情况,但具体到一次程序的执行,并不会发生所有的状况。因而某些程序段在进程整个运行期间,可能根本不使用,如出错处理、分支语句等。因而,没有用到的程序段就不必调入内存。另外,有些程序段仅执行一次,以后就再也不会用到,这样的程序段也没有必要一直占用内存空间。

综上所述:程序只要装入内存一部分就可以运行,当用到不在内存的部分时,再将其装入内存。换句话就是说程序全部装入内存并不是程序运行的必要条件。OperatingSystem第4章存储管理-存储管理的原理§4.5.2虚拟存储的实现1.虚拟存储技术如果把程序部分装入内存,其余大部分放在外存,而程序又能运行,这样我们就拥有了一个比有限的实际内存空间大得多的、逻辑的虚拟内存空间。即用大容量的外存来模拟内存,这种存储模式就称之为虚拟存储技术。2.虚拟技术实现的关键(1)怎样才能发现欲执行的指令或数据不在内存?

简单有效方法就是进行标识(2)怎样将不在内存的部分调入进来。通常系统采用中断技术完成调入工作。(3)在内存中的作业如何组织?一个进程可被分为多次调入内存,这样很难保证进程在内存中占据一个连续的空间,实际上进程在内存中是离散存储的。OperatingSystem第4章存储管理-存储管理的原理虚拟技术进一步说明因而系统要提供必要的硬件支持,如虚拟页式存储中的页表机制、缺页中断机构以及相应的地址变换机构。虚拟存储技术是将内存与外存有机地结合在一起,从而得到一个容量很大的虚拟空间。使用户感到有一个很大的内存,不用再考虑内存的容量限制。虚存虽然比内存要大得多,但不可能无限大,其大小要受到外存空间的限制以及CPU地址所能表示范围的限制。OperatingSystem第4章存储管理-存储管理的原理大程序:可在较小的可用内存中执行较大的用户程序;大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存(realmemory)并发:可在内存中容纳更多程序并发执行;易于开发:与覆盖技术比较,不必影响编程时的程序结构3.引入虚拟存储技术的好处总容量不超过物理内存和外存交换区容量之和。其运行速度接近于内存,每位的成本又接近于外存,是一种性能非常优越的存储管理技术

OperatingSystem第4章存储管理-存储管理的原理4.虚拟存储技术的特征不连续性:物理内存分配的不连续,虚拟地址空间使用的不连续(数据段和栈段之间的空闲空间,共享段和动态链接库占用的空间)部分交换:与交换技术相比较,虚拟存储的调入和调出是对部分虚拟地址空间进行的;大空间:通过物理内存和快速外存相结合,提供大范围的虚拟地址空间虚拟存储技术的种类:虚拟页式虚拟段式虚拟段页式OperatingSystem第4章存储管理-存储管理的原理§4.6虚拟页式存储管理§4.6.1虚拟页式存储的实现§4.6.2页面分配策略§4.6.3页面置换方法§4.6.4虚拟页式存储的优缺点OperatingSystem第4章存储管理-存储管理的原理返回1.基本原理系统自动地将作业的地址空间分页,将系统的主存空间分块,页与块等大小,在作业运行前,只把初始需要的一部分页面装入内存块里,运行中需要访问自己地址空间中的但当前不在内存的页面时产生缺页中断,由缺页中断服务程序将所需的页面调入内存,若此时内存中没有空闲物理块安置请求调入的新页面,则系统按预定的置换策略自动选择一个或一些在内存的页面,把它们换出到外存。这里的请求调入和置换功能都是比实分页存储管理增加的内容,是实现虚拟存储的主要功能。

§4.6.1虚拟页式存储的实现

OperatingSystem第4章存储管理-存储管理的原理标记某页是否在内存,用于查询要访问的页在不在内存。页表如下:页号物理块号状态位P访问位A修改位M外存地址2.页表机制其中:外存地址指出该页在外存的地址,供调入该页时用;状态为指示该页是否在内存,供程序访问时用,也是检查是否缺页的标志位,如置1表示在内存;访问位或访问字段则是该页被访问过的标志或该页被访问过的次数;修改位表示该页是否被修改过;存取控制字段则是用来限制页面被安全共享的。OperatingSystem第4章存储管理-存储管理的原理3.动态地址变换在虚拟页式存储中,应采用动态地址变换方式,因为某一欲执行的指令可能不在内存,只能在指令执行之前完成地址变换。任一作业都应在自己的虚拟地址空间中执行,所以要为用户作业设置一个虚拟地址指针VP,虚拟地址依然是由页号和页内偏移地址组成的。系统总是执行VP虚指针所指向的指令,为了将虚拟地址VP变换为对应的实存地址,因此先要查找页表。若从页表中查出此页不在内存(状态位为0),则产生一个缺页中断。此时,进程暂停当前指令执行,CPU转去执行缺页中断处理程序。若该页已在内存,则指令的地址映射过程与页式存储是一样的。即将块号和页内地址相并接形成物理地址IP,处理器再从IP中取指令执行。OperatingSystem第4章存储管理-存储管理的原理4.缺页中断OperatingSystem第4章存储管理-存储管理的原理5.缺页率虽然通过缺页中断将所需要的页调入内存,但缺页中断的频繁发生会严重影响程序执行的效率。为了标识缺页中断发生的频度,可以引入缺页率来表示。设进程在其执行期间共进行了S次访页操作,其中成功访页次数为A(访问时该页在主存),不成功的访页次数为B(即发生了缺页中断),显然有:S=A+B,则该进程的缺页率f定义为:f=B/S。显然缺页率越低越好。OperatingSystem第4章存储管理-存储管理的原理§4.6.2页面分配策略虚拟存储管理在进行页面分配时,要考虑这样的问题:空闲页面如何管理;采用什么样的分配策略;为进程分配多少物理块比较合适;在什么时间进行页面分配等。OperatingSystem第4章存储管理-存储管理的原理1.空闲页面管理同页式存储管理相似,虚拟存储方式下的空闲页面的管理也可以采用位示图或空闲页面链的形式。由于主存中所有进程的虚拟地址空间之和远大于主存空间,因此进程执行时常发生缺页中断,这样不断地调入新页,很快就使主存空间饱和。以后再发生缺页时,要先淘汰一页才能装入新页,这使得缺页处理时间过长,减缓了进程的执行速度,从而影响到系统的性能。在实际的系统中,总是维持一定数量的空闲块,而不是耗尽所有的空闲块。即空闲块数可以在某一区间浮动,一旦空闲块数小于下限值,系统就进行页面置换,以释放出一些空闲块,使得总的空闲块数不超过系统规定的上限值即可。即系统设置专门的独立进程负责页面置换,以保证链表的适当规模。OperatingSystem第4章存储管理-存储管理的原理2分配策略可变分配:是指一个进程所拥有的物理块数是不定的,这种分配方式称之为可变分配。固定分配是指为每个进程分配一固定页数的内存空间,在整个运行期间都不再改变。⑴平均分配算法,是将系统中所有可供分配的物理块,平均分配给每一个进程。例如,当系统中有80个空闲块,4个进程时,每个进程可分得20个物理块。这种平均分配方式因其未考虑各进程本身的大小,会造成事实上的不公平。如有一个进程其大小为100页,只分配给它20个块,这样它必将会有很高的缺页率;而另一个进程只有10页,却有10个块在闲置未用。所以在平均的思想下,还要考虑进程的大小。OperatingSystem第4章存储管理-存储管理的原理⑵按比例分配算法,根据进程的大小按比例分配空闲块。设系统中现有m个进程、n个空闲块,每个进程拥有的页数为Si,则系统中所有进程页数之和为:S=S1+S2+S3+…+Sm则为每个进程分配的物理块数为:Bi=(Si/S)×n,Bi应向下取整。⑶优先权分配算法,为优先权高的作业分配较多的内存空间,这样可以使重要或紧迫的任务尽快完成。这时可以将内存中的空闲块分成两部分:一部分按比例分配给各进程,另一部分则根据各进程的优先权,适当地为其增加相应份额。OperatingSystem第4章存储管理-存储管理的原理3.工作集(1)为保证进程能正常运行最少需要多少物理块。从理论上讲,进程只要获得一个物理块就可以运行。但是进程正常运行所需的最少物理块数与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。由于分页是系统的行为,可能会出现下面的情景:由此可见,系统应保证任一条指令执行时,其所涉及的虚拟地址所在的页都应在内存中。这个页数就是进程所需要的最小块数,若系统为进程所分配的物理块数少于此值时,进程将无法运行。123456涉及6次缺页中断的指令指令copyAtoB数据A:数据B:OperatingSystem第4章存储管理-存储管理的原理工作集定义(2)为使进程能有效地工作,应为它分配多少物理块合适随着为每个进程所分配物理块数目的减少,将使进程执行中的缺页率提高,导致非生产性开销过大,从而降低了进程的执行速度,严重时导致进程不能向前推进。最少物理块数只能保证程序能执行下去,而不是最合适的块数。在1968年,Denning提出了工作集理论。所谓工作集就是进程在某段时间里实际上要访问的页的集合。依据程序执行时的局部特性,可以利用程序过去的行为来估计它未来的行为。故定义运行进程在t-w到t这个时间间隔内所访问的页的集合为该进程在时间t的工作集,记为W(t,w)。并把变量w称之为“工作集窗口尺寸”,工作集中所包含的页面数称为“工作集尺寸”,记为|W(t,w)|。OperatingSystem第4章存储管理-存储管理的原理(3)工作集的应用工作集W(t,w)是二元函数,随t、w的值而改变。首先工作集与时间有关,即不同时间的工作集其所包含的页面可能不同,其所包含的页面个数也可能不同;其次工作集也是工作集窗口尺寸w的函数,体现在工作集尺寸|W(t,w)|随w的增加而变大,即满足|W(t,w)|≤|W(t,w+a)|,a>0。工作集窗口尺寸与缺页率关系密切,若w增大,工作集尺寸|W|随之增加(即所含的页面数增多),缺页率就会下降。倘若w含盖了整个作业虚拟空间,缺页率降为0,也就失去了虚存意义;反之若w选取过小,将引起频繁缺页,导致系统性能下降。二者之间的关系可以如图所示。OperatingSystem第4章存储管理-存储管理的原理虚存中并不是要取消缺页率,而是要使缺页率维持在一个较低的水平上。因此可以取拐点所对应的工作集尺寸作为分给进程的物理块数,实验分析表明,这个数应是进程总页面数的一半。即一个进程应获得其所需页数一半的空间时,再进入内存执行。OperatingSystem第4章存储管理-存储管理的原理4.页面调入时机

⑴预调页策略也称先行调度,即一页面被访问前就已经预先置入内存,以减少今后的缺页率。主要适于进程的许多页存放在外存的连续区域中的情况。有的系统结合请求调入使用,即每次缺页时装入多个页面。优点:提高调页的I/O效率。缺点:基于预测,若调入的页在以后很少被访问,则效率低。预调页的成功率仅约50%,常用于程序装入时的调页。OperatingSystem第4章存储管理-存储管理的原理⑵请求调页策略当发生页面故障时进行调度,即当进程访问不在内存的页面引发缺页中断时,由系统根据这种访问请求把所缺页面装入内存。优点:由请求调入策略装入的页一定会被访问,再加之比较容易实现,故在目前的虚拟存储器中,大多采用此策略。缺点:每次仅调入一页,增加了磁盘I/O的启动频率。OperatingSystem第4章存储管理-存储管理的原理在请求分页系统中,常把外存分为两部分:一部分是文件区,用于存放文件;另一部分是对换区,用于存放对换页面。通常,对换区的磁盘输入输出速度比文件区的高,这是因为对换区所规定的盘块要比文件区的大得多。⑴从交换区调入若系统拥有足够的对换区空间,可在进程运行前,将与该进程有关的文件拷贝到对换区。以后就从对换区调入所需页面,以提高调页速度。5.从何处调入页面

OperatingSystem第4章存储管理-存储管理的原理⑵从交换区及文件区调入若系统缺少足够的对换区空间,则在交换区中只保存被修改过的页面。因为未被修改的页面在文件区中有副本。因此凡是没被修改的页,均从文件区调入;而已修改过的页面则从交换区调入。⑶UNIX方式与进程有关的文件都放在文件区,故凡是未运行过的页面,都应从文件区调入。而对于曾经运行过而又被换出的页面,总是存放在对换区中。因此在下次调入时,应从对换区调入。由于在UNIX系统中允许页面共享,因此,某进程所请求的页面有可能已由其它进程调入内存,此时也就无须再从对换区调入。OperatingSystem第4章存储管理-存储管理的原理1.页面置换方式当内存空间已没有空闲页面而又要调入新页时,必须采用一定的算法在内存中选择某一页面淘汰,所采用的算法称之为页面置换算法。如果被淘汰的页面在内存期间曾被修改过,还要将此页重新写回到外存,以便保留最新的副本。然后再换进新的页面。(1)页面置换方式页面淘汰可以在整个内存空间范围内进行,称之为全局置换。也可以只在一个进程空间范围内考虑,称之为局部置换。即当某一进程请求新页时,而该进程又没有空闲块,则只能淘汰自己的一个页面而不能淘汰其它进程的页面。

§4.6.3页面置换方法OperatingSystem第4章存储管理-存储管理的原理

(2)空闲块分配方式若为进程分配固定的物理块数,在其执行期间再也不改变,则称为固定分配。初始进程块数的多少难以确定。若太少,则缺页频繁,系统开销大;若太多,则并发进程数目少,造成CPU空闲或其它资源空闲的情况。为进程分配的物理块数在其运行期间是可变的,则称为可变分配。进程在运行中,系统可调整为该进程分配的物理块,直至进程的缺页率达到适当程度。在页面置换算法讨论中,为了比较各种方法的优劣,总是限定为固定分配局部置换。固定分配局部置换:固定分配全局置换:可变分配局部置换可变分配全局置换(3)内存管理策略不可能OperatingSystem第4章存储管理-存储管理的原理(1)最佳淘汰算法——OPT(Optimal)这是Belady于1966年提出的一种理论上的算法。该算法每次都淘汰以后永不使用的,或者过最长的时间后才会被访问的页面。显然,采用这种算法会保证最低的缺页率,但它是无法实现的,因为它必须知道页面“将来”的访问情况。不过,该算法仍有一定意义,可作为衡量其他算法优劣的一个标准。

2.页面置换算法

OperatingSystem第4章存储管理-存储管理的原理假定系统为某个进程分配了三个物理块,进程的访问顺序为7,0,1,2,0,3,0,4,2,3,0,3,2,1,2OPT置换算法示例:7,0,1,2,0,3,0,4,2,3,0,3,2,1,27*70*701*201*201203*203243*243243203*203203213*213缺页次数8,成功访问次数7次,缺页率f=8/15=53.33%OperatingSystem第4章存储管理-存储管理的原理(2)先进先出淘汰算法——FIFO这是最早出现的淘汰算法。总是淘汰最先进入内存的页面。它实现简单,只需把进程中已调入内存的页面,按先后次序链成一个队列,并设置一个所谓的替换指针,使它总是指向内存中最老的页面。缺点:效率不高,因为它与进程实际的运行规律不相适应,比如常用的全局变量所在的页面或者循环体所在页面都可能被它选为淘汰对象。出现bleady现象。OperatingSystem第4章存储管理-存储管理的原理Belady现象:采用FIFO算法时,如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,缺页率反而提高的异常现象。Belady现象的描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N)。当N增大时,PE(S,N)时而增大,时而减小。Belady现象的原因:FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。OperatingSystem第4章存储管理-存储管理的原理FIFO淘汰算法示例:7,0,1,2,0,3,0,4,2,3,0,3,2,1,27*70*701*201*201231*230*430*420*423*023*023023013*012*3块内存时,缺页率f=12/15=80%;4块f=8/15=53.33%7,0,1,2,0,3,0,4,2,3,0,3,2,1,27*70*701*7012*70123012*30123412*341234123402*340234023401*2401*OperatingSystem第4章存储管理-存储管理的原理(3)最近最久未使用算法(LRU,LeastRecentlyUsed)

根据页面调入内存后的使用情况,选择内存中最久未使用的页面被置换。这是局部性原理的合理近似,性能接近最佳算法。

OPT算法使用页面将要被访问的时间,LRU算法使用页面最后一次被访问的时间。二者唯一的差别是:OPT是向前看的,而LRU是向后看的。7,0,1,2,0,3,0,4,2,3,0,3,2,1,27*70*701*201*201203*203403*402*432*032*032032132*13210次,缺页率f=10/15=66.67%OperatingSystem第4章存储管理-存储管理的原理LRU的两个实现算法:

①计时法:对于每一页面增设一个访问时间计时器,每当一个页面被访问时,就将当时的绝对时钟拷贝到对应的访问时间计时器中,这样系统记录了内存中所有页面最后一次被访问的时间。淘汰时,选取访问时间计时器的值最小的页面。②堆栈法:每当进程访问某页面时,便将该页面的页号从栈中移出,将它压入栈顶。栈顶始终是最新被访问的页面的编号。栈底则是最近最久未被使用的页面的页面号。

OperatingSystem第4章存储管理-存储管理的原理假定现有一进程所访问的页面的页面号序列为:4,8,0,8,1,0,2,1,2,6随着进程的访问,栈中页面号的变化情况:4,8,0,8,1,0,1,2,1,2,6

21261011212088100001880088888044444444448LRU的开销是很大的,必须有硬件的支持,完全由软件实现其速度至少会减少10倍,因此LRU近似算法更实用些。

OperatingSystem第4章存储管理-存储管理的原理这是一种LRU的近似算法,是通过对FIFO算法进行简单改造,结合页表中的访问位而得来一种淘汰算法。该算法首先检查位于FIFO链链首的页,如果它的访问位为0,则选择该页淘汰;如果它的访问位为1,则清除其访问位,将它移至FIFO链的链尾,重复此算法的查找过程,直至遇到新链首页是一个访问位为0的较早进入内存的页为止,把它选为被淘汰的页。(4)二次机会淘汰算法—SC(SecondChance)OperatingSystem第4章存储管理-存储管理的原理(5)时钟(Clock)淘汰算法

该算法首先检测指针所指的页面,如果它的访问位为0,则淘汰该页,新装入的页插入到此位置,然后指针前进一个位置;如果它的访问位为1,则清除为0,并将指针前进一个位置,继续检查访问位。重复此过程,直到找到访问位为0的页面为止。缺点:就是需要把访问位为1的处于链首的页移至链尾,这需要一定的开销。一种改进的方法就是把进程所访问的页面链成一个环形链表,再设一个指针指向最老的页面,于是形成了一种简单实用的LRU近似算法——时钟淘汰算法。OperatingSystem第4章存储管理-存储管理的原理(6)最近未用淘汰算法—NUR(NotUsedRecently)

它把FIFO算法的思想与页面的访问位和修改位结合起来确定一个接近LRU算法的淘汰对象。该算法每次都尽量选择最近最久未被写过的页面淘汰,这种干净的页面可以不被写回到磁盘。在实现时,为每一个页面设置初始值为0的访问位和修改位。当对某页面执行写操作时,其修改位和访问位均由硬件置成1;当对某页面执行读操作时,只有其访问位被硬件置成1。系统每隔固定时间将所有访问位都清0。OperatingSystem第4章存储管理-存储管理的原理按照下列次序选择被淘汰的页面:①访问位=0,修改位=0;直接淘汰;

②访问位=0,修改位=1;淘汰后写回;③访问位=1,修改位=0;直接淘汰;④访问位=1,修改位=1;写回外存后淘汰;

最近未使用淘汰算法就是LRU的一种近似算法,它总是淘汰最近未使用的页,如果被淘汰的页在内存期间没有被修改过,该页可不必重新写入外存,将新页覆盖到被淘汰的页上即可。访问位A=0表示该页未被访问过;1表示该页已被访问过;修改位M=0表示该页未被修改过1表示该页已被修改过OperatingSystem第4章存储管理-存储管理的原理(1)分配给作业的内存块数

作业的缺页中断率与作业所占内存块数成反比。分配给作业的内存块数太少是导致抖动现象发生的最主要的原因,实验分析表明:对所有的程序来说,要使其有效地工作,它在内存中的页面数不应少于它的总页面数的一半。

3.影响缺页中断率的因素

OperatingSystem第4章存储管理-存储管理的原理(2)页面大小的选择虽然缺页中断率与页面尺寸成反比,但页面尺寸却不能一味地求大,它一般在0.5KB~4KB之间,是个实验统计值。因为页面大时,页表较小,占空间少,查表速度快,缺页中断次数少,但页面调度时间长,页内碎片较大。页面小时,恰恰相反。

(3)用户程序编制的方法

作业的缺页中断率与程序的局部化(包括时间局部化和空间局部化)程度成反比。用户程序编制的方法不合适可能导致程序运行的时空复杂度高,缺页次数多。

OperatingSystem第4章存储管理-存储管理的原理(4)页面调度算法抖动又叫颠簸,是指一段时间里,页面在内存与外存之间频繁地调度或换入换出,以至于系统用于调度页面所需要的时间比进程实际运行所占用的时间还要多。好的淘汰算法会维持一个较低的缺页率。若页面置换算法不好,会使系统出现抖动现象。显然,抖动是由于缺页中断率很高而引起的一种坏现象,它将严重影响系统的效率,甚至可能使系统全面崩溃。

OperatingSystem第4章存储管理-存储管理的原理防止抖动现象的产生和扩展,具体方法:⑴采取局部置换策略这样,即使有某个进程发生了“抖动”,也不致引起其它进程也产生抖动,从而把抖动局限于较小的范围内。这种方法并不很好,因为它不能从根本上防止抖动的发生;而且在某进程发生抖动后,还会长期地处于磁盘输入输出的等待队列中,这又会使其它进程缺页中断的处理时间增长,从而延长了等效的访问时间。⑵L=S准则Denning于1980年提出了“L=S准则”,用来调整多道程序度,以使产生缺页的平均时间L等于系统处理进程缺页的平均时间S。理论和实践表明,此时的CPU利用得最好。该准则也得到其它研究人员的证实。OperatingSystem第4章存储管理-存储管理的原理防止抖动现象的产生和扩展,具体方法:⑶挂起若干进程当多道程序度偏高时,为了防止发生“抖动”,可用的一个简单易行的办法是挂起一些进程,以便腾出内存空间来分配给抖动的进程。被挂起的进程通常是选择优先权最低或较低的;当内存非常拥挤时,也可以选择一个并不很重要的、但确较大的进程挂起,以便能一次释放出较大的内存空间;或者是将具有最多剩余执行时间的进程挂起。OperatingSystem第4章存储管理-存储管理的原理§4.6.4虚拟页式存储的优缺点1.优点⑴主存利用率比较高。平均每个用户作业只浪费一半的页空间,内存规范易于管理。⑵对磁盘管理比较容易。因为页的大小一般取磁盘物理块大小的整数倍。⑶地址映射和变换的速度比较快。在把用户程序装入到主存储器的过程中,只要建立用户程序的虚页号与主存储器的实页号之间的对应关系即可(拼接得到物理地址),不必使用整个主存的地址长度,也不必考虑每页的长度等。OperatingSystem第4章存储管理-存储管理的原理2.缺点⑴程序的模块化性能不好。由于用户程序是强制按照固定大小的页来划分的,而程序段的实际长度一般是不固定的。因此,虚拟页式存储器中一页通常不能表示一个完整的程序功能。一页可能只是一个程序段中的一部分,也可能在一页中包含了两个或两个以上程序段。⑵页表很长,需要占用很大的存储空间。通常,虚拟存储器中的每一页在页表中都要占一个页表项。假设有一个虚拟页式存储器,它的虚拟存储空间大小为4GB,每一页的大小为1KB,则页表的容量为4M(个页表项)。如果每个页表项占用4个字节,则页表的存储容量为16MB。OperatingSystem第4章存储管理-存储管理的原理§4.7虚拟段式存储管理§4.7.1虚拟段式存储的实现§4.7.2段的共享和保护§4.7.3虚拟段式存储管理的优缺点§4.7.4虚拟段页式存储管理OperatingSystem第4章存储管理-存储管理的原理§4.7.1虚拟段式存储的实现1.虚拟段式存储原理为了能实现虚拟存储,段式逻辑地址空间中的程序段在运行时并不全部装入内存,而是如同请求式分页存储管理,首先调入一个或若干个程序段运行,在运行过程中调用到哪段时,就根据该段长度在内存分配一个连续的分区给它使用。若内存中没有足够大的空闲分区,则考虑进行段的紧凑或将某段或某些段淘汰出去。相应于请求式分页存储管理,这种存储管理技术称为请求式分段存储管理。OperatingSystem第4章存储管理-存储管理的原理2.段表

类似于请求式分页存储管理的页表,为了实现动态地址变换和存储保护,系统要为每一个作业建立一张段表。段表中的每一个表目对应着作业地址空间的一个程序段,其一般格式为:逻辑地址同前:段号存在位P访问位A修改位M存取方式增补位段长度段的基址外存地址存在位P表示该段是否在内存,如为0表示不在,为1表示在内存;存取方式表示可对该段施加的操作,如只读、读写、还是执行。增补位表示该段在运行期间是否可以扩展空间OperatingSystem第4章存储管理-存储管理的原理3.请求式分段动态地址变换过程

OperatingSystem第4章存储管理-存储管理的原理4.缺段中断在虚拟段式存储系统中,采用的是请求调段策略。即每当进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后由缺断中断处理程序将所需的段调入内存。再调入新段时,也会有内存空间不够用的情况,也需要淘汰内存中的一个或多个段。如果此程序段从装入内存起一直没有被修改过,只要用新调入的程序段把它覆盖掉即可。若这个程序段被修改过,则必须先把该程序段全部写回到磁盘存储器中,才能占用被淘汰段原来存放的空间。因为段要占用连续的空间,因此当内存中没有能够满足段长需要的空闲区时,系统还要合并空闲区,以便满足分段的需求。OperatingSystem第4章存储管理-存储管理的原理§4.7.2段的共享和保护1.段的共享在多道环境下,常常有许多子程序和应用程序是被多用户所使用的。最好的办法是在内存中只保留一个副本,供多个用户使用,称为共享。段共享时,用户可以使用不相同的段名来共享同一个段。进程将共享段填写到自己的段表中,并置以适当的读写控制权,就可以做到共享一个逻辑上完整的内存段信息。由于系统中有许多的共享段,而每一个共享段都可能被多个进程共享。因此系统需要对共享段进行统一的管理,设一张共享段表,每一个共享段都在表中占据一个表项。共享段应该是可重入的。OperatingSystem第4章存储管理-存储管理的原理OperatingSystem第4章存储管理-存储管理的原理共享段表其中存在位表示该共享段是否已被调入内存,共享计数是用来统计当前有多少个进程共享该段。系统可以为不同的进程使用该段设置不同的权限,以防止进程越权操作。当进程请求共享段时,若该共享段未在内存,也是由缺段中断将其调入内存,同时为该段建立相应的共享段表项,共享计数设为1,将进程填写到共享段表项中,再将共享段填写到进程的段表中。若该共享段已在内存,只要将共享计数加1,再修改相应的表项即可。不用时做相反工作。段名段长存在位共享计数内存基址外存始址共享该段的进程登记表状态进程名进程号段号存取权限…………………………OperatingSystem第4章存储管理-存储管理的原理2.段的保护(两种保护方式)(1)地址越界保护法。主要是利用段表寄存器中的段表长及段表中的段长信息实现的。首先将逻辑地址空间的段号与段表长度进行比较;其次还要检查段内地址是否等于或大于段长。从而保证了每个进程只能在自己的地址空间内运行。(2)存取方式控制保护法。是利用段表项中的“存取控制”字段实现的,存取控制字段规定了对该段的访问方式。通常的访问方式有:⑴只读;⑵只执行,只允许进程调用该段去执行,但不准读写该段;⑶读/写,允许进程对该段进行读写访问。对于共享段更应对不同的进程设置不同的存取权限控制。既要保证信息的安全,又要满足运行需要。OperatingSystem第4章存储管理-存储管理的原理§4.7.3虚拟段式存储管理的优缺点1.优点⑴程序的模块化性能好。由于各个程序段在功能上是相互独立的,因此,一个程序段的修改和增删等不会影响其它程序,从而可以缩短程序的编制和调试时间。⑵便于实现信息的保护。在一般情况下,一段程序是否需要保护是根据这个程序段的功能来决定的。因此,只要在段表中设置一个信息保护字段,就能根据需要很方便地实现对该程序段的保护。⑶便于程序和数据的共享。被共享的程序段只要在主存中装入一次即可,同时将该共享段填入调用进程的段表中。对于进程来讲其使用与普通段没有什么差别,即实现程序段的共享很容易。⑷程序的动态链接和调度比较容易。OperatingSystem第4章存储管理-存储管理的原理2.缺点⑴地址变换所花费的时间比较长。要使用主存全地址(段长和段基址),每次地址变换都要做加法运算。⑵主存储器的利用率往往比较低。由于每个程序段的长度是不同的,一个程序段通常要装在一个连续的主存空间中,程序段在主存储器中不断地调入调出,有些程序段在执行过程中还要动态增加长度,从而使得主存储器中有很多的空隙存在。当然,也可以采用一些好的算法来减少空隙的数量,或者通过定时运行回收程序来合并这些空隙,但这无疑增加了系统开销。OperatingSystem第4章存储管理-存储管理的原理§4.7.4虚拟段页式存储管理将虚拟段式和虚拟页式存储管理技术结合起来,就形成了虚拟段页式存储管理方式。虚拟段页式存储方式兼具虚拟段式和虚拟页式的优点,例如,用户程序可以模块化编写,程序段的共享和信息的保护都比较方便等。另一方面也具有虚拟页式存储的优点,例如,主存储器的利用率高,对磁盘存储器的管理比较容易等。OperatingSystem第4章存储管理-存储管理的原理1.虚拟段页式存储原理在虚拟段页式存储方式中,程序员仍然按照逻辑的程序段来编写程序,但每个程序段又被分成若干个固定大小的页,相似于段页式存储管理。系统将作业的部分页装入内存,执行时用到不在内存的段或页时再将其调入内存。在虚拟段页式存储中,用户看到的逻辑地址仍然是二维的,即段号和段内地址。但系统对内存的管理则是采用了虚拟页式管理方式。OperatingSystem第4章存储管理-存储管理的原理2.地址映射在虚拟段页式管理中,用户作业仍是在自己的虚拟地址空间中运行,虚拟地址由三部分组成,即段号S、虚页号P和页内偏移地址D。在程序运行过程中,要把用户程序中的虚拟地址变换成主存实地址,必须分两步进行。首先查段表,若该段的存在位为0则产生一个缺段中断,读入该段的页表;其次再查找页表,看该页是否在内存,若不在内存则产生一个缺页中断,调入该页;最后把块号p与页内偏移地址d拼接起来就得到了主存的实地址。虽然虚拟段页式存储方式兼具虚拟段式和虚拟页式的优点,但也有不足之处,功能的增强导致实现变得复杂及管理开销加大,需要更多的硬件支持。OperatingSystem第4章存储管理-存储管理的原理§4.8存储管理实例§4.8.1LinuxOS中的存储管理§4.8.2Windows2000/XPOS中的存储管理OperatingSystem第4章存储管理-存储管理的原理§4.8.1LinuxOS中的存储管理linux采用分页式虚拟存储管理,为每个进程构造了一个私有的容量为4GB的虚拟内存空间(应用程序可以使用3GB,操作系统使用另外1GB)。linux内核维护虚拟地址空间至物理内存空间之间的地址映射关系,把用户进程经常访问的数据保存在内存的页框中,而把访问频率较低的数据保存在外存的对换区中,通过页框和对换区的联合作用,实现了存储扩充,使得操作系统能够运行内存需求容量远远大于实际物理页框容量的应用程序。OperatingSystem第4章存储管理-存储管理的原理1.虚拟地址空间的管理和地址映射

在系统启动时,操作系统的内核被装入内存并执行系统的初始化操作,此时把内核相关的所有程序和数据影射到3G-4G的线性地址空间,而且无论哪个进程在运行,在进程的页表和页目录中,内核空间的映射信息是相同的,因此所有进程共享了同一个内核空间,也就共享了操作系统的代码和数据。每个进程拥有的独立用户空间是私有的,其页表中的映射关系是动态的,随着进程数据在内存页框和外存对换区之间的传输,页表中的地址映射关系也在相应的改变。(1)进程的虚拟空间在32位的linux操作系统中,虚拟地址空间如图所示,内核空间和用户空间地址映射的实现是完全不同的。用户空间内核空间03G4GOperatingSystem第4章存储管理-存储管理的原理图3-32虚拟地址空间的操作集虚拟内存操作集open()close()unmap()protect()sync()advise()no_page()s()swapin()vm_endvm_startvm_flagsvm_nodevm_ops……vm_next虚拟内存区域进程虚拟内存vm_area_structOperatingSystem第4章存储管理-存储管理的原理(2)虚拟空间的管理linux把进程的虚拟空间分成若干个存储区域,在每个进程的task_struct结构中有一个域(structmm_struct*mm),该域描述了每个进程各个存储区域在虚拟地址空间中的布局,各个存储区域的详细信息则是通过数据结构为structvm_area_struct的数据来描述的,每个进程的各个存储区域链接成一棵平衡树,当需要查询某个存储区域时,通过平衡树可以加快查询速度。structvm_area_struct结构如图3-32所示。域structvm_operations*vm_ops中包含一系列函数指针,当内核需要在一个给定进程的虚页上执行给定的操作时,通过查找该域得到指针,然后执行相应的操作。OperatingSystem第4章存储管理-存储管理的原理管理原则进程的虚拟内存包含了进程所有的可执行代码和数据,运行某个程序时,(1)系统要根据可执行映像中的信息,为进程代码和数据动态分配虚拟内存;(2)新分配的虚拟内存必须和进程已有的虚拟内存连接起来才能使用;(3)linux内存可以使用共享的程序库代码和数据,这样共享库的代码和数据也需要连接到进程已有的虚拟地址空间中。(4)linux采用请求页式虚拟内存管理,linux还需要知道进程虚拟地址空间中任何一个虚拟地址区域的来源和当前所在的位置,以便能够装入物理内存。OperatingSystem第4章存储管理-存储管理的原理图3-33虚拟内存相关数据结构之间的关系vm_endvm_startvm_flagsvm_nodevm_ops……vm_nextvm_area_struct进程虚拟内存数据代码0x8059000x1048000x00000vm_endvm_startvm_flagsvm_nodevm_ops……vm_nextvm_area_struct页目录表物理内存mem_mapmm_structcountpgd……mmapmmap_avlmmap_semtask_struct…………mmOperatingSystem第4章存储管理-存储管理的原理虚拟内存地址的降序排列vm_area_struct。vm_area_struct结构访问频繁,为此,除了链表结构外,linux利用了AVL平衡树组织vm_area_struct,可快速定位某个虚拟内存地址,但在该树中插入和删除节点需要花费较多的时间。动态分配内存时,linux首先分配一个vm_area_struct结构,并连接到进程的虚拟内存链表中,当后续的指令访问这一内存区域时,处理器在进行虚拟地址到物理地址的映射时会产生页故障,当linux处理这一故障时,就可以为新的虚拟内存分配物理内存。当某个程序的映像开始运行时,可执行映像(包括共享库)必须装入到进程的虚拟地址空间。即可执行文件只是被链接到进程的虚拟地址空间中。随着程序的运行,被引用的程序部分会由操作系统装入到物理内存,该方法被称为“内存映射”。OperatingSystem第4章存储管理-存储管理的原理当可执行映像影射到进程的虚拟地址空间时,将产生一组vm_area_struct结构来描述虚拟内存区域的起始点和终止点,每个vm_area_struct结构代表可执行映像的一部分,可能是可执行代码,也可能是初始化的变量或未初始化的数据,这些都是在函数do_mmap()中来实现的。随着vm_area_struct结构的生成,这些结构所描述的虚拟内存区域上的标准函数也由linux初始化。但是在这一步还没有从虚拟内存到物理内存的映射,也就是说还没有建立页表页目录。某个可执行映像映射到进程虚拟内存中并开始执行时,会遇到所访问的数据不在物理内存,这时处理器将向linux报告一个页故障及其对应的故障原因,于是就用到了请页机制。OperatingSystem第4章存储管理-存储管理的原理2.请页机制

linux采用请页机制来节约内存,它仅仅把当前正在执行的程序要使用的虚拟页(少量一部分)装入内存。页故障的产生有三种原因:(1)程序出现错误:例如向无效的内存区域中写入数据,或页错误发生在TASK_SIZE的范围外,这些情况下,虚拟内存是无效的,linux将向进程发送SIGSEGV信号并终止进程的运行。(2)虚拟地址有效但其所对应的页当前不在物理内存中,即缺页错误,这时操作系统必须从磁盘映像(页未分配或属于共享库)或交换文件(此页被换出)中将其装入物理内存。OperatingSystem第4章存储管理-存储管理的原理(3)虚拟地址有效,其所对应的页当前也在物理内存中,但是要访问的虚拟地址被写保护,即保护错误。这时操作系统必须判断:如果是用户进程正在写当前代码空间,则发SIGSEGV信号并终止进程的运行,但是如果错误发生在一旧的共享页上时,则处理方法有所不同,简述如下:

通过函数get_free_page()重新分配一页通过函数copy_page()复制发生保护错误的页内容修改mem_map数组重置页目录和页表刷新缓存OperatingSystem第4章存储管理-存储管理的原理页故障的处理首先对页错误进行定位,即虚拟地址中的定位,被调入页在交换文件(s)或在可执行映像中的定位。操作系统必须通过AVL树找到页错误的线性地址所属的vm_area_struct,如果没找到则说明访问非法虚地址,linux会发信号终止进程(如果必要),否则检查页错误类型,如果是非法类型(越界错误,段权限错误等),同样会发信号终止进程。对有效的虚拟地址,linux通过页表项判断页是在交换文件中,还是在可执行映像中。如果该页的页表项是无效的,但非空,则说明处于交换文件中,操作系统要从交换文件装入页。对于执行映像的内存映射来讲,则会分配新的物理页,更新页表项属性信息,并从映像中装入页。最后所需的页装入了物理内存,页表项也同时被更新,然后进程就可以继续执行了。OperatingSystem第4章存储管理-存储管理的原理3.交换机制

当物理内存不足时,内核的交换守护进程kswapd负责释放部分物理内存页,该内核守护进程实际是一个内核线程,它在内核初始化时启动,并周期地运行。它的任务就是保证系统中具有足够的空闲页,从而使内存管理子系统能够有效运行。在系统启动时,kswapd守护进程由内核的init进程启动。当内核的交换定时器到期时,该进程开始运行。如果kswapd发现系统中的空闲页很少,该进程将按照下面的三种方法减少系统使用的物理页:OperatingSystem第4章存储管理-存储管理的原理(1)减少缓冲区和页高速缓存的大小,linux利用“时钟”算法从系统中选择要丢弃的页,即每次循环检查mem_map页向量中不同的页块。每次内核的交换进程(kswapd)运行时,检查物理内存中已装入块的多少,如果空闲页较少,则kswapd进行集中换出。(2)将SystemV共享内存页交换出物理内存。系统通过将共享内存交换到交换文件而释放物理内存。linux同样使用“时钟”算法选择要交换物理内存的页。(3)将页交换出物理内存或丢弃。kswapd首先选择可交换的进程,或其中某些页可从内存中换出或丢弃的进程。另外,被锁定的页也不会被交换。linux利用页的寿命信息选择要交换的页,也即所谓“最近最少使用(LRU)”算法。OperatingSystem第4章存储管理-存储管理的原理页的寿命信息保存在mem_map_t结构中,最初分配某个页时,页的寿命为3,每次该页被访问,其寿命增加3,直到20为止。而当内核的交换进程运行时,页寿命减一,如果某个页的寿命为0,则该页可作为交换候选页。如果是“脏”页(该信息保存在页表项中),则可将该页交换出物理内存。但是,进程的虚拟内存区域可具有自己的交换操作例程(定义在虚拟区域操作集中),这时,将利用该例程执行交换操作,否则,交换守护进程在交换文件中分配页,并将该页写入交换文件。页的“年龄”是从“请页”时开始记录和渐增的。当某物理页交换到交换文件之后,该页对应的页表项被标志为无效,同时页结构中包含该页在交换文件中的位置信息,而被释放出的物理页则被收回到free_area数据结构中。OperatingSystem第4章存储管理-存储管理的原理交换空间大小的规则大多数人认为:交换空间的总量应该是系统物理内存量的两倍,实际上正确的规定如下:(1)估计需要的内存总量,运行所有想同时运行的程序,并利用free或ps程序估计所需的内存总量,只需大概估计。(2)增加一些安全性容量。(3)减去已有的物理内存容量,然后将所得数据取整为MB,这就是应当的交换空间大小。(4)如果得到的交换空间大小远远大于物理内存量,则说明需要增加物理内存数量,否则系统性能会因为过分的页交换而下降。设置交换空间,也可在不同的磁盘上建立多个交换空间,有可能提高页交换的速度。OperatingSystem第4章存储管理-存储管理的原理4.内存分配和回收机制

Linux对内存的分配和回收是以2的幂次方页为单位的。内存的分配和回收有两个级别:底层的系统级和高层的用户级。(1)分配策略linux使用了几种分配策略来分配物理内存,但主要的是伙伴系统,它保存正在使用的主存范围信息,并且把主存划分成块,块的大小是2的幂次方页,如1页、2页、4页、8页等。kmalloc()函数是内核内存的主要分配方式,它使用了“伙伴系统”来管理内存。而vmalloc()函数作为一补充分配方法,分配虚拟地址相邻而物理地址可以不相邻的内存。OperatingSystem第4章存储管理-存储管理的原理如图3-34所示,在初始化后整个内存被划分成1块,假如分配了一大小为2k-1的空闲块,就要求把2k次方大小的空闲块分成两个大小为2k-1的空闲块,一个用来分配,一个重新连接在空闲表中的2k-1空闲链上。在用户释放内存时,系统需要把空闲块插入内存空闲表中,在这时同样有一地址合并问题,伙伴关系中只考虑互为伙伴的两个空闲块合并。伙伴系统的优点是算法简单,速度快,缺点是只合并伙伴易产生碎片。OperatingSystem第4章存储管理-存储管理的原理20<2k-12k2mm(a)初始化20<2k-12k2mkkk(b)分配前20<2k-12k2mkk(b)分配后k-1图3-34采用伙伴关系分配内存OperatingSystem第4章存储管理-存储管理的原理(2)系统级调用分配过程和释放过程linux的物理页分配采用链表和位图结合的方法。如图3-35所示,linux内核定义了一个称为free_area的数组,该数组的每一项描述描述某一种页块的信息,第一个元素描述单个页的信息,第二个元素描述以2个页为一块的页块信息,第三个元素描述以4个页为一块的页块信息,依此类推,所描述的页块大小以2的倍数增加。free_area数组的每项包含两个元素:list和map。list是一个双向链表的头指针,该双向链表的每个节点包含空闲页块的起始物理页框编号,而map则是记录这种页块组分配情况的位示图。OperatingSystem第4章存储管理-存储管理的原理mem_map_t图3-35linux物理内存的分配示意图534201mapmapmapmap56mem_map_t4mem_map_t07654321A0页框号free_area物理内存图中,free_area数组的元素0包含了一个空闲页(页框编号为0),而元素2则包含两个以4页为大小的空闲页块,第一个页块的起始页框编号为4,而另一个页块的起始页框编号为56。

OperatingSystem第4章存储管理-存储管理的原理5.缓存和刷新机制

Linux使用了多种和内存管理相关的高速缓存:(1)缓冲区高速缓存:缓冲区高速缓存中包含了由块设备使用的数据缓冲区。用于记录从设备中读取的数据块或写入设备的数据块。缓冲区高速缓存由设备标识号和块标号索引,因此可以快速找出数据块。如果数据能够在缓冲区高速缓存中找到,则系统就没有必要在物理块设备上进行实际的读操作。(2)页高速缓存:这一高速缓存用来加速对磁盘上的映像和数据的访问。它用来缓存某个文件的逻辑内容,并通过文件VFS索引节点和偏移量访问。当页从磁盘上读到物理内存时,就缓存在页高速缓存中。OperatingSystem第4章存储管理-存储管理的原理(3)交换高速缓存:只有修改后的(脏)页才保存在交换文件中,修改后的页写入交换文件后,如果该页再次被交换但未修改时,只需丢弃该页。交换高速缓存实际包含了一个页表项链表,系统的每个物理页对应一个页表项。对交换出的页,该页表包含了该页的交换文件信息,以及该页在交换文件中的位置信息。如果某个交换页表项非零,则表明保存在交换文件中的对应物理页没有被修改。如果这一页在后续的操作中被修改,则处于交换缓存中的页表项被清零。OperatingSystem第4章存储管理-存储管理的原理§4.8.2Windows2000/XPOS中的存储管理1.Windows2000/XP中地址空间的布局通常,32位Windows2000/XP上每个用户进程可以占用2G的私有地址空间,操作系统占用剩下的2G地址空间。Windows2000/XP高级服务器和Windows2000/XP数据中心服务器支持一个引用选项,允许用户拥有3G的地址空间。3G地址空间选项提供进程一个3G的地址空间,这个特性是为了满足一些应用程序的需求而采取的临时性办法。例如数据库服务器需要在内存中保存比2G地址空间更多的数据。需要注意的是:每一个用户进程有一个属于进程自身的私有地址空间,而在系统中仅仅存在一个系统空间,被操作系统使用。任何线程在运行时如果处理机处于核心态,都可以访问访问系统空间(被系统中各个线程所共享)。OperatingSystem第4章存储管理-存储管理的原理3GB用户地址空间1GB系统地址空间BFFFFFFFC0000000FFFFFFFF应用程序代码全程变量每个线程堆栈DLL代码FFFFFFFF内核执行体HAL引导驱动程序进程页表超空间系统高速缓存分页缓冲池非分页缓冲池C0800000C0000000图3-36X86系统虚拟地址空间布局OperatingSystem第4章存储管理-存储管理的原理2.Windows2000/XP中地址地址转换机制

用户应用程序以32位虚拟地址方式编制。CPU利用内存管理器创建和维护的数据结构将虚拟地址转换为物理地址。Windows2000/XP在X86体系结构上利用二级页表结构来实现虚拟地址向物理地址的变换,内核的系统是利用三级页表来实现的。一个32位的虚拟地址被解释为三个独立的分量:页目录索引、页表索引和字节索引。虚拟地址变换的基本步骤:(1)内存管理的硬件设备定位当前进程的页目录。每次进程的切换时,一般是通过操作系统设置一个专用的CPU寄存器来通知硬件设备新进程页目录所在的地址。OperatingSystem第4章存储管理-存储管理的原理(2)页目录索引用于在页目录中指出页目录项(pagedirectoryentry,PDE)的位置。(3)页表索引用于在页表中指明页表项的位置。(4)页表项用于确定页框的位置。如果所需的页是有效的,页表项会包含物理内存中一个页的页框号,相应的虚拟页面就包含在这个物理页框中。如果页表项表明所需的页是无效的,内存管理器的故障处理程序会定位该页,并努力试图使之有效(缺页处理),如果不能使失效的页面有效,故障处理程序将产生一个访问违规或错误检查。(5)当页表项指向了有效的页时,字节索引用于找到物理页内所需数据的地址。OperatingSystem第4章存储管理-存储管理的原理索引KPROCESS页目录索引页表索引字节索引CR3PFN页目录每个进程建立一张,有1024项PFN页表每个进程最多有512个,系统空间最多占用512,每张表1024项物理地址空间要求的页要求的字节PTE索引物理地址PDE索引图3-37虚拟地址的变换(X86系统)OperatingSystem第4章存储管理-存储管理的原理3.页目录

每一个进程都用于一个单独的页目录。这是由内存管理器创建的特殊页,用于映射进程所有页表的位置。进程页目录的物理地址被保存在核心进程(KPROCESS)块中。实际上,在X86系统中,它还同时被映射到地址0xC0300000处(在运行PAE内核的系统中,则映射到0xC06000000处)。CPU内部有一个专用寄存器(X86系统中的CR3),而操作系统将正在运行进程的页目录的物理地址放在这个寄存器中。页目录是由页目录项(PDE)组成的,每个页目录项四个字节长(在运行PAE内核的系统中则为8字节长),描述了进程所有页表的状态和位置。在X86系统中,最多需要1024个页目录项。页目录索引需要有10位宽(210=1024)。OperatingSystem第4章存储管理-存储管理的原理图3-38系统页表与进程私有页表PDE0…PDE511…PDE512…PDEn进程1的页目录PDE0…PDE511…PDE512…PDEn进程1的页目录PTE0进程2的页目录...PTE0进程2的页目录...进程2的页目录......SystemPTEn各进程私有进程没有访问的系统页表SystemPTE0OperatingSystem第4章存储管理-存储管理的原理4.进程页表、系统页表、快表TLB

Windows2000/XP为每个进程均构造一个私有的地址空间,而且每个进程间的地址映射情况各异,所以每个进程都有自己独有的页表集来映射私有地址空间。描述系统空间的页表被所有的进程共享。当进程刚创建时,系统空间的页目录项被初始化为指向现存的系统页表。但是如图3-38所示,各个进程的系统空间不会完全相同。访问已经驻留内存的分页缓冲池时,进程也可能产生一个页面失效,这是因为它的进程页目录仍然没有指向描述缓冲池新区域的系统页表。当访问非分页缓冲池时页面失效不会发生,甚至尽管它也能被扩充,这是因为Windows2000/XP在系统初始化时为了能描述它的最大容量已经建立了足够多的系统页表。OperatingSystem第4章存储管理-存储管理的原理标志位含义访问禁止高速缓存修改有效此页已被读过禁止访问此页的高速缓存此页已被写过表示变换是否映射到物理内存中实际的页面页表是由页表项(PTE)数据构成的,有效的页表项有两个主要的域:包含数据的物理页面的页框号,或是内存中某页面物理地址的页框号;另外是一些描述页的状态和保护限制的标志位,典型的状态和保护限制的标志位如下:OperatingSystem第4章存储管理-存储管理的原理每次地址变换都需要经过两次查询,一次是在页目录中找到正确的页表,另一次是在页表中找到正确的项。X86处理器提供了关联存储器数据形式的高速缓存,称为快表(TranslationLookasideBuffer,TLB)。如果一个页表项的全局位被设置为1(用于对所有进程都可见的系统空间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论