物理内存与虚拟内存
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。
物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在Linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(SwapSpace)。
作为物理内存的扩展,Linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。
Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。
要深入了解Linux内存运行机制,需要知道下面提到的几个方面:
首先,Linux系统会不时的进行页面交换操作,以保持尽可能多的空闲物理内存,即使并没有什么事情需要内存,Linux也会交换出暂时不用的内存页面。这可以避免等待交换所需的时间。
其次,Linux进行页面交换是有条件的,不是所有页面在不用时都交换到虚拟内存,Linux内核根据”最近最经常使用“算法,仅仅将一些不经常使用的页面文件交换到虚拟内存,有时我们会看到这么一个现象:Linux物理内存还有很多,但是交换空间也使用了很多。其实,这并不奇怪,例如,一个占用很大内存的进程运行时,需要耗费很多内存资源,此时就会有一些不常用页面文件被交换到虚拟内存中,但后来这个占用很多内存资源的进程结束并释放了很多内存时,刚才被交换出去的页面文件并不会自动的交换进物理内存,除非有这个必要,那么此刻系统物理内存就会空闲很多,同时交换空间也在被使用,就出现了刚才所说的现象了。关于这点,不用担心什么,只要知道是怎么一回事就可以了。
最后,交换空间的页面在使用时会首先被交换到物理内存,如果此时没有足够的物理内存来容纳这些页面,它们又会被马上交换出去,如此以来,虚拟内存中可能没有足够空间来存储这些交换页面,最终会导致Linux出现假死机、服务异常等问题,Linux虽然可以在一段时间内自行恢复,但是恢复后的系统已经基本不可用了。
因此,合理规划和设计Linux内存的使用,是非常重要的。
内核态与用户态申请内存
1)在内核态申请内存比在用户态申请内存要更为直接,它没有采用用户态那种延迟分配内存技术。内核认为一旦有内核函数申请内存,那么就必须立刻满足该申请内存的请求,并且这个请求一定是正确合理的。
2)相反,对于用户态申请内存的请求,内核总是尽量延后分配物理内存,用户进程总是先获得一个虚拟内存区的使用权,最终通过缺页异常获得一块真正的物理内存。
解决内存超载的方法
1)
交换技术
2)
虚拟内存—使得程序在部分调入内存的情况下可以运行
内存动态分配的两个主要问题:1)分配率,2)
减少碎片
两级存储方案:
重定位
保护
共享
重定位技术--寻址
地址类型
物理地址
逻辑地址
相对地址
固定分区使用的重定位技术
1)基址寄存器 解决寻址问题
重定位
2)界限寄存器 校验地址有效性
保护
缺点易产生碎片,内存使用率比较低.
分页使用的重定位技术
分页技术致力于消除内存分配时产生的外部碎片.
分段使用的重定位技术
分段技术用于消除主存的内部碎片
分页是对用户是透明的,分段是不透明的
操作系统的基本特点:
并发性,
共享性
虚拟性
1
时分复用技术
1)
虚拟处理技术
2)
虚拟设备技术
2
空分复用技术
1)虚拟磁盘技术
2)虚拟存储器技术
异步性
存储器管理功能
存储器管理应具有内存分配、内存保护、地址映射和内存扩充等功能
为了实现内存分配,在内存分配的机制中应具有这样的结构和功能:
(1)
内存分配数据结构。该结构用于记录内存空间的使用情况,作为内存分配的依据;
(2)
内存分配功能。系统按照一定的内存分配算法为用户程序分配内存空间;
(3)
内存回收功能。系统对于用户不再需要的内存,通过用户的释放请求去完成系统的
回收功能。
程序的链接
1.静态链接方式(StaticLinking)
2.装入时动态链接(Load-timeDynamic Linking)
(1)
便于修改和更新
(2)
便于实现对目标模块的共享。
3.运行时动态链接(Run-timeDynamic Linking)
不仅可加快程序的装入过程,而且可节省大量的内存空间
3 连续分配方式
单一连续分配
1)最简单的一种存储管理方式,但只能用于单用户、单任务的操作系统中
固定分区分配
1)固定分区式分配是最简单的一种可运行多道程序的存储管理方式
将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,这样,把用户空间划分为几个分区,便允许有几道作业并发运行。当有一空闲分区时,便可以再从外存的后备作业队列中选择一个适当大小的作业装入该分区,当该作业结束时,又可再从后备作业队列中找出另一作业调入该分区。
1.划分分区的方法
(1)
分区大小相等,即使所有的内存分区大小相等。其缺点是缺乏灵活性,即当程序太
小时,会造成内存空间的浪费;当程序太大时,一个分区又不足以装入该程序,致使该程
序无法运行。
(2)
分区大小不等。为了克服分区大小相等而缺乏灵活性的这个缺点,可把内存区划分
成含有多个较小的分区、适量的中等分区及少量的大分区。这样,便可根据程序的大小为
之分配适当的分区。
2.内存分配
通常将分区按大小进行排队,并为之建立一张分区使用表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配)
动态分区分配
动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现可变分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分配与回收操作这样三个问题.
1.分区分配中的数据结构 空闲分区表和链
2.分区分配算法
1)
首次适应算法(firstfit)
2)
循环首次适应算法(nextfit)
3)
最佳适应算法(bestfit)
4)
最坏适应算法(worstfit)
5)
快速适应算法(quickfit)
3.分区分配操作----分配内存和回收内存
1)
分配内存
2)
回收内存
(1)
回收区与插入点的前一个空闲分区F 1
相邻接,见图4-8(a)。此时应将回收区与插入
点的前一分区合并,不必为回收分区分配新表项,而只需修改其前一分区F
1 的大小。
(2)
回收分区与插入点的后一空闲分区F 2
相邻接,见图4-8(b)。此时也可将两分区合并,
形成新的空闲分区,但用回收区的首址作为新空闲区的首址,大小为两者之和。
(3)
回收区同时与插入点的前、后两个分区邻接,见图4-8(c)。此时将三个分区合并,
使用F 1
的表项和F 1
的首址,取消F 2
的表项,大小为三者之和。
(4)
回收区既不与F 1
邻接,又不与F 2
邻接。这时应为回收区单独建立一新表项,填写
回收区的首址和大小,并根据其首址插入到空闲链中的适当位置。
伙伴系统
固定分区和动态分区方式都有不足之处。固定分区方式限制了活动进程的数目,当进程大小与空闲分区大小不匹配时,内存空间利用率很低。动态分区方式算法复杂,回收空闲分区时需要进行分区合并等,系统开销较大。伙伴系统方式是对以上两种内存方式的一种折衷方案。
特点:
空闲块的分配与合并都使用2的幂次方算法
优点:简单,快速
缺点:归并伙伴容易产生碎片
伙伴地址的确定:
起始地址为p,大小为2^k的内存块,其伙伴块的起始地址为:
buddy(p, k) =
p + 2^k (p%2^(k+1) = 0)
p - 2^k (p%2^(k+1) = 2^k)
例子:
内存大小为2^10= 1024(地址从0-
1023), 则大小为2^8,起始地址为512的伙伴块起始地址为768.
大小为2^7,起始地址为384(2^7+
2^8)的伙伴块起始地址为256.
空闲内存管理
1)位图
--- 跟踪内存的使用情况
连续查找n个0是比较费时的操作.但使用位图的优点是只需固定大小的内存就能跟踪内存的使用情况.
关键是分配单位的选择,内存大小和分配单元决定位图大小.
在伙伴系统中位图用于判断伙伴是否空闲.
2)空闲链表---维护没有使用的内存块
分配算法:
首次适配
速度快,尽可能少的搜索链表节点,每次从头开始,多次分配后,造成小块空闲区在前部区域聚集,影响搜索效率.
下次适配
对首次适配的改善,每次都从上次分配的下一个节点开始查找
最佳适配
挥导致很多非常小的空闲区
最差适配
总是分配最大的,这样新的空闲区比较大还可以继续使用.
快速适配
按照2的?进行管理.
存在的共同问题:合并算法非常费时
可以为每个页面建一个位图,而空闲链表用于保存所有页面的空闲块.
1)
伙伴算法机动性好
可以让内存空闲块以各种尺寸再分配.合并空闲块也非常容易.
2)
非常适合分页系统的内存交换.
3)
内存使用率不理想,特别分配的内存不是2的整数幂.
哈希算法
哈希算法就是利用哈希快速查找的优点,以及空闲分区在可利用空间表中的分布规律,
建立哈希函数,构造一张以空闲分区大小为关键字的哈希表,该表的每一个表项记录了一
个对应的空闲分区链表表头指针。
在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间。如果在系统
中只有若干个小的分区,即使它们容量的总和大于要装入的程序,但由于这些分区不相邻
接,也无法把该程序装入内存。
动态重定位分区分配
在连续分配方式中,必须把一个系统或用户程序装入一连续的内存空间。如果在系统
中只有若干个小的分区,即使它们容量的总和大于要装入的程序,但由于这些分区不相邻
接,也无法把该程序装入内存。
动态重定位的实现---
引入重定位寄存器
动态重定位分区分配算法与动态分区分配算法基本上相同,差别仅在于:在这种分配
算法中,增加了紧凑的功能,通常,在找不到足够大的空闲分区来满足用户需求时进行紧
凑。
7 对换
1.对换(Swapping)的引入
在多道程序环境下,一方面,在内存中的某些进程由于某事件尚未发生而被阻塞运行,但它却占用了大量的内存空间,甚至有时可能出现在内存中所有进程都被阻塞而迫使CPU停止下来等待的情况;另一方面,却又有着许多作业在外存上等待,因无内存而不能进入内存运行的情况。
对换是以整个进程为单位的,便称之为“整体对换”或“进程对换”
如果对换是以“页”或“段”为单位进行的,则分别称之为“页面对换”或“分段对换”,又统称为“部分对换”。这种对换方法是实现后面要讲到的请求分页和请求分段式存储管理的基础,其目的是为了支持虚拟存储系统。
为了实现进程对换,系统必须能实现三方面的功能:
对换空间的管理、进程的换出,以及进程的换入
1.对换空间的管理
对换分区的分配是采用连续分配方式,因而对换空间的分配与回收,与动态分区方式时的内存分配与回收方法雷同。
3.进程的换出与换入
4 基本分页存储管理方式
连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无须再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。
在分页存储管理方式中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全部装入内存后方能运行。
5 基本分段存储管理方式
引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要:
1) 方便编程
2) 信息共享
3) 信息保护
4) 动态增长
5) 动态链接 动态链接也要求以段作为管理的单位
在前面所介绍的动态分区分配方式中,系统为整个进程分配一个连续的内存空间。而在分段式存储管理系统中,则是为每个分段分配一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。像分页系统一样,当段表放在内存中时,每要访问一个数据,都须访问两次内存.
4.分页和分段的主要区别
由上所述不难看出,分页和分段系统有许多相似之处。比如,两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。但在概念上两者完全不同,主要表现在下.
述三个方面。
(1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
(2)页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
(3)分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
5.3 信息共享
6 段页式存储管理方式
分页和分段存储管理方式都各有其优缺点。分页系统能有效地提高内存利用率,而分段系统则能很好地满足用户需要。
这种新系统既具有分段系统的便于实现、分段可共享、易于保护、可动态链接等一系列优点,又能像分页系统那样很好地解决内存的外部碎片问题,以及可为各个分段离散地分配内存等问题。
在段页式系统中,为了获得一条指令或数据,须三次访问内存。第一次访问是访问内存中的段表,从中取得页表始址;第二次访问是访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正从第二次访问所得的地址中,取出指令或数据
在地址变换机构中增设一个高速缓冲寄存器。每次访问它时,都须同时利用段号和页号去检索高速缓存,若找到匹配的表项,便可从中得到相应页的物理块号,用来与页内地址一起形成物理地址;若未找到匹配表项,则仍须再三次访问内存。由于它的基本原理与分页及分段的情况相似,故在此不再赘述.
7 虚拟存储器的基本概念
前面所介绍的各种存储器管理方式有一个共同的特点,即它们都要求将一个作业全部装入内存后方能运行,于是,出现了下面这样两种情况:
(1) 有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全部被装入内存,
致使该作业无法运行。
(2) 有大量作业要求运行,但由于内存容量不足以容纳所有这些作业,只能将少数作业
装入内存让它们先运行,而将其它大量的作业留在外存上等待。
出现上述两种情况的原因,都是由于内存容量不够大。一个显而易见的解决方法,是从物理上增加内存容量,但这往往会受到机器自身的限制,而且无疑要增加系统成本,因此这种方法是受到一定限制的。另一种方法是从逻辑上扩充内存容量,这正是虚拟存储技术所要解决的主要问题
虚拟存储器的引入
1.常规存储器管理方式的特征
(1) 一次性。在前面所介绍的几种存储管理方式中,都要求将作业全部装入内存后方能
运行,即作业在运行前需一次性地全部装入内存,而正是这一特征导致了上述两种情况的
发生。此外,还有许多作业在每次运行时,并非其全部程序和数据都要用到。如果一次性
地装入其全部程序,也是一种对内存空间的浪费。
(2) 驻留性。作业装入内存后,便一直驻留在内存中,直至作业运行结束。尽管运行中
的进程会因I/O
而长期等待,或有的程序模块在运行过一次后就不再需要(运行)了,但它们
都仍将继续占用宝贵的内存资源。
由此可以看出,上述的一次性及驻留性,使许多在程序运行中不用或暂不用的程序(数
据)占据了大量的内存空间,使得一些需要运行的作业无法装入运行。现在要研究的问题是:
一次性及驻留性在程序运行时是否是必需的。
2.局部性原理
局限性还表现在下述两个方面:
(1) 时间局限性。如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行;
如果某数据被访问过,则不久以后该数据可能再次被访问。产生时间局限性的典型原因是
由于在程序中存在着大量的循环操作。
(2) 空间局限性。一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将
被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行
虚拟存储器的定义
基于局部性原理,应用程序在运行之前,没有必要全部装入内存,仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入内存(称为缺页或缺段),此时程序应利用OS
所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。这样,便可使一个大的用户程序能在较小的内存空间中运行;也可在内存中同时装入更多的进程使它们并发执行。从用户角度看,该系统所具有的内存容量,将比实际内存容量大得多。但须说明,用户所看到的大容量只是一种感觉,是虚的,故人们把这样的存储器称为虚拟存储器.
由上所述可以得知,所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。可见,虚拟存储技术是一种性能非常优越的存储器管理技术,故被广泛地应用于大、中、小型机器和微型机中。
虚拟存储器的特征
1. 多次性
2. 对换性
3. 虚拟性
虚拟性是以多次性和对换性为基础的,或者说,仅当系统允许将作业分多次调入内存,并能将内存中暂时不运行的程序和数据换至盘上时,才有可能实现虚拟存储器;而多次性和对换性又必须建立在离散分配的基础上。
请求分页存储管理方式
请求分页系统是建立在基本分页基础上的,为了能支持虚拟存储器功能而增加了请求调页功能和页面置换功能。相应地,每次调入和换出的基本单位都是长度固定的页面,这使得请求分页系统在实现上要比请求分段系统简单(后者在换进和换出时是可变长度的段)。因此,请求分页便成为目前最常用的一种实现虚拟存储器的方式。
请求分页中的硬件支持:页表机制、缺页中断机构以及地址变换机构.
内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换
可变分配是指进程的实际内存空间可随运行情况改变.
全局置换是指在发生置换时除可以置换本身的页外,还可以置换其他进程的页,即全局的不是进程内部的
1) 固定分配局部置换
2) 可变分配全局置换
这可能是最易于实现的一种物理块分配和置换策略,已用于若干个OS
中。在采用这种策略时,先为系统中的每个进程分配一定数目的物理块,而OS自身也保持一个空闲物理块队列。当某进程发现缺页时,由系统从空闲物理块队列中取出一个物理块分配给该进程,并将欲调入的(缺)页装入其中。这样,凡产生缺页(中断)的进程,都将获得新的物理块。仅当空闲物理块队列中的物理块用完时,OS才能从内存中选择一页调出,该页可能是系统中任一进程的页,这样,自然又会使那个进程的物理块减少,进而使其缺页率增加。
3) 可变分配局部置换----可以维持缺页率与物理块保持在一定比例
4.7.3调页策略
3.页面调入过程
每当程序所要访问的页面未在内存时,便向CPU
发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后转入缺页中断处理程序。该程序通过查找页表,得到该页在外存的物理块后,如果此时内存能容纳新页,则启动磁盘I/O将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法从内存中选出一页准备换出;如果该页未被修改过,可不必将该页写回磁盘;但如果此页已被修改,则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位为“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。
4.8 页面置换算法
4.8.1最佳置换算法和先进先出置换算法
最佳置换算法是一种理想化的算法,它具有最好的性能,但实际上却难于实现。先进先出置换算法是最直观的算法,由于它可能是性能最差的算法,故实际应用极少。
1.最佳(Optimal)置换算法---通过未来选择那个换出
假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
进程运行时,先将7,0,1
三个页面装入内存。以后,当进程要访问页面2
时,将会产生缺页中断。此时OS
根据最佳置换算法,将选择页面7
予以淘汰。这是因为页面0
将作为第5
个被访问的页面,页面1
是第14
个被访问的页面,而页面7
则要在第18
次页面访问时才需调入。下次访问页面0
时,因它已在内存而不必产生缺页中断。当进程访问页面3时,又将引起页面1
被淘汰;因为,它在现有的1,2,0
三个页面中,将是以后最晚才被访问的。图4-26
示出了采用最佳置换算法时的置换图。由图可看出,采用最佳置换算法发生了6
次页面置换。
2.先进先出(FIFO)页面置换算法
该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰
采用FIFO
算法进行页面置换(图4-27)。当进程第一次访问页面2
时,将把第7
页换出,因为它是最先被调入内存的;在第一次访问页面3
时,又将把第0
页换出,因为它在现有的2, 0, 1
三个页面中是最老的页。由图
4-27 可以看出,利用FIFO
算法时进行了12
次页面置换,比最佳置换算法正好多一倍。
3 最近最久未使用(LRU)置换算法----过去使用情况
最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。
利用LRU
算法对上例进行页面置换的结果如图4-28
所示。当进程第一次对页面2
进行访问时,由于页面7
是最近最久未被访问的,故将它置换出去。当进程第一次对页面3进行访问时,第1
页成为最近最久未使用的页,将它换出。由图可以看出,前5个时间的图像与最佳置换算法时的相同,但这并非是必然的结果。因为,最佳置换算法是从“向后看”的观点出发的,即它是依据以后各页的使用情况;而LRU算法则是“向前看”的,即根据各页以前的使用情况来判断,而页面过去和未来的走向之间并无必然的联系。
4 Clock
置换算法
LRU 算法是较好的一种算法,但由于它要求有较多的硬件支持,故在实际应用中,大多采用LRU
的近似算法。Clock算法就是用得较多的一种LRU
近似算法。
采用简单Clock
算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置1。置换算法在选择一页淘汰时,只需检查页的访问位。如果是0,就选择该页换出;若为1,则重新将它置0,暂不换出,而给该页第二次驻留内存的机会,再按照FIFO
算法检查下一个页面。当检查到队列中的最后一个页面时,若其访问位仍为1,则再返回到队首去检查第一个页面。图4-31
示出了该算法的流程和示例。由于该算法是循环地检查各页面的使用情况,故称为Clock算法。但因该算法只有一位访问位,只能用它表示该页是否已经使用过,而置换时是将未使用过的页面换出去,故又把该算法称为最近未用算法NRU(Not
Recently Used)。
改进型Clock
置换算法
在将一个页面换出时,如果该页已被修改过,便须将该页重新写回到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。在改进型Clock
算法中,除须考虑页面的使用情况外,还须再增加一个因素,即置换代价.
1 类(A=0,M=0):表示该页最近既未被访问,又未被修改,是最佳淘汰页。
2 类(A=0,M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。
3 类(A=1,M=0):表示该页最近已被访问,但未被修改,该页有可能再被访问。
4 类(A=1,M=1):表示该页最近已被访问且被修改,该页可能再被访问。
该算法与简单Clock
算法比较,可减少磁盘的I/O操作次数。但为了找到一个可置换的页,可能须经过几轮扫描。换言之,实现该算法本身的开销将有所增加。
5 最少使用(LFU:LeastFrequently Used)置换算法
6 页面缓冲算法(PBA:PageBuffering Algorithm)
版权声明:本文为博主原创文章,未经博主允许不得转载。