linux設備驅動程序學習筆記(一)

第一章       設備驅動程序簡介

1.區分機制和策略是Unix設計背後隱含的最好思想之一。大多數編程問題實際上都可以分爲兩部分:“需要提供什麼功能”(機制)和“如何使用這些功能”(策略)。如果這兩個問題由程序的不同部分來處理,或者甚至由不同的程序來處理,則這個軟件包更易開發,也更容易根據需要來調整。驅動程序同樣存在機制和策略的分離問題。例如,軟驅的驅動程序不帶策略,它的作用是將磁盤表示爲一個連續的數據庫陣列。系統高層提供策略,比如誰有權訪問軟盤驅動器,是直接訪問驅動器還是通過文件系統,以及用戶是否可以在驅動器上掛載文件系統等等。既然不同的環境通常需要不同的方式來使用硬件,我們應當儘可能做到讓驅動程序不帶策略。

2.不帶策略的驅動程序包括一些典型的特徵:同時支持同步和異步操作、驅動程序能夠被多次打開、充分利用硬件特性,以及不具備用來“簡化任務”的或提供與策略相關的軟件層等。實際上,不帶策略是軟件設計者的一個共同目標。

3.linux系統將設備分成三種基本類型:

  • 字符設備:字符設備是個能夠像字節流(類似文件)一樣被訪問的設備,由字符設備驅動程序來實現這種特性。字符設備驅動程序至少要實現open、close、read、write系統調用。字符設備可以通過文件系統節點來訪問,比如/dev/tty1和/dev/lp0等,這些設備文件和普通文件的唯一差別在於對普通文件的訪問可以前後移動訪問位置,而大多數字符設備是一個只能順序訪問的數據通道。
  • 塊設備:塊設備也是通過/dev目錄下的文件系統節點來訪問。在大多數Unix系統中,進行I/O操作時塊設備每次只能傳輸一個或多個完整的塊,而每塊包含512(或2的更高次冪字節的數據)字節。
  • 網絡接口: 任何網絡事物都經過一個網絡接口形成,即一個能夠和其他主機交換數據的設備。通常,接口是一個硬件設備,但也可能是一個純軟件設備,比如迴環(loopback)接口。網絡接口由內核中的網絡子系統驅動,負責發送和接收數據包

4.除了設備驅動程序外,內核中其他一些功能也都模塊化了。一個常見的例子是文件系統。一個文件系統類型決定了如何在塊設備上組織數據,以表示目錄和文件形成的樹。文件系統不是設備驅動程序,因爲沒有任何實際物理設備同這種信息組織方式相關聯。相反,文件系統類型是個軟件驅動程序,它將底層數據結構映射到高層數據結構,決定文件名可以有多長以及在目錄項中存儲文件的哪些信息等等。

5.內核功能劃分,Unix系統支持多個進程的併發運行,每個進程都請求系統資源,比如運算、內存、網絡連接或其他一些資源等。

  • 進程管理:進程管理功能負責創建和銷燬進程,並處理它們和外部世界之間的連接(輸入和輸出)。不同進程之間的通信是整個系統的基本功能,因此也由內核處理。概括來說,內核進程管理活動就是在單個或多個CPU上實現了多個進程的抽象。
  • 內存管理:內存是計算機的主要資源之一,內存在有限的可用資源之上爲每個進程都創建了一個虛擬地址空間。
  • 文件系統:Unix中的每個對象幾乎都可以當做文件來看待,內核在沒有結構的硬件上構造結構化的文件系統。
  • 設備控制:幾乎每個系統操作最終都會映射到物理設備上。除了處理器,內存以及其他很有限的幾個對象外,所有設備控制操作都由與被控制設備相關的代碼來完成,這段代碼就叫做驅動程序。內核必須爲系統中的每件外設嵌入相應的驅動程序,這包括硬件驅動器、鍵盤、磁帶驅動器等。
  • 網絡功能:網絡功能也必須有操作系統來管理,因爲大部分網絡操作和具體進程無關:數據包的傳入是異步事件。在某個進程處理這些數據包之前必須收集、標識和分發這些數據包。系統負責在應用程序和網絡接口之間傳遞數據包,並根據網絡活動控制程序的執行。另外,所有的路由和地址解析問題都由內核處理。
發佈了25 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章