页面置换算法的实验报告
页面置换算法实验报告_4

页面置换算法实验报告院系:****************学院班级:***********姓名:***学号:************一、实验题目: 页面置换算法二. 实验目的:1.用C语言编写OPT、FIFO、LRU三种置换算法。
2.熟悉内存分页管理策略。
3.了解页面置换的算法。
4.掌握一般常用的调度算法。
5.根据方案使算法得以模拟实现。
6.锻炼知识的运用能力和实践能力。
三. 实验内容及要求:设计一个虚拟存储区和内存工作区, 编程序演示下述算法的具体实现过程, 并计算访问命中率:要求设计主界面以灵活选择某算法, 且以下算法都要实现1) 最佳置换算法(OPT): 将以后永不使用的或许是在最长(未来)时间内不再被访问的页面换出。
2) 先进先出算法(FIFO):淘汰最先进入内存的页面, 即选择在内存中驻留时间最久的页面予以淘汰。
3) 最近最久未使用算法(LRU): 淘汰最近最久未被使用的页面。
四、实验结果初始化结果1, 先进先出(FIFO)算法实验结果:2, 最近最久未使用(LRU)算法实验结果: 3, 最佳使用法(OPT)实验结果:五、实验总结选择置换算法, 先输入所有页面号, 为系统分配物理块, 依次进行置换:OPT基本思想:是用一维数组page[]存储页面号序列, memery[]是存储装入物理块中的页面。
数组next[]记录物理块中对应页面的最后访问时间。
每当发生缺页时, 就从物理块中找出最后访问时间最大的页面, 调出该页, 换入所缺的页面。
若物理块中的页面都不再使用, 则每次都置换物理块中第一个位置的页面。
FIFO基本思想:是用队列存储内存中的页面, 队列的特点是先进先出, 与该算法是一致的, 所以每当发生缺页时, 就从队头删除一页, 而从队尾加入缺页。
或者借助辅助数组time[]记录物理块中对应页面的进入时间, 每次需要置换时换出进入时间最小的页面。
LRU基本思想:是用一维数组page[]存储页面号序列, memery[]是存储装入物理块中的页面。
页面置换算法实验报告

页面置换算法实验报告
一、实验内容
本次实验主要围绕页面置换算法进行,以实验课本的实例介绍,采用FIFO页面置换算法对后面提到的参数进行置换,最终得出页面置换的结果和比较所得结果。
二、实验步骤
(一) 熟悉FIFO算法
首先是要了解FIFO页面置换算法,FIFO全称(First In First Out),按页面进入内存的顺序来替换相应内存页面,先进先出,将先进入内存的页面先替换出去。
(二) 阅读实验课本
在阅读实验课本之前要先熟悉实验书上所介绍的FIFO算法,然后在实验书上找出需要做的实验,并对实验环境和表格进行观察,掌握实验的基本内容。
(三) 开始页面置换
在开始实验之前,熟悉实验环境,根据实验书上的参数,首先模拟进程分配内存,根据FIFO算法去进行计算,根据上表中的参数去比较,最后得出最终结果。
(四) 在本次实验的补充
这次实验中,可以把FIFO的概念应用到实际应用中,也可以模拟不同情况,例如改变页面的大小,观察不同页面置换算法的结果,实验出最合适的结果。
三、实验结论
本次实验是为了了解FIFO页面置换算法,实验出最终的结果,最后得出页面置换的结果及比较结果。
页面置换算法 实验报告(DOC)

综合性实验报告一、实验目的1.学习常见的4种页面置换算法:最佳置换算法(OPT),先进先出页面置换算法(FIFO),最近最久未使用页面算法(LRU),最少使用置换算法(LFU)。
2.编写函数并计算输出上述各种算法的命中率。
二、总体设计(设计原理、设计方案及流程等)设计原理:OPT页面置换算法OPT所选择被淘汰的页面是已调入内存,且在以后永不使用的,或是在最长时间内不再被访问的页面。
因此如何找出这样的页面是该算法的关键。
可为每个页面设置一个步长变量,其初值为一足够大的数,对于不在内存的页面,将其值重置为零,对于位于内存的页面,其值重置为当前访问页面与之后首次出现该页面时两者之间的距离,因此该值越大表示该页是在最长时间内不再被访问的页面,可以选择其作为换出页面。
FIFO页面置换算法FIFO总是选择最先进入内存的页面予以淘汰,因此可设置一个先进先出的忙页帧队列,新调入内存的页面挂在该队列的尾部,而当无空闲页帧时,可从该队列首部取下一个页帧作为空闲页帧,进而调入所需页面。
LRU页面置换算法LRU是根据页面调入内存后的使用情况进行决策的,它利用“最近的过去”作为“最近的将来”的近似,选择最近最久未使用的页面予以淘汰。
该算法主要借助于页面结构中的访问时间time来实现,time记录了一个页面上次的访问时间,因此,当须淘汰一个页面时,选择处于内存的页面中其time值最小的页面,即最近最久未使用的页面予以淘汰。
LFU页面置换算法LFU要求为每个页面配置一个计数器(即页面结构中的counter),一旦某页被访问,则将其计数器的值加1,在需要选择一页置换时,则将选择其计数器值最小的页面,即内存中访问次数最少的页面进行淘汰。
设计流程:1.通过随机数产生一个指令序列,共320条指令。
2.指令序列变换成页地址流3.计算并输出下述各种算法在不同内存容量下的命中率。
4.在主函数中生成要求的指令序列,并将其转换成页地址流;在不同的内存容量下调用上述函数使其计算并输出相应的命中率。
页面置换算法模拟实验报告

if(block[i].timer >= block[pos].timer)
pos = i;//找到应予置换页面,返回BLOCK中位置
return pos;
}
void PRA::display(void)
{
for(int i=0; i<Bsize; i++)
}
}
int PRA::findSpace(void)
{
for(int i=0; i<Bsize; i++)
if(block[i].content == -1)
return i;//找到空闲内存,返回BLOCK中位置
return -1;
}
int PRA::findExist(int curpage)
{
if(exist != -1)
{
cout<<"不缺页"<<endl;
}
else
{
space = findSpace();
if(space != -1)
{
block[space] = page[i];
display();
}
else
{
for(int k=0; k<Bsize; k++)
for(int j=i; j<Psize; j++)
int findReplace(void); //查找应予置换的页面
void display(void); //显示
void FIFO(void);//FIFO算法
页面置换 操作系统实验报告

实验二页面置换算法实现一、实验目的(1)了解内存分页管理策略(2)掌握调页策略(3)掌握一般常用的调度算法(4)学会各种存储分配算法的实现方法。
(5)了解页面大小和内存实际容量对命中率的影响。
二、实验内容采用页式分配存储方案,通过分别计算不同算法的命中率来比较算法的优劣,同时也考虑页面大小及内存实际容量对命中率的影响,设计一个虚拟存储区和内存工作区,并使用下述算法来模拟实现页面的置换:1. 先进先出的算法(FIFO)2. 最近最久未使用算法(LRU)3. 最佳置换算法(OPT)实验分析在进程运行过程中,若其所访问的页面不存在内存而需要把它们调入内存,但内存已无空闲时,为了保证该进程能够正常运行,系统必须从内存中调出一页程序或数据送磁盘的对换区中。
但应调出哪个页面,需根据一定的算法来确定,算法的好坏,直接影响到系统的性能。
一个好的页面置换算法,应该有较低的页面更换频率。
2.1 先进先出(FIFO )页面置换算法当需要访问一个新的页面时,首先查看物理块中是否就有这个页面,若要查看的页面物理块中就有,则直接显示,不需要替换页面;如果要查看的页面物理块中没有,就需要寻找空闲物理块放入,若存在有空闲物理块,则将页面放入;若没有空闲物理块,则替换页面。
并将物理块中所有页面 timer++。
2.2 最近久未使用 (LRU) 置换算法的思路最近久未使用置换算法的替换规则,是根据页面调入内存后的使用情况来进行决策的。
该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面中其时间值最大的进行淘汰。
2.3 最佳(OPT)置换算法的思路其所选择的被淘汰的页面,是以后不使用的,或者是在未来时间内不再被访问的页面,采用最佳算法,通常可保证获得最低的缺页率。
三、实验流程3.1 系统功能图图3-1 系统功能图3.2 算法流程图1)先进先出(FIFO )页面置换算法流程图图3-2 先进先出页面置换算法流程图2)最近久未使用 (LRU) 置换算法图3-3 最近久未使用置换算法流程图3)最佳( OPT )置换算法图3-4 最佳置换算法流程图四、源程序#include<iostream.h>#include <stdlib.h>#include <time.h>#include <stdio.h>#define L 20 //页面长度最大为20int M; //内存块struct Pro//定义一个结构体{int num,time;};Input(int m,Pro p[L])//打印页面走向状态{cout<<"请输入页面长度(10~20):";do{cin>>m;if(m>20||m<10){ cout<<endl;cout<<"页面长度必须在10~20之间"<<endl<<endl;cout<<"请重新输入L:";}else break;}while(1);int i,j;j=time(NULL);//取时钟时间srand(j);//以时钟时间j为种子,初始化随机数发生器cout<<endl;cout<<"输出随机数: "<<endl;cout<<endl;for(i=0;i<m;i++){p[i].num=rand( )%10;//产生0到9之间的随机数放到数组p中p[i].time=0;cout<<p[i].num<<" ";}cout<<endl<<endl;return m;}void print(Pro *page1)//打印当前的页面{Pro *page=new Pro[M];page=page1;for(int i=0;i<M;i++)cout<<page[i].num<<" ";cout<<endl;}int Search(int e,Pro *page1 )//寻找内存块中与e相同的块号{Pro *page=new Pro[M];page=page1;for(int i=0;i<M;i++)if(e==page[i].num)return i;//返回i值return -1;}int Max(Pro *page1)//寻找最近最长未使用的页面{Pro *page=new Pro[M];page=page1;int e=page[0].time,i=0;while(i<M) //找出离现在时间最长的页面{if(e<page[i].time) e=page[i].time;i++;}for( i=0;i<M;i++)if(e==page[i].time)return i;//找到离现在时间最长的页面返回其块号return -1;}int Count(Pro *page1,int i,int t,Pro p[L])//记录当前内存块中页面离下次使用间隔长度{Pro *page=new Pro[M];page=page1;int count=0;for(int j=i;j<L;j++){if(page[t].num==p[j].num )break;//当前页面再次被访问时循环结束else count++;//否则count+1}return count;//返回count的值}int main(){int c;int m=0,t=0;float n=0;Pro p[L];m=Input(m,p);//调用input函数,返回m值cout<<"请输入分配的物理块m(2~6): ";cout<<endl<<endl;do{cin>>M;if(M>6||M<2){ cout<<endl;cout<<"物理块m必须在2~6之间"<<endl<<endl;cout<<"请重新输入m: ";}else break;}while(1);Pro *page=new Pro[M];do{for(int i=0;i<M;i++)//初始化页面基本情况{ page[i].num=0;page[i].time=m-1-i;}i=0;cout<<endl;cout<<"1:FIFO页面置换2:LRU页面置换"<<endl;cout<<"3:OPT页面置换4:退出"<<endl;cout<<"请选择页面置换算法:"<<endl;cin>>c;if(c==1)//FIFO页面置换{n=0;cout<<" FIFO算法页面置换情况如下: "<<endl;cout<<endl;while(i<m){if(Search(p[i].num,page)>=0) //当前页面在内存中{cout<<p[i].num<<" "; //输出当前页p[i].numcout<<"不缺页"<<endl;i++; //i加1}else //当前页不在内存中{if(t==M)t=0;else{n++; //缺页次数加1page[t].num=p[i].num; //把当前页面放入内存中cout<<p[i].num<<" ";print(page); //打印当前页面t++; //下一个内存块i++; //指向下一个页面}}}cout<<endl;cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl<<endl; }if(c==2)//LRU页面置换{n=0;cout<<" LRU算法页面置换情况如下: "<<endl;cout<<endl;while(i<m){int a;t=Search(p[i].num,page);if(t>=0)//如果已在内存块中{ page[t].time=0;//把与它相同的内存块的时间置0 for(a=0;a<M;a++)if(a!=t)page[a].time++;//其它的时间加1cout<<p[i].num<<" ";cout<<"不缺页"<<endl;}else //如果不在内存块中{n++; //缺页次数加1t=Max(page); //返回最近最久未使用的块号赋值给tpage[t].num=p[i].num; //进行替换page[t].time=0; //替换后时间置为0cout<<p[i].num<<" ";print(page);for(a=0;a<M;a++)if(a!=t) page[a].time++; //其它的时间加1 }i++;}cout<<endl;cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl<<endl; }if(c==3)//OPT页面置换{n=0;cout<<" OPT算法置换情况如下:"<<endl;cout<<endl;while(i<m){if(Search(p[i].num,page)>=0)//如果已在内存块中{cout<<p[i].num<<" ";cout<<"不缺页"<<endl;i++;}else//如果不在内存块中{int a=0;for(t=0;t<M;t++)if(page[t].num==0)a++;//记录空的内存块数if(a!=0) //有空内存{int q=M;for(t=0;t<M;t++)if(page[t].num==0&&q>t)q=t;//把空内存块中块号最小的找出来page[q].num=p[i].num;n++;cout<<p[i].num<<" ";print(page);i++;}else{int temp=0,s;for(t=0;t<M;t++)//寻找内存块中下次使用离现在最久的页面if(temp<Count(page,i,t,p)){temp=Count(page,i,t,p);s=t; }//把找到的块号赋给spage[s].num=p[i].num;n++;cout<<p[i].num<<" ";print(page);i++;}}}cout<<endl;cout<<"缺页次数:"<<n<<" 缺页率:"<<n/m<<endl<<endl;}if(c == 4) break;}while(c==1||c==2||c==3);return 0;}五、实验结果5.1 程序主界面运行程序后,将会提示用户输入页面长度,长度在10到20之间。
【精品】页面置换算法实验报告

【精品】页面置换算法实验报告一、实验目的了解操作系统中的页面置换算法,并实现FIFO、LRU和Clock算法。
二、实验原理页面置换算法是操作系统中用到的一种算法,其作用是在内存不够用时,选择牺牲已经在内存中的一些页,腾出更多的空间给新的内容。
本次实验主要实现了FIFO、LRU和Clock算法。
1、FIFO算法FIFO算法是最简单的页面置换算法,它采用先进先出的原则,即最先进入内存的页面应该最早被替换出去。
该算法的实现非常简单,只需要维护一个队列即可。
当需要置换页面时,选择队列的第一个页面进行替换即可。
2、LRU算法LRU算法是Least Recently Used的缩写,即最近最少使用算法。
该算法的核心思想是选择最久没有被使用的页面进行替换。
为了实现该算法,需要维护记录页面使用时间的链表、栈或队列等结构。
3、Clock算法Clock算法也叫做二次机会算法,是一种改良的FIFO算法。
它是基于FIFO算法的思想,并且每个页面都设置了一个使用位(use bit),用于记录该页面是否被使用过。
当需要置换一个页面时,检查该页面的使用位,如果该页面的使用位为1,则将该页面的使用位设置为0并移到队列的末尾,表示该页面有“二次机会”继续待在内存中;如果该页面的使用位为0,则选择该页面进行替换。
三、实验过程本次实验采用Python语言实现页面置换算法,并使用样例进行测试。
1、FIFO算法实现FIFO算法的实现非常简单,只需要用一个队列来维护已经在内存中的页面,当需要置换页面时,选择队列的第一个元素即可。
代码如下:```pythonfrom collections import dequeclass FIFO:def __init__(self, frame_num):self.frame_num = frame_numself.frames = deque(maxlen=frame_num)def access(self, page):if page in self.frames:return Falseif len(self.frames) >= self.frame_num:self.frames.popleft()self.frames.append(page)return True```2、LRU算法实现LRU算法的实现需要维护一个记录页面使用时间的链表或队列。
页面置换算法实验报告

页面置换算法实验报告页面置换算法实验报告一、实验目得: 设计与实现最佳置换算法、随机置换算法、先进先出置换算法、最近最久未使用置换算法、简单 Clock 置换算法及改进型 Clock 置换算法;通过支持页面访问序列随机发生实现有关算法得测试及性能比较、二、实验内容: 虚拟内存页面总数为 N,页号从 0 到N—1 物理内存由 M 个物理块组成页面访问序列串就是一个整数序列,整数得取值范围为 0 到 N - 1、页面访问序列串中得每个元素 p 表示对页面 p 得一次访问页表用整数数组或结构数组来表示符合局部访问特性得随机生成算法 1.确定虚拟内存得尺寸N,工作集得起始位置 p,工作集中包含得页数e,工作集移动率m(每处理 m 个页面访问则将起始位置 p +1),以及一个范围在 0 与1之间得值 t; 2.生成m个取值范围在 p与p + e 间得随机数,并记录到页面访问序列串中; 3.生成一个随机数 r,0 ≤ r ≤ 1; 4.如果 r 〈 t,则为 p 生成一个新值,否则 p = (p +1) mod N; 5.如果想继续加大页面访问序列串得长度,请返回第 2 步,否则结束。
三、实验环境: 操作系统:Windows 7 软件:VC++6.0四、实验设计: 本实验包含六种算法,基本内容相差不太,在实现方面并没有用统一得数据结构实现,而就是根据不同算法得特点用不同得数据结构来实现: 1、最佳置换与随机置换所需操作不多,用整数数组模拟内存实现; 2、先进先出置换与最近最久未使用置换具有队列得特性,故用队列模拟内存来实现; 3、CLOCK 置换与改进得 CLOCK置换具有循环队列得特性,故用循环队列模拟内存实现; 4、所有算法都就是采用整数数组来模拟页面访问序列。
五、数据结构设计://页面访问序列数组: intref[ref_size]; //内存数组: int phy[phy_size]; //队列数据结构定义: typedef struct QNode// 构结据数列队义定ﻩ{;atad tniﻩ struct QNode _ne_t; }QNode,_QueuePtr; typedef struct {QueuePtr front; ﻩ//头指针ﻩ //尾指针}LinkQueue; //定;raer rtPeueuQﻩ义链表数据结构 typedef struct LNode //定义循环链表数据结构{int data;int flag; ﻩ//访问位int modify; ﻩ // 位改修ﻩ ;t_en*edoNL tcurtsﻩ}LNode,*LinkList; 六、主要函数说明:1、 void set_rand_num// ;列数机随得性特部局有具生产ﻩ2、 int E_change_LNode(LinkList &;L,int e,int i)//将链表L中序号为 i 得结点替换为内容为 e 得结点;3、bool Search_LinkList(LinkList &L,int e,int&;i)//找到链表L中内容为e得结点,并用 i 返回其位置,i=1 表示第一个非头结点,依次类推;4、 void Search_LL_Flag(LinkList&L,int &i)//用 i 返回第一个 flag 为 0 得结点得位置,i=1 表示第一个非头结点,以此类推;5、 void Set_LL_Flag(LinkList &;L,int i) //设置链表L中得序号为i得结点得flag标志为 1;6、 int Search_LL_ModifyClock(LinkList &L,int &;modify_num)//找到改进得 CLOCK算法所需要淘汰得页,用modify_num 返回其位置; 此函数根据书上给得思路,第一遍扫描A=0且 M=0得页面予以淘汰,若失败,则进行第二轮扫描 A=0且 M=1得页面,第二轮扫描时将所有访问过得页面得访问位A置 0;若失败则重复上述两部;7、void Set_LL_modify(LinkList &L,int i) //设置链表 L 中得序号为 i得结点得modify 标志为 1; 8、bool SearchQueue(LinkQueue &Q,int e,int &i)//点结中Q列队找寻ﻩdata 域等于e得结点,并用 i 返回其在 Q 中得位置; 9、int getnum(int a,int b) ﻩﻩ //用b返回元素a在被引用数列中得下一个位置 10、void ORA //实现最佳置换算法,包括判断页面就是否在内存中、页面进内存、输出内存状态等内容; 11、void RANDﻩ//随机置换算法 12、void FIFO //ﻩ法算出先进先ﻩ13、void LRUﻩﻩ //最近最久未使用算法实现最近最久未使用算法得思想就是:判断待进入内存得页面,如果与内存中得第一个页面相同,则将它移到最后一个,即标志为最近使用得页;如果与内存中得第二个页面相同,则将它删除,并在队列尾部添加相同元素,即标志为最近使用得页; 、41/)(KCOLC diovﻩ/法算 KCOLC 现15、void Modified_Clock //实现改进得 CLOCK 实ﻩﻩ算法 16、intmain//主函数,调用实现各算法得6个主要函数,并输出各算法得缺页率。
操作系统实验五报告 页面置换算法

四、程序流程图
(1)程序流程
父进程: ①随机产生内存访问页面序列,存于数组 Acess_Series[total_instruction]中 ②数据结构 M_Frame 的初始化 ③分别创建两个子进程。 ④等待子进程执行结束,退出。 子进程: ①读序列 Acess_Series[],若序列中已无下一个元素,转 5) ;否则,取出页面序列中的下 一个元素作为下次要访问的页面; ②如果待访问的页面在内存中 (即在 M_Frame[]中找到) , 则不发生缺页, 命中率加 1, 转① , 注意 LRU 算法中要调整该页在数组中的位置; ③否则就 要将这页调入 内存,通过修 改相应的数据 结构 M_Frame[]反映出 来。首先看 M_Frame[]中有无空闲页面,如果有,将待访问页面的页号以及被占用的信息写入数组中适 当位置,并统计缺页情况,缺页次数 diseffect 加 1,返回① ; ④如果 M_Frame[]中的所有页面均被占满,则淘汰 M_Frame[0],装入待访问页,重新调整各
页面在数组中的位置。并统计缺页情况,缺页次数 diseffect 加 1,返回① ; ⑤所有页面均已访问完成,统计命中率或缺页率;
(2)程序流程图
五、数据结构
数组 Acess_Series[]中存放内存页面访问的序列:int Acess_Series[10]; 结构数组 M_Frame[]记录为进程分配的内存页面的使用情况,在 M_Frame[]中 page_no 记录页面号,flag 记录页面是否缺页。 struct one_frame { int page_no; char flag; };
程之间的关系及其并发执行。 (2)理解内存页面调度的机理。 (3)掌握页面置换算法及其实现方法。 (4)培养综合运用所学知识的能力。 (5)页面置换算法是虚拟存储管理实现的关键,通过本次试验理解内存页面调度的机制, 在模拟实现 FIFO、LRU 等经典页面置换算法的基础上,理解虚拟存储实现的过程。 (6)将不同的置换算法放在不同的子进程中加以模拟,培养综合运用所学知识的能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
的程序段和数据存放于外存待执行时调入,以提高内存利用率而提出来的页式管 理有动态页式管理和静态页式管理之分,动态页式管理是在静态页式管理的基础 上发展起来的。请求页式管理属于动态页式管理中的一种,它的地址变换过程与 静态页式管理时的相同,也是通过页表查出相应的页面号,由页面号与页内相对 地址相加而得到实际物理地址。有关的地址变换部分是由硬件自动完成的。当硬 件变换机构发现所要求的页不在内存时,产生缺页中断信号,由中断处理程序做 出相应的处理。中断处理程序是由软件实现的。除了在没有空闲页面时要按照置 换算法选择出被淘汰页面之外,还要从外存读入所需要的虚页。这个过程要启动 相应的外存和涉及到文件系统。因此,请求页式管理是一个十分复杂的过程,内 存利用率的提高是以牺牲系统开销的代价换来的。这里用到了置换算法。它是在 内存中没有空闲页面时被调用。目的是选出一个被淘汰的页面。如果内存中有足 够的空闲页面存放所调入的页,则不必使用置换算法。把内存和外存统一管理的 真正目的是把那些被访问概率非常高的页存放在内存中。因此,置换算法应该置 换那些被访问概率低的页,将它们移出内存。
第五章 调试............................................................................................................................... 16 第六章 体会与自我评价........................................................................................................ 18 第七章 参考文献...................................................................................................................... 19
在各种存储器管理方式中,有一个共同的特点,即它们都要求将一个作业全 部装入内存方能运行,但是有两种情况:(1) 有的作业很大,不能全部装入内 存,致使作业无法运行;(2) 有大量作业要求运行,但内存容量不足以容纳所 有这些作业。而虚拟内存技术正式从逻辑上扩充内存容量,将会解决以上两个问 题。 从内存中调出一页程序或数据送磁盘的对换区中,通常,把选择换出的页 面的算法称为页面置换算法(Page-Replacement Algorithms)。进而页面置换算法 程序能客观的将其工作原理展现在我们面前。
第二章 概要设计
2.1 系统分析
由于分区式管理尽管实现方式较为简单,但存在着严重的碎片问题使得内存 的利用率不高。再者,分区式管理时,由于各作业或进程对应于不同的分区以及 在分区内各作业或进程连续存放,进程的大小或内存可用空间的限制。而且分区 式管理也不利于程序段和数据段的共享。页式管理正是为了减少碎片以及为了只 在内存存放那些反复执行或即将执行的程序段与数据部分,而把那些不经常执行
2.2 调页策略
2.2.1 何时调入页面
如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻 的页,会比一次调入一页的效率更高效一些。但如果调入的一批页面中的大多数 都未被访问,则又是低效的。可采用一种以预测为基础的预调页策略,将那些预 计在不久之后便会被访问的页面,预先调入内存。如果预测较准确,那么,这种 策略显然是很有吸引力的。但目前预调页的成功率仅为 50%。且这种策略主要用 于进程的首次调入时,由程序员指出应该先调入哪些页。 2.2.2 请求调页策略
摘要
操作系统(英语;Operating System,简称 OS)是一管理电脑硬件与软件资源的程序, 同时也是计算机系统的内核与基石。操作系统身负诸如管理与配置内存、决定系统资源 供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系 统是管理计算机系统的全部硬件资源包括软件资源及数据资源;控制程序运行;改善人机 界面;为其它应用软件提供支持等,使计算机系统所有资源最大限度地发挥作用,为用 户提供方便的、有效的、友善的服务界面。操作系统是一个庞大的管理控制程序,大致 包括 5 个方面的管理功能:进程与处理机管理、作业管理、存储管理、设备管理、文件 管理。 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页 中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内 存,以便为即 将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法 (Page-Replacement Algorithms)。
2.2.1 何时调入页面....................................................................................................................5 2.2.2 请求调页策略....................................................................................................................5 2.2.3 从何处调入页面........................................................................................................................5 2.3 模块设计....................................................................................................................................... 6
第二章 概要设计........................................................................................................................ 4
2.1 系统分析....................................................................................................................................... 4 2.2 调页策略....................................................................................................................................... 5
第四章 源程序结构分析.........................................................................................................11
4.1 程序结构..................................................................................................................................... 11 4.2 源代码分析................................................................................................................................ 11
第三章 详细设计........................................................................................................................ 7
3.1 系统设计....................................................................................................................................... 7 3.2 算法思想及流程图.......................................................................................................................7
关键词:操作系统;OPT 页面置换算法;FIFO 先进先出的算法;LRU 最近最久未使用 夜面置换算法
第一章 设计任务和需求
1.1 课程设计任务
深入掌握内存调度算法的概念原理和实现方法。 编写程序实现: (1) 先进先出页面置换算法(FIFO) (2) 最近最久未使用页面置换算法(LRU) (3) 最佳置换页面置换算法(OPT) 设计一个虚拟存储区和内存工作区,编程序演示以上三种算法的具体实现过程, 并计算访问命中率。演示页面置换的三种算法。通过随机数产生一个指令序列, 将指令序列转换成为页地址流。计算并输出各种算法在不同内存容量下的缺页 率。 1.2 课程设计需求
1.1 课程设计任务........................................4 1.2 课程设计需求...............................................................................................................................4
操作系统 课程设计报告
院 (系): 专 业: 姓 名: 班 级:_ 学 号: 题 目: 指导教师: