gpt4 book ai didi

linux - linux如何识别特定的文件系统来执行系统调用

转载 作者:IT王子 更新时间:2023-10-29 00:20:43 26 4
gpt4 key购买 nike

请总结一下当我尝试执行 read()/write() 系统调用时发生的事件/步骤。内核如何知道向哪个文件系统发出这些命令。

假设一个进程调用 write()。然后它将调用 sys_write()。

现在可能,因为 sys_write() 代表当前进程执行,它可以访问 struct task_struct,因此它可以访问 struct files_structstruct fs_struct 包含文件系统信息。

但之后我就看不到这个 fs_struct 如何帮助识别文件系统了。

编辑:既然 Alex 已经描述了流程......我仍然怀疑读/写是如何路由到 FS 的,因为 VFS 没有这样做,那么它一定是在其他地方发生的,另外是如何底层 block 设备,最后连接硬件协议(protocol) PCI/USB。

涉及实际数据结构的简单流程图会很有帮助

请帮忙。

最佳答案

此答案基于内核版本 4.0。我找出了一些处理 read 系统调用的代码。我建议您克隆 Linux 源代码库并按照源代码进行操作。

  1. read 的系统调用处理程序,位于 fs/read_write.c:620 被调用。它接收一个文件描述符(整数)作为参数,并调用 fdget_pos 将其转换为 struct fd
  2. fdget_pos 调用 __fdget_pos 调用 __fdget 调用 __fget_light__fget_light 使用当前进程的文件描述符表current->files 来查找与传递的文件描述符对应的struct file数。
  3. 回到系统调用处理程序,文件结构被传递给 vfs_read,位于 fs/read_write.c:478
  4. vfs_read调用__vfs_read,后者调用file->f_op->read。从这里开始,您将使用特定于文件系统的代码。

因此 VFS 并不真正费心“识别”文件所在的文件系统;它只是使用存储在其 struct file 中的“文件操作”函数指针表。当 struct file 被初始化时,它会被赋予正确的 f_op 函数指针表,该表为其文件系统实现所有特定于文件系统的操作。

关于linux - linux如何识别特定的文件系统来执行系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29224775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com