预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
操作系统磁盘管理一、实验目的怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。二、实验内容模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收.本实习模拟用位示图管理磁盘存储空间的管理方法。设计申请一块磁盘空间和归还一块磁盘空间的程序。要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。假定已有如表1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,显示或打印运行的结果。然后再归还如表2的空间,运行回收程序,显示或打印运行结果。表1柱面号磁道号物理记录号001002010013100112表2柱面号磁道号物理记录号002010101三、实验步骤本实验在VisualC++60编程平台下进行编程实现,详见实验内容。1.算法设计流程,及源代码;算法思想,及算法流程:磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。当申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”.假设现在有一个盘组共80个柱面,每个柱面有两个磁道,每个磁道分成4个物理记录。那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:柱面号=字节号磁道号=[位数/4]物理记录号={位数/4}当归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。归还块在位示图中的位置计算如下:字节号=柱面号位数=磁道号4+物理记录号源程序:#includ〈iostreamh〉#include〈stdlLbh〉#include〈iomanip.h>#defineA10#defineB2#defineC4intkoko[A][B]C];intMN;inti,j,k;charchvoidi_koko)({for(i=;0i〈A;i++){for(j=0;jB;j++){for(k=0;k<C;k++){koko[i][j][k]=1;}}}}voidDispense(){do{cout<<'请输入字节号:"〈<’\t’;cin〉>M;cout<〈"请输入位数:"〈〈’\t';cin>>N;i=M;j=N/4;k=N%4;koko[i][j][k]=0;cout〈<”是否继续输入(Y/N):”《'\;cin〉>ch;}while(ch=='Y'||ch==’y')}voidRecycle){do{cout〈〈”请输入柱面号"<〈'\t'cin〉〉i;cout<<”请输入磁盘号”<«t/cin>>j;cout〈<”请输入逻辑记录号”<<\t/cin>>k;koko[i][j][k]=1;cout〈〈”是否继续输入(Y/N):"〈〈'\t';cin>>ch;}while(ch==’Y'||ch=='y');}voidDisplay({int,ij,kintflag=0;cout<<”*1位示图**”<<endl;cout<<"^\位"〈〈setw(3);for(i=;0i<B*C;i++){cout〈<i<〈setw(3);}cout〈〈endl;for(i=0;i<A;i++)cout<〈setw(3)〈<i〈〈setw(6);for(j=0j<B;j++){for(k=0;k〈C;k++){cout<〈koko[i]j[k]<<setw(3;flag++;if(fiag8==0)cout<<endl}}}cout<<endl;cout〈<”**磁盘分配图**”<<end;lcout<<'柱面号”〈<’\t〈<"磁道号”〈<’\t'<”物理记录号"<〈endl;for(i=;0i〈A;i++){for(j=0;jB;j++){for(k=0;k<C;k++){if(kokoi][j][k]==0)cout〈〈i〈<’\t'<j〈〈’\t’〈〈k〈〈endl;}cout<〈endl〈<endl;}voidKOKO(){cou〈t<”**************************”<〈endl显示”〈<”4.cout<<"*1.分配”<〈”2回收”<<”3退出*”〈〈en