天天看點

程式及程式員的責任(哲學及系統論角度)程式及程式員的責任(哲學及系統論角度)

程式及程式員的責任(哲學及系統論角度)

劉建文( http://blog.csdn.net/keminlau )

編寫驅動程式為了完成什麼任務?

編寫驅動程式是為了完成什麼任務?也就是驅動程式員的責任和任務是什麼?要回答這個問題,我們得先厘清作為驅動程式員的創作客體——驅動程式的定義。

裝置驅動程式是什麼

裝置驅動程式是什麼?首先,裝置驅動是一支計算程式,負責協助高層的應用程式與低層的硬體裝置的通信協作;其次,裝置驅動(代表CPU)必須通過計算機總 線與挂接(hook)在總線上的裝置通信。第三,裝置驅動的任務是将來自高層的進階指令轉化成低層的硬體操作指令;如有反方向的資料流,裝置驅動也負責通 知高層程式處理。

驅動程式的職責

裝置驅動程式是核心的一部分,它完成以下的功能:

  1. 對裝置初始化和釋放;
  2. 把資料從核心傳送到硬體和從硬體讀取資料;
  3. 讀取應用程式傳送 給裝置檔案的資料和回送應用程式請求的資料;
  4. 檢測和處理裝置出現的錯誤。

裝置驅動通常是硬體相關和作業系統相關的,因為從『邏輯指令』的角度看,第一,裝置驅動将高層程式的邏輯指令轉譯為硬體裝置的固有指令,是以裝置驅動是硬體相關的;第二,裝置驅動在使用記憶體時調用了作業系統的記憶體指令或其它作業系統資 源,是以裝置驅是作業系統相關的。現在的作業系統通過标準化裝置驅動與高層程式的『指令接口』後,大大簡化了高層程式與硬體通信的程式設計任務。因為有了标準 的指令接口,程式員可對硬體通信任務作完全的假設,獨立地開發高層程式的軟體邏輯部分。

在處理器、通信端口(裝置控制器)和電子線路的互聯基礎上,『驅動程式員』編寫指令程式實作『管理』和『通信』任務(KEMIN:也就是對其進行程式設計 ),幫助系統實作做 功!『管理』任務展現在驅動程式職責一和四;『通信』任務展現在職責二和三。

既然處理器、通信裝置和電子線路都已經安置好了,為什麼還需要程式指令呢?這些硬體在完成『做功』的任務缺乏了什麼東西?作個比喻,一家餐廳把所有的餐 具、廚具都準備好了還是不能『做功』營業,必須有廚師和服務員活動工作才行,可見某系統『做功』的完成還必須有軟性的可動态時間變化的元素參與。

關于做功的時間性的證據,可以從“可程式設計”一語中看出來。程式設計是編織操作過程!

既然Linux都把序列槽通信架構、部分序列槽硬體(比如uart_driver)驅動和鍊路控制子產品(比如ppp)都做出來了,我們學習序列槽通信架構,可編 程性在哪裡?有多少?

第一,直接程式設計實作高層應用(有了固化的架構的确減少了可程式設計空間,但如果可程式設計空間超出了人的控制能力之外,程式設計成了複雜度過高的工作時,架構便大有作 為);

第二,寫自己的通信架構;

通信任務的實體層面與邏輯層面

從計算機系統的實體層面看計算通信任務,系統内表現為二進制數位經總線在裝置之間流動;而從邏輯層面,數位有不同的上下文語義。從系統論的角度看,如果兩 『邏輯通信系統』已經确立,數位在兩邏輯系統邊界流動;如果其中一邏輯系統沒有完确立,甚至還不存在,那麼部分數位用來“初始化”這樣的邏輯系統。例子如作業系統從真實模式過度到虛拟模式,裝置驅動子產品一般由初始化函數與通信函數組成。另外,『邏輯通信系統』的确立需要很多狀态資訊,表現如某子系統會有相 當的『配置資料結構』駐留于記憶體。

初始化

為什麼要初始化?要了解為 什麼需要初始化,得先了解何為一個『完整的操作環境』。操作環境也是一個資訊環境,有一定約定狀态。

操作環境有邏輯高低級之分,就是因為有了這種層級差別,低層級的操作環境存在的目的往往隻是為了建構(初 始化)更高層級的操作環境,它不直接與使用者互動,使用者一般太進階。作業系統本身就是一個進階的操作環 境。

如何了解操作環境,還要完整的?約定狀态到底約定什麼狀态?

既然說是操作環境,那麼給誰操作?這必定有一個操作的主體。這個主體就是有一定邏輯評判能力的系統。由此可見,用『完整 的操作環境』解析為何計算機軟體系統需要初始化過程是不全面的。應該圍繞『系統』來詳述。不過這裡的系統的定義比較麻煩。因為計算機軟硬系統錯交了多個維 度,比如硬體的與軟體的、邏輯的與實體的、管理的與被管理的。

我們以『系統』為核心了解各 種程式設計任務。首先,『系統』是有一定的邏輯評判能力(也就是計算)的,這些能力的硬體基礎是處理器(包括低智能一點的控制器);其次,『系統』不僅是實體 的,現代計算機裡的系統更多是邏輯的,這些邏輯系統有很多預先約定狀态(這些一般儲存在主存中),是以需要初始化,是以需要配置;再次,『系統』要對外做 功必須能夠與外界的其它『系統』進行通信,是以需要尋址,是以需位址空間。

繼續閱讀