《存储管理算法实验报告-计算机操作系统教程(第三版)(共5页).doc》由会员分享,可在线阅读,更多相关《存储管理算法实验报告-计算机操作系统教程(第三版)(共5页).doc(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上存储器管理(一)一、实验目的模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。二、实验目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办法扩充的主存储器称为虚拟存储器。通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。三、实验题目示例程序给出了模拟分页式存储管理中硬件的地址转换和产生缺页中断;请写出用先进先出(FIFO)页面调度算法处理缺页中断或用最近最少用(LRU)页面调度算法处理缺页中断的程序。四、示例程序源代码
2、#include stdio.h#define blockLength 128typedef enum NO=0,YESFLAG;typedef struct pagetable int pageNumber; FLAG flag; int memoryBlock; int place;PAGETAB;typedef struct job int pageNumber; int unitNumber;JOB;PAGETAB pageTAB7=0,YES,5,11,1,YES,8,12,2,YES,9,13,3,YES,1,21,4,NO,-1,22,5,NO,-1,23,6,NO,-1,121
3、;JOB work12 = 0,70,1,50,2,15,3,21,0,56,6,40,4,53,5,23,1,37,2,78,4,1,6,84;int main(int argc, char* argv)/first init page table / and work list / look for the work list and pick one to fix the page table for(int i=0; i12;i+) printf(Instruction sequence :%dn,i+1); int j = worki.pageNumber; printf(The p
4、age %d is in the memory? %s!n,j,(pageTABj.flag = YES)?YES:NO); if(pageTABj.flag = YES) int absoluteAddress = pageTABj.memoryBlock*blockLength+worki.unitNumber; printf(Instruction absolute address:%dn,absoluteAddress); else printf(missing page interrupt, page fault interrupt!n); return 0;存储器管理(二)一、实验
5、目的:掌握分页式存储管理的基本概念和实现方法。要求编写一个模拟的分页式管理程序,并能对分页式存储的页面置换算法进行编写和计算各个算法的缺页率。二、程序设计:假定一个能够存放M个页面的内存,当发生缺页时,调入一个页面,通过LRU算法求出应该置换出的页面号。输入一连串的页面号,程序自动选择调出的页面并计算缺页率。设计页面置换算法,这里采用最近最久未使用置换算法LRU。LRU算法的实现要归功于一个8位的寄存器的实现。三、算法说明:执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面,腾出1个空闲块以便存放新调入的页面。淘汰哪个页面的首要问题是选择何种置换算法。该程序采用LRU方法选择,依置
6、换策略选择一个可置换的页面并计算它们的缺页率以便比较。四、源程序:#define M 3#include#includeint reg2M;int count;int num;int N;/*初始化函数,数组reg0i存放页面号,初始化为-1,reg1i当作寄存器,初始化为0*/void init() int i; count=0;num=0; N=pow(2,7); /*二进制数*/ for(i=0;iM;i+) reg0i=-1; reg1i=0; /*寻找数组a中的最小值,返回最小值对应的下标*/int min(int a) int i,index=0; int min=a0; for(
7、i=1;iai) min=ai; index=i; return index; /*判断页面号x是否在数组中,如果在,返回对应的下标;否则返回-1*/int isIn(int x,int a) int i; int index=-1; for(i=0;iM;i+) if(ai=x) index=i; break; return index; /*判断虚拟的内存中是否已经存满了页面,如果满了,则返回-1,没有满则返回找到空的对应的第一个下标*/int isFull(int a) int i,index=-1; for(i=0;iM;i+) if(ai=-1) index=i; break; re
8、turn index; /*页面置换方法*/void swap(int x) int i,k,temp,temp0; int index=isIn(x,reg0); /*判断x是否在reg0数组中*/ if(index!=-1) reg1index=reg1indexN; /*reg1index异或二进制数*/ else temp=isFull(reg0); if(temp!=-1) /*内存没有满,直接调入页面*/ reg0temp=x; reg1temp=reg1tempN; else if(temp=-1) k=min(reg1); /*置换出寄存器中数值最小的对应的下标的页面*/ te
9、mp0=reg0k; /*临时保留要换出的页面号*/ reg0k=x; reg1k=reg1kN; printf(the page %d is exchanged out!n,temp0);/*打印要置换出的页号*/ count+; /*置换次数加1*/ for(i=0;i1; /*寄存器中的所有数右移一位*/ main()int x;clrscr();init();printf(Input a sort of pagesn);printf(while you input -1 ,it will stop!n);scanf(%d,&x);/*输入页面号,直到页面号为-1*/while(x!=-
10、1) num+; /*输入的页面次数加1*/ swap(x); scanf(%d,&x); /*打印缺页数和缺页率*/printf(the count of Exchanged is: %d n,count);printf(the rate of exchanged is: %fn,count*1.0/num);getch();五、实验结果:Input a sort of pageswhile you input -1 ,it will stop!7012the page 7 is exchanged out!03the page 1 is exchanged out!04the page 2 is exchanged out!2the page 3 is exchanged out!43the page 0 is exchanged out!0the page 2 is exchanged out!-1The count of exchange is: 6The rate of exchange is: 0.六、实验心得: 通过这次实验,让我了解了页式存储管理的过程。在这次实验中,我首次用了C中重要的但我们又不常用的按位异或操作和移位操作来实现寄存器的功能,使我对C有更深的认识。本次实验也让我学到了LRU算法。编者:杰杰专心-专注-专业