文档详情

实验三 文件系统空白空间管理-空白目录.doc

发布:2017-02-23约4.96千字共14页下载文档
文本预览下载声明
操作系统原理 实验三 文件存储空间管理模拟 学 号 班 级 姓 名 指导老师 实验时间 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
显示全部
相似文档