Unix/Linux設備和文件

設備和文件

設備就像文件 文件包含數據、具有屬性、通過目錄中的文件名被標識,支持讀寫。 同樣的,在unix/linux中對各種外部設備的的操作也形同對文件的操作。

  • 以聲卡爲例,它是作爲物理信號和數據流的中轉站而存在的。
    即是說,聲信號對應的電信號通過聲卡轉換成數據流,而系統向聲卡寫入數據流時,聲卡又能將數據流轉換成電信號通過音響設備輸出爲聲信號。

聲<==>電<=(聲卡)=>數據流

事實上,在unix中所有的外部設備和文件有着幾乎一致的特徵。設備也像文件一樣擁有i節點號和文件名以及相應的所有者和權限。
這樣說來,我們可以把設備和文件看作同樣的對象。

雖然我們可以在任意目錄下創建設備文件,
但有一個默認的設備文件位置在/dev,在/dev目錄下我們能夠看到常用的鼠標(mouse)、終端(tty)、打印機(lp)等設備文件,我們通過對設備文件中的讀寫獲取/控制設備的信息/操作。


向設備寫入信息

  • 假設我們在終端tty2(雖然終端實際上包含顯示設備和輸入設備,但在這裏我們特指屏幕)

tty2對應的設備文件是/dev/tty2
執行命令 cp t.t /dev/tty2,把t.t的內容複製到/dev/tty2中,發現屏幕上顯示出t.t的內容。

也就不難理解,屏幕上顯示的內容來源於對應的設備文件。同樣的,unix通過向聲卡文件寫入聲音二進制流來運行一個聲音文件,把需要打印的內容寫入到打印機的設備文件完成打印任務。當然,具體的動作是依靠相應的設備驅動軟件完成的,但就係統而言,只是對設備文件進行讀寫,十分方便。


設備驅動程序

  • 設備文件也有不同於一般文件的地方。

設備文件不是信息的容器,而是內核程序的鏈接。通過訪問設備文件調用內核的設備驅動程序完成設備的功能。
就是說,設備文件的i節點中沒有塊的位置信息,而是指向內核程序的指針。

這不難理解,單就完成我們希望的外部設備功能而言,設備沒有必要存儲太多的信息,只需要調用合適的程序處理對應的數據即可,那個程序也就是所謂的設備驅動程序。
例如我們一般不關心每天點擊了多少次鼠標,而只關心每一次點擊鼠標時希望系統做出的反應。
當然了,不排除真有關心前者的人,那他完全可以編寫程序實現那個功能。


主設備號和從設備號

  • 在瞭解了設備驅動程序之後,不禁要問怎麼確定設備調用的是哪個程序。

回顧文件名和文件存儲區域的對應,i節點作爲他們的中介存在,每個文件名都有對應的i節點號,i節點包含着文件內容的存儲位置。而設備文件和內核驅動程序之間也有類似關係。

使用ls -l 命令查看設備文件屬性的時候,在文件大小的位置出現一個逗號間隔的數對 類似 4,2
4是主設備號,對應着設備進程表中驅動程序的編號。
2是從設備號,是驅動程序接受的參數,用於確定是哪一個終端。

而終端的區分是重要的,登錄系統的用戶會被分配一個終端,若不對用戶的終端加以標記區分,結果將造成各個用戶之間的讀寫混亂,那是使用者和維護者都不想看見的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章