项目组成

  1. .
  2. ├── boot
  3. ├── kern
  4. ├── debug
  5. ├── driver
  6. ├── clock.c
  7. ├── clock.h
  8. └── ……
  9. ├── fs
  10. ├── devs
  11. ├── dev.c
  12. ├── dev\_disk0.c
  13. ├── dev.h
  14. ├── dev\_stdin.c
  15. └── dev\_stdout.c
  16. ├── file.c
  17. ├── file.h
  18. ├── fs.c
  19. ├── fs.h
  20. ├── iobuf.c
  21. ├── iobuf.h
  22. ├── sfs
  23. ├── bitmap.c
  24. ├── bitmap.h
  25. ├── sfs.c
  26. ├── sfs\_fs.c
  27. ├── sfs.h
  28. ├── sfs\_inode.c
  29. ├── sfs\_io.c
  30. └── sfs\_lock.c
  31. ├── swap
  32. ├── swapfs.c
  33. └── swapfs.h
  34. ├── sysfile.c
  35. ├── sysfile.h
  36. └── vfs
  37. ├── inode.c
  38. ├── inode.h
  39. ├── vfs.c
  40. ├── vfsdev.c
  41. ├── vfsfile.c
  42. ├── vfs.h
  43. ├── vfslookup.c
  44. └── vfspath.c
  45. ├── init
  46. ├── libs
  47. ├── stdio.c
  48. ├── string.c
  49. └── ……
  50. ├── mm
  51. ├── vmm.c
  52. └── vmm.h
  53. ├── process
  54. ├── proc.c
  55. ├── proc.h
  56. └── ……
  57. ├── schedule
  58. ├── sync
  59. ├── syscall
  60. ├── syscall.c
  61. └── ……
  62. └── trap
  63. ├── trap.c
  64. └── ……
  65. ├── libs
  66. ├── tools
  67. ├── mksfs.c
  68. └── ……
  69. └── user
  70. ├── badarg.c
  71. ├── badsegment.c
  72. ├── divzero.c
  73. ├── exit.c
  74. ├── faultread.c
  75. ├── faultreadkernel.c
  76. ├── forktest.c
  77. ├── forktree.c
  78. ├── hello.c
  79. ├── libs
  80. ├── dir.c
  81. ├── dir.h
  82. ├── file.c
  83. ├── file.h
  84. ├── initcode.S
  85. ├── lock.h
  86. ├── stdio.c
  87. ├── syscall.c
  88. ├── syscall.h
  89. ├── ulib.c
  90. ├── ulib.h
  91. └── umain.c
  92. ├── ls.c
  93. ├── sh.c
  94. └── ……

本次实验主要是理解kern/fs目录中的部分文件,并可用user/*.c测试所实现的Simple
FS文件系统是否能够正常工作。本次实验涉及到的代码包括:

  • 文件系统测试用例: user/*.c:对文件系统的实现进行测试的测试用例;

  • 通用文件系统接口
    n user/libs/file.[ch]|dir.[ch]|syscall.c:与文件系统操作相关的用户库实行;
    n kern/syscall.[ch]:文件中包含文件系统相关的内核态系统调用接口
    n kern/fs/sysfile.[ch]|file.[ch]:通用文件系统接口和实行

  • 文件系统抽象层-VFS
    n kern/fs/vfs/*.[ch]:虚拟文件系统接口与实现

  • Simple FS文件系统
    n kern/fs/sfs/*.[ch]:SimpleFS文件系统实现

  • 文件系统的硬盘IO接口
    n kern/fs/devs/dev.[ch]|dev_disk0.c:disk0硬盘设备提供给文件系统的I/O访问接口和实现

  • 辅助工具
    n tools/mksfs.c:创建一个Simple FS文件系统格式的硬盘镜像。(理解此文件的实现细节对理解SFS文件系统很有帮助)

  • 对内核其它模块的扩充
    n kern/process/proc.[ch]:增加成员变量 struct fs_struct *fs_struct,用于支持进程对文件的访问;重写了do_execve load_icode等函数以支持执行文件系统中的文件。
    n kern/init/init.c:增加调用初始化文件系统的函数fs_init。