定义:设备文件是程序和设备驱动程序之间的接口。设备驱动程序位于内核中;程序(应用程序)位于用户空间中。程序访问内核中的驱动程序的方式是通过适当的设备特殊文件。
命名管道作为设备特殊文件存在于文件系统中。
我的问题是:
在命名管道的情况下,如果它是一个设备特殊文件,那么(根据定义)设备文件就是内核空间中某个设备驱动程序的接口。相应的设备驱动程序是否存在于内核空间?
因为,我看不到下面的大数/小数。
$ ls -l MYFIFO
prw-r--r-- 1 root root 0 Dec 14 22:15 MYFIFO|发布于 2016-11-02 15:13:23
让我们将“内核”定义为两类事物--“核心服务”(如物理内存管理、调度器等),然后定义为“非核心服务”(不总是存在的东西,如设备驱动程序、文件系统等--例如ext2可能不存在,因为您使用的是RieserFS )。请注意,这已经限于特定类型的内核(例如,单块内核而不是微内核)。
让我们将“设备驱动程序”定义为一段代码,它位于一个抽象(内核的设备驱动程序API,由OS/内核设计器确定)和另一个抽象(由相应的设备提供的硬件接口,由硬件设计器/制造商确定)之间。
对于几乎所有内核来说,“核心服务”之一是IPC (进程间通信)--进程通信的某种方式。对于许多内核来说,IPC有多种不同的形式(共享内存、消息、信号等)。管道只是IPC的另一种形式。
大多数管道没有名称--您只是得到某种不透明的句柄(例如文件描述符)。命名管道与普通管道相同;只是将名称与管道关联,以便其他进程可以从“已知”名称中找到不透明句柄。
基于以上所有内容;命名管道没有设备驱动程序(并且是“核心服务”,因此与设备驱动程序不属于同一类别)。
然而,“基于以上所有”的意思是“基于我所编的定义”。这里真正的问题是,对于如何定义任何术语,并没有真正的共识。这就是为什么好书(和好的OS文档)将显式定义这些东西的原因。这也是为什么大约一半读过这个答案的人会不同意(因为他们对“设备驱动程序”的定义不同)。
https://stackoverflow.com/questions/40381500
复制相似问题