Xv6内核分析(十八)

gewenbin
gewenbin
gewenbin
188
文章
15
评论
2020年12月20日18:55:30 评论 503

目录实现分析

1. Xv6目录简介

在xv6中目录的也是用inode来表示的,只是inode中的type字段为T_DIR。普通文件的数据块中保存的是文件的内容,但是目录inode的数据块中保存的是一系列的struct dirent数据结构。一个struct dirent用来表示一个文件,其内容如下:

Xv6内核分析(十八)

inum表示文件的inode编号,name表示文件的名字。struct dirent可以理解为一个目录条目。

2. namecmp函数

Xv6内核分析(十八)

这个接口很简单,就是比较两个字符串是否是一致的。

3. dirlookup函数

dirlookup根据指定的文件名在目录内容中寻找同名的文件条目,并返回此条目的Inode。

Xv6内核分析(十八)

  • 通过一个循环来循环读取Inode中的内容,每次读取的大小都是struct dirent这么大。
  • 通过readi来读取一个目录条目到struct dirent变量中,如果条目中的inum为0则继续读取下一个条目。
  • 接着比较给定的名字是否和条目中的名字相同,如果相同表示找到符合条件的目录条目,然后根据条目中记录的inode编号获取此Inode(通过调用iget实现)。

4. dirlink

将一个新的目录条目写到目录inode中。

Xv6内核分析(十八)

  • 首先检查目录中是否已经有此条目,如果有的话,则调用iput检查inode的引用计数(???)。
  • 然后在目录中寻找一个空闲的目录条目。
  • 如果找到则将指定的名字和Inode编号写到条目中(通过writei接口)。

gewenbin
  • 本文由 发表于 2020年12月20日18:55:30
  • 转载请务必保留本文链接:http://www.databusworld.cn/9547.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: