Download presentation
Presentation is loading. Please wait.
1
助教:田成锦、汪睿、游翎璟 吴加禹、李佳伟、唐凯成
实验四:FAT文件系统的实现 助教:田成锦、汪睿、游翎璟 吴加禹、李佳伟、唐凯成
2
实验目的 熟悉FAT16的存储结构 利用FUSE实现一个只读的FAT16文件系统 拓展实验:实现功能完整的FAT16文件系统(选做)
支持长文件名 支持写操作 实现线程安全 2019/6/5
3
实验环境 主机:Ubuntu 32位 14.04 (或其他32位Ubuntu系统)
本次实验通过FUSE来实现一个FAT文件系统,需要根据 FUSE提供的接口实现具体的文件操作 下载教学主页上的lab-4基础代码并解压即可开始实验 2019/6/5
4
实验内容——1.熟悉使用FUSE 了解FUSE
FUSE(Filesystem in Userspace,用户态文件系统)是一个实现在用 户空间的文件系统框架,通过FUSE内核模块的支持,使用者只需要 根据fuse提供的接口实现具体的文件操作就可以实现一个文件系统。 FUSE主要由三部分组成:FUSE内核模块、用户空间库libfuse以及挂载 工具fusermount: 1. fuse内核模块:实现了和VFS的对接 2. fuse库libfuse:负责和内核空间通信 3. 挂载工具:实现对用户态文件系统的挂载。 更多详细内容可参考博客: 2019/6/5
5
实验内容——1.熟悉使用FUSE 配置FUSE环境
linux kernel在2.6.14后添加了FUSE模块,因此对于目前的大多数发 行版来说只需要安装libfuse库即可。 在< ,并编译安装: wget -O libfuse zip unzip libfuse zip cd libfuse-fuse_2_9_5/ ./makeconf.sh ./configure --prefix=/usr make -j4 sudo make install 2019/6/5
6
实验内容——1.熟悉使用FUSE 配置FUSE环境 编译出错处理:
在执行./makeconf.sh可能会遇到“ libtoolize: not found ”或 “autoreconf: not found”,需要安装libtool和autoconf软件包,ubuntu下可以通过下面的命 令安装: sudo apt install libtool sudo apt install autoconf 2019/6/5
7
实验内容——1.熟悉使用FUSE 测试FUSE 通过libfuse-fuse_2_9_5/example下的fusexmp进行测试:
这时候在文件管理器中打开fuse_test_dir目录,可以看到当前Linux 系统的“/”被挂载到这个目录下。 结束测试可以直接在当前终端中Ctrl + C结束程序,或者在新的终端 中输入: 提示:当执行用户自己实现的fuse程序时,如果出现错误:fuse:bad mount point `fat_dir/`: Transport endpoint is not connected,可通过执 行上面这条命令卸载对应的文件夹来解决。 cd example mkdir fuse_test_dir ./fusexmp -d fuse_test_dir fusermount -u fuse_test_dir 2019/6/5
8
实验内容——2.FAT文件系统 FAT格式磁盘镜像的制作过程 分为三步:创建文件,格式化文件,挂载使用
dd if=/dev/zero of=fat-disk.img bs=1M count=100 mkfs.vfat -F 16 fat-disk.img mkdir mdir mount fat-disk.img mdir 2019/6/5
9
实验内容——2.FAT文件系统 FAT16的存储结构 FAT16文件系统的基本结构依次为: FAT16格式的磁盘的组织方式为:
DBR扇区、FAT表1、FAT表2、根目录和数据区 FAT16格式的磁盘的组织方式为: 2019/6/5
10
实验内容——2.FAT文件系统 FAT16的存储结构 DBR扇区
DBR是操作系统可以直接访问的第一个扇区,包括一个引导程序和一个 称为BPB的本分区参数记录表。BPB参数块记录着本分区的启始扇区、 结束扇区、文件存储格式、硬盘介质描述符、根目录大小、*FAT*个数、 分配单元的大小等重要参数。 下图是一个FAT16文件系统的DBR扇区 2019/6/5
11
实验内容——2.FAT文件系统 FAT16的存储结构 DBR扇区 DBR扇区每个字段代表的含义如下:
根据上面的DBR扇区,我们可以算出各FAT的偏移地址,根目录的偏移地址,数据区的偏移地址。FAT1偏移地址:保留扇区(FAT1之前的扇区,包括DBR扇区)之后就是FAT1。因此可以得到,FAT1的偏移地址就是1个扇区的位置,也就是512。FAT2偏移地址:FA1偏移地址+FAT1的大小,512+21*512 = 11264。根目录偏移地址: FAT2偏移地址+FAT2的大小, *512= 22016。数据区的偏移地址:根目录偏移地址+根目录大小, *512=38400。其中根目录大小是由根目录项数决定的,每项占32字节 2019/6/5
12
实验内容——2.FAT文件系统 FAT16的存储结构 FAT表
FAT是簇的链表,FAT2与FAT1的内容通常是即时同步的,可以认为两 个FAT表完全相同。在根据目录项获取文件的首簇号后,在FAT中找到 对应的簇,可以找到下一个簇,一直到文件结束。每个簇用2字节表示 簇的状态, 具体意义如下表所示: 2019/6/5
13
实验内容——2.FAT文件系统 FAT16的存储结构 目录
每个32字节目录项表示的具体含义如下: 2019/6/5
14
实验内容——2.FAT文件系统 FAT16的存储结构 目录 系统将文件名分成两部分进行存储,即主文件名+扩展名。
不记录主文件名与扩展名之间的".",并且存储成大写字母。 主文件名不足8个字符以空白符(20H)填充,扩展名不足3个字符同样以 空白符(20H)填充。 0x0偏移处的取值若为0x0,表明目录项为空;若为0xE5,表明目录项 曾被使用,但对应的文件或文件夹已被删除。 文件名中的第一个字符若为“.”或“..”表示记录的是一个子目录的目录项, “.”代表当前目录;“..”代表上级目录。 2019/6/5
15
实验内容——2.FAT文件系统 FAT16的存储结构 FAT表与文件定位
FAT表以"F8 FF FF FF" 开头,为介质描述单元,并不参与FAT表簇链关系, 下图展示了FAT表的内容。为了定位一个文件或目录,需要先找到其对应 的目录项,然后根据首簇号查找FAT中的相应表项。 2019/6/5
16
实验内容——2.FAT文件系统 FAT16的存储结构 FAT表与文件定位
假设一个文件,其首簇号是2,则查看FAT的相对偏移0x4~0x5的内容, 此处为0xFFFF,表示存储在2号簇上的文件是个小文件,只占用1个簇 便结束了。 假设另一个文件的首簇号是8,则查看FAT的相对偏移0x10-0x11的内容, 为0x0009,就是说该文件继8号簇后的内容会存放在9号簇中;继续查 看9号簇的FAT表项内容是0x000A,该文件继9簇后的内容会存放在10 号簇中,继续这个过程,会发现文件在11号簇结束。 2019/6/5
17
实验要求 实验任务 补全代码包simple_fat16.c中的标记TODO(一共9处)的部分,实现 一个只读的FAT16文件系统。
提示:有需要的话,可采用Linux下的xxd和hexdump等命令或者 Windows下的WinHex等十六进制文件编辑工具,分析对应的磁盘镜 像文件。 2019/6/5
18
实验要求 运行与测试 使用如下的命令编译并测试程序: #进入源码目录 make #测试一 ./simple_fat16 --test
2019/6/5
19
实验要求 运行与测试 测试一是为了验证程序的FAT相关部分的代码正确性(以 fat16_test.img作为磁盘镜像文件),一共有6个测试目标: 2019/6/5
20
实验要求 运行与测试 通过测试一后,运行如下的命令进行FUSE功能的测试(以fat16.img 作为磁盘镜像文件) #测试二
./simple_fat16 -d fat_dir 2019/6/5
21
实验要求 运行与测试 这时候在文件管理器中打开fat_dir目录,需要能够看到里面的文件 列表,以及正常访问里面的文件 2019/6/5
22
评分标准 得分由两部分构成 代码运行得分 回答问题得分 未能通过测试一,按照完成的测试目标数给分;
能正常通过测试二(看到文件+访问文件)得8分 只能看到文件列表但无法正常访问文件得7分。 回答问题得分 针对代码实现,助教提问问题,根据回答情况在代码运行分的基础上 加分/扣分。 2019/6/5
23
提交方式 将实验报告、源代码打包为压缩包提交 提交至邮箱:ustc_os2019@163.com
本次实验只要求修改simple_fat16.c文件,不能修改其他文件,所以 源代码只提交simple_fat16.c文件即可。 邮件主题、文件名称、压缩包名称 均采用以下格式命名 x-学号-姓名(x:代表第x次实验) 例如张三的第1次实验命名为“1-PB 张三” 未按照规范命名的邮件会被忽略、删除 实验验收和报告提交截止日期请关注课程主页 2019/6/5
24
拓展实验(选做) 实验目标 实现一个功能完整的FAT16文件系统 2019/6/5
25
拓展实验内容1 支持长文件名的FAT 16文件系统 在之前的实验中,我们只关注了短文件名(8+3格式) 的实现,这种这种方式有很大的局限性。
要求:参考相关资料,实现能够支持长文件名的FAT文 件系统,要求能够正常显示fat.img中的文件名。 2019/6/5
26
拓展实验内容2 支持写操作的FAT 16文件系统 在已有的只读文件基础上,实现可支持创建文件,写文 件,删除文件的功能,同时能够支持文件属性的修改。 要求:能够在文件系统中支持touch,mkdir,cp,rm等 命令,支持的功能越多越好。 2019/6/5
27
拓展实验内容3 实现线程安全的FAT 16文件系统
要求:在多线程访问文件系统时,需要保证读写请求被 正确处理,能够使用fio工具测试文件系统,并且有不错 的性能结果。 2019/6/5
Similar presentations