標(biāo)題:
從驅(qū)動編寫角度看Windows 系統(tǒng)的層次架構(gòu)
[打印本頁]
作者:
jialinx
時間:
2015-9-13 16:50
標(biāo)題:
從驅(qū)動編寫角度看Windows 系統(tǒng)的層次架構(gòu)
Windows 的基本驅(qū)動架構(gòu)
這里是一個基本的Windows 系統(tǒng)的架構(gòu),和一般對操作系統(tǒng)的架構(gòu)的介紹稍微有點不同的是,對于系統(tǒng)底層做了分解。在硬件抽象層(HAL)上的系統(tǒng)核心處,標(biāo)示了幾個核心構(gòu)件,如文件系統(tǒng)驅(qū)動,可輸出的驅(qū)動例程及核心態(tài)的驅(qū)動(KMD)。而用戶態(tài)的驅(qū)動程序則劃分在應(yīng)用程序?qū)用。并不是所有的?qū)動程序都屬于系統(tǒng)核心層,這樣就可以降低核心崩潰的風(fēng)險。
用戶態(tài)驅(qū)動和普通的應(yīng)用程序一樣,以普通權(quán)限運行,只能通過Windows API進(jìn)入與底層硬件打交道。而核心態(tài)的驅(qū)動則是操作系統(tǒng)構(gòu)成的一部分,系統(tǒng)對其數(shù)據(jù)不做完整性檢查,則可能會導(dǎo)致系統(tǒng)崩潰。并且處于核心態(tài)的驅(qū)動程序難于調(diào)試。
以Xp系統(tǒng)中的打印機驅(qū)動程序為例,分為用戶界面部分和設(shè)備渲染部分。用戶界面部分如選擇紙張大小,設(shè)置是否雙面打印等,都是調(diào)用一般的Windows API,和普通應(yīng)用程序一樣工作。而對于實際打印機控制的設(shè)備渲染部分,則處于核心態(tài)工作。用戶界面部分通過系統(tǒng)調(diào)用的形式對其進(jìn)行控制(DeviceIoControl?),從而完成打印工作。
注:對于Vista以后的系統(tǒng),渲染部分也在用戶態(tài)工作。
驅(qū)動的層次結(jié)構(gòu):
應(yīng)用程序處于驅(qū)動棧的頂層,處理用戶和其他應(yīng)用程序的請求,并且調(diào)用Win32 API或者用戶態(tài)驅(qū)動客戶端所暴露的例程。
用戶態(tài)客戶端驅(qū)動處理來自應(yīng)用程序或Win32API的請求。對于需要核心態(tài)才能完成的服務(wù),則調(diào)用Win32API,通過核心態(tài)驅(qū)動或支持例程完成該請求。這個驅(qū)動通常通過DLL方式實現(xiàn)。打印機驅(qū)動通常由很多操作是需要用戶態(tài)工作,所以會工作于用戶態(tài)。而存儲設(shè)備,網(wǎng)絡(luò)和輸入設(shè)備則不需要這樣。
核心態(tài)的客戶端驅(qū)動完成的工作與用戶態(tài)類似,只是完成無法在用戶態(tài)完成的操作。
設(shè)備類和迷你類驅(qū)動對提供設(shè)備支持的批量傳輸。類驅(qū)動提供特定類的設(shè)備中系統(tǒng)所需的并且與硬件獨立的支持。一般也是有MS提供。迷你驅(qū)動提供特定類中特定設(shè)備的操作。如電池類驅(qū)動提供了所有電池的通用操作,而一個UPS設(shè)備的迷你類驅(qū)動則處理這個設(shè)備的特殊操作。一般由硬件供應(yīng)商提供。
對應(yīng)于端口驅(qū)動 (對于一些設(shè)備,是宿主控制器或宿主適配器驅(qū)動) 支持下層端口,集線器,或所連接的物理設(shè)備的I/O操作。是否具有此類驅(qū)動,取決于設(shè)備類型以及它連接的總線類型。 存儲設(shè)備的全部驅(qū)動棧都有一個端口驅(qū)動。例如,SCSI端口驅(qū)動提供SCSI總線上的I/O。
對于 USB 設(shè)備,集線器和宿主控制器的驅(qū)動共同完成端口驅(qū)動工作。它們處理USB設(shè)備以及總線自己的I/O操作。
相應(yīng)的微端口驅(qū)動處理與設(shè)備相關(guān)的操作。對于大部分端口,端口驅(qū)動由操作系統(tǒng)提供,而微端口驅(qū)動則由設(shè)備供應(yīng)商提供。
最底部是硬件總線驅(qū)動。是操作系統(tǒng)的基本部分,由微軟提供,一般不需修改。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1