操作系统-内存置换算法(共8页)

上传人:文库****9 文档编号:209581926 上传时间:2021-11-10 格式:DOCX 页数:7 大小:114.74KB
返回 下载 相关 举报
操作系统-内存置换算法(共8页)_第1页
第1页 / 共7页
操作系统-内存置换算法(共8页)_第2页
第2页 / 共7页
操作系统-内存置换算法(共8页)_第3页
第3页 / 共7页
操作系统-内存置换算法(共8页)_第4页
第4页 / 共7页
操作系统-内存置换算法(共8页)_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《操作系统-内存置换算法(共8页)》由会员分享,可在线阅读,更多相关《操作系统-内存置换算法(共8页)(7页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上存储管理的页面置换算法存储管理的页面置换算法在考试中常常会考到,操作系统教材中主要介绍了3种常用的页面置换算法,分别是:先进先出法(FIFO)、最佳置换法(OPT)和最近最少使用置换法(LRU)。大家要理解3种置换算法的含义,然后能熟练地运用在具体的练习中就可以了。为什么要进行页面置换在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入。这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断。操作系统在处理缺页中断时,要把所需页面从外存调入到内存中。如果这时内存中有空闲块,就可以直接调入该页面

2、;如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换。有助于理解的关键词有:请求分页、虚拟存储、缺页中断、页面置换。先进先出法(FIFO)算法描述:由于认为最早调入内存的页不再被使用的可能性要大于刚调入内存的页,因此,先进先出法总是淘汰在内存中停留时间最长的一页,即先进入内存的页,先被换出。先进先出法把一个进程所有在内存中的页按进入内存的次序排队,淘汰页面总是在队首进行。如果一个页面刚被放入内存,就把它插在队尾。【例1】教材第4章课后习题。考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。当

3、内存块数量分别为3,5时,试问先进先出置换算法(FIFO)的缺页次数是多少?(注意,所有内存块最初都是空的,凡第一次用到的页面都产生一次缺页。)解:当内存块数量分别为3时,FIFO算法的执行过程如下图所示。打叉的表示发生了缺页,共缺页16次。提示:当FIFO算法执行到蓝色的4号页面时,这时内存中有三个页面,分别是1,2,3。按照FIFO算法,在内存中停留时间最长的页面被淘汰。三个页面在内存中的停留时间用绿色区域标记出来了,可见,1号页面是停留时间最长的,因此要淘汰1号页面。当内存块数量分别为5时,共缺页10次。FIFO算法的执行过程如下。优缺点:先进先出法(FIFO)简单易于实现,但是性能不好

4、,存在Belady现象。例如对于以下页面:1,2,3,4,1,2,5,1,2,3,4,5,当内存块为3时,出现9次缺页中断;当内存块为4时,出现10次缺页中断。缺页率随着内存块增加而增加的现象,称为Belady现象。有兴趣的同学可以试一试,看看是不是这样的。代码:#include iostreamusing namespace std;#include#include /ram 模拟系统为进程分配的3个内存块deque ram(3);int length=0;/检测是否在内存中int isContain(int findNum)int i;for (i=0;iram.size();i+)if

5、(findNum=rami) break;return i;/缺页中断 将缺少的页调入内存 同时将最早进来的页调出int intServer(int page)if(length!=ram.size() ramlength=page; length+;else ram.pop_front(); ram.push_back(page);return 0;/显示3个内存块中存放的页面号void display() int i;cout内存块中存放的页面号:;for (i=0;iram.size();i+)printf(%2d ,rami);coutendl;int main()/int i=0;f

6、or (i=0;iram.size();i+ )rami=0;/该模拟进程总共有20条指令 instructesi 为i条指令所在页int instructes21=0;srand();/随机产生指令所在的页for(int i=1;i=20;i+) /该模拟进程指令或数据分布在6个页面中 /分别为第 1,2,3,4,5,6 页 instructesi=rand()%6+1; /cout第i条指令所在页instructesiendl; printf(第%2d指令所在页%d n,i,instructesi);int count=0;for ( i=1;i 缺页中断n,instructesi);intServer(instructesi);count+;coutendl;cout总共执行20条指令n缺页次数:countendl;cout缺页率:(float)count/20*100i;程序运行结果截图:微信号:幻梦空间 想成为编程高手吗,快来扫一扫吧. 主要资源汇编,c,c+,c#,java,php,游戏编程嵌入式网站开发专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号