定义: 设备文件是程序和设备驱动程序之间的接口。 设备驱动程序位于内核中;程序(应用程序)位于用户空间中。程序可以通过适当的设备专用文件访问内核中的驱动程序。
命名管道作为文件系统中的设备专用文件存在。
我的问题:
我是命名管道的情况,如果它是设备专用文件,那么(根据定义)设备文件是内核空间中某些设备驱动程序的接口。内核空间中是否存在相应的设备驱动程序?
因为,我看不到
以下的主要/次要数字$ ls -l MYFIFO
prw-r--r-- 1 root root 0 Dec 14 22:15 MYFIFO|
答案 0 :(得分:1)
让我们定义"内核"作为两类东西 - "核心服务" (如物理内存管理,调度程序等),然后是"非核心服务" (并不总是存在的东西,如设备驱动程序,文件系统等 - 例如ext2可能不存在,因为您正在使用RieserFS)。 请注意,这已经限于特定类型的内核(例如单片内核而不是微内核)。
让我们定义"设备驱动程序"作为一段代码,它位于一个抽象(内核的设备驱动程序API,由OS /内核设计者确定)和另一个抽象(由相应设备提供的硬件接口,由硬件设计人员/制造商确定)之间)。
对于几乎所有的内核,其中一个核心服务"是IPC(进程间通信) - 进程通信的某种方式。对于许多内核,有多种不同形式的IPC(共享内存,消息,信号等)。管道只是IPC的另一种形式。
大多数管道都没有名称 - 您只是获得某种不透明的句柄(例如文件描述符)。命名管道与普通管道相同;除了您将名称与管道关联,以便其他进程可以从"已知的"中找到不透明的句柄。名。
基于以上所有内容;命名管道没有设备驱动程序(并且是"核心服务"因此甚至与设备驱动程序不在同一类别中)。
然而,"基于以上所有"根据我制定的定义"表示"。这里真正的问题是对于如何定义任何术语没有真正的共识。这就是好书(以及优秀的操作系统文档)将明确定义这些内容的原因。这也是为什么阅读这个答案的人中有一半会不同意(因为他们定义了像#34;设备驱动程序和#34;不同的东西)。