官术网_书友最值得收藏!

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

在1.2節中我們看到一個清晰的設備驅動,它直接運行在硬件之上,不與任何操作系統關聯。當系統包含操作系統時,設備驅動會變得怎樣呢?

首先,無操作系統時設備驅動的硬件操作工作仍然是必不可少的,沒有這一部分,驅動不可能與硬件打交道。

其次,我們還需要將驅動融入內核。為了實現這種融合,必須在所有設備的驅動中設計面向操作系統內核的接口,這樣的接口由操作系統規定,對一類設備而言結構一致,獨立于具體的設備。

由此可見,當系統中存在操作系統的時候,驅動變成了連接硬件和內核的橋梁。如圖1.4所示,操作系統的存在勢必要求設備驅動附加更多的代碼和功能,把單一的“驅使硬件設備行動”變成了操作系統內與硬件交互的模塊,它對外呈現為操作系統的API,不再給應用軟件工程師直接提供接口。

圖1.4 硬件、驅動、操作系統和應用程序的關系

那么我們要問,有了操作系統之后,驅動反而變得復雜,那要操作系統干什么?

首先,一個復雜的軟件系統需要處理多個并發的任務,沒有操作系統,想完成多任務并發是很困難的。

其次,操作系統給我們提供內存管理機制。一個典型的例子是,對于多數含MMU的32位處理器而言,Windows、Linux等操作系統可以讓每個進程都可以獨立地訪問4GB的內存空間。

上述優點似乎并沒有體現在設備驅動身上,操作系統的存在給設備驅動究竟帶來了什么實質性的好處?

簡而言之,操作系統通過給驅動制造麻煩來達到給上層應用提供便利的目的。當驅動都按照操作系統給出的獨立于設備的接口而設計時,那么,應用程序將可使用統一的系統調用接口來訪問各種設備。對于類UNIX的VxWorks、Linux等操作系統而言,當應用程序通過write()、read()等函數讀寫文件就可訪問各種字符設備和塊設備,而不論設備的具體類型和工作方式,那將是多么便利。

主站蜘蛛池模板: 朝阳县| 融水| 河源市| 阿荣旗| 平凉市| 阳曲县| 长葛市| 汉寿县| 西藏| 罗源县| 若尔盖县| 墨玉县| 桦甸市| 缙云县| 木兰县| 霍山县| 涡阳县| 邳州市| 清水河县| 荆州市| 喀什市| 呼图壁县| 西安市| 台南市| 隆子县| 赤城县| 巴楚县| 高州市| 石狮市| 竹溪县| 乌拉特中旗| 长岛县| 宝坻区| 溆浦县| 莱西市| 郑州市| 叶城县| 绥芬河市| 防城港市| 萝北县| 偃师市|