文件系统空闲空间管理模拟.docx
- 文档编号:7878071
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:11
- 大小:79.67KB
文件系统空闲空间管理模拟.docx
《文件系统空闲空间管理模拟.docx》由会员分享,可在线阅读,更多相关《文件系统空闲空间管理模拟.docx(11页珍藏版)》请在冰豆网上搜索。
文件系统空闲空间管理模拟
实验三文件系统空闲空间管理模拟
一、实验内容及要求
要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程;
二、基本原理
用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0表示空闲,1表示分配;当请求分配一个磁盘块时,寻找到数组中为0的位,计算相对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并将其状态由0变到1。
当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1变为0。
三、实验步骤
1.输入已知参数:
磁盘柱面数m,每柱面磁道数p,每磁道物理块数q,计算位示图大小;假设采用整数数组,则数组大小为:
Size=(柱面数*每柱面磁道数*每磁道物理块数)/sizeof(int)+1
2.申请大小为size的整数数组map,并对其进行随机初始化。
例如:
假设m=2,p=4,q=8,共有64个磁盘块,若sizeof(int)=16,则位示图大小为4,map[4]如下:
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
map[0]
0
0
1
1
0
1
0
0
1
1
0
0
1
0
1
0
map[1]
1
0
1
0
1
1
0
0
0
0
1
1
0
0
0
0
map[2]
0
1
1
0
0
1
1
1
0
0
1
1
0
0
1
map[3]
1
0
0
0
1
0
0
0
0
1
1
0
0
1
1
0
位示图中每一位对应的相对磁盘块号如下图,磁盘块号由小到大对应于数组的低地址到高地址位上。
即map[0]的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map[1]的第0位到第15位对应16号磁盘块到31号磁盘块的状态,以此类推。
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
map[0]
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
map[1]
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
map[2]
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
map[3]
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
如上表所示,29号磁盘的状态存在map[1]中,对应于第13位,第一行表示位号。
3.根据位示图中为1的位信息,生成一张已分配磁盘块表。
柱面号
磁道号
物理块号
0
0
1
0
0
3
0
1
2
0
1
3
0
2
2
…….
……
……
1
2
6
1
3
3
1
3
7
如:
map[0]的第1位为1,则i=0,j=1,其对应的相对块号block为1,柱面号为0,磁道号为,物理块号为1
计算公式如下:
(1)已知位示图中的下标i,j,计算相对块号
Block=I*sizeof(int)+j
(2)已知相对块号计算柱面、磁道、物理块号如下:
柱面号C=相对块号/(每柱面磁道数*每磁道物理块数)
磁道号H=相对块号%(每柱面磁道数*每磁道物理块数)/每磁道物理块数
物理块号R=相对块号%每磁道物理块数
4.提出申请磁盘块或释放磁盘块的要求,根据要求完成操作。
若申请盘块,则在位示图中找到为0的位,计算相对磁盘块号,再计算相应具体物理设备的柱面号C、磁道号H和物理块号R,计算方法如步骤3;输出分配的CHR地址,并将位示图相应位由0变为1,输出位示图;
若释放盘块,则从已分配磁盘块表中随机选择一个盘块释放,此时,已知CHR地址,计算该盘块的相对磁盘块号,再计算其相应信息在位示图中的位置(i,j)。
计算过程如下:
相对磁盘块号=柱面号*每柱面磁道数*每磁道物理块数+
磁道号*每磁道物理块数+物理块号
i=相对磁盘块号/sizeof(int)
j=相对磁盘块号%sizeof(int)
四、实验报告要求
1.实验题目;
2.程序中所用的数据结构及说明;
3.源程序并附上必要的说明;
4.按照盘块的申请和释放顺序,打印输出结果。
源代码:
//============================================
packagexiao.zhang.disk;
publicclassDiskPartition{
privatefinalintcylinderId;
privatefinalinttrackId;
privatefinalintpartitionId;
privatefinalintabsolutelyId;
publicDiskPartition(intcylinderId,inttrackId,intpartionId,
intabsolutelyId){
this.cylinderId=cylinderId;
this.trackId=trackId;
this.partitionId=partionId;
this.absolutelyId=absolutelyId;
}
publicintgetAbsolutelyId(){
returnthis.absolutelyId;
}
/*
*(non-Javadoc)
*
*@seejava.lang.Object#toString()
*/
@Override
publicStringtoString(){
return"磁盘块信息[磁盘块编号:
"+this.cylinderId+"-"+this.trackId+"-"
+this.partitionId+",磁盘块号:
"+this.absolutelyId+"]";
}
}
packagexiao.zhang.disk;
importjava.util.ArrayList;
importjava.util.BitSet;
importjava.util.List;
importjava.util.Random;
importjava.util.Scanner;
/**
*模拟磁盘存储
*
*@authorXiaoZhang
*
*/
publicclassDisk{
/**
*磁盘的柱面数量
*
*磁盘的柱面编号为:
0-cylinder-1
*/
/**
*每个柱面的磁道数量
*
*每个柱面的磁道编号为:
0-track-1
*/
/**
*每个磁道的磁盘块数量
*
*每个磁道的磁盘块编号为:
0-partition-1
*/
privateList
privateBitSet[]bitMap;
/**
*未设置信息的磁盘
*/
publicDisk(){
System.out.println("创建一个未定义信息的磁盘");
}
/**
*随机初始化BitMap的值
*/
publicvoidinitalBitMap(){
Randomrandom=newRandom();
System.out.println("初始化分配:
");
for(inti=0;i this.bitMap[i]=newBitSet(Integer.SIZE); for(intj=0;j this.bitMap[i].set(j,random.nextBoolean()); } } } /** *初始化磁盘 * *创建BitMap对象 * *创建磁盘块状态表对象 * *@paramcylinder *@paramtrack *@parampartition */ publicDisk(intcylinder,inttrack,intpartition){ DiskPartitiondp=null; this.listPartition=newArrayList for(inti=0;i for(intj=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文件系统 空闲 空间 管理 模拟