OS实验指导四虚拟存储器管理.docx
- 文档编号:16347291
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:9
- 大小:44.53KB
OS实验指导四虚拟存储器管理.docx
《OS实验指导四虚拟存储器管理.docx》由会员分享,可在线阅读,更多相关《OS实验指导四虚拟存储器管理.docx(9页珍藏版)》请在冰点文库上搜索。
OS实验指导四虚拟存储器管理
OS实验指导四——虚拟存储器管理
《操作系统》实验指导四
开课实验室:
A207、A2092015/11/23、2015/11/24
实验项目
(四)虚拟存储器管理实验
实验类型
设计
实验学时
4
一、实验目的
设计一个请求页式存储管理方案,并编写模拟程序实现。
二、设备与环境
1.硬件设备:
PC机一台
2.软件环境:
安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C\C++\Java等编程语言环境。
三、实验要求
1)上机前认真复习页面置换算法,熟悉FIFO算法和LRU页面分配和置换算法的过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。
四、实验内容
1、问题描述:
设计程序模拟FIFO和LRU页面置换算法的工作过程。
假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1,…,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,并计算每种算法缺页次数和缺页率。
2、程序具体要求如下:
编写程序用来模拟虚拟页式存储管理中的页面置换
要求:
1)快表页面固定为4块
2)从键盘输入N个页面号
3)输出每次物理块中的页面号和缺页次数,缺页率
4)实现算法选择
3、程序流程图
3、源程序参考:
(1)FIFO算法部分
#include"stdio.h"
#definen12
#definem4
voidmain()
{
intym[n],i,j,q,mem[m]={0},table[m][n];
charflag,f[n];
printf("请输入页面访问序列\n");
for(i=0;i scanf("%d",&ym[i]); printf("\n"); for(i=0;i { q=0; while((ym[i]! =mem[q])&&(q! =m))q++; if(q==m)flag='*';//缺页,则置标志flag为‘*’ elseflag=''; if(flag=='*') { for(j=m-1;j>0;j--)//淘汰最先调入的页面调入当前访问的 mem[j]=mem[j-1]; mem[0]=ym[i]; } for(j=0;j table[j][i]=mem[j]; f[i]=flag; } printf("输出结果为下表(0代表为空,*代表有缺页): \n"); for(i=0;i { for(j=0;j printf("%3d",table[i][j]); printf("\n"); } for(i=0;i printf("%3c",f[i]); } (2)LRU算法 #include"stdio.h" #definen12 #definem4 voidmain() { intym[n],i,j,q,mem[m]={0},table[m][n]; charflag,f[n]; printf("请输入页面访问序列\n"); for(i=0;i scanf("%d",&ym[i]); printf("\n"); for(i=0;i { q=0; while((ym[i]! =mem[q])&&(q! =m))q++; if(q==m)flag='*';//缺页,则置标志flag为‘*’ elseflag=''; for(j=q;j>0;j--) mem[j]=mem[j-1]; mem[0]=ym[i]; for(j=0;j table[j][i]=mem[j]; f[i]=flag; } printf("输出结果为下表(0代表为空,*代表有缺页): \n"); for(i=0;i { for(j=0;j printf("%3d",table[i][j]); printf("\n"); } for(i=0;i printf("%3c",f[i]); } 4.测试用例: 见第四章课后习题第26题(P159),(注意用比较的方式对程序的运行结果加以分析,比如令M=3或M=4时,结果各有什么不同。 并注意FIFO算法实现时是否有抖动现象。 )同时要求输出物理块中的页面号和算法执行后的缺页次数和缺页率,页面置换次数和页面置换率。 五、思考提高 (1)设计友好的界面,将两种算法集成在一个程序中。 (2)考虑不限定m值,而改由在程序执行时界面输入确定,页面引用序列采用随机函数产生。 #include"stdio.h" #definen12 #definem4 voidFIFO() { intym[n],i,j,q,mem[m]={0},table[m][n]; charflag,f[n]; printf("请输入页面访问序列\n"); for(i=0;i scanf("%d",&ym[i]); printf("\n"); for(i=0;i { q=0; while((ym[i]! =mem[q])&&(q! =m))q++; if(q==m)flag='*';//缺页,则置标志flag为'*' elseflag=''; if(flag=='*') { for(j=m-1;j>0;j--)//淘汰最先调入的页面调入当前访问的 mem[j]=mem[j-1]; mem[0]=ym[i]; } for(j=0;j table[j][i]=mem[j]; f[i]=flag; } printf("输出结果为下表(0代表为空,*代表有缺页): \n"); for(i=0;i { for(j=0;j printf("%3d",table[i][j]); printf("\n"); } for(i=0;i printf("%3c",f[i]); } // (2)LRU算法 voidLRU() { intym[n],i,j,q,mem[m]={0},table[m][n]; charflag,f[n]; printf("请输入页面访问序列\n"); for(i=0;i scanf("%d",&ym[i]); printf("\n"); for(i=0;i { q=0; while((ym[i]! =mem[q])&&(q! =m))q++; if(q==m)flag='*';//缺页,则置标志flag为'*' elseflag=''; for(j=q;j>0;j--) mem[j]=mem[j-1]; mem[0]=ym[i]; for(j=0;j table[j][i]=mem[j]; f[i]=flag; } printf("输出结果为下表(0代表为空,*代表有缺页): \n"); for(i=0;i { for(j=0;j printf("%3d",table[i][j]); printf("\n"); } for(i=0;i printf("%3c",f[i]); } intmain() { intx; printf("1: FIFO算法,2: LRU算法"); scanf("%d",&x); switch(x) { case1: FIFO(); break; case2: LRU(); break; } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OS 实验 指导 虚拟 存储器 管理