rCore-Tutorial-Book-v3/chapter7/2fs-implementation
简易文件系统 easy-fs — rCore-Tutorial-Book-v3 0.1 文档
https://rcore-os.github.io/rCore-Tutorial-Book-v3/chapter7/2fs-implementation.html
改指针会被拷贝并传递给下层的数据结构
笔误了
每个目录项是目录下面的一个文件或子目录的文件名或目录名和它们所在的索引节点编号构成的二元组
这样的长难句理解起来非常困难...强烈建议多用短句,多用逗号
@zhanghx0905 多谢提醒,现在已经改成:
在我们的实现中,它可以看成一个目录项的序列,每个目录项都是一个二元组,二元组的首个元素是目录下面的一个文件(或子目录)的文件名(或目录名),另一个元素则是文件(或子目录)所在的索引节点编号。
@kaifoon 这里确实是我疏忽了,多谢指出!我验证了一下,单单用 _ 进行绑定的话,确实根本没有上锁。后续会将一系列的 _ 换成 _fs,之后修复。
原文“为了实现 easy-fs-fuse 和 os/user 的解藕”应该是“解耦”。
感觉EasyFileSystem::create这里有点问题:
let inode_area_blocks =
((inode_num * core::mem::size_of::<DiskInode>() + BLOCK_SZ - 1) / BLOCK_SZ) as u32;
这里看上去好像在说DiskInode可以跨块存储, 但是从
pub fn get_disk_inode_pos(&self, inode_id: u32) -> (u32, usize) {
let inode_size = core::mem::size_of::<DiskInode>();
let inodes_per_block = (BLOCK_SZ / inode_size) as u32;
let block_id = self.inode_area_start_block + inode_id / inodes_per_block;
(block_id, (inode_id % inodes_per_block) as usize * inode_size)
}
来看, 并不能跨块存储
如果DiskInode的大小是512的因数, 就像目前的实现这样, 当然没问题, 而且DiskInode大小本来也应该是512的约数. 但我感觉EasyFileSystem::create这些写得不够严谨, 应该是:
let inode_size = core::mem::size_of::<DiskInode>();
let inodes_per_block = (BLOCK_SZ / inode_size) as u32;
let inode_area_blocks = (inode_num + inodes_per_block - 1)/ inodes_per_block;
@Tokubara 看上去确实如此,可以提个PR。不过需要等这学期结束之后才能合并了。