欢迎来到天天文库
浏览记录
ID:7783016
大小:49.50 KB
页数:9页
时间:2018-02-25
《操作系统上机实验-内存管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统上机实验内存管理姓名:学号:一、实验目的:掌握分页式存储管理的基本概念和实现方法。要求编写一个模拟的分页式管理程序,并能对分页式存储的页面置换算法进行编写和计算各个算法的缺页率。二、程序设计:假定一个能够存放M个页面的内存,当发生缺页时,调入一个页面,通过LRU算法求出应该置换出的页面号。输入一连串的页面号,程序自动选择调出的页面并计算缺页率。设计页面置换算法,基于FCFO算法和最久未使用置换算法LRU实现。三、算法说明:执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面,腾出1个空闲块以便存放新调入的页面。
2、淘汰哪个页面的首要问题是选择何种置换算法。该程序采用FCFO和LRU方法选择,依置换策略选择一个可置换的页面并计算它们的缺页率以便比较。#includeusingnamespacestd;#defineM3#includeintreg[2][M];intcount;intnum;intN;/********初始化函数,数组reg[0][i]存放页面号,初始化为-1,reg[1][i]当作寄存器,初始化为0*********/voidinit(){ inti,count=0;num=0;
3、 N=(int)pow(2,7); /********二进制数10000000**********/ for(i=0;ia[i])
4、 { min=a[i]; index=i; } } returnindex;}/***判断页面号x是否在数组中,如果在,返回对应的下标;否则返回-1***/intisIn(intx,inta[]){ inti; intindex=-1; for(i=0;i5、nindex;}/**********判断虚拟的内存中是否已经存满了页面,如果满了,则返回-1,没有满则返回找到空的对应的第一个下标**************/intisFull(inta[]){ inti,index=-1; for(i=0;i6、oidswap(intx){ inti,k,temp,temp0,count; intindex=isIn(x,reg[0]); /****判断x是否在reg[0]数组中*******/ if(index!=-1) {reg[1][index]=reg[1][index]^N; }/**reg[1][index]异或二进制数10000000**/ else{ temp=isFull(reg[0]); if(temp!=-1)/*******内存没有满,直接调7、入页面************/ { reg[0][temp]=x; reg[1][temp]=reg[1][temp]^N; } elseif(temp==-1) { k=min(reg[1]);/**置换出寄存器中数值最小的对应的下标的页面***/ temp0=reg[0][k];/*********临时保留要换出的页面号*****8、/ reg[0][k]=x; reg[1][k]=reg[1][k]^N; printf("thepage%disexchangedout!",
5、nindex;}/**********判断虚拟的内存中是否已经存满了页面,如果满了,则返回-1,没有满则返回找到空的对应的第一个下标**************/intisFull(inta[]){ inti,index=-1; for(i=0;i6、oidswap(intx){ inti,k,temp,temp0,count; intindex=isIn(x,reg[0]); /****判断x是否在reg[0]数组中*******/ if(index!=-1) {reg[1][index]=reg[1][index]^N; }/**reg[1][index]异或二进制数10000000**/ else{ temp=isFull(reg[0]); if(temp!=-1)/*******内存没有满,直接调7、入页面************/ { reg[0][temp]=x; reg[1][temp]=reg[1][temp]^N; } elseif(temp==-1) { k=min(reg[1]);/**置换出寄存器中数值最小的对应的下标的页面***/ temp0=reg[0][k];/*********临时保留要换出的页面号*****8、/ reg[0][k]=x; reg[1][k]=reg[1][k]^N; printf("thepage%disexchangedout!",
6、oidswap(intx){ inti,k,temp,temp0,count; intindex=isIn(x,reg[0]); /****判断x是否在reg[0]数组中*******/ if(index!=-1) {reg[1][index]=reg[1][index]^N; }/**reg[1][index]异或二进制数10000000**/ else{ temp=isFull(reg[0]); if(temp!=-1)/*******内存没有满,直接调
7、入页面************/ { reg[0][temp]=x; reg[1][temp]=reg[1][temp]^N; } elseif(temp==-1) { k=min(reg[1]);/**置换出寄存器中数值最小的对应的下标的页面***/ temp0=reg[0][k];/*********临时保留要换出的页面号*****
8、/ reg[0][k]=x; reg[1][k]=reg[1][k]^N; printf("thepage%disexchangedout!",
此文档下载收益归作者所有