}
五、程序运行结果
输入:
输出:
任务六、磁盘空间的分配与回收
三、目的:
磁盘初始化时把磁盘存储空间分成许多块(扇区),这些空间可以被多个用户共享。
用户作业在执行期间常常要在磁盘上建立文件或已经建立在磁盘上的文件删去,这就涉及到磁盘存储空间的分配和回收。
。
一个文件存放到磁盘上,可以组织成顺序文件(连续文件)、链接文件(串联文件)、索引文件等,因此,磁盘存储空间的分配有两种方式,一种是分配连续的存储空间,另一种是可以分配不连续的存储空间。
怎样有效地管理磁盘存储空间是操作系统应解决的一个重要问题,通过本实验使学生掌握磁盘存储空间的分配和收回算法。
四、要求:
模拟磁盘空闲空间的表示方法,以及模拟实现磁盘空间的分配和回收。
从下题目中选择一题来实现设备的管理:
(1)连续的磁盘存储空间的分配和回收。
(2)用位示图管理磁盘存储空间。
(3)模拟UNIX系统的空闲块组链接法,实现磁盘存储空间的管理。
三、程序框图:
四、程序清单
1.showbitmap函数
voidshowbitmap(void){
inti=0;//用来和位示图bitmap相与得到某位的状态
printf("当前系统磁盘位示图(0表示块可用):
\n");
for(;iif(0==i%8){
printf("\n");}
printf("%d块:
%d\t",i+1,bitinfo->bitmap[i]);}
system("pause");}
2.diskallocate函数(分配物理块给)
voiddiskallocate(void){//由用户输入需要的物理块数:
intneednum;
inti;
intbusy=0;
charfilestor[32];
printf("输入需要分配的块数:
\n");
scanf("%d",&neednum);
printf("输入文件名:
\n");
scanf("%s",filestor);
for(i=0;ibusy=busy+bitinfo->bitmap[i];}
if(64-busyprintf("没有足够的空闲磁盘,分配失败!
");}
else{
printf("开始分配...\n");
for(i=0;iif(0==bitinfo->bitmap[i]){
printf("分配块物理地址为:
第%d个柱面,\t第%d个磁道,\t第%d个扇区\n",i/8+1,i%8/4,(i%8)%4);
bitinfo->bitmap[i]=1;
strcpy(bitinfo->filename[i],filestor);
neednum--;}
if(0==neednum){
break;}
}
printf("分配成功!
\n");}
system("pause");}
3.diskreturn函数
voiddiskreturn(void){
charfilereturn[32];
inti;
printf("输入要回收的文件名");
scanf("%s",filereturn);
for(i=0;iif(0!
=strcmp(filereturn,bitinfo->filename[i])){
continue;}
else{
bitinfo->bitmap[i]=0;
printf("回收位示图中第%d字节的第%d位的物理块\n",i/8+1,i%8+1);}
}
system("pause");}
五、程序运行结果
查看磁盘位示图:
申请分配磁盘空间:
申请回收磁盘空间:
任务七、文件管理
一、目的:
通过一个简单的多用户文件系统的设计,加深理解文件系统的内部功能及内部实施过程。
二、要求:
设计并实现一个用户的二级文件系统。
要求作到以下几点:
可以实现下列几条命令(至少4条)
命令单词
命令含义
login
用户登录
dir
列文件目录
create
创建文件
delete
删除文件
open
打开文件
close
关闭文件
read
读文件
write
写文件
2、列文件目录时要列出文件名,物理地址,保护码和文件长度。
3、源文件可以进行读写保护。
三、功能框图
三、程序清单
1.Help功能函数
voidhelp(void){
cout<<"命令一览"<cout<cout<<"create:
建立文件。
"<cout<<"read:
读取文件。
"<cout<<"write:
写入文件,支持多线程"<cout<<"del:
删除文件。
"<cout<<"mkdir:
建立目录。
"<cout<<"cd:
切换目录。
"<cout<<"logout:
退出登录。
"<}
2.Createroot函数(创建文件存储结点)
voidcreateroot(){
recent=root=initfile("/",1);
root->parent=NULL;
root->child=NULL;
root->prev=root->next=NULL;
strcpy(para,"/");
}
3.功能函数
intmkdir();
intcreate();
intdir();
intread();
intwrite(