实验三 文件系统空白空间管理-空白目录.doc
文本预览下载声明
操作系统原理
实验三 文件存储空间管理模拟
学 号
班 级
姓 名
指导老师
实验时间 2014.6.5
实验三 文件存储空间管理模拟
1.内容:模拟文件存储空间的管理,采用空白文件目录法和空白块链法实施空间分配。
2.思想:
文件存储空间管理是文件系统的重要内容。常用的管理思想有空白文件目录法、空白块链法和位示图法。本实验采用前两种方法进行空间分配。
(1)空白文件目录法进行空间分配时,需要建立相关的数据结构,记录目前空白区域和已使用区域,假设开始时全部区域空闲。当有文件需要存储时,先检查空白文件目录,找到适合区域立即分配,并修改空白文件目录表和已使用区域分配表。为此需建立两张表格,分别记录相关数据。
空白文件目录表(初始)
序号 首空白块号 空白快个数 物理块号 备注 1 0 100 0,1,2,……,98,99
空白文件目录(中间)
序号 首空白块号 空白块个数 物理块号 标志 1 2 4 2,3,4,5 未分配 2 9 3 9,10,11 未分配 3 25 5 25,26,27,28,29 未分配 4 39 2 39,40 未分配 5 …… …… …… 未分配
文件标识 首块号 文件块个数 状态 备注 beta 0 2 占用 Alpha 6 3 占用 Toyota 12 13 占用 Sony 30 9 占用 Ford 50 4 占用 …… …… …… …… 已使用区域表(中间)
上述两张表的数据在系统运行中是发生变化的。
文件空闲区分配和释放算法如下图所示:
图一 文件空闲区分配算法
图二 文件空闲区回收算法
(2)空白块链法进行空间分配时,需要建立链表数据结构,将空闲块按顺序加以组织,分配和回收时在链首完成,同时建立文件目录,记录文件占用空间情况。
文件标识 首块号 备注 beta 0 Alpha 6 Toyota 12 Sony 30 Ford 50 …… ……
源代码
#includestdio.h
#includestring.h
#includestdlib.h
int maxid=4; //空白表数目
int maxnum=4;//文件个数
// 空白文件
typedef struct{
int id;
int firstblock;
int blocknum;
int lastblock;
}Space;
// 分配文件
typedef struct {
char flag[10];
int firstnum;
int fullnum;
int lastnum;
}Full;
//初始化分配
Full full[20]={{Bete,0,2,1},{Aple,6,3,8},{Toyo,12,13,24},{Ford,30,9,38}};
Space file[20]={{1,2,4,5},{2,9,3,11},{3,25,5,29},{4,39,62,100}};
//分配打印
void fullprint(){
printf(文件名\t 首块号 \t文件块个数 末块号\n);
for(int i=0;imaxnum;i++){
printf(%s\t %d\t\t %d\t\t %d\n,full[i].flag,full[i].firstnum,full[i].fullnum,
full[i].lastnum);
}
printf(当前文件数目=%d\n,maxnum);
}
//空白区打印
void fileprint(){
printf(文件号\t 首块号 \t文件块个数 末块号\n);
for(int i=0;imaxid;i++){
printf(%d\t %d\t\t %d\t\t %d\n,file[i].id,file[i].firstblock,file[i].blocknum,
file[i].lastblock);
}
printf(当前空白区数目=%d\n,maxid);
}
void distribute(){ //分配函数
char S_File[10]; //文件名
int M; //申请块数
int tem
显示全部