180 likes | 361 Views
实验三 -4 实验四 -2. 5.24. 本节课内容. 1. 实验三本日截止,本日之前注意代码和文档的提交。 2. 四 次实验的分组情况已放在网上,请大家核对。另外,随着实验接近尾声,批改作业已经开始,请大家关注邮箱,如果有代码打不开文档发错等情况都会通过邮件通知。 3. 本节课讲解第四次实验。注意下周由于过节不上课。. 1. 实验四:文件系统. 本次实验从底层操作 linux 文件系统,通过逐字节的分析,来掌握操作系统对文件的管理的机制。 本次实验采用 fat16 文件系统,主要原因是因为其格式简单(这也导致其效率很低)。
E N D
实验三-4实验四-2 5.24
本节课内容 • 1.实验三本日截止,本日之前注意代码和文档的提交。 • 2.四次实验的分组情况已放在网上,请大家核对。另外,随着实验接近尾声,批改作业已经开始,请大家关注邮箱,如果有代码打不开文档发错等情况都会通过邮件通知。 • 3.本节课讲解第四次实验。注意下周由于过节不上课。
1.实验四:文件系统 • 本次实验从底层操作linux文件系统,通过逐字节的分析,来掌握操作系统对文件的管理的机制。 • 本次实验采用fat16文件系统,主要原因是因为其格式简单(这也导致其效率很低)。 • Fat16的具体格式可以参考(本次讲解均采用其中术语) • http://home.teleport.com/~brainy/fat16.htm
2.首先读取第一扇区,获得重要参数 • 需要的参数: • Reserve Sector = 1 • Sectors Per Fat = 2 • Maximum Root Directory Entries = 512 ( Root Dir Entry) • 1 Sector = 512 Bytes • 文件头部结构
这些参数的作用是为了 • 之后的操作提供信息
3. Ls命令,用来显示文件和目录 • 首先,目录的位置在Root Directory Entry区,紧挨Boot Sector,FAT表。所以书上代码的计算位置有问题。而且书上的这些位置都是定死的,而不是计算出来的,所以修改头文件的ROOTDIR_OFFSET,将其不作为常数,即从.h文件头部删除,如图 • 在.h文件尾部,增加全局变量ROOTDIR_OFFSET,如图
在.c文件的ScanBootSector函数读取出来基本参数后,计算这个变量的值,如图在.c文件的ScanBootSector函数读取出来基本参数后,计算这个变量的值,如图 • 在printf中,打印这个ROOTDIR_OFFSET的值
重新编译运行 Step 3
回到ls的函数,之后的全局变量Data Offset,计算也有问题,按照上一个的方法,修改,部分截图如下:
读取Directory Entry • 每个目录为32个字节
检查ls命令是否工作正常 • 上节课没有提到的,就是挂载上去的优盘是没有修改权限的。 • 首先使用umount /dev/sdb1把已经挂载的卸下来 • 使用命令sudo mount -o umask=000 data /dev/sdb1挂载优盘 • 然后使用sudochmod -R 777 /dev/sdb1赋予权限 • 然后用文件夹打开/dev/sdb1目录,创建一个简单文件,再在命令运行试验代码,看是否能显示这个文件
实验程序假设最多有1000个簇(可以修改),FAT表两个字节表示一个簇号,首先遍历FAT表,数据区是从簇2开始,找到所有在FAT表中被标记为未被占用的簇。实验程序假设最多有1000个簇(可以修改),FAT表两个字节表示一个簇号,首先遍历FAT表,数据区是从簇2开始,找到所有在FAT表中被标记为未被占用的簇。 修改好FAT表,每个文件的最后一簇用FFFF标识。 之后开始修改目录表,首先找到目录表,找到未使用的,然后将这个文件的内容写进去,注意,源代码没有写入创建时间,这里自行修改。
之后需要将FAT表写入到优盘两次,修改源代码中WriteFat的计算。之后需要将FAT表写入到优盘两次,修改源代码中WriteFat的计算。
重新编译执行ls,由于之前的错误FAT表的路径,所以重新格式化一下data文件。使用命令msfs.msdos data • 可以看到,虽然ls命令可以看到, 但是文件夹中还是找不到,说明 还有地方没弄对。
5.后续改进 • 由于要使这些基本命令工作正确,还要进行很大改动,每个人的改动方式可能不一样,所以大家自行完成,不清楚FAT的原理可以上网进行搜索。确定自己是否改对的方式就是在真实的文件夹中进行检验。
6.提高要求 Step A • 1.增加 创建目录 和 删除目录 的功能,若目录不为空,删除失败,给出提示。 • 2.改进 cd 函数,增加绝对路径和多级路径。 • 3.改进 cf函数,使其可以向文件中写入实际内容,并根据写入的内容计算文件的大小。 • 4.所有功能均可以和图形界面中的操作替换使用。(即保证其正确) Step B Step C Step D