前言
内容仅作记录,请谨慎参考,另外,感谢本学期的陪伴 (✿◠‿◠)
40.1
题目描述
分析及解答
使用命令:./vsfs.py -s 17进行文件创建的模拟
将产生如下结果:
首先是初始状态,可以看到在初始状态下只有一个类型为d的项,这是一个目录,第二个参数a:0表明第0个数据块属于该目录,第三个参数r:2表明目录的引用计数为2
之后可以看到indoes中增加了一条[d a:1 r:2]的条目,同时inodes[0]中的r由2变为了3,这说明在根目录下新创建了一个目录,数据块1属于该目录,同时数据块0中增加了(u,1)条目,说明在根目录下创建了名为u的目录
这一步可以看到inodes中增添了[f a:-1 r:1]条目,结合数据块0中新增的(a,1)条目,这说明创建了一个新的名为a的文件,但未为其分配数据块
这一步之后inodes条目中的[f a:-1 r:1]条目消失不见,这说明上一步创建的文件a被删除了
这一步可以看到indoes中增加了一条[d a:2 r:2]的条目,同时inodes[0]中的r由3变为了4,这说明在根目录下新创建了一个目录,数据块2属于该目录,同时数据块0中增加了(z,2)条目,说明在根目录下创建了名为z的目录
这一步可以看到indoes中增加了一条[d a:3 r:2]的条目,同时inodes[0]中的r由4变为了5,这说明在根目录下新创建了一个目录,数据块3属于该目录,同时数据块0中增加了(s,3)条目,说明在根目录下创建了名为s的目录
这一步可以看到inodes条目中新增了[f a:-1 r:1]条目,同时数据块2中新增了(x,4)条目,这说明在目录z下创建了名为x的文件
这一步中inodes条目中[f a:-1 r:2]条目中r的值由1变为了2,说明这一步实现了link /z/x,同时可以发现数据块1中新增了条目(b,4)这说明实现了link u/b
这一步与上一步的结果对比可以发现数据块1中的条目(b,4)消失不见,这说明这一步实现了unlink u/b
这一步中可以发现inodes条目[f a:4 r:1]条目,也就是说为原本的文件x分配了数据块4,说明这一步实现了打开文件/z/x,写入文件,最后关闭文件的过程
这一步inodes新增条目[f a:-1 r:1],同时数据块1新增条目(b,5) 说明在目录u下新建了文件b
以上就是对种子为17时创建文件系统的模拟结果的分析,可以在命令后加上-c选项查看分析与结果是否一致,当种子为18、19、20时同理:
./vsfs.py -s 18
./vsfs.py -s 19
./vsfs.py -s 20
40.2
题目描述
分析及解答
使用命令:./vsfs.py -s 21 -r进行种子为21时的模拟,可以看到结果如下:
从模拟的结果可以看出操作系统每次将按照最近可分配的原则分配inodes和数据块
种子为22、23、24时同理,在此不再进行模拟。
40.3
题目描述
分析及解答
使用命令:./vsfs.py -d 2 -n 100 -s ? -c进行模拟,得到如下结果:
./vsfs.py -d 2 -n 100 -s 1 -c
./vsfs.py -d 2 -n 100 -s 2 -c
./vsfs.py -d 2 -n 100 -s 3 -c
./vsfs.py -d 2 -n 100 -s 7 -c
./vsfs.py -d 2 -n 100 -s 8 -c
可以得到如下结论:创建目录会失败,创建文件成功,写入文件会失败,可以创建多个文件,可以unlink。同时可以看到,vsfs必须留出一个空闲的数据块。
40.4
题目描述
分析及解答
使用命令:./vsfs.py -i 2 -n 100 -s ? -c进行模拟,得到如下结果:
./vsfs.py -i 2 -n 100 -s 1 -c
./vsfs.py -i 2 -n 100 -s 3 -c
可以看到创建文件和目录均不能成功,vsfs必须留下一个空闲的inodes块。