操作系统请求分页式存储管理页面置换算法课程设计报告

合集下载

操作系统报告-最近最久未使用置换算法

操作系统报告-最近最久未使用置换算法

操作系统课程报告最近最久未使用置换算法学号姓名班级华侨大学电子工程系设计内容假定系统为某进程分配了三个物理块,并考虑有以下的页面号引用串:3,5,1,2,3,1,5,1,2,3,4,1,3,1,5,2,3,1,3,5(按各自数据来填写)。

模拟分页式存储管理中硬件地址转换和产生缺页中断,用最近最久未使用置换算法处理缺页中断,求出每次物理块的存储情况,并与“最优”置换算法进行置换次数的对比。

报告内容1、算法的基本原理。

答:1>最近最久未使用置换算法最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做出决策的。

由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。

该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t。

当需要淘汰一个页面时,选择现有也面中t值最大的,即最近最久未使用的页面予以淘汰。

2>最佳(Optimal)置换算法最佳置换算法是由Belady于1966年提出的一种理论上的算法。

其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。

采用最佳置换算法,通常可保证获得最低的缺页率。

2、程序流程图。

1>最近最久未使用置换算法3、程序及注释。

1>最近最久未使用置换算法2>最佳(Optimal)置换算法4、运行结果以及结论。

(如果发现上机考试结果有误,请解释原因并写出正确答案)1>最近最久未使用置换算法2>最佳(Optimal)置换算法结论:由运行结果知最佳(Optimal)置换算法比最近最久未使用置换算法(LRU)更优化,缺页次数更少。

页面置换算法

页面置换算法

图 FIFO算法的Belady现象
FIFO陷阱现象示例
3个页面 123412512345 111444555555 22211111333 3332222244 9次缺页 9/12=75%
4个页面 123412512345
111111555544 22222211115 3333332222 444444333
1-随机淘汰算法
随机淘汰算法。在系统设计人员认为无法确定哪 些页被访问的概率较低时,随机地选择某个用户 的页面并将其换出将是一种明智的作法。
2-最佳页面置换(OPT)算法
7 最0 佳1 置2 换0算3法0 4 2 3 0 3 2 1 2 0 1 7 0 1
7 7 7其2所选择2 的被2 淘汰2页面,将是2以后永不再7 用
7这列样前7 ,头7当的2要页进顺行次2置换换出2 时,4,而4只把需换4 把入0置的换页指链针接0所在指F0IF的OF队I7F尾O7队即 7
可。0 0 0
333222
11 100
缺点:1a. 1算法与1进0程的0 实0际运3 行3规律不相3适应2 ,因2为进2 程1 页框中这存(的些利物某页用理些面率块页不不) 面被高经淘。常汰被。先访b进. 问由先,实出但验置先和换进测算先试法出发置现换FI算FO法算不法能的保内证
页面置换算法
置换算法的前提:若需访问的页面不在内存而需将 其调入,且内存中没有空闲页面,需从内存中调 出一页程序或数据。 目的:选出一个被淘汰的页面。 把选择换出页面的算法称为页面置换算法。 置换算法的好坏直接影响系统的性能。一个好的 置换算法应具有较低的页面更换频率。从理论上 讲,应将那些以后不会再访问的页面换出,或者 把那些在较长时间内不会再访问的页面换出。
10 次缺页

存储管理实验报告_6

存储管理实验报告_6

昆明理工大学信息工程与自动化学院学生实验报告(2012 —2013 学年第二学期)一、实验目的存储管理的主要功能之一是合理地分配空间。

请求页式管理是一种常用的虚拟存储管理技术。

通过本次实验, 要求学生通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解, 通过请求页式存储管理中页面置换算法模拟设计, 了解虚拟存储技术的特点, 掌握请求页式存储管理的页面置换算法。

二、实验原理及基本技术路线图(方框原理图)用C或C++语言模拟实现请求式分页管理。

要求实现: 页表的数据结构、分页式内存空间的分配及回收(建议采用位图法)、地址重定位、页面置换算法(从FIFO,LRU,NRU中任选一种)。

int subareaSize[num]={8,12,16,32,24,16,64,128,40,64};//分区大小Process *pro=NULL;//保持进程信息int ProcessNum=0;//进程数目int applyProcessNum=0;//每次申请进程数目int maxApplyNum=0;//最大可申请数目int *applyIndex=NULL;//申请进程队列int totalApplyNum=0;//申请总数int *assignPointer=NULL;//已分配内存的进程队列int assignFlag=0;//分配索引, 表示已申请队列已分配的进程数int exeIndex;//执行的进程号Node *subareaNode=new Node[3];//分区回收时, 进程所在分区及其前, 后分区信息LinkList createLinkList(int n );//建立空闲分区链Node firstFit(LinkList &head,Process pro);//首次适应算法Node nestFit(LinkList &head,Process pro,Node flag);//循环适应算法Node bestFit(LinkList &head,Process pro);//最佳适应算法Node worstFit(LinkList &head,Process pro);//最坏适应算法Node assign(LinkList &head,int orderIndex,int index,Node flagNode);//一次分区分配int assignMemory(LinkList &head);//内存分配void insertNode(LinkList &head,Node q,int index);//插入节点Node deleteNode(LinkList &head,int index);//删除节点int display(LinkList &head);//打印分区分配情况int lowAttemper(int *excursionPointer);//低级调度int findSubarea(LinkList &head,int index);//回收内存int creatProcess();//创建进程Process* randomCreatPro(int n);//随机产生进程下面是各种方法简述:(1) 最优替换算法, 即OPT算法。

实验六请求分页存储管理

实验六请求分页存储管理

实验六:请求分页存储管理一.实验目的深入理解请求页式存储管理的基本概念和实现方法,重点认识其中的地址变换、缺页中断、置换算法等实现思想。

二.实验属性该实验为综合性、设计性实验。

三.实验仪器设备及器材普通PC386以上微机四.实验要求本实验要求2学时完成。

本实验要求完成如下任务:(1)建立相关的数据结构:页表、页表寄存器、存储块表等;(2)指定分配给进程的内存物理块数,设定进程的页面访问顺序;(3)设计页面置换算法,可以选择OPT、FIFO、LRU等,并计算相应的缺页率,以比较它们的优劣;(4)编写地址转换函数,实现通过查找页表完成逻辑地址到物理地址的转换;若发生缺页则选择某种置换算法(OPT、FIFO、LRU等)完成页面的交换;(5)将整个过程可视化显示出来。

实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。

实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。

三、设计过程3.1算法原理分析OPT算法是未来最远出现,当当前内存中没有正要访问的页面时,置换出当前页面中在未来的访问页中最远出现的页面或再也不出现的页面。

FIFO算法是先进先出,当当前内存中没有正要访问的页面时,置换出最先进来的页面。

LRU算法是最近最久未使用,当当前内存中没有正要访问的页面时,置换出在当前页面中最近最久没有使用的页面。

3.2数据定义int length,num_page,count,seed; //length记录访问串的长度,num_page页面数,count记录缺页次数int result[20][30],order[30],a[10]; //result记录结果,order存储访问串,a存储当前页面中的值int pos1,flag1,flag2,flag3; //pos1位置变量,flag1等为标志变量 char result1[30]; //记录缺页数组 void opt() //最佳void fifo() //先进先出bool search(int n) //查找当前内存中是否已存在该页3.3流程图与运行截图图6.1 FIFO ()函数流程图;否是 是否 开始得到执行的指令指令是否在内存中最先存入指令被淘汰下面是否还有指令 结束得出命中率图2.2 OPT算法流程图四、小结本次课程设计目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

操作系统实验4-请求分页存储管理模拟实验

操作系统实验4-请求分页存储管理模拟实验

实验四请求分页存储管理模拟实验一:实验目的通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求分页存储管理系统的原理和实现技术的理解。

二:实验内容假设每个页面可以存放10条指令,分配给进程的存储块数为4。

用C语言或Pascal语言模拟一进程的执行过程。

设该进程共有320条指令,地址空间为32个页面,运行前所有页面均没有调入内存。

模拟运行时,如果所访问的指令已经在内存,则显示其物理地址,并转下一条指令;如果所访问的指令还未装入内存,则发生缺页,此时需要记录缺页产生次数,并将相应页面调入内存,如果4个内存块已满,则需要进行页面置换。

最后显示其物理地址,并转下一条指令。

在所有指令执行完毕后,显示进程运行过程中的缺页次数和缺页率。

页面置换算法:分别采用OPT、FIFO、LRU三种算法。

进程中的指令访问次序按如下原则生成:50%的指令是顺序执行的。

25%的指令是均匀分布在低地址部分。

25%的指令是均匀分布在高地址部分。

三:实验类别分页存储管理四:实验类型模拟实验五:主要仪器计算机六:结果OPT:LRU:FIFO:七:程序# include<stdio.h># include<stdlib.h># include<conio.h># define blocknum 4//页面尺寸大小int m; //程序计数器,用来记录按次序执行的指令对应的页号static int num[320]; //用来存储320条指令typedef struct BLOCK //声明一种新类型--物理块类型{int pagenum; //页号int accessed; //访问量,其值表示多久未被访问}BLOCK;BLOCK block[blocknum]; //定义一大小为8的物理块数组void init() //程序初始化函数,对block初始化{for(int i=0;i<blocknum;i++){block[i].pagenum=-1;block[i].accessed=0;m=0;}}int pageExist(int curpage)//查找物理块中页面是否存在,寻找该页面curpage是否在内存块block中,若在,返回块号{for(int i=0; i<blocknum; i++){if(block[i].pagenum == curpage )return i; //在内存块block中,返回块号}return -1;}int findSpace()//查找是否有空闲物理块,寻找空闲块block,返回其块号{for(int i=0;i<blocknum;i++){if(block[i].pagenum==-1)return i; //找到了空闲的block,返回块号}return -1;}int findReplace()//查找应予置换的页面{int pos = 0;for(int i=0;i<blocknum;i++){if(block[i].accessed > block[pos].accessed)pos = i; //找到应该置换页面,返回BLOCK中位置}return pos;void display()//显示物理块中的页面号{for(int i=0; i<blocknum; i++){if(block[i].pagenum != -1){printf(" %02d ",block[i].pagenum);printf("%p |",&block[i].pagenum);}}printf("\n");}void randam()//产生320条随机数,显示并存储到num[320]{int flag=0;printf("请为一进程输入起始执行指令的序号(0~320):\n");scanf("%d",&m);//用户决定的起始执行指令printf("******进程中指令访问次序如下:(由随机数产生)*******\n");for(int i=0;i<320;i++){//进程中的320条指令访问次序的生成num[i]=m;//当前执行的指令数,if(flag%2==0)m=++m%320;//顺序执行下一条指令if(flag==1)m=rand()%(m-1);//通过随机数,跳转到低地址部分[0,m-1]的一条指令处,设其序号为m1if(flag==3)m=m+1+(rand()%(320-(m+1)));//通过随机数,跳转到高地址部分[m1+2,319]的一条指令处,设其序号为m2flag=++flag%4;printf(" %03d",num[i]);//输出格式:3位数if((i+1)%10==0) //控制换行,每个页面可以存放10条指令,共32个页面printf("\n");}}void pagestring() //显示调用的页面序列,求出此进程按次序执行的各指令所在的页面号并显示输出{for(int i=0;i<320;i++){printf(" %02d",num[i]/10);//输出格式:2位数if((i+1)%10==0)//控制换行,每个页面可以存放10条指令,共32个页面printf("\n");}}void OPT() //最佳替换算法{int n=0;//记录缺页次数int exist,space,position;int curpage;//当前指令的页面号for(int i=0;i<320;i++){m=num[i];curpage=m/10;exist=pageExist(curpage);if(exist==-1){ //当前指令的页面号不在物理块中space=findSpace();if(space != -1){ //当前存在空闲的物理块block[space].pagenum = curpage; //将此页面调入内存display();//显示物理块中的页面号n++;//缺页次数+1}else{ //当前不存在空闲的物理块,需要进行页面置换for(int k=0;k<blocknum;k++){for(int j=i;j<320;j++){//找到在最长(未来)时间内不再被访问的页面if(block[k].pagenum!= num[j]/10){block[k].accessed = 1000;} //将来不会被访问,设置为一个很大数else{ //将来会被访问,访问量设为jblock[k].accessed = j;break;}}}position = findReplace();//找到被置换的页面 ,淘汰block[position].pagenum = curpage;// 将新页面调入display();n++; //缺页次数+1}}}printf("缺页次数:%d\n",n);printf("缺页率:%f%%\n",(n/320.0)*100);}void LRU() //最近最久未使用算法{int n=0;//记录缺页次数int exist,space,position ;int curpage;//当前指令的页面号for(int i=0;i<320;i++){m=num[i];curpage=m/10;exist = pageExist(curpage);if(exist==-1){ //当前指令的页面号不在物理块中space = findSpace();if(space != -1){ //当前存在空闲的物理块block[space].pagenum = curpage; //将此页面调入内存display();//显示物理块中的页面号n++;//缺页次数+1}else{ //当前不存在空闲的物理块,需要进行页面置换position = findReplace();block[position].pagenum = curpage;display();n++; //缺页次数+1}}elseblock[exist].accessed = -1;//恢复存在的并刚访问过的BLOCK中页面accessed为-1for(int j=0; j<blocknum; j++){//其余的accessed++block[j].accessed++;}}printf("缺页次数:%d\n",n);printf("缺页率:%f%%\n",(n/320.0)*100);}void FIFO(){int n=0;//记录缺页次数int exist,space,position ;int curpage;//当前指令的页面号int blockpointer=-1;for(int i=0;i<320;i++){m=num[i];curpage=m/10;exist = pageExist(curpage);if(exist==-1){ //当前指令的页面号不在物理块中space = findSpace();if(space != -1){ //当前存在空闲的物理块blockpointer++;block[space].pagenum=curpage; //将此页面调入内存n++;//缺页次数+1display();//显示物理块中的页面号}else{ // 没有空闲物理块,进行置换position = (++blockpointer)%4;block[position].pagenum = curpage; //将此页面调入内存n++;display();}}}printf("缺页次数:%d\n",n);printf("缺页率:%f%%\n",(n/320.0)*100);}void main(){int choice;printf("************请求分页存储管理模拟系统*************\n");randam();printf("************此进程的页面调用序列如下**************\n");pagestring();while(choice != 4){printf("********1:OPT 2:LRU 3:FIFO 4:退出*********\n");printf("请选择一种页面置换算法:");scanf("%d",&choice);init();switch(choice){case 1:printf("最佳置换算法OPT:\n");printf("页面号物理地址页面号物理地址页面号物理地址页面号物理地址\n");OPT();break;case 2:printf("最近最久未使用置换算法LRU:\n");printf("页面号物理地址页面号物理地址页面号物理地址页面号物理地址\n");LRU();break;case 3:printf("先进先出置换算法FIFO:\n");printf("页面号物理地址页面号物理地址页面号物理地址页面号物理地址\n");FIFO();break;}}}。

页面置换算法教案

页面置换算法教案

页面置换算法
第7次课授课时间 2015年7月1日教案完成时间2015年6月22日
例:假定系统为某进程分配了三个物理块,并有以下的页面号引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
若采用先进先出置换算法,共发生12次置换。

注:
(1)该算法的出发点是最早调入内存的页面,其不再被访问的可能性会大一些。

(2)该算法实现比较简单,对具有线性顺序访问的程序比较合适,而对其他情况效率不高。

因为经常被访问的页面,往往在内存中停留最久,结果这些常用的页面却因变老而被淘汰。

(3)先进先出算法存在一种异常现象,即在某些情况下会出现分配给的进程物理块数增多,缺页次数有时增加,有时减少的奇怪现象,这种现象称为Belady现象。

3、最近最久未使用置换算法
最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。

由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。

例:假定系统为某进程分配了三个物理块,并有以下的页面号引用串: 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
利用LRU算法进行页面置换,其结果如图:
注:
该算法的出发点:如果某个页面被访问了,则它可能马上还要访问。

反之,如果很长时间未被访问,则它在最近一段时间也不会被访问。

全国自考操作系统(存储管理)模拟试卷1(题后含答案及解析)

全国自考操作系统(存储管理)模拟试卷1(题后含答案及解析)

全国自考操作系统(存储管理)模拟试卷1(题后含答案及解析) 题型有:1. 单项选择题 3. 填空题 4. 简答题 6. 判断题单项选择题1.根据作业在本次分配到的内存起始地址将目标代码装到指定内存地址中,并修改所有有关地址部分的值的方法称为_______方式。

A.固定定位B.静态重定位C.动态重定位D.单一连续重定位正确答案:B 涉及知识点:存储管理2.静态地址重定位的对象是_______。

A.源程序B.编译程序C.目标程序D.执行程序正确答案:C 涉及知识点:存储管理3.使用_______,目标程序可以不经过任何改动而装入主存直接执行。

A.静态重定位B.动态重定位C.编译或汇编D.连接程序正确答案:B 涉及知识点:存储管理4.在可变式分区存储管理中,当释放和回收一个空闲区时,造成空闲表项区数减1的情况是_______。

A.无上邻空闲区,也无下邻空闲区B.有上邻空闲区,但无下邻空闲区C.无上邻空闲区,但有下邻空闲区D.有上邻空闲区,也有下邻空闲区正确答案:D解析:在有上邻空闲区也有下邻空闲区的情况下,释放区和上、下邻空闲区合并成一块空闲区,故原先记录上、下邻空闲区的两个表项就只需要合并为一个表项记录新的大空闲区。

知识模块:存储管理5.在下列存储管理算法中,内存的分配和释放平均时间之和为最大的是_______。

A.首次适应法B.循环首次适应法C.最佳适应法D.最差适应法正确答案:C解析:最佳适应算法的分配算法的速度比首次适应法、循环首次适应法和最差适应算法差得多,如用链表实现,释放算法要在链表中找上、下邻空闲区,修改过或新加入的空闲区还要有序地插入到链表中。

知识模块:存储管理6.早期采用交换技术的目的是_______。

A.能运行更多的程序B.能运行更大的程序C.实现分时系统D.实现虚拟存储技术正确答案:A 涉及知识点:存储管理7.虚拟存储器技术的目的是_______。

A.实现存储保护B.实现程序浮动C.可运行更大更多的程序D.扩充主存容量正确答案:C 涉及知识点:存储管理8.在以下存储管理方案中,不适用于多道程序设计系统的是_______。

操作系统-页面置换算法课件

操作系统-页面置换算法课件
2
第一章 操作系统引论
图5-3 利用最佳页面置换算法时的置换图
3
第一章 操作系统引论
2. 先进先出(FIFO)页面置换算法 FIFO算法是最早出现的置换算法。该算法总是淘汰最先 进入内存的页面,即选择在内存中驻留时间最久的页面予以 淘汰。该算法实现简单,只需把一个进程已调入内存的页面 按先后次序链接成一个队列,并设置一个指针,称为替换指 针,使它总是指向最老的页面。但该算法与进程实际运行的 规律不相适应,因为在进程中,有些页面经常被访问,比如, 含有全局变量、常用函数、例程等的页面,FIFO算法并不能 保证这些页面不被淘汰。
9
第一章 操作系统引论
图5-6 某进程具有8个页面时的LRU访问情况
10
第一章 操作系统引论
2) 栈 可利用一个特殊的栈保存当前使用的各个页面的页面号。 每当进程访问某页面时,便将该页面的页面号从栈中移出, 将它压入栈顶。因此,栈顶始终是最新被访问页面的编号, 而栈底则是最近最久未使用页面的页面号。假定现有一进程, 它分有五个物理块,所访问的页面的页面号序列为:
4
第一章 操作系统引论
图5-4 利用FIFO置换算法时的置换图
5
第一章 操作系统引论
5.3.2 最近最久未使用和最少使用置换算法 1. LRU(Least Recently Used)置换算法的描述 FIFO置换算法的性能之所以较差,是因为它所依据的条
件是各个页面调入内存的时间,而页面调入的先后并不能反 映页面的使用情况。最近最久未使用(LRU)的页面置换算法 是根据页面调入内存后的使用情况做出决策的。
1
第一章 操作系统引论
5.3.1 最佳置换算法和先进先出置换算法 1. 最佳(Optimal)置换算法 最佳置换算法是由Belady于1966年提出的一种理论上的
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统程序设计课程设计报告课题: 请求分页式存储管理页面置换算法姓名:学号:同组姓名:专业班级:指导教师:设计时间:评阅意见:评定成绩:指导老师签名:年月日目录1. 系统描述 (3)2. 分析与设计 (3)2.1.系统功能模块图 (3)2.2.系统文件结构描述 (3)2.3.系统功能流程图 (4)2.4.UI设计以及操作说明: (4)2.5.测试数据及期望 (11)3.系统测试 (12)4.总结心得体会 (12)5.参考文献 (13)6.核心代码 (13)1. 系统描述系统使用.net framework 4.0开发的,图形用户界面使用winform程序设计,功能模块分别实现了请求分页式存储管理的LRU算法,FIFO 算法。

通过虚拟系统存储的概念和实现方法,进行运行的时候不需要把所有页面都装入内存中,只需要将部分页面调入内存,就可以运行。

在运行过程中,若要访问的页面不在内存中,则需用请求调入的功能将其装入内存中,如果此时内存中没有空白的物理块,就通过页面置换功能淘汰一个页面,根据LRU,FIFO两种淘汰算法来进行页面置换,并能计算出FIFO,LRU两种算法在不同内存容量中的的命中率。

系统运行时通过输入访问内存的顺序,以及分配的内存页面数,来进行二种算法的页面置换,实现了虚拟存储的功能和特点。

2. 分析与设计2.1.系统功能模块图图4.1 页式存储管理模块划分2.2.系统文件结构描述2.3.系统功能流程图开始还有指令?计算页号找到了吗?新页进入计算过程数组第一位,其余为一次下移计算命中率结束YNNY FIFO开始还有指令?计算页号找到了吗?比较现有页面计数项的大小,新页面替换最大项页面计算命中率结束YNNY LRU2.4.UI 设计以及操作说明:主窗体:#region访问顺序private void btnSure_Click(object sender, EventArgs e){if (txtOrder.Text.Equals("")){MessageBox.Show("访问顺序字符串不能为空", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}order = txtOrder.Text;listBox1.Items.Clear();string[] page = order.Split(' ');foreach (string pg in page){listBox1.Items.Add(pg);}txtOrder.Text = "";allocation alca = new allocation();this.Hide();DialogResult d = alca.ShowDialog();if (d == DialogResult.OK){this.Show();btnAlloc.Enabled = true;btnFifo.Enabled = true;btnlru.Enabled = true;alpage = alca.page;}}#endregion输入访问内存顺序,点击确定:#region确定内存页分配private void button1_Click(object sender, EventArgs e){if (textBox1.Text.Equals("")){MessageBox.Show("内存页面数不能为空", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);return;}page = Convert.ToInt32(textBox1.Text.Trim());this.Close();}#endregion输入分配内存页面数,点击确定:点击FIFO置换:FIFO 算法:淘汰最先进入的页面,也就是淘汰进入内存中驻留时间最长的页面,先进先出。

FIFO 计算#region第二步,计算//第二步,计算//查看是否命中for (fangwenyemianshu = 0; fangwenyemianshu < cunchufangwenyemian.Length; fangwenyemianshu++) {//对于某一列进行处理lie = fangwenyemianshu;if (lie == 0)//如果为第台一列{cunchujisuanguocheng[0, lie] =Convert.ToInt32(cunchufangwenyemian[lie]);cunchushifoumingzhong[0] = 0;//没命中为a}else{//如果不为a第台一列shifoumingzhong = 0;//假设没命中for (hang = 0; hang < alpage; hang++){if (cunchujisuanguocheng[hang, lie - 1] == Convert.ToInt32(cunchufangwenyemian[lie])){shifoumingzhong = hang + 1;//如果相同,则是否命中为命中位置}}cunchushifoumingzhong[lie] = shifoumingzhong;if (lie != 0){if (shifoumingzhong != 0)//是否命中{ //如?果命中,则不变for (hang = 0; hang < alpage; hang++){cunchujisuanguocheng[hang, lie] = cunchujisuanguocheng[hang, lie - 1];//将上一列复制?过来? }}else{ //如果没有命中,则向下移一位,新的进来置换过程for (hang = 2; hang > 0; hang--){cunchujisuanguocheng[hang,lie]= cunchujisuanguocheng[hang - 1, lie - 1];}cunchujisuanguocheng[0,lie]=Convert.ToInt32(cunchufangwenyemian[lie]);}}}#endregionLRU 算法:最近久未使用的置换算法的替换规则,根据内存调入页面后的使用情况,该算法赋予页面一个访问字段,用来记录一个页面自上次访问以来所经过的时间,当需要淘汰一个页面时选择现有页面其时间值最大的进行淘汰。

Lru计算:for (int j = 0; j < alpage; j++)//行列小于分配内存页面时,不需要淘汰页{for (int k = 0; k < alpage; k++){for (fangwenyemianshu = 0; fangwenyemianshu <ref_chars.Length; fangwenyemianshu++){lie = fangwenyemianshu;if (lie == 0)//如果为a第一列{cunchujisuanguocheng[0, lie] =Convert.ToInt32(ref_chars[lie]);cunchushifoumingzhong[0] =0; }else{shifoumingzhong = 0;for (hang = 0; hang < alpage; hang++){if(cunchujisuanguocheng[hang, lie - 1] == Convert.ToInt32(ref_chars[lie])){ shifoumingzhong = hang + 1;//如果相同,则是否命中为a命中位置}}cunchushifoumingzhong[lie] = shifoumingzhong;}if (lie != 0){if (shifoumingzhong != 0)//是否命中{ //如果命中,则不变for (hang = 0; hang < alpage; hang++) {cunchujisuanguocheng[hang, lie] = cunchujisuanguocheng[hang, lie - 1];}}else{ //如果没有命中,则向下移一位,新的进来置换过程for (hang = 0; hang < alpage; hang++) {cunchujisuanguocheng[hang, lie] = cunchujisuanguocheng[hang, lie - 1];}cunchujisuanguocheng[lie, lie] = Convert.ToInt32(ref_chars[lie]);}}}}}bool flag = false;for (int loop = alpage; loop < ref_chars.Length; loop++)//需要淘汰页时需要癮计算替换{flag = false;for (int i = 0; i < alpage; i++){if ((Phy_Blk[i].data ==Convert.ToInt32(ref_chars[loop]))){flag = true;}}if (flag)//不缺页,不置换,但是要计数{for (int i = 0; i < alpage; i++){cunchushifoumingzhong[loop] = i;Phy_Blk[i].count = 0;for (int l = 0; l < i; l++){Phy_Blk[i].count++;}for (int k = i + 1; k < alpage; k++){Phy_Blk[k].count++;}} }else// 缺页,置换所有的页都不相等{for (int i = 0; i < alpage; i++){if (maxCount == Phy_Blk[i].count){Phy_Blk[i].data =Convert.ToInt32(ref_chars[loop]);cunchushifoumingzhong[loop] = 0;Phy_Blk[i].count = 0;hang = i;}}for (int l = 0; l < hang; l++){Phy_Blk[hang].count++;}for (int k = hang + 1; k < alpage; k++){Phy_Blk[k].count++;}}for (int hang = 0; hang < alpage; hang++){cunchujisuanguocheng[hang, loop] =Convert.ToInt32(Phy_Blk[hang].data);arryMax[hang] = Phy_Blk[hang].count;}maxCount = max(arryMax);}StringBuilder strFang = new StringBuilder();for (lie = 0; lie < fangwenyemianshu; lie++){strFang.Append(" " + ref_chars[lie]);txtFWYMS.Text = strFang.ToString();DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();column.HeaderText = ref_chars[lie].ToString();dataGridView1.Columns.Add(column);}#endregion2.5.测试数据及期望输入内存顺序分配物理块为:5 如 1 6 2 5 4 8 9 3 7 来计算缺页率为100%如 3 4 5 6 7 2 1 8 缺页率为85%,经过比较发现 LRU算法比FIFO 更加适用3.系统测试输入内存访问顺序为 1 6 2 5 4 8 9 3 7 分配页面数为4FIFO和LRU缺页率为100%图3.21 FIFO 页面置换图 3.2 LRU 页面置换4.总结心得体会通过这次课程设计,使自己更加深刻了解了虚拟存储管理的功能,以及如何实现,对LRU和FIFO两种算法也是理解更加彻底,锻炼了自己的实践能力。

相关文档
最新文档