wordpress Firefox 编程 程序员 google linux Android Ubuntu 微软 centos apache nginx 云计算 java Python shell php Windows 开源 mysql

《Linux設備驅動開發詳解 A》一一1.3 有操作系統時的設備驅動

1.3 有操作系統時的設備驅動

在1.2節中我們看到一個清晰的設備驅動,它直接運行在硬件之上,不與任何操作系統關聯。當系統包含操作系統時,設備驅動會變得怎樣呢?
首先,無操作系統時設備驅動的硬件操作工作仍然是必不可少的,沒有這一部分,驅動不可能與硬件打交道。
其次,我們還需要將驅動融入內核。為了實現這種融合,必須在所有設備的驅動中設計面向操作系統內核的接口,這樣的接口由操作系統規定,對一類設備而言結構一致,獨立於具體的設備。
由此可見,當系統中存在操作系統的時候,驅動變成了連接硬件和內核的橋梁。如
圖1.4所示,操作系統的存在勢必要求設備驅動附加更多的代碼和功能,把單一的“驅使硬件設備行動”變成了操作系統內與硬件交互的模塊,它對外呈現為操作系統的API,不再給應用軟件工程師直接提供接口。
那麽我們要問,有了操作系統之後,驅動反而變得復雜,那要操作系統幹什麽?
首先,一個復雜的軟件系統需要處理多個並發的任務,沒有操作系統,想完成多任務並發是很困難的。
其次,操作系統給我們提供內存管理機制。一個典型的例子是,對於多數含MMU的32位處理器而言,Windows、Linux等操作系統可以讓每個進程都可以獨立地訪問4GB的內存空間。
上述優點似乎並沒有體現在設備驅動身上,操作系統的存在給設備驅動究竟帶來了什麽實質性的好處?
簡而言之,操作系統通過給驅動制造麻煩來達到給上層應用提供便利的目的。當驅動都按照操作系統給出的獨立於設備的接口而設計時,那麽,應用程序將可使用統一的系統調用接口來訪問各種設備。對於類UNIX的VxWorks、Linux等操作系統而言,當應用程序通過write()、read()等函數讀寫文件就可訪問各種字符設備和塊設備,而不論設備的具體類型和工作方式,那將是多麽便利。

延伸阅读

    评论