【问题标题】:What component of an OS implement device files?操作系统的哪个组件实现设备文件?
【发布时间】:2016-03-18 15:04:14
【问题描述】:

设备的设备文件(例如/dev/sda1)是否由操作系统(更具体地说,Linux 或类 Unix 操作系统)内的某些组件实现?

设备的设备文件是否由操作系统的 IO 系统的以下任一组件实现:

  • “独立于设备的操作系统软件”,
  • “设备驱动程序”,或
  • 操作系统中的其他内容?

参见 Tanenbaum 的 Modern OS 对 I/O 软件系统各层的草图,其中操作系统由中间三层组成:

了解到设备文件属于设备驱动提供的接口,所以我认为设备文件是由设备文件实现的。

但设备文件旨在允许用户以统一的方式将不同的设备视为文件系统中的文件。这让我认为设备文件属于操作系统最外层组件提供的接口,根据草图是“与设备无关的操作系统软件”。

所以我不确定。

【问题讨论】:

  • 由文件系统和设备驱动程序实现。 linux kernel wikipage 有更多相关的解释和数据
  • 谢谢。 (1)在设备文件的实现中,文件系统是不是在设备驱动层之上的一层? (2) “设备无关的OS软件”不实现设备文件是否正确?
  • 我不确定Tanenbaum 书中的所有细节是否完全适用于每个操作系统(尤其是Linux)。如果您想了解 Linux 内核,请阅读专门针对它的材料(有很多关于 Linux 内核的好书和网站)。所以你的问题可能没有任何意义(对于 Linux)
  • 我在 (1) 中的问题怎么样?你知道 Linux IO 软件系统的草图,它明确地显示了设备文件的实现位置吗?
  • 所有操作都通过虚拟文件系统。可以在/fs/read_write.c 找到它的部分实现。阅读代码,您可以发现每个文件都有与之关联的操作,这些操作是由设备驱动程序或文件系统初始化的。这些操作由 VFS 中的通用函数调用。

标签: linux file operating-system device device-driver


【解决方案1】:

据我所知,文件是在 C 库中定义的,并且从未出现在内核代码中。另一方面,结构文件是从未出现在用户程序中的内核结构。 文件结构代表一个打开的文件。 (它不特定于设备驱动程序;系统中的每个打开的文件在内核空间中都有一个关联的结构文件。)它由内核在“打开”时创建,并传递给对该文件进行操作的任何函数,直到最后一个“关闭”。在文件的所有实例都关闭后,内核释放数据结构。 所以就像你要在设备上执行某些操作,它是由操作系统通过文件结构提供的,它不像 os 内部的任何实现。 首先,您必须对设备驱动程序和内核有一个清晰的认识,如果可能的话,还要了解文件描述符:) 您可以找到大量关于 Linux 内核和设备驱动程序的开源文献,浏览它们并从中获得乐趣。 祝你好运

【讨论】:

    猜你喜欢
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多