bitmap: 0表示inode/data block是free, 1表示inode/data block是allocated
比如 刚创建的一个空文件inode:
[f a:-1 r:1]
, 一个有1个硬链接的文件inode[f a:10 r:2]
['a']
, ['b']
.....(name, inode_number)
形成的list,比如, 根目录 [(.,0) (..,0)]
, 或者包含了一个'f'
文件的根目录[(.,0) (..,0) (f,1)] 。注意:一个目录的目录项的个数是有限的。
block.maxUsed = 32
注意:data block的个数是有限的,为 fs.numData
注意:inode的个数是有限的,为 fs.numInodes
fs.ibitmap: inode bitmap 11110000
fs.inodes: [d a:0 r:5] [f a:1 r:1] [f a:-1 r:1] [d a:2 r:2] [] ...
fs.dbitmap: data bitmap 11100000
fs.data: [(.,0) (..,0) (y,1) (z,2) (x,3)] [u] [(.,3) (..,0)] [] ...
此文件系统有8个inode, 8个data blocks. 其中,根目录包含5个目录项,
”.“,”..“,”y“,”z“,”x“
, ”y“是常规文件,并有文件内容,包含一个data block,文件内容为”u“。”z“是一个空的常规文件。”x“是一个目录文件,是空目录。
也可理解为内存中的文件系统相关数据结构
第一步:格式化sfs文件系统
self.numInodes = numInodes
self.numData = numData
self.ibitmap = bitmap(self.numInodes)
self.inodes = []
for i in range(self.numInodes):
self.inodes.append(inode())
self.dbitmap = bitmap(self.numData)
self.data = []
for i in range(self.numData):
self.data.append(block('free'))
第二步:创建sfs文件系统的根目录
self.ibitmap.markAllocated(self.ROOT)
self.inodes[self.ROOT].setAll('d', 0, 2)
self.dbitmap.markAllocated(self.ROOT)
self.data[0].setType('d')
self.data[0].addDirEntry('.', self.ROOT)
self.data[0].addDirEntry('..', self.ROOT)
第三步:在内存中保存相关数据
self.files = []
self.dirs = ['/']
self.nameToInum = {'/':self.ROOT}
第四步:随机生成文件相关的操作,改变sfs文件系统的内容
fd=open(filename, O_WRONLY|O_APPEND); write(fd, buf, BLOCKSIZE); close(fd);
unlink()filename)
link()targetfile, sourcefile)
create(filename)
OR mkdir(dirname)
根据sfs文件系统的状态变化信息,给出具体的文件相关操作内容.
在sfs-homework.py 参考代码的基础上,实现 writeFile, createFile, createLink, deleteFile
,使得你的实现能够达到与问题1的正确结果一致
实现soft link
机制,并设计测试用例说明你实现的正确性。