虚拟存储管理器的页面调度算法实现

合集下载

操作系统 课程实验-实验四页式虚拟存储管理中地址转换和缺页中断

操作系统 课程实验-实验四页式虚拟存储管理中地址转换和缺页中断

实验四页式虚拟存储管理中地址转换和缺页中断一、实验目的深入了解页式存储管理如何实现地址转换;进一步认识页式虚拟存储管理中如何处理缺页中断。

二、实验预备知识页式存储管理中地址转换的方法;页式虚拟存储的缺页中断处理方法。

三、实验内容编写程序完成页式虚拟存储管理中地址转换过程和模拟缺页中断的处理。

实验具体包括:首先对给定的地址进行地址转换工作,若发生缺页则先进行缺页中断处理,然后再进行地址转换;最后编写主函数对所做工作进行测试。

假定主存64KB,每个主存块1024字节,作业最大支持到64KB,系统中每个作业分得主存块4块。

四、提示与讲解页式存储管理中地址转换过程很简单,假定主存块的大小为2n字节,主存大小为2m'字节和逻辑地址m位,则进行地址转换时,首先从逻辑地址中的高m-n位中取得页号,然后根据页号查页表,得到块号,并将块号放入物理地址的高m'-n位,最后从逻辑地址中取得低n位放入物理地址的低n位就得到了物理地址,过程如图6所示。

逻辑地址图6 页式存储管理系统地址转换示意图地址转换是由硬件完成的,实验中使用软件程序模拟地址转换过程,模拟地址转换的流程如图7所示(实验中假定主存64KB,每个主存块1024字节,即n=10,m'=16,物理地址中块号6位、块内地址10位;作业最大64KB,即m=16,逻辑地址中页号6位、页内地址10位)。

在页式虚拟存储管理方式中,作业信息作为副本放在磁盘上,作业执行时仅把作业信息的部分页面装入主存储器,作业执行时若访问的页面在主存中,则按上述方式进行地址转换,若访问的页面不在主存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入主存储器后,再次执行时才可以按上述方法进行地址转换。

页式虚拟存储管理方式中页表除页号和该页对应的主存块号外,至少还要包括存在标志(该页是否在主存),磁盘位置(该页的副本在磁盘上的位置)和修改标志(该页是否修改过)。

计算机操作系统作业3(含答案).

计算机操作系统作业3(含答案).

一、单项选择题1.联想存储器在计算机系统中是用于______的。

A.存储文件信息B.与主存交换信息C.内存地址变换D.内存管理信息2.作业在执行中发生了缺页中断,经操作系统处理后,应该执行的指令是______。

A.被中断的前一条B.被中断的后一条C.作业的第一条D.被中断的指令在请求分页存储管理中,当指令的执行所需要的内容不在内存中时,发生缺页中断,当缺页调入内存后,应执行被中断指令。

另:缺页中断作为中断与其它中断一样要经历如保护CPU环境,分析中断原因,转入缺页中断处理程序进行处理,恢复CPU环境等几个步骤,但缺页中断又是一种特殊的中断,它与一般中断相比,有着明显的区别,主要表现在下面两个方面:(1)缺页中断是在指令执行期间产生和处理中断信号的。

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

3.实现虚拟存储器的目的是______。

A.实现存储保护B.实现程序浮动C.扩充外存容量D.扩充内存容量4.在段页式存储系统中,一个作业对应______。

A.多个段表B.一个段表,一个页表C.一个段表,多个页表D.多个段表,多个页表5.在虚拟页式存储管理方案中,完成将页面调入内存的工作的是______。

A.缺页中断处理B.页面淘汰过程C.工作集模型应用D.紧缩技术利用6.采用分页式内存管理时,重定位的工作是由______完成的。

A.操作系统B.用户C.地址转换机构D.内存空间分配程序7.在分页式内存管理系统中可能出现的问题是______。

A.颠簸B.不能共享C.外部碎片D.动态链接8.在下列有关分页式内存管理的叙述中正确的是______。

A.程序和数据是在开始执行前一次性和装入的B.产生缺页中断一定要淘汰一个页面C.一个被淘汰的页面一定要写回外存D.在页面中有“访问位”和“修改位”等消息9. 在可变式分配方案中,最佳适应算法是将空白区在空白区表中按______次序排列。

A.地址递增B.地址递减C.容量递增D.容量递减10. 在可变分区分配方案中,将空白分区按地址递增次序排列是要采用______。

虚拟存储器的基本构成

虚拟存储器的基本构成

虚拟存储器的基本构成虚拟存储器是计算机系统中的一个重要组成部分,它扩展了计算机的存储容量,提高了系统的性能和可用性。

虚拟存储器由主存储器和辅助存储器两部分组成,通过一系列的管理机制,使得程序能够以透明的方式访问较大容量的存储空间。

1. 主存储器主存储器是虚拟存储器的核心组成部分,也是计算机系统中最快的存储器。

它通常由DRAM(动态随机存取存储器)构成,用于存储当前正在执行的程序和数据。

主存储器通过地址总线和数据总线与CPU直接连接,可以快速地读写数据。

虚拟存储器通过将主存储器的地址空间划分为若干固定大小的页面(page)来管理主存储器的使用。

2. 辅助存储器辅助存储器是虚拟存储器的扩展部分,它通常由硬盘、固态硬盘(SSD)等设备构成。

辅助存储器的容量远大于主存储器,用于存储不常用的程序和数据。

辅助存储器的读写速度较慢,但它具有持久性,数据不会因为断电而丢失。

虚拟存储器通过将辅助存储器的地址空间划分为若干固定大小的页面来管理辅助存储器的使用。

3. 页面表页面表是虚拟存储器管理的关键数据结构,用于记录主存储器和辅助存储器之间的映射关系。

每个页面表由多个页表项组成,每个页表项记录了一个页面在主存储器和辅助存储器中的对应位置。

当程序访问一个虚拟地址时,操作系统会通过页面表查找对应的物理地址,并将数据从主存储器或辅助存储器中读取出来。

4. 页面置换算法由于主存储器的容量有限,当主存储器中的页面不足以存放所有正在运行的程序和数据时,就需要使用页面置换算法将部分页面从主存储器中换出到辅助存储器中。

常用的页面置换算法有最佳(OPT)、先进先出(FIFO)、最近未使用(LRU)等。

这些算法根据页面的访问模式和重要性来决定换出哪些页面,以保证系统的性能和可用性。

5. 页面调度算法页面调度算法用于确定哪些页面应该被加载到主存储器中。

常用的页面调度算法有最低频率优先(LFU)、先进先出(FIFO)、最近最久未使用(LRU)等。

操作系统习题及答案四

操作系统习题及答案四

四、计算题1、某虚拟存储器的用户编程空间共32个页面,每页为1KB ,内存为16KB 。

假定某时刻一用户页表中已调入内存的页面的页号和物理块号的对照表如下:那么逻辑地址0A5C(H)所对应的物理地址是什么?要求:写出主要计算过程。

1.解:页式存储管理的逻辑地址分为两部分:页号和页内地址。

由条件“用户编程空间共32个页面〞,可知页号部分占5位;由“每页为1KB 〞,1K=210,可知内页地址占10位。

由“内存为16KB 〞,可知有16块,块号为4位。

逻辑地址0A5C 〔H 〕所对应的二进制表示形式是:000 1010 0101 1100,根据上面的分析,下划线部分为页内地址,编码 “000 10〞 为页号,表示该逻辑地址对应的页号为2。

查页表,得到物理块号是11〔十进制〕,即物理块地址为:10 11,拼接块内地址10 0101 1100,得10 1110 0101 1100,即2E5C 〔H 〕。

2、对于如下的页面访问序列:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5当内存块数量为3时,试问:使用FIFO 、LRU 置换算法产生的缺页中断是多少?写出依次产生缺页中断后应淘汰的页。

〔所有内存开场时都是空的,凡第一次用到的页面都产生一次缺页中断。

要求写出计算步骤。

〕2.解:采用先进先出〔FIFO 〕调度算法,页面调度过程如下:页面次序 1 2 3 4 1 2 5 1 2 3 4 5主存 页面 情况共产生缺页中断9次。

依次淘汰的页是1、2、3、4、1、2。

采用最近最少使用〔LRU 〕调度算法,页面调度过程如下:3、下表给出了某系统中的空闲分区表,系统采用可变式分区存储管理策略。

现有以下作业序列:96K 、20K 、200K 。

假设用首次适应算法和最正确适应算法来处理这些作业序列,试问哪一种算法可以满足该作业序列的恳求,为什么?空闲分区表页面次序 1 2 3 4 1 2 5 1 2 3 4 5 主存 页面 情况3.解:假设采用最正确适应算法,在申请96K 存储区时,选中的是5号分区,5号分区大小与申请空间大d,-致,应从空闲分区表中删去该表项;接着申请20K 时,选中1号分区,分配后1号分区还剩下12K ;最后申请200K ,选中4号分区,分配后剩下18K 。

操作系统存储管理实验报告

操作系统存储管理实验报告
4 / 37
操作系统实验·报告
typedef struct pfc_struct pfc_type; (2)模块结构 (伙伴系统) # define Inital 1024 //初始时的总内存
NODE root=(memory_node *)malloc(1*sizeof(memory_node));//根节点 int chip=0; // 记录总的碎片大小
total = 256 use =127 remain_max = 0 flag = 0 pid =0
total = 256 use = 0 remain_max = 256 flag = 0 pid =-1
total = 1024 use = 0 remain_max = 512 flag = 1 pid =-1
total = 512 use = 0 remain_max = 512 flag = 0 pid =-1
total = 512 use = 267 remain_max = 0 flag = 0 pid = -1
6 / 37
操作系统实验·报告
三、实验理论分析
7 / 37
操作系统实验·报告
(伙伴算法) Buddy System 是一种经典的内存管理算法。在 Unix 和 Linux 操作系统中都有用到。其 作用是减少存储空间中的空洞、减少碎片、增加利用率。避免外碎片的方法有两种: a.利用分页单元把一组非连续的空闲页框映射到非连续的线性地址区间。 b.开发适当的技术来记录现存的空闲连续页框块的情况,以尽量避免为满足对小块的 请 求而把大块的空闲块进行分割。 基于下面三种原因,内核选择第二种避免方法: a.在某些情况下,连续的页框确实必要。 b.即使连续页框的分配不是很必要,它在保持内核页表不变方面所起的作用也是不容 忽视的。假如修改页表,则导致平均访存次数增加,从而频繁刷新 TLB。 c.通过 4M 的页可以访问大块连续的物理内存,相对于 4K 页的使用,TLB 未命中率降 低,加快平均访存速度。 Buddy 算法将所有空闲页框分组为 10 个块链表,每个块链表分别包含 1,2,4,8,16,32,64,128,256,512 个连续的页框,每个块的第一个页框的物理地址是该块 大小的整数倍。如,大小为 16 个页框的块,其起始地址是 16*2^12 的倍数。 例,假设要请求一个 128 个页框的块,算法先检查 128 个页框的链表是否有空闲块, 如果没有则查 256 个页框的链表,有则将 256 个页框的块分裂两份,一 份使用,一份 插入 128 个页框的链表。如果还没有,就查 512 个页框的链表,有的话就分裂为 128, 128,256,一个 128 使用,剩余两个插入对应链 表。如果在 512 还没查到,则返回 出错信号。 回收过程相反,内核试图把大小为 b 的空闲伙伴合并为一个大小为 2b 的单独块,满足 以下条件的两个块称为伙伴: a.两个块具有相同的大小,记做 b。 b.它们的物理地址是连续的。 c.第一个块的第一个页框的物理地址是 2*b*2^12 的倍数。 该算法迭代,如果成功合并所释放的块,会试图合并 2b 的块来形成更大的块。 为了模拟 Buddy System 算法,我采用了数的数据结构,并使用了结构体,来记录各项 数据与标记,虽然不是真正的操作系统使用的方法,但成功模拟了插入和回收的过程。 在回收时我采用物理上的合并——即删除实际的物理节点,释放空间。然而实际中可 能根据需要仅仅是删除了标记项,使之标记成没用过的,从而避免了合并,会提高下 一次的插入操作。 碎片百分比 = 碎片总大小/总内存大小 (置换算法)

Optimal、FIFO、LRU调度算法

Optimal、FIFO、LRU调度算法

public void replacePage(Page NewPage) { if (VM.getCurrentEmptyIndex() != erPagesCount) { VM.getUserPages()[VM.getCurrentEmptyIndex()]=NewPage; VM.setCurrentEmptyIndex(VM.getCurrentEmptyIndex() + 1); } else { VM.getUserPages()[findUnusedPage(VM.getUserPages(), NewPage.getVisitTime())] = NewPage; } } private int findUnusedPage(Page[] Pages, int CurrentInstruction) { int[] Pos = new int[Pages.length]; Page page; for (int m = 0; m < Pages.length; m++) { Pos[m] = 0; page = Pages[m]; for (int n = CurrentInstruction; n < seq.getList().size(); n++) { if (page == VM.getPages()[Integer.parseInt(seq.getList().get(n).getName()) / Page.PAGE_SIZE]) { Pos[m]=n; break; } } }
2.指令序列变换成页地址流
设:页面大小为 1K; 用户虚存容量为 32K。 在用户虚存中,按每 1K 存放 10 条指令排列虚存地址,即 320 条指令在虚存中的存放方式为: 第 0 条—第 9 条指令为第 0 页(对应虚存地址为[0,9]) ; 第 10 条—第 19 条指令为第 1 页(对应虚存地址为[10,19]) ; 310 条—第 319 条指令为第 31 页(对应虚存地址为[310,319]) ; 按以上方式,用户指令可组成 32 页。

操作系统实验六-虚拟存储器实验报告

操作系统实验六-虚拟存储器实验报告

实验六虚拟存储器一、实验内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。

二、实验目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。

用这种办法扩充的主存储器称为虚拟存储器。

通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。

三、实验题目本实验有三道题目,其中第一题必做,第二,三题中可任选一个。

第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。

[提示](1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。

为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。

主存块号----用来表示已经装入主存的页所占的块号。

在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。

(2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号×块长+单元号计算出欲访问的主存单元地址。

如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。

若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。

(3)设计一个“地址转换”程序来模拟硬件的地址转换工作。

当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。

当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。

课件:页面调度

课件:页面调度
• 分配给进程的页架数:可用页架数越 多,则缺页中断率就越低
• 页面的大小:页面尺寸越大,则缺页 中断率就越低
• 用户的程序编制方法:在大数据量情 况下,对缺页中断率也有很大影响
用户编程的例子
• 程序将数组置为“0”,假定仅分得一个 主存页架,页面尺寸为128个字,数组元 素按行存放,开始时第一页在主存
• 使用页引用标志位
计算机操作系统
3 存储管理 – 3.3 页式存储管理 3.3.4 页面调度
掌握页面调度的基本概念 掌握缺页中断率
掌握各类页面调度算法 理解部分页面调度算法的模拟实

页面调度
• 当主存空间已满而又需要装入新页时, 页式虚拟存储管理必须按照一定的算法 把已在主存的一些页调出去
• 选择淘汰页的工作称为页面调度 • 选择淘汰页的算法称为页面调度算法 • 页面调度算法设计不当,会出现(刚被
淘汰的页面立即又要调入,并如此反复) • 这种现象称为抖动或颠簸
缺页中断率
• 假定进程P共n页,系统分配页架数m个 • P运行中成功访问次数为S,不成功访问
次数为F,总访问次数A=S+F • 缺页中断率定义为:f=F/A • 缺页中断率是衡量存储管理性能和用户
编程水平的重断,并给每一页设置一 个计数器
• 时间间隔中断发生后,所有计数器清0 • 每访问页1次就给计数器加1 • 选择计数值最小的页面淘汰
时钟CLOCK页面调度算法
• 采用循环队列机制构造页面队列,形 成了一个类似于钟表面的环形表
• 队列指针则相当于钟表面上的表针, 指向可能要淘汰的页面
• 严格实现的代价大(需要维持特殊队列)
LRU算法的模拟实现
• 每页建一个引用标志,供硬件使用
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

三、虚拟存储管理器的页面调度页面调度算法主要有:FIFO,最近最少使用调度算法(LRU),最近最不常用调度算法(LFU),最佳算法(OPT)1.输入:页面流文件,其中存储的是一系列页面号(页面号用整数表示,用空格作为分隔符),用来模拟待换入的页面。

下面是一个示意:1 2 3 4 1 2 5 1 2 3 4 52.处理要求:程序运行时,首先提示“请输入页面流文件的文件名:”,输入一个文件名后,程序将读入该文件中的有关数据。

初始条件:采用三个页框,初始时均为空。

根据第二次机会算法对数据进行处理。

3.输出要求:每换入一个页面(即:每读入一个页面号),判断是否有页面需要被换出。

若有,把被换出的页面号输出到屏幕上;若没有,则输出一个“*”号。

4.文件名约定提交的源程序名字:sourceXXX.c或者sourceXXX.cpp(依据所用语言确定)输入文件名字:可由用户指定其中:XXX为账号。

5.测试说明:测试教师将事先准备好一组文件(格式为*.txt),从中为每个程序随机指定一至三个作为输入文件(被测试者需从键盘输入指定文件的文件名),并查看程序输出结果。

6.第二次机会算法:对FIFO算法做如下简单的修改:发生替换时,先检查最老页面的R(访问)位。

如果为0,那么此页面是最早被换入的,而且近期没有被访问,可以立刻被替换掉;如果R位为1,就清除R位,并修改它的装入时间,使它就像刚被装入的新页面一样,然后继续搜索可替换的最老页面。

我没做出来~~~~页面调度算法主要有:FIFO,最近最少使用调度算法(LRU),最近最不常用调度算法(LFU),最佳算法(OPT)这几种算法的调度都有可能在考试中碰到。

关于这一类型,大家还可以参看书本251页的实验指导。

如2001年考题:要求:1。

实现三种算法: FIFO,最近最少使用调度算法(LRU),最近最不常用调度算法(LFU)2。

页面序列从指定的文本文件(TXT文件)中取出3。

输出:第一行:每次淘汰的页面号第二行:显示缺页的总次数本程序包括:FIFO,最近最少使用调度算法(LRU),最近最不常用调度算法(LFU)第二次机会算法 VC++调试通过(C)copyright by Neo欢迎大家测试请问题请Email:sony006@*/#include<stdio.h>#include<string.h>#include<iostream.h>const int MAXSIZE=1000;//定义最大页面数const int MAXQUEUE=3;//定义页框数typedef struct node{int loaded;int hit;}page;page pages[MAXQUEUE]; //定义页框表int queue[MAXSIZE];int quantity;//初始化结构函数void initial(){int i;for(i=0;i<MAXQUEUE;i++){pages[i].loaded=-1;pages[i].hit=0;}for(i=0;i<MAXSIZE;i++){queue[i]=-1;}quantity=0;}//初始化页框函数void init(){int i;for(i=0;i<MAXQUEUE;i++){pages[i].loaded=-1;pages[i].hit=0;}}//读入页面流void readData(){FILE *fp;char fname[20];int i;cout<<"请输入页面流文件名:";cin>>fname;if((fp=fopen(fname,"r"))==NULL){cout<<"错误,文件打不开,请检查文件名"; }else{while(!feof(fp)){fscanf(fp,"%d ",&queue[quantity]); quantity++;}}cout<<"读入的页面流:";for(i=0;i<quantity;i++){cout<<queue[i]<<" ";}}//FIFO调度算法void FIFO(){int i,j,p,flag;int absence=0;p=0;cout<<endl<<"----------------------------------------------------"<<endl; cout<<"FIFO调度算法页面调出流:";for(i=0;i<quantity;i++){flag=0;for(j=0;j<MAXQUEUE;j++){if(pages[j].loaded==queue[i]){flag=1;}}if(flag==0){if(absence>=MAXQUEUE){cout<<pages[p].loaded<<" ";}pages[p].loaded=queue[i];p=(p+1)%MAXQUEUE;absence++;}}absence-=MAXQUEUE;cout<<endl<<"总缺页数:"<<absence<<endl;}//最近最少使用调度算法(LRU)void LRU(){int absence=0;int i,j;int flag;for(i=0;i<MAXQUEUE;i++){pages[i].loaded=queue[i];}cout<<endl<<"----------------------------------------------------"<<endl; cout<<"最近最少使用调度算法(LRU)页面流:";for(i=MAXQUEUE;i<quantity;i++){flag=-1;for(j=0;j<MAXQUEUE;j++){if(queue[i]==pages[j].loaded){flag=j;}}//CAUTION pages[0]是队列头if(flag==-1){//缺页处理cout<<pages[0].loaded<<" ";for(j=0;j<MAXQUEUE-1;j++){pages[j]=pages[j+1];}pages[MAXQUEUE-1].loaded=queue[i]; absence++;}else{//页面已载入pages[quantity]=pages[flag];for(j=flag;j<MAXQUEUE-1;j++){pages[j]=pages[j+1];}pages[MAXQUEUE-1]=pages[quantity]; }}cout<<endl<<"总缺页数:"<<absence<<endl; }//最近最不常用调度算法(LFU)void LFU(){int i,j,p;int absence=0;int flag;for(i=0;i<MAXQUEUE;i++){pages[i].loaded=queue[i];}cout<<endl<<"----------------------------------------------------"<<endl; cout<<"最近最不常用调度算法(LFU)页面流:";for(i=MAXQUEUE;i<quantity;i++){flag=-1;for(j=0;j<MAXQUEUE;j++){if(pages[j].loaded==queue[i]){flag=1;pages[j].hit++;}}if(flag==-1){//缺页中断p=0;for(j=0;j<MAXQUEUE;j++){if(pages[j].hit<pages[p].hit){p=j;}}cout<<pages[p].loaded<<" ";pages[p].loaded=queue[i];for(j=0;j<MAXQUEUE;j++){pages[j].hit=0;}absence++;}}cout<<endl<<"总缺页数:"<<absence<<endl;}//第二次机会算法void second(){int i,j,t;int absence=0;int flag,temp;for(i=0;i<MAXQUEUE;i++){pages[i].loaded=queue[i];}cout<<endl<<"----------------------------------------------------"<<endl; cout<<"第二次机会算法页面流:";for(i=MAXQUEUE;i<quantity;i++){flag=-1;for(j=0;j<MAXQUEUE;j++){if(pages[j].loaded==queue[i]){flag=1;pages[j].hit=1;}}if(flag==-1){//缺页处理t=0;while(t==0){if(pages[0].hit==0){cout<<pages[0].loaded<<" ";for(j=0;j<MAXQUEUE-1;j++){pages[j]=pages[j+1];}pages[MAXQUEUE-1].loaded=queue[i];pages[MAXQUEUE-1].hit=0;t=1;}else{temp=pages[0].loaded;for(j=0;j<MAXQUEUE-1;j++){pages[j]=pages[j+1];}pages[MAXQUEUE-1].loaded=temp;pages[MAXQUEUE-1].hit=0;}}absence++;}}cout<<endl<<"总缺页数:"<<absence<<endl;}//显示版权信息函数void version(){cout<<endl<<endl;cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl; cout<<" ┃虚拟存储管理器的页面调度┃"<<endl;cout<<" ┠───────────────────────┨"<<endl; cout<<" ┃(c)All Right Reserved Neo ┃"<<endl; cout<<" ┃sony006@ ┃"<<endl; cout<<" ┃version 2004 build 1122 ┃"<<endl; cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;cout<<endl<<endl;}void main(){version();initial();readData();FIFO();init();LRU();init();LFU();init();second();}。

相关文档
最新文档