1 / 18

实验三 -4 实验四 -2

实验三 -4 实验四 -2. 5.24. 本节课内容. 1. 实验三本日截止,本日之前注意代码和文档的提交。 2. 四 次实验的分组情况已放在网上,请大家核对。另外,随着实验接近尾声,批改作业已经开始,请大家关注邮箱,如果有代码打不开文档发错等情况都会通过邮件通知。 3. 本节课讲解第四次实验。注意下周由于过节不上课。. 1. 实验四:文件系统. 本次实验从底层操作 linux 文件系统,通过逐字节的分析,来掌握操作系统对文件的管理的机制。 本次实验采用 fat16 文件系统,主要原因是因为其格式简单(这也导致其效率很低)。

jewel
Download Presentation

实验三 -4 实验四 -2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 实验三-4实验四-2 5.24

  2. 本节课内容 • 1.实验三本日截止,本日之前注意代码和文档的提交。 • 2.四次实验的分组情况已放在网上,请大家核对。另外,随着实验接近尾声,批改作业已经开始,请大家关注邮箱,如果有代码打不开文档发错等情况都会通过邮件通知。 • 3.本节课讲解第四次实验。注意下周由于过节不上课。

  3. 1.实验四:文件系统 • 本次实验从底层操作linux文件系统,通过逐字节的分析,来掌握操作系统对文件的管理的机制。 • 本次实验采用fat16文件系统,主要原因是因为其格式简单(这也导致其效率很低)。 • Fat16的具体格式可以参考(本次讲解均采用其中术语) • http://home.teleport.com/~brainy/fat16.htm

  4. 2.首先读取第一扇区,获得重要参数 • 需要的参数: • Reserve Sector = 1 • Sectors Per Fat = 2 • Maximum Root Directory Entries = 512 ( Root Dir Entry) • 1 Sector = 512 Bytes • 文件头部结构

  5. 这些参数的作用是为了 • 之后的操作提供信息

  6. 3. Ls命令,用来显示文件和目录 • 首先,目录的位置在Root Directory Entry区,紧挨Boot Sector,FAT表。所以书上代码的计算位置有问题。而且书上的这些位置都是定死的,而不是计算出来的,所以修改头文件的ROOTDIR_OFFSET,将其不作为常数,即从.h文件头部删除,如图 • 在.h文件尾部,增加全局变量ROOTDIR_OFFSET,如图

  7. 在.c文件的ScanBootSector函数读取出来基本参数后,计算这个变量的值,如图在.c文件的ScanBootSector函数读取出来基本参数后,计算这个变量的值,如图 • 在printf中,打印这个ROOTDIR_OFFSET的值

  8. 重新编译运行 Step 3

  9. 回到ls的函数,之后的全局变量Data Offset,计算也有问题,按照上一个的方法,修改,部分截图如下:

  10. 读取Directory Entry • 每个目录为32个字节

  11. 检查ls命令是否工作正常 • 上节课没有提到的,就是挂载上去的优盘是没有修改权限的。 • 首先使用umount /dev/sdb1把已经挂载的卸下来 • 使用命令sudo mount -o umask=000 data /dev/sdb1挂载优盘 • 然后使用sudochmod -R 777 /dev/sdb1赋予权限 • 然后用文件夹打开/dev/sdb1目录,创建一个简单文件,再在命令运行试验代码,看是否能显示这个文件

  12. Step 4

  13. 4.cf 命令,用来创建文件

  14. 实验程序假设最多有1000个簇(可以修改),FAT表两个字节表示一个簇号,首先遍历FAT表,数据区是从簇2开始,找到所有在FAT表中被标记为未被占用的簇。实验程序假设最多有1000个簇(可以修改),FAT表两个字节表示一个簇号,首先遍历FAT表,数据区是从簇2开始,找到所有在FAT表中被标记为未被占用的簇。 修改好FAT表,每个文件的最后一簇用FFFF标识。 之后开始修改目录表,首先找到目录表,找到未使用的,然后将这个文件的内容写进去,注意,源代码没有写入创建时间,这里自行修改。

  15. 之后需要将FAT表写入到优盘两次,修改源代码中WriteFat的计算。之后需要将FAT表写入到优盘两次,修改源代码中WriteFat的计算。

  16. 重新编译执行ls,由于之前的错误FAT表的路径,所以重新格式化一下data文件。使用命令msfs.msdos data • 可以看到,虽然ls命令可以看到, 但是文件夹中还是找不到,说明 还有地方没弄对。

  17. 5.后续改进 • 由于要使这些基本命令工作正确,还要进行很大改动,每个人的改动方式可能不一样,所以大家自行完成,不清楚FAT的原理可以上网进行搜索。确定自己是否改对的方式就是在真实的文件夹中进行检验。

  18. 6.提高要求 Step A • 1.增加 创建目录 和 删除目录 的功能,若目录不为空,删除失败,给出提示。 • 2.改进 cd 函数,增加绝对路径和多级路径。 • 3.改进 cf函数,使其可以向文件中写入实际内容,并根据写入的内容计算文件的大小。 • 4.所有功能均可以和图形界面中的操作替换使用。(即保证其正确) Step B Step C Step D

More Related