说明:由于我这次作业完成的很敷衍,所以我在这里暂时不贴出我的代码,关键部分其实是找到getblk和putblk对应的系统调用函数即可
功能要求 ①至少支持普通文件和目录文件两种类型 ②创建新文件,删除已有文件 ③根据文件名(绝对路径)检索到相应的文件(/d0/d1/filename) ④支持的操作:open、close、read、write ⑤至少支持三层目录(/d0/d1/filename) ⑥能读取外部提供的文件并存入到文件系统中(即从模拟的磁盘空间之外拷贝文件) ⑦提供命令行界面,能够显示目录内容和文件内容
实现要求 ①使用一个空文件模拟一块磁盘,大小为 1MB,可预先创建好。磁盘大致结构如下: Boot block Super block Data block bitmap Inode bitmap Inode table Data block …… Super block 包含有关文件系统的属性和信息,基本块大小、/目录 inode 的位置等 Data block bitmap 标记块的使用情况,每一 bit 对应相应位置的块(1=使用,0=空 闲) Inode bitmap 标记 inode 的使用情况,每一 bit 对应一个 inode(1=使用,0=空闲) Inode table 存放 inode,多块(inode table 大小固定,即 inode 的最大数量固定) Data block 存放文件内容,多块 ②以块为存取的基本单位,大小为 1KB ③每个文件最多占有 8 块,即文件的最大大小为 8KB ④文件名最长 8B ⑤简易文件系统支持最多 80 个文件(含目录文件) ⑥索引节点(inode): 每个索引节点大小 64B(1 个块可以存放 16 个 inode) 系统需要维护 inode bitmap,记录每个索引节点分配与否
每个索引节点至少包含:文件标识符、文件涉及的块(地址或块号)、文件 创建时间等 采用直接索引方式获取块位置 根节点已知(即/目录对应的索引节点位置已知) ⑦需要实现两个基本函数:
GETBLK(buf, blk_no); PUTBLK(buf, blk_no); 两个函数用于读取和写入指定块。buf 为内存缓冲区,大小与基本块大小相同,用于存放读取或待写入的块内容;blk_no 为物理块号 文件系统的其他功能函数实现在这两个基本函数的上层,即其他函数不直接访问磁盘