哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32

L31 目录与文件系统

  • file system
  • 磁盘是一颗目录树,每个目录下一堆文件
  • 文件系统,抽象整个磁盘(第四层抽象)

  • 哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32

  • 故事从多个文件开始
  • 所有文件放在一层(大集合)--集合划分:分治处理
  • 引入目录树
  • 目录形成目录树
    哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32

  • 实现目录成为关键问题
  • 根据树状结构查找文件目录路径,得到文件FCB的映射
  • 如果存放目录下的所有文件的FCB吗?需要逐个匹配,这样查找效率低,而且需要加载到内存中才进行匹配;而且目录下很多文件都是多余的
  • 这样目录下应该存放什么?使系统效率更高
    哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32
  • 目录的实现,要使整个系统自举,还需要存一些信息
  • 引导块大小固定,超级块决定了两个位图的信息,确定根目录的开始地址
    哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32
  • 完成全部映射下的磁盘使用
  • read的时候利用open的inode信息

  • 4层抽象现在明确了!!!

  • 总结一下磁盘的使用:多进程需要读写→通过文件系统(第四层抽象)目录解析找到test.c文件,根据文件(第三层抽象)的FCB得到所需位置的盘块号→盘块号写入请求队列排队(第二层抽象)进行电梯算法→磁盘驱动根据盘块号(第一层抽象)算出C H S→相应扇区读写
    哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32

 

L32 目录解析代码的实现

  • directory resolution
  • open解析
    哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32
  • get_dir完成真实的目录解析
  • find_entry找根目录下目录信息
    哈工大*军操作系统 —(四)设备驱动与文件系统—目录与文件系统L31.L32
  • FCB存放了盘块的索引。