2016-11-02 52 views
0

定義: 設備文件是程序和設備驅動程序之間的接口的。內核中有設備驅動程序;程序(應用程序)在用戶空間中。程序可以在內核中訪問驅動程序的方式是通過適當的設備專用文件。命名管道是否有相應的設備驅動程序?

命名管道作爲設備專用文件存在於文件系統中。

我的問題:

我命名管道的情況下,如果它是一個設備文件名,然後(通過定義)設備文件是在內核空間中的一些設備驅動程序的接口。內核空間中是否存在相應的設備驅動程序

因爲,我沒有看到下方

$ ls -l MYFIFO 
     prw-r--r-- 1 root  root   0 Dec 14 22:15 MYFIFO| 
+0

@moooeeeep不相關但已訪問的鏈接。事實上,我的查詢中的定義來自這些鏈接。檢查幻燈片32 [這裏](https://www.youtube.com/watch?v=2DrjQBL5FMU)。在文件類型中,Pipe與字符/塊設備文件不同。 'ls -l MYFIFO'不給出主要/次要號碼 – overexchange

+2

FIFO(命名管道)的設備類型與塊設備或字符設備不同的事實並不意味着沒有用於設備驅動程序的設備驅動程序它 - 至少,如果將'設備驅動程序'解釋爲'內核中的代碼,以確保被訪問的設備的正確行爲',則不是這樣。普通文件與塊和字符設備也不同,但內核中肯定有設備驅動程序(和文件系統管理代碼)以使它們按預期工作。普通文件不會暴露主要/次要數字。 –

+0

@JonathanLeffler如果有一個命名管道的設備驅動程序,那我爲什麼看不到'ls -l MYFIFO'上的主要/次要編號? – overexchange

回答

1

讓我們界定「仁」爲2個類別的東西主要/次要號碼 - 「核心服務」(如物理內存管理,調度等),和那麼「非核心服務」(並非總是存在的東西,比如設備驅動程序,文件系統等 - 例如ext2可能不存在,因爲您使用的是RieserFS)。 請注意,這已經限於特定類型的內核(例如,單片內核而不是微內核)。

允許將「設備驅動程序」定義爲位於一個抽象(由OS /內核設計者確定的內核的設備驅動程序API)與另一個抽象(由相應設備提供的硬件接口,由硬件設計者/製造商確定)。

對於幾乎所有的內核,「核心服務」之一是IPC(進程間通信) - 進程間通信的一些方式。對於許多內核,IPC有多種不同形式(共享內存,消息,信號等)。管道只是IPC的另一種形式。

大多數管道沒有名稱 - 只是得到某種不透明的句柄(例如文件描述符)。命名管道與普通管道相同;不同之處在於將名稱與管道關聯,以便其他進程可以從「已知」名稱找到不透明句柄。

基於以上所有;命名管道沒有設備驅動程序(並且是「核心服務」,因此甚至與設備驅動程序不在同一類別中)。

但是,「基於以上所有」意思是「根據我編制的定義」。這裏真正的問題是,如何定義任何術語並沒有真正的共識。這就是爲什麼好書(以及良好的OS文檔)會明確定義這些東西的原因。這也是爲什麼讀過這個答案的人中有一半會不同意(因爲他們以不同的方式定義諸如「設備驅動程序」之類的東西)。

+0

[Here](http://tldp.org/LDP/lpg/node16.html#SECTION00731000000000000000)它說,命名管道作爲設備文件存在於文件系統中。這是不是說有相應的設備驅動程序?或者這個設備文件只是爲IPC而做的,僅此而已? – overexchange

+0

@overxchange:這意味着沒有相應的設備驅動程序(並且「設備文件」只是用來將其標記爲特殊的,並不意味着有驅動程序)。並有一個「命名管道驅動程序」;並且無論在命名管道的另一端是什麼「驅動程序」(即使它是用戶空間的東西)。它意味着所有這些互相排斥的事物同時出現(像我這樣定義「設備驅動程序」的人會認爲是一回事,而以不同方式定義「設備驅動程序」的其他人會想到不同的事情,並且沒有人是對錯,因爲沒有共識)。 – Brendan

相關問題