实验四 虚拟存储器管理实验
◆实验名称:存储器管理实验 ◆仪器、设备:计算机
◆参考资料:操作系统实验指导书 ◆实验目的:
设计一个请求页式存储管理方案,并编写模拟程序实现。 ◆实验内容:
编写程序用来模拟虚拟页式存储管理中的页面置换 要求:
1. 快表页面固定为4块 2. 从键盘输入N个页面号
3. 输出每次物理块中的页面号和缺页次数,缺页率 ◆实验原理、数据(程序)记录: #define PAGES 4 /* 物理块数 */ #define N 16 /*最多输入的页面号*/
int pages[PAGES][2]; /*page[i][0]保存页面号,page[i][1]保存页面存留时间*/ int queue[N]; /*页面号数组*/
void initialise(void) /*------------初始化:快表和页面号数组++++++++++++++*/ { int i;
for(i=0;i for(i=0;i pages[i][0]=-1; pages[i][1]=0; } } int is_page_exist(int page) /*若还有空页,返回空页序号的相反数-1若存在,返回该页的序 号若不存在,返回需要替换页面序号的相反数-1*/ { int max; int replace; int i=0; max=pages[0][1]; replace=0; for(;i while(i if(max max=pages[i][1]; replace=i; } i++; } if(i==PAGES) return (0-replace-1); else if(pages[i][0]==page) return i; else return (0-i-1); } int input_pages(void) /**************输入页面号*****************/ { int i=0; int num; printf(\请输入1~16个页面:【输入 0 结束】\\n\scanf(\while(num&&i if(num>0&&num<=N) { queue[i]=num; i++; scanf(\} else printf(\输入错误数据~!\\n\} return i; } void display_pages(void) /* 输出物理块中的页面号 */ { int i=0; for(;i if (pages[i][0]!= -1) printf(\printf(\} void LRU(int * lack_page) /* 核心算法,LRU算法 */ { int i=0; int temp; * lack_page=0; while(queue[i]!=-1) { temp=is_page_exist(queue[i]); if(temp>-1) /*若已经存在,修改相应序号的属性值*/ pages[temp][1]=1; else /*若不存在,修改返回序号的内容,并修改属性值*/ { (* lack_page)++; pages[0-temp-1][0]=queue[i]; pages[0-temp-1][1]=1; } printf(\第-个页面访问时物理块中的页面号:\display_pages(); i++; } } int main(void) { int lack=0; float totle_page=0; initialise(); totle_page=(float)input_pages(); LRU(&lack); printf(\缺页数为:%d\\n\ printf(\缺页率为:%0.3f\\n\} ?? ◆实验结果及分析 输入数据:1 2 4 3 1 4 5 6 输出结果: 第1个页面访问时物理块中的页面号:1 第2个页面访问时物理块中的页面号:1 2 第3个页面访问时物理块中的页面号:1 2 4 第4个页面访问时物理块中的页面号:1 2 4 3 第5个页面访问时物理块中的页面号:1 2 4 3 第6个页面访问时物理块中的页面号:1 2 4 3 第7个页面访问时物理块中的页面号:1 5 4 3 第8个页面访问时物理块中的页面号:1 5 4 6 缺页次数:6 缺页率:0.750 通过实验,实现了利用LRU算法进行虚拟存储管理的模拟。