地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。常见的置换算法有:
1)最佳置换算法(OPT)(理想置换算法)
这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10、100或者1000条指令后才会被访问,每个页面都可以用在该页面首次被访问前所要执行的指令数进行标记。最佳页面置换算法只是简单地规定:标记最大的页应该被置换。这个算法唯一的一个问题就是它无法实现。当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。
2)先进先出置换算法(FIFO)
最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就把它插在队尾上。
这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。
FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率增加了。当然,导致这种异常现象的页面走向实际上是很少见的。
3)最近最久未使用(LRU)算法
FIFO算法和OPT算法之间的主要差别是,FIFO算法利用页面进入内存后的时间长短作为置换依据,而OPT算法的依据是将来使用页面的时间。如果以最近的过去作为不久将来的近似,那么就可以把过去最长一段时间里不曾被使用的页面置换掉。它的实质是,当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以置换。这种算法就称为最久未使用算法(Least Recently Used,LRU)。
LRU算法是与每个页面最后使用的时间有关的。当必须置换一个页面时,LRU算法选择过去一段时间里最久未被使用的页面。
LRU算法是经常采用的页面置换算法,并被认为是相当好的,但是存在如何实现它的问题。LRU算法需要实际硬件的支持。其问题是怎么确定最后使用时间的顺序,对此有两种可行的办法:
1.计数器。最简单的情况是使每个页表项对应一个使用时间字段,并给CPU增加一个逻辑时钟或计数器。每次存储访问,该时钟都加1。每当访问一个页面时,时钟寄存器的内容就被复制到相应页表项的使用时间字段中。这样我们就可以始终保留着每个页面最后访问的“时间”。在置换页面时,选择该时间值最小的页面。这样做,不仅要查页表,而且当页表改变时(因CPU调度)要维护这个页表中的时间,还要考虑到时钟值溢出的问题。
2.栈。用一个栈保留页号。每当访问一个页面时,就把它从栈中取出放在栈顶上。这样一来,栈顶总是放有目前使用最多的页,而栈底放着目前最少使用的页。由于要从栈的中间移走一项,所以要用具有头尾指针的双向链连起来。在最坏的情况下,移走一页并把它放在栈顶上需要改动6个指针。每次修改都要有开销,但需要置换哪个页面却可直接得到,用不着查找,因为尾指针指向栈底,其中有被置换页。
因实现LRU算法必须有大量硬件支持,还需要一定的软件开销。所以实际实现的都是一种简单有效的LRU近似算法。
一种LRU近似算法是最近未使用算法(Not Recently Used,NUR)。它在存储分块表的每一表项中增加一个引用位,操作系统定期地将它们置为0。当某一页被访问时,由硬件将该位置1。过一段时间后,通过检查这些位可以确定哪些页使用过,哪些页自上次置0后还未使用过。就可把该位是0的页淘汰出去,因为在最近一段时间里它未被访问过。
4)Clock置换算法(LRU算法的近似实现)
5)最少使用(LFU)置换算法
在采用最少使用置换算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面作为淘汰页。由于存储器具有较高的访问速度,例如100 ns,在1 ms时间内可能对某页面连续访问成千上万次,因此,通常不能直接利用计数器来记录某页被访问的次数,而是采用移位寄存器方式。每次访问某页时,便将该移位寄存器的最高位置1,再每隔一定时间(例如100 ns)右移一次。这样,在最近一段时间使用最少的页面将是∑Ri最小的页。
LFU置换算法的页面访问图与LRU置换算法的访问图完全相同;或者说,利用这样一套硬件既可实现LRU算法,又可实现LFU算法。应该指出,LFU算法并不能真正反映出页面的使用情况,因为在每一时间间隔内,只是用寄存器的一位来记录页的使用情况,因此,访问一次和访问10 000次是等效的。
参考:
http://hary.wang.blog.163.com/blog/static/11695172820104945040438/
6)工作集算法
参考:
http://hi.baidu.com/binbin_88115/blog/item/f2787a386d2eb7d8d5622595.html
7)工作集时钟算法
8)老化算法(非常类似LRU的有效算法)
9)NRU(最近未使用)算法
10)第二次机会算法
第二次机会算法的基本思想是与FIFO相同的,但是有所改进,避免把经常使用的页面置换出去。当选择置换页面时,检查它的访问位。如果是0,就淘汰这页;如果访问位是1,就给它第二次机会,并选择下一个FIFO页面。当一个页面得到第二次机会时,它的访问位就清为0,它的到达时间就置为当前时间。如果该页在此期间被访问过,则访问位置1。这样给了第二次机会的页面将不被淘汰,直至所有其他页面被淘汰过(或者也给了第二次机会)。因此,如果一个页面经常使用,它的访问位总保持为1,它就从来不会被淘汰出去。
第二次机会算法可视为一个环形队列。用一个指针指示哪一页是下面要淘汰的。当需要一个存储块时,指针就前进,直至找到访问位是0的页。随着指针的前进,把访问位就清为0。在最坏的情况下,所有的访问位都是1,指针要通过整个队列一周,每个页都给第二次机会。这时就退化成FIFO算法了。
原创资料出处:
http://blog.csdn.net/wangsifu2009/article/details/6757352
参考资料:
http://wenku.baidu.com/link?url=UMTNpelB3k8Uj8rYr3QxDywYXaTHDAgsF7a-XpipNbuHarr2mBLzmcPSQvmqGYBRQTPGoL2GEage_Godx-ZevnAZ2oH4_Bp8u1COKS-3v03
分享到:
相关推荐
本文主要对比了几种常见的页面置换算法,包括请求调页策略、最优(OPT)算法、先进先出(FIFO)算法和最近最久未使用(LRU)算法。 请求调页策略允许进程在运行时动态地将部分程序和数据调入内存,当需要访问的页面不在...
实验中提到的几种页面置换算法如下: 1. **FIFO (First-In First-Out)**:这是一种简单的页面置换算法,它按照页面进入内存的时间顺序进行置换,即最早进入的页面优先被替换出去。虽然实现简单,但FIFO算法可能会...
本文主要探讨了几种基本的页面置换算法,包括最佳置换算法(OPT)、先进先出法(FIFO)和最近最久未使用算法(LRU),并通过VC程序进行了模拟比较。 1. 请求调页策略:在现代操作系统中,请求调页策略是常见的内存...
1. 实现上述几种页面置换算法,理解它们的基本思想。 2. 通过模拟实验,观察不同算法在相同工作负载下的性能差异,如缺页率、平均访问时间等。 3. 分析并比较算法的优缺点,探讨适用于不同场景的策略。 四、实验...
1. **页面置换算法**:常见的页面置换算法有FIFO(先进先出)、LRU(最近最少使用)、LFU(最不经常使用)和OPT(最佳页面置换)。FIFO是最简单的,但容易导致Belady异常;LRU是实际应用中最常用的,它认为最近使用...
从文件内容中提到了几种页面置换算法,包括: - 先进先出(FIFO)算法:这是一种最简单的页面置换算法,它基于“先进先出”的原则,即最早进入内存的页面将首先被置换出去。 - 最近最少使用(LRU)算法:此算法...
该工程具体是在codeblock上面实现了操作系统课程上讲解的页面置换算法,包括先进先出(FIFO)、最佳置换算法(OPT)、最久最近未使用算法(LRU)。 具体实现功能有: 1、建立相应的数据结构 2、在屏幕上显示页面...
该实验指导书旨在通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。 页面置换算法的...
常见的页面置换算法有以下几种: 1. **FIFO(先进先出)算法**:按照页面进入内存的顺序,最早进入的页面优先被替换。这种算法简单,但可能导致Belady异常,即增加分配给进程的页面数反而导致更多的页面置换。 2. ...
通过阅读和分析这段代码,你可以深入理解这两种页面置换算法的内部运作,并可能涉及到的数据结构,如链表或位图,用于表示页面状态和访问历史。 通过这个课程设计,你将能够巩固对操作系统的理解,特别是虚拟内存...
常见的页面置换算法有以下几种: 1. 最近最少使用(LRU,Least Recently Used):此算法认为最近未使用的页面在未来最不可能被使用,所以当需要替换页面时,会选择最近最久未使用的页面。实现LRU通常需要维护一个...
在这个“操作系统课设 c# 页面置换算法 开发文档”中,我们将探讨如何使用C#语言实现几种常见的页面置换算法,并通过流程图进行直观展示。 首先,FIFO(First In First Out)是最简单的页面置换算法,它遵循先进先...
通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
文档内容提到了几种典型的页面置换算法,具体知识点如下: 1. LRU(Least Recently Used)算法:该算法基于“最近最少使用”原则,淘汰最长时间未被访问的页面。LRU算法的实现通常需要记录每个页面被访问的时间顺序...
本文将深入探讨几种常见的页面置换算法及其特点。 1. **最优页面置换算法(Optimal Page Replacement Algorithm)**:这是一种理论上的理想算法,它选择在最远的将来才需要被访问的页面进行替换。由于实际系统中...
该项目主要是模拟操作系统的内存管理中的页面置换算法,对比几种算法的优劣,并将结果以动态的形式展示出来。选择了四种置换算法:先来先服务(FIFO)、最近最少使用(LRU)、最佳置换(OPT)、随机置换(RAN)。 该系统使用...
常见的页面置换算法有以下几种: 1. **FIFO(先进先出)**:最简单的页面置换算法,按照页面进入内存的顺序进行替换,即最早进入内存的页面最早被替换。 2. **LRU(最近最少使用)**:选择最近最久未使用的页面...