操作系统请求分页式管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、需求分析 (1)
1.设计目的 (1)
2.设计要求 (1)
3.解决方案 (2)
4.实验提示 (2)
二、概要设计 (2)
1、结构说明 (2)
2、数据结构及模块说明 (3)
3、流程图 (4)
三、详细设计 (4)
四.调试分析 (14)
五、总结 (17)
1、遇到的问题 (17)
2、不足 (17)
3、心得体会 (17)
六、参考文献 (18)
课程设计题目:请求页式管理模拟实现
一、需求分析
请求页式管理是一种常用的虚拟存储管理技术。本设计通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
1.设计目的
1、通过模拟实现请求分页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点。
2、通过页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
3、掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
2.设计要求
通过随机数产生一个指令序列,共320条指令。指令的地址按下述原则生成:
① 50% 的指令是顺序执行的;
② 25% 的指令是均匀分布在前地址部分;
③ 25% 的指令是均匀分布在后地址部分。
具体的实施方法是:
①在 [0,319] 的指令地址之间随机选取一起点 m;
②顺序执行一条指令;
③在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为 m′;
④顺序执行一条指令,其地址为 m′+1;
⑤在后地址 [m′+2,319] 中随机选取一条指令并执行;
⑥重复上述步骤② ~ ⑤,直到执行 320 次指令。
将指令序列变换成为页地址流
设:①页面大小为 1K;
②用户内存容量为 4 页到 32 页;
③用户虚存容量为 32K 。
在用户虚存中,按每 K 存放 10 条指令排列虚存地址,即 320 条指令在虚存中的存放方式为:
第 0 条 ~ 第 9 条指令为第 0 页 ( 对应虚存地址为 [0,9]);
第 10 条 ~ 第 19 条指令为第 1 页 ( 对应虚存地址为 [10,19] ) ;
┇
┇
第 310 条 ~ 第 319 条指令为第 31 页 ( 对应虚存地址为 [310,319]) 。
按以上方式,用户指令可组成 32 页。
计算并输出下述各种算法在不同内存容量下的命中率。
先进先出的算法 (FIFO);最近最少使用算法 (LRR);
最少访问页面算法 (LFR);最近最不经常使用算法 (NUR)。
3.解决方案
(一)FIFO页面置换算法
先用bool IsExit()函数判断请求页面是否在内存中,在内存中就直接运行,不在的话,就通过Simulate[x][y%M]算出先进来的页面,比如假如第6个数内存中没有,那置换时第6行第1列数一定是第一个进来的,我y的值这时候是6,然后y除以m取余,就是6除以5取余也就是1,然后将第一个置换出来,下面的就是重复上面的过程了。每次要置换时LackNum的值就会加1,最后输出页面的置换的过程,算出缺页率。
(二)LRU页面置换算法
先用int IsExitLRU()函数判断请求页面是否在内存中,在内存中就直接运行,不在的话,int Compare()算出需要置换的页面,这个功能的实现需要数组PageCount[]来实现。PageCount[]这个数组记录着内存里5个物理块使用情况,找出需要置换的页面的列数,然后赋值给k,再通过Simulate[x][k]=PageOrder[x]语句置换,每次要置换时LackNum的值就会加1,最后输出页面的置换的过程,算出缺页率。
(三)OPT页面置换算法
先用int IsExitOPT()函数判断请求页面是否在内存中,在内存中就直接运行,不在的话,int Compare()2算出需要置换的页面,我将请求数后面产生的的随机数一个一个和内存中的物理块的数比较,当相等的时候,记下相等的物理块号,再做第二个循环,第二个循环比较是除了第一个记录下来的数之外的4个数,相等的时候,再记下相等的物理块号,然后再做第三个循环...第四个做完后返回10减去刚刚找到的物理块号之和。这个就是要置换的数的列号,然后置换,每次要置换时LackNum的值就会加1,最后输出页面的置换的过程,算出缺页率。
4.实验提示
提示:A.命中率=1-页面失效次数/页地址流长度
B.本实验中,页地址流长度为320,页面失效次数为每次访问相应指令时,该指令所对应的页不在内存的次数。
C.关于随机数产生方法,采用TC系统提供函数RAND()和RANDOMIZE()来产生。
二、概要设计
1、结构说明
(一)FIFO页面置换算法
①在分配内存页面数小于进程页面数时,当然是最先运行的页面放入内存。
②这时有需要处理新的页面,则将原来内存中的页面最先进入的调出(是以称为FIFO),然后将新页面放入。
③以后如果再有新页面需要调入,则都按⑵的规则进行。
(二)LRU页面置换算法
①当分配内存页面数小于进程页面数时,当然是把最先执行的页面放入内存。
②当需要调页面进入内存,而当前分配的内存页面全部不空闲时,选择将其中最长时间没有用到的那个页面调出,以空出内存来放置新调入的页面(称为LRU)。
③以后如果再有新页面需要调入,则都按⑵的规则进行。
(三)OPT页面置换算法
①当分配内存页面数小于进程页面数时,当然是把最先执行的页面放入内存。
②当需要调页面进入内存,而当前分配的内存页面全部不空闲时,选择将其中最近时间不会用到的那个页面调出,以空出内存来放置新调入的页面(称为OPT)。
③以后如果再有新页面需要调入,则都按⑵的规则进行
2、数据结构及模块说明
定义的变量:
const int MaxNum=320;//指令数
const int M=5;//内存容量
int PageOrder[MaxNum];//页面请求
int Simulate[MaxNum][M];//页面访问过程
int PageCount[M],LackNum;//PageCount用来记录LRU算法中最久未使用时间,LackNum记录缺页数
float PageRate;//命中率
函数说明:
bool IsExit(int i) //FIFO算法中判断新的页面请求是否在内存中
int IsExitLRU(int i) //LRU算法中判断新的页面请求是否在内存中
int Compare() //LRU算法找出内存中需要置换出来的页面int IsExitOPT(int i) //OPT算法中判断新的页面请求是否在内存中
int Compare2(int i) //OPT算法找出内存中需要置换出来的页面
void Init() //初始化页框
void designBy() //给自己加的一个标题
void OutPut() //输出
void FIFO() //FIFO算法
void LRU() //LRU算法
void OPT() //OPT算法
void YourChoice(int choice) //实现你选择哪个算法的功能