位示图实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

石油大学操作系统位示图磁盘管理

一、实验目的

怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。

二、实验内容

模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。

本实习模拟用位示图管理磁盘存储空间的管理方法。设计申请一块磁盘空间和归还一块磁盘空间的程序。要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。

假定已有如表1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,显示或打印运行的结果。然后再归还如表2的空间,运行回收程序,显示或打印运行结果。

三、实验步骤

本实验在Visual C++ 6.0编程平台下进行编程实现,详见实验内容。

1.算法设计流程,及源代码;

算法思想,及算法流程:

磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。

为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。

当申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。假设现在有一个盘组共80个柱面,每个柱面有两个磁道,每个磁道分成4个物理记录。那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:

柱面号=字节号磁道号=[位数/4] 物理记录号={位数/4}

当归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。归还块在位示图中的位置计算如下:

字节号=柱面号

位数=磁道号 4+物理记录号

源程序:

#include

#include

#include

#define A 10

#define B 2

#define C 4

int koko[A][B][C];

int M,N;

int i,j,k;

char ch;

void i_koko()

{

for(i=0;i

for(j=0;j

for(k=0;k

koko[i][j][k]=1;

}

}

}

}

void Dispense()

{

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):"<<'\t';

cin>>ch;

}

while(ch=='Y'||ch=='y');

}

void Recycle()

{

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');

}

void Display()

{

int i,j,k;

int flag=0;

cout<<"**位示图**"<

cout<<"字\位"<

for(i=0;i

cout<

for(i=0;i

cout<

for(j=0;j

for(k=0;k

cout<

flag++;

if(flag%8==0)cout<

}

}

}

cout<

cout<<"**磁盘分配图**"<

cout<<"柱面号"<<'\t'<<"磁道号"<<'\t'<<"物理记录号"<

for(i=0;i

for(j=0;j

for(k=0;k

if(koko[i][j][k]==0)cout<

}

}

cout<

}

void KOKO()

{

cout<<"**********************************"<

cout<<"* 1.分配"<<"2.回收"<<"3.显示"<<"4.退出*"<

cout<<"**********************************"<

cout<<"选择所要执行的功能:"<<'\t';

int x;

cin>>x;

cout<

switch(x)

{

case 1:Dispense(); break;

case 2:Recycle();break;

case 3:Display();break;

case 4:exit(1);break;

default:cout<<"Error! 该功能不存在请重新输入"<

}

}

void main()

{

i_koko();

while(1){KOKO();}

}

2.编译、调试程序;

3.运行程序,记录结果。

假定已有如表6-1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序。然后再归还如表6-2的空间,运行回收程序,。

相关文档
最新文档