存储管理算法实验报告计算机操作系统教程第三版.doc
- 文档编号:236653
- 上传时间:2022-10-07
- 格式:DOC
- 页数:5
- 大小:21.50KB
存储管理算法实验报告计算机操作系统教程第三版.doc
《存储管理算法实验报告计算机操作系统教程第三版.doc》由会员分享,可在线阅读,更多相关《存储管理算法实验报告计算机操作系统教程第三版.doc(5页珍藏版)》请在冰豆网上搜索。
存储器管理
(一)
一、实验目的
模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。
二、实验目的
在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。
用这种办法扩充的主存储器称为虚拟存储器。
通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。
三、实验题目
示例程序给出了模拟分页式存储管理中硬件的地址转换和产生缺页中断;请写出用先进先出(FIFO)页面调度算法处理缺页中断或用最近最少用(LRU)页面调度算法处理缺页中断的程序。
四、示例程序源代码
#include"stdio.h"
#defineblockLength128
typedefenum{NO=0,YES}FLAG;
typedefstructpagetable{
intpageNumber;
FLAGflag;
intmemoryBlock;
intplace;
}PAGETAB;
typedefstructjob{
intpageNumber;
intunitNumber;
}JOB;
PAGETABpageTAB[7]={
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
};
JOBwork[12]={0,70,1,50,2,15,3,21,0,56,6,40,4,53,5,23,1,37,2,78,4,1,6,84};
intmain(intargc,char*argv[])
{
//firstinitpagetable
//andworklist
//lookfortheworklistandpickonetofixthepagetable
for(inti=0;i<12;i++)
{
printf("Instructionsequence:
%d\n",i+1);
intj=work[i].pageNumber;
printf("Thepage%disinthememory?
%s!
\n",j,(pageTAB[j].flag==YES)?
"YES":
"NO");
if(pageTAB[j].flag==YES)
{
intabsoluteAddress=pageTAB[j].memoryBlock*blockLength+work[i].unitNumber;
printf("Instructionabsoluteaddress:
%d\n",absoluteAddress);
}
else
{
printf("missingpageinterrupt,pagefaultinterrupt!
\n");
}
}
return0;
}
存储器管理
(二)
一、实验目的:
掌握分页式存储管理的基本概念和实现方法。
要求编写一个模拟的分页式管理程序,并能对分页式存储的页面置换算法进行编写和计算各个算法的缺页率。
二、程序设计:
假定一个能够存放M个页面的内存,当发生缺页时,调入一个页面,通过LRU算法求出应该置换出的页面号。
输入一连串的页面号,程序自动选择调出的页面并计算缺页率。
设计页面置换算法,这里采用最近最久未使用置换算法LRU。
LRU算法的实现要归功于一个8位的寄存器的实现。
三、算法说明:
执行程序时,当主存没有可用页面时,为了选择淘汰主存中的哪一页面,腾出1个空闲块以便存放新调入的页面。
淘汰哪个页面的首要问题是选择何种置换算法。
该程序采用LRU方法选择,依置换策略选择一个可置换的页面并计算它们的缺页率以便比较。
四、源程序:
#defineM3
#include
#include
intreg[2][M];
intcount;
intnum;
intN;
/********初始化函数,数组reg[0][i]存放页面号,初始化为-1,reg[1][i]当作寄存器,初始化为0*********/
voidinit(){
inti;
count=0;num=0;
N=pow(2,7);/********二进制数10000000**********/
for(i=0;i reg[0][i]=-1; reg[1][i]=0; } } /*********寻找数组a中的最小值,返回最小值对应的下标***********/ intmin(inta[]){ inti,index=0; intmin=a[0]; for(i=1;i if(min>a[i]){ min=a[i]; index=i; } } returnindex; } /***判断页面号x是否在数组中,如果在,返回对应的下标;否则返回-1***/ intisIn(intx,inta[]){ inti; intindex=-1; for(i=0;i if(a[i]==x){ index=i; break; } } returnindex; } /**********判断虚拟的内存中是否已经存满了页面,如果满了,则返回-1,没有满则返回找到空的对应的第一个下标**************/ intisFull(inta[]){ inti,index=-1; for(i=0;i if(a[i]==-1){ index=i; break; } } returnindex; } /*************页面置换方法*****************/ voidswap(intx){ inti,k,temp,temp0; 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){/*******内存没有满,直接调入页面************/ reg[0][temp]=x; reg[1][temp]=reg[1][temp]^N; } elseif(temp==-1){ k=min(reg[1]);/**置换出寄存器中数值最小的对应的下标的页面***/ temp0=reg[0][k];/*********临时保留要换出的页面号*****/ reg[0][k]=x; reg[1][k]=reg[1][k]^N; printf("thepage%disexchangedout! \n",temp0);/******打印要置换出的页号**************/ count++;/*********置换次数加1**************/ } } for(i=0;i reg[1][i]=reg[1][i]>>1;/********寄存器中的所有数右移一位*****/ } } main(){ intx; clrscr(); init(); printf("Inputasortofpages\n"); printf("whileyouinput-1,itwillstop! \n"); scanf("%d",&x); /********输入页面号,直到页面号为-1*********/ while(x! =-1){ num++;/*******输入的页面次数加1*******/ swap(x); scanf("%d",&x); } /***************打印缺页数和缺页率**********************/ printf("thecountofExchangedis: %d\n",count); printf("therateofexchangedis: %f\n",count*1.0/num); getch(); } 五、实验结果: Inputasortofpages whileyouinput-1,itwillstop! 7 0 1 2 thepage7isexchangedout! 0 3 thepage1isexchangedout! 0 4 thepage2isexchangedout! 2 thepage3isexchangedout! 4 3 thepage0isexchangedout! 0 thepage2isexchangedout! -1 Thecountofexchangeis: 6 Therateofexchangeis: 0.500000 六、实验心得: 通过这次实验,让我了解了页式存储管理的过程。 在这次实验中,我首次用了C中重要的但我们又不常用的按位异或操作和移位操作来实现寄存器的功能,使我对C有更深的认识。 本次实验也让我学到了LRU算法。 编者: 杰杰
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 存储 管理 算法 实验 报告 计算机 操作系统 教程 第三
![提示](https://static.bdocx.com/images/bang_tan.gif)