当前位置:文档之家› 实验报告三磁盘存储空间的分配和回收

实验报告三磁盘存储空间的分配和回收

(2)申请一块磁盘空间时,由分配程序查位示图,找出一个为“0”的位,计算出这一位对应块的磁盘物理地址,且把该位置成占用状态“1”。假设现在有一个盘组共8个柱面,每个柱面有两个磁道(盘面),每个磁道分成4个物理记录。那么,当在位示图中找到某一字节的某一位为“0”时,这个空闲块对应的磁盘物理地址为:
柱面号=字节号
scanf("%c",&choice);
}
}
void allocate(int map[8][8])
{
int i,j;
int flag=0;
int cylinder,track,sector;
for(i=0;i<8;i++)
{ for(j=0;j<8;j++)
if(map[i][j]==0) {map[i][j]=1;flag=1;break;}
if(flag==1) break;
}
if(flag==1)
{
cylinder=i;
track=j/4;
sector=j%4;
printf("分配到的柱面号、磁道号、物理记录数");
printf("%d\t%d\t%d",cylinder,track,sector);
printf("\n");
}
else printf("空间不足,分配失败!");
5.实验报告的撰写认真、格式符合要求.
签名:金晶
日期:
成绩
磁道号=[ ]
物理记录号={ }
(3)归还一块磁盘空间时,由回收程序根据归还的磁盘物理地址计算出归还块在位示图中的对应位,把该位置成“0”。按照(2)中假设的盘组,归还块在位示图中的位置计算如下:
字节号=柱面号
位数=磁道号4+物理记录号
(4)设计申请一块磁盘空间和归还一块磁盘空间的程序。要求能显示或打印程序运行前和运行后的位示图;分配时把分配到的磁盘空间的物理地址显示或打印出来,归还时把归还块对应于位示图的字节号和位数显示或打印出来。
}
void reclaim(int map[8][8])
{ int cylinder,track,sector;
printf("柱面号:");
scanf("%d",&cylinder);
printf("磁道号:");
scanf("%d",&track);
printf("物理记录号:");
scanf("%d",&sector);
实验过程中需要注意的问题:
1)明确要求:
(1)为了提高磁盘存储空间的利用率,可在磁盘上组织成链接文件、索引文件,这类文件可以把逻辑记录存放在不连续的存储空间。为了表示哪些磁盘空间已被占用,哪些磁盘空间是空闲的,可用位示图来指出。位示图由若干字节构成,每一位与磁盘上的一块对应,“1”状态表示相应块已占用,“0”状态表示该块为空闲。位示图的形式与实习二中的位示图一样,但要注意,对于主存储空间和磁盘存储空间应该用不同的位示图来管理,绝不可混用。
}
}
void main()
{
int bitmap[8][8];
int i,j;
int choice;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
bitmap[i][j]=0;
Initbitmap(bitmap);
while(1)
{பைடு நூலகம்
printf("\n请输入选择:");
printf("1--分配,2---回收,3--显示位示图,0--退出\n");
二、实验设备(环境)及要求
微机、C++
三、实验题目
用位示图管理磁盘存储空间
四、程序中使用的数据结构及符号说明
程序中定义了3个函数:
allocate(),参数为8*8二维数组,显示位示图
reclaim(),参数为8*8回收空间
Initbitmap(),参数为8*8分配存储空间
五、源程序
#include <stdio.h>
printf("\n");
}
break;
case 0:exit(0);
default:printf("错误选择!");break;
}
}
}
六、运行调试结果
初始界面:
输入柱面号,磁道号,物理记录号:
选3,显示位示图
选1,分配存储空间:
选择3,显示位示图
选2,回收空间
七、实验心得和收获
程序中只设置了三个函数,完全实现实验的要求。
(5)假定已有如表4-1的磁盘空间被占用了,现在要申请五块磁盘空间,运行分配程序,按(4)中要求显示或打印运行的结果。然后再归还如表4-2的空间,运行回收程序,按(4)中的要求显示或打印运行结果。
七、教师评语
1.按时完成实验;
2.数据结构及符号说明完整明了;
3.有源程序清单;
4.运行调试结果有代表性;
《操作系统原理》实验报告
实验序号:3实验项目名称:磁盘存储空间的分配和回收
学 号
姓 名
专业、班
实验地点
指导教师
时间
2010.11.10
一、实验目的
磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实习使学生掌握磁盘存储空间的分配和回收算法。
scanf("%d",&cylinder);
printf("磁道号:");
scanf("%d",&track);
printf("物理记录号:");
scanf("%d",&sector);
map[cylinder][4*track+sector]=1;
printf("contiune?");
getchar();
#include <process.h>
void Initbitmap(int map[8][8])
{
int cylinder,track,sector;
char choice='Y';
printf("初始化位视图...\n");
while(choice=='y'||choice=='Y')
{
printf("柱面号:");
if(map[cylinder][4*track+sector]==0)
{
printf("此块为未分配块!回收出错!");
getchar();
}
else
{
map[cylinder][4*track+sector]=0;
printf("回收块对应的字节号:%4d\t位数:%4d\n",cylinder,4*track+sector);
scanf("%d",&choice);
switch(choice)
{
case 1:allocate(bitmap);break;
case 2:reclaim(bitmap);break;
case 3:for(i=0;i<8;i++)
{for(j=0;j<8;j++)
printf("%8d",bitmap[i][j]);
相关主题