找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6994|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

從驅(qū)動(dòng)編寫(xiě)角度看Windows 系統(tǒng)的層次架構(gòu)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90014 發(fā)表于 2015-9-13 16:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

Windows 的基本驅(qū)動(dòng)架構(gòu)
這里是一個(gè)基本的Windows 系統(tǒng)的架構(gòu),和一般對(duì)操作系統(tǒng)的架構(gòu)的介紹稍微有點(diǎn)不同的是,對(duì)于系統(tǒng)底層做了分解。在硬件抽象層(HAL)上的系統(tǒng)核心處,標(biāo)示了幾個(gè)核心構(gòu)件,如文件系統(tǒng)驅(qū)動(dòng),可輸出的驅(qū)動(dòng)例程及核心態(tài)的驅(qū)動(dòng)(KMD)。而用戶態(tài)的驅(qū)動(dòng)程序則劃分在應(yīng)用程序?qū)用。并不是所有的?qū)動(dòng)程序都屬于系統(tǒng)核心層,這樣就可以降低核心崩潰的風(fēng)險(xiǎn)。

用戶態(tài)驅(qū)動(dòng)和普通的應(yīng)用程序一樣,以普通權(quán)限運(yùn)行,只能通過(guò)Windows API進(jìn)入與底層硬件打交道。而核心態(tài)的驅(qū)動(dòng)則是操作系統(tǒng)構(gòu)成的一部分,系統(tǒng)對(duì)其數(shù)據(jù)不做完整性檢查,則可能會(huì)導(dǎo)致系統(tǒng)崩潰。并且處于核心態(tài)的驅(qū)動(dòng)程序難于調(diào)試。
以Xp系統(tǒng)中的打印機(jī)驅(qū)動(dòng)程序?yàn)槔,分為用戶界面部分和設(shè)備渲染部分。用戶界面部分如選擇紙張大小,設(shè)置是否雙面打印等,都是調(diào)用一般的Windows API,和普通應(yīng)用程序一樣工作。而對(duì)于實(shí)際打印機(jī)控制的設(shè)備渲染部分,則處于核心態(tài)工作。用戶界面部分通過(guò)系統(tǒng)調(diào)用的形式對(duì)其進(jìn)行控制(DeviceIoControl?),從而完成打印工作。
注:對(duì)于Vista以后的系統(tǒng),渲染部分也在用戶態(tài)工作。

驅(qū)動(dòng)的層次結(jié)構(gòu):



  • 應(yīng)用程序處于驅(qū)動(dòng)棧的頂層,處理用戶和其他應(yīng)用程序的請(qǐng)求,并且調(diào)用Win32 API或者用戶態(tài)驅(qū)動(dòng)客戶端所暴露的例程。
  • 用戶態(tài)客戶端驅(qū)動(dòng)處理來(lái)自應(yīng)用程序或Win32API的請(qǐng)求。對(duì)于需要核心態(tài)才能完成的服務(wù),則調(diào)用Win32API,通過(guò)核心態(tài)驅(qū)動(dòng)或支持例程完成該請(qǐng)求。這個(gè)驅(qū)動(dòng)通常通過(guò)DLL方式實(shí)現(xiàn)。打印機(jī)驅(qū)動(dòng)通常由很多操作是需要用戶態(tài)工作,所以會(huì)工作于用戶態(tài)。而存儲(chǔ)設(shè)備,網(wǎng)絡(luò)和輸入設(shè)備則不需要這樣。
  • 核心態(tài)的客戶端驅(qū)動(dòng)完成的工作與用戶態(tài)類(lèi)似,只是完成無(wú)法在用戶態(tài)完成的操作。
  • 設(shè)備類(lèi)和迷你類(lèi)驅(qū)動(dòng)對(duì)提供設(shè)備支持的批量傳輸。類(lèi)驅(qū)動(dòng)提供特定類(lèi)的設(shè)備中系統(tǒng)所需的并且與硬件獨(dú)立的支持。一般也是有MS提供。迷你驅(qū)動(dòng)提供特定類(lèi)中特定設(shè)備的操作。如電池類(lèi)驅(qū)動(dòng)提供了所有電池的通用操作,而一個(gè)UPS設(shè)備的迷你類(lèi)驅(qū)動(dòng)則處理這個(gè)設(shè)備的特殊操作。一般由硬件供應(yīng)商提供。
  • 對(duì)應(yīng)于端口驅(qū)動(dòng) (對(duì)于一些設(shè)備,是宿主控制器或宿主適配器驅(qū)動(dòng)) 支持下層端口,集線器,或所連接的物理設(shè)備的I/O操作。是否具有此類(lèi)驅(qū)動(dòng),取決于設(shè)備類(lèi)型以及它連接的總線類(lèi)型。 存儲(chǔ)設(shè)備的全部驅(qū)動(dòng)棧都有一個(gè)端口驅(qū)動(dòng)。例如,SCSI端口驅(qū)動(dòng)提供SCSI總線上的I/O。
    對(duì)于 USB 設(shè)備,集線器和宿主控制器的驅(qū)動(dòng)共同完成端口驅(qū)動(dòng)工作。它們處理USB設(shè)備以及總線自己的I/O操作。
    相應(yīng)的微端口驅(qū)動(dòng)處理與設(shè)備相關(guān)的操作。對(duì)于大部分端口,端口驅(qū)動(dòng)由操作系統(tǒng)提供,而微端口驅(qū)動(dòng)則由設(shè)備供應(yīng)商提供。
  • 最底部是硬件總線驅(qū)動(dòng)。是操作系統(tǒng)的基本部分,由微軟提供,一般不需修改。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表