• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Impossible is nothing  
              愛過知情重醉過知酒濃   花開花謝終是空   緣份不停留像春風(fēng)來又走   女人如花花似夢
            公告
            日歷
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345
            統(tǒng)計(jì)
            • 隨筆 - 8
            • 文章 - 91
            • 評(píng)論 - 16
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(4)

            隨筆分類(4)

            隨筆檔案(8)

            文章分類(77)

            文章檔案(91)

            相冊(cè)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             
            驅(qū)動(dòng)程序在任何操作系統(tǒng)下都和系統(tǒng)內(nèi)核有著密切的關(guān)系,尤其在WIN2000下。在進(jìn)入WIN2000驅(qū)動(dòng)程序世界之前,本章先介紹驅(qū)動(dòng)程序設(shè)計(jì)原理和WIN2000構(gòu)架。
              系統(tǒng)的整體結(jié)構(gòu)

              WIN2000操作系統(tǒng)是計(jì)算機(jī)歷史上最安全的操作系統(tǒng),本節(jié)介紹WIN2000系統(tǒng)中驅(qū)動(dòng)程序設(shè)計(jì)者最關(guān)心和最感興趣的部分。

              WIN2000的設(shè)計(jì)目標(biāo)

              有趣的是,原始的NT("New Technology")概念中不包含操作系統(tǒng)環(huán)境,直到1989年第一個(gè)NT操作系統(tǒng)出現(xiàn)了很長時(shí)間后。但是它還保持著原始的設(shè)計(jì)目標(biāo):

              兼容性: 盡可能的支持現(xiàn)有的軟件和硬件 。

              穩(wěn)定性和可靠性: 操作系統(tǒng)不會(huì)因?yàn)橛脩舻恼`操作而損壞,一個(gè)用戶程序應(yīng)該不會(huì)使操作系統(tǒng)崩潰。

              可移植性: 操作系統(tǒng)應(yīng)當(dāng)可在盡可能多的當(dāng)前和未來的平臺(tái)上運(yùn)行。

              可擴(kuò)展性: 隨著時(shí)間的流逝,市場的改變,操作系統(tǒng)應(yīng)當(dāng)可以只用添加少的代碼就可以支持新的硬件和添加新的功能。

              性能:  操作系統(tǒng)應(yīng)當(dāng)盡可能大的發(fā)揮硬件的效能。

              當(dāng)然,隨著時(shí)間的流逝,操作系統(tǒng)的設(shè)計(jì)目標(biāo)也是改變的,剩下的部分介紹怎樣在設(shè)計(jì)中實(shí)現(xiàn)這些目標(biāo)。

              WIN2000的硬件特權(quán)級(jí)別

              為實(shí)現(xiàn)穩(wěn)定性和可靠性的設(shè)計(jì)目標(biāo),WIN2000的設(shè)計(jì)者使用用戶模式服務(wù)結(jié)構(gòu),用戶的程序在操作系統(tǒng)的用戶模式服務(wù)程序中運(yùn)行。

               用戶模式中,代碼被嚴(yán)格約束在對(duì)系統(tǒng)沒有損害的范圍內(nèi)。例如: 通過虛擬內(nèi)存映像,一個(gè)程序不能訪問其它程序的內(nèi)存區(qū)(兩個(gè)程序共同定義的公用內(nèi)存區(qū)除 外)。硬件I/O指令不能被執(zhí)行。所有的CPU指令(如CPU中斷)不能被執(zhí)行(在特定的特權(quán)級(jí)下)。所有的這些被阻止的操作如果想運(yùn)行,它們必須通過陷 阱門來請(qǐng)求操作系統(tǒng)內(nèi)核。

              操作系統(tǒng)內(nèi)核程序運(yùn)行在內(nèi)核模式下,它可以執(zhí)行所有有效的CPU指令,包括I/O操作,可訪問任何程序的內(nèi)存區(qū),當(dāng)然是那些沒有被翻出內(nèi)存而被存到磁盤的內(nèi)存區(qū)。

               所有的現(xiàn)代的處理器都可以工作在特權(quán)級(jí)別模式和非特權(quán)級(jí)別模式下,用戶模式工作在非特權(quán)級(jí)別模式下,內(nèi)核模式工作在特權(quán)級(jí)別模式下。而不同的平臺(tái)和 CPU執(zhí)行特權(quán)級(jí)別模式是不同的,為了達(dá)到可以在這兩個(gè)模式下運(yùn)行的目標(biāo),操作系統(tǒng)抽象了這兩個(gè)模式,操作系統(tǒng)總是使用這些抽象的代碼來在這兩個(gè)操作模式 下切換。例如: 在Intel平臺(tái)上,內(nèi)核模式使用Ring 0指令系統(tǒng),而用戶模式使用了Ring 3指令系統(tǒng)。

              我們編寫的驅(qū)動(dòng)程序是運(yùn)行在內(nèi)核模式下,我們的不正確的代碼將危及到WIN2000操作系統(tǒng)的安全,所以,我們必須格外小心我們代碼的邊界條件,以確保它們不會(huì)損壞整個(gè)操作系統(tǒng)。

              可移植性

              為了達(dá)到可移植性的目標(biāo),NT設(shè)計(jì)者選擇了軟件的分層結(jié)構(gòu)。如圖1.1所示:


            圖 1.1:WIN2000系統(tǒng)的分層結(jié)構(gòu)

              硬件抽象層(HAL)隔開了硬件平臺(tái)和操作系統(tǒng)以及驅(qū)動(dòng)程序,驅(qū)動(dòng)程序依賴硬件抽象層的代碼和宏去識(shí)別硬件的寄存器和總線,有時(shí),驅(qū)動(dòng)程序依賴I/O管理器去分享硬件資源,在以后的章節(jié)中將介紹利用硬件抽象層和其它的操作系統(tǒng)服務(wù)程序去開發(fā)設(shè)備無關(guān)的驅(qū)動(dòng)程序。

              可擴(kuò)展性

               WIN2000的內(nèi)核也負(fù)責(zé)系統(tǒng)中所有線程的調(diào)度與分配,線程是程序中最小的可獨(dú)立運(yùn)行的部分,為保持每個(gè)線程的獨(dú)立性,每個(gè)線程的設(shè)備上下文必須被保 存下來,線程的上下文由CPU寄存器狀態(tài)(包括一個(gè)獨(dú)立的堆棧和程序計(jì)數(shù)器),ID(線程ID,也叫線程標(biāo)識(shí)符),特權(quán)級(jí)別代碼,線程地址和其它線程相關(guān) 信息組成。

              調(diào)度程序決定哪一個(gè)線程何時(shí)運(yùn)行,在單處理機(jī)的環(huán)境中,一個(gè)時(shí)間只能有一個(gè)線程得到處理機(jī)的執(zhí)行。

              在多處理機(jī)的環(huán)境中,同一時(shí)刻不同的線程可能工作在不同的處理機(jī)上,是真正的并發(fā)執(zhí)行。調(diào)度程序分配時(shí)間片給各個(gè)線程,高優(yōu)先權(quán)的線程搶先占有時(shí)間片。

               操作系統(tǒng)的主要任務(wù)是調(diào)度線程,還有一些必要的工作,如: 內(nèi)存管理,進(jìn)程管理,安全管理和I/O管理。這些部分叫做執(zhí)行部件,它被作為軟件模塊(除了 I/O管理器這個(gè)重要部分),隨著時(shí)間的推移,微軟會(huì)作一些必要的增加,刪除,分離來作為改進(jìn)或折衷。WIN2000就是后來才加了活動(dòng)目錄服務(wù)。

              保持小的,干凈的內(nèi)核,外加執(zhí)行模塊是WIN2000的原則,這個(gè)原則使WIN2000經(jīng)過近十年的修改,維護(hù)依然是一個(gè)流行的操作系統(tǒng)。

              性能

              分層的軟件設(shè)計(jì)表現(xiàn)出良好的性能,NT的開發(fā)團(tuán)隊(duì)當(dāng)然也注意到了:

              到目前為止,所有的層別運(yùn)行在同一硬件模式,即內(nèi)核模式,因此,中間層的調(diào)用比處理器的調(diào)用不會(huì)多花多少時(shí)間,確實(shí),HAL常常使用宏來完成內(nèi)嵌程序的執(zhí)行。

              有助于集中精力去處理并發(fā),分配盡可能多的線程給任務(wù)的不同部分,因?yàn)樗械膱?zhí)行部分都是多線程的,幫助程序盡可能少的阻塞,處理器忙等待和中斷停機(jī)時(shí)間。

              當(dāng)用戶和系統(tǒng)線程通過驅(qū)動(dòng)程序來請(qǐng)求服務(wù)的時(shí)候,驅(qū)動(dòng)程序代碼阻塞執(zhí)行是致命的錯(cuò)誤,如果這些請(qǐng)求不能快速處理,將會(huì)導(dǎo)致設(shè)備忙或者很慢,這些請(qǐng)求將排隊(duì)等候后續(xù)處理,幸運(yùn)的是,I/O管理器使這個(gè)過程變的很容易。

              執(zhí)行部件

              執(zhí)行部件提供WIN2000操作系統(tǒng)最基本的服務(wù)(除了線程調(diào)度),它們的作用非常明顯,解釋如下:


            圖1.2 執(zhí)行部件的組成

              系統(tǒng)服務(wù)接口

              它提供從用戶模式到內(nèi)核模式的入口。它允許內(nèi)核模式代碼安全的調(diào)用操作系統(tǒng)服務(wù),依靠這個(gè)接口,從用戶模式到內(nèi)核模式可能只是簡單的一個(gè)CPU指令或者是一個(gè)存儲(chǔ)于恢復(fù)上下文開關(guān)。

              對(duì)象管理器

              WIN2000操作系統(tǒng)幾乎將所有的服務(wù)看成對(duì)象提供給用戶,例如: 用戶模式程序?yàn)榱耸咕€程同步而向操作系統(tǒng)請(qǐng)求互斥對(duì)象,操作系統(tǒng)提供的互斥對(duì)象是一個(gè)操作系統(tǒng)對(duì)象,用戶模式程序只能通過句柄來操作它。文件,進(jìn)程,線程,事件,內(nèi)存塊,注冊(cè)表的鑒值都是以操作系統(tǒng)對(duì)象的形式出現(xiàn),所有的這些都是被對(duì)象管理器創(chuàng)建和銷毀。

              配置管理

              配置管理器紀(jì)錄了計(jì)算器上所有硬件和軟件的安裝配置情況,這些信息被紀(jì)錄在一個(gè)叫做注冊(cè)表的數(shù)據(jù)庫中,設(shè)備驅(qū)動(dòng)程序通過注冊(cè)表可得到它的工作環(huán)境信息。

              進(jìn)程管理器

              在WIN2000中,進(jìn)程是線程的工作環(huán)境,每個(gè)進(jìn)程包含一個(gè)私有地址空間和一個(gè)安全標(biāo)識(shí)。線程是最小的可執(zhí)行實(shí)體,一個(gè)進(jìn)程可以包含一個(gè)或者多個(gè)線程。

              進(jìn)程管理器依靠執(zhí)行部件的其它部分才能工作,如:  對(duì)象管理器和虛擬內(nèi)存管理器。

              虛擬內(nèi)存管理器

              在WIN2000中,程序的地址空間是平坦的,有4GB大小。只有低2GB可以被用戶模式的程序訪問,也就是說,用戶模式的程序占用低2GB空間,如果程序需要?jiǎng)討B(tài)連接庫(DLL),動(dòng)態(tài)連接庫也必須在2GB空間內(nèi)。

              高2GB空間被內(nèi)核模式程序占用,當(dāng)然,驅(qū)動(dòng)程序也被映像到了這里。

            虛擬內(nèi)存管理器(VMM)管理整個(gè)系統(tǒng)的內(nèi)存,對(duì)于一般的用戶模式程序,如果訪問的虛擬內(nèi)存地址不在物理內(nèi)存上,虛擬內(nèi)存管理器將磁盤上相應(yīng)的文件映像到內(nèi)存中,這樣,內(nèi)存在磁盤和有限的RAM之間移動(dòng),好象程序可以訪問比RAM大的多空間。

              本地進(jìn)程調(diào)用

              本地進(jìn)程調(diào)用是同一個(gè)計(jì)算器上不同進(jìn)程間通訊的機(jī)制。驅(qū)動(dòng)程序不需要這個(gè)工具。

              I/O管理器

              I/O管理器將用戶模式的I/O操作轉(zhuǎn)變成一系列統(tǒng)一的例程(例行的過程),I/O管理器的一個(gè)目標(biāo)就是使所有的從用戶模式到內(nèi)核模式的訪問設(shè)備無關(guān),無論程序訪問鍵盤,通訊口,磁盤文件都是一樣的。

              I/O管理器將用戶模式的I/O操作轉(zhuǎn)變成I/O請(qǐng)求包(IRP)的形式傳給驅(qū)動(dòng)程序,I/O請(qǐng)求包是I/O管理器將命令的綜合。作為用戶模式程序于驅(qū)動(dòng)程序的中間層,I/O管理器于驅(qū)動(dòng)程序結(jié)合部分的代碼將是最重要的部分。

              活動(dòng)目錄服務(wù)

               活動(dòng)目錄服務(wù)是WIN2000的新的部分,它給系統(tǒng)資源提供無限的名字空間。以前,標(biāo)識(shí)系統(tǒng)資源的名字被定義在操作系統(tǒng)的有限空間內(nèi)(硬盤名,打印機(jī) 名,用戶名,文件名等),活動(dòng)目錄是一個(gè)統(tǒng)一,安全,標(biāo)準(zhǔn)的方法去標(biāo)識(shí)系統(tǒng)資源,它是基于一個(gè)分等級(jí)的圖,將資源根據(jù)實(shí)體分成元,樹和森林。

              基本操作系統(tǒng)的延伸

              WIN2000定義了這幺多的服務(wù),它們沒有被直接的暴露給用戶模式的程序。取而代之的是,WIN2000定義了很多應(yīng)用程序接口(API),用它們來使用操作系統(tǒng)的服務(wù)。應(yīng)用程序接口在不同的子系統(tǒng)中的形式是不同的,WIN2000包含了以下的子系統(tǒng):

              WIN32子系統(tǒng): 它是WIN2000固有的應(yīng)用程序接口模式,所有的其它的子系統(tǒng)都依賴于它去執(zhí)行它們的工作,因?yàn)樗呛苤匾模晕覀儗⒁诤竺嬖敿?xì)的討論。

              DOS虛擬器(VDM): 提供一個(gè)16位的MS-DOS環(huán)境給一些老的16位程序。盡管它承諾了兼容性,但是很多現(xiàn)有的16位程序還是不能完全的運(yùn)行。這都是因?yàn)閃IN2000的堅(jiān)固性和安全性,操作系統(tǒng)將干涉企圖直接訪問設(shè)備和其它系統(tǒng)資源的操作。

              窗口子系統(tǒng)(WOW):  提供一個(gè)16位的WIN3X環(huán)境給一些老的16位Windows程序。有趣的是,在僅有的一個(gè)窗口子系統(tǒng)進(jìn)程中,每一個(gè)16位Windows程序都是一個(gè)單獨(dú)線程,它們還互相阻止分享資源,這也正是WIN3X的環(huán)境。

              POSIX子系統(tǒng):  提供POSIX1003.1標(biāo)準(zhǔn)的UNIX程序環(huán)境,很不幸,這個(gè)子系統(tǒng)不能支持其它的標(biāo)準(zhǔn)UNIX程序,這樣的話,很多UNIX程序必須在WIN2000下重寫。

              OS/2子系統(tǒng): 提供一個(gè)16位的OS/2程序執(zhí)行環(huán)境,至少不再需要OS/2的陳述管理器(PM),這個(gè)子系統(tǒng)只能工作在80X86平臺(tái)上。

              每個(gè)用戶程序都必須和相應(yīng)的子系統(tǒng)結(jié)合起來。例如: 程序的應(yīng)用程序接口函數(shù)不能調(diào)用其它的子系統(tǒng),或者使系統(tǒng)性能下降,這些子系統(tǒng)的設(shè)計(jì)目的是兼容性,而不是速度。

              環(huán)境子系統(tǒng)(以上的五個(gè)都是WIN2000下的環(huán)境子系統(tǒng))是隔離用戶模式程序的一般手段,它們的運(yùn)作是必須的。每一個(gè)用戶請(qǐng)求都經(jīng)過本地進(jìn)程調(diào)用傳遞給這些子系統(tǒng)去加工處理,這些子系統(tǒng)或者直接執(zhí)行這些請(qǐng)求,或者傳遞請(qǐng)求給執(zhí)行部件。

              WIN32子系統(tǒng)

              這個(gè)子系統(tǒng)提供的應(yīng)用程序接口有以下幾個(gè)方面:
             
               圖形用戶接口: 提供給用戶可視的窗口,對(duì)話框,控件,字體等接口。
             
               控制臺(tái)I/O: 包括鍵盤,鼠標(biāo),顯示器,以及其它子系統(tǒng)。

               執(zhí)行WIN32應(yīng)用程序接口: 提供應(yīng)用程序或者其它子系統(tǒng)與執(zhí)行部件的接口。

              因?yàn)閃IN32子系統(tǒng)在操作系統(tǒng)中的特殊地位和它所提供的高性能,所以它的實(shí)現(xiàn)方式與其它的子系統(tǒng)完全不同。它被分成了好幾個(gè)部分,其中一些工作在用戶模式,一些工作在內(nèi)核模式。通常,WIN32應(yīng)用程序接口被分成3部分:  

              USER函數(shù):  管理窗口,菜單,控件,對(duì)話框等。

              GUI函數(shù):  在物理設(shè)備(如: 顯示器,打印機(jī))上繪圖。

              KENEL函數(shù): 管理非GUI資源,例如: 進(jìn)程,線程,文件,同步服務(wù),KENEL函數(shù)接近于執(zhí)行部件的服務(wù)。

              WIN NT4.0以后,USER函數(shù)和GUI函數(shù)被移到內(nèi)核模式,因此,用戶模式的請(qǐng)求用系統(tǒng)服務(wù)接口直接送到內(nèi)核模式。USER函數(shù)和GUI函數(shù)被安置在WIN32K.SYS中,如圖1.3所示:

              相反的,KENEL函數(shù)依賴于一個(gè)標(biāo)準(zhǔn)的服務(wù)程序CSRSS.exe去反應(yīng)用戶程序請(qǐng)求。

              其它子系統(tǒng)

              除了環(huán)境子系統(tǒng)之外,還有一些重要的子系統(tǒng),它們是用戶模式的過程:

              安全管理子系統(tǒng): 使用一個(gè)變化的過程方法和動(dòng)態(tài)庫來管理本地的和遠(yuǎn)程的安全問題,部分活動(dòng)目錄工作也在這個(gè)邏輯子系統(tǒng)中。

              服務(wù)控制管理器: 管理服務(wù)和驅(qū)動(dòng)程序。

              RPC服務(wù): 它支持網(wǎng)絡(luò)的分布式應(yīng)用程序,通過遠(yuǎn)程的程序調(diào)用,一個(gè)計(jì)算器可將自己的一部分任務(wù)分配給其它網(wǎng)絡(luò)終端。


            圖1.3 USER在GUI內(nèi)核中

              內(nèi)核模式I/O構(gòu)成

              本章的目的是討論內(nèi)核模式I/O子系統(tǒng)的設(shè)計(jì)目的,既然很多種類的驅(qū)動(dòng)器都要討論,那幺,I/O管理器的分層驅(qū)動(dòng)器也將討論。

              內(nèi)核模式I/O管理器的設(shè)計(jì)目標(biāo)

              內(nèi)核模式I/O管理器的總的設(shè)計(jì)目標(biāo)包括:

              1.可移植性: 平臺(tái)之間。

              2.可配置:  包括軟件和硬件,如WIN2000,包括完全的支持即插即用總線和設(shè)備。

              3.可搶先和中斷: I/O代碼應(yīng)該不會(huì)被阻塞。

              4.支持多處理器: 同樣的I/O代碼應(yīng)可在單處理器下運(yùn)行,也可在多處理器下運(yùn)行。

              5.基于對(duì)象:  I/O代碼提供的服務(wù)應(yīng)該被封裝成定義好的結(jié)構(gòu)中。包括數(shù)據(jù)于操作。

              6. 支持I/O請(qǐng)求包:  I/O管理器的請(qǐng)求使用一種獨(dú)特的格式。

              7.支持異步I/O:  I/O管理器的請(qǐng)求支持重新請(qǐng)求的模式,完成后,應(yīng)有一個(gè)機(jī)制去退出和通知調(diào)用者已完成。

              除了這些眾所皆知的目標(biāo)外,它們將重點(diǎn)放在代碼的重用性上,將驅(qū)動(dòng)程序代碼合理的分層。例如: 總線驅(qū)動(dòng)器從特定的驅(qū)動(dòng)器代碼被分成一些獨(dú)立的層,使很多總線共享一部分層別。在很多情況下,不同的代理商提供不同的層別,只有小心的模塊化設(shè)計(jì)才能完成代碼重用的目標(biāo)。

              WIN2000驅(qū)動(dòng)器的種類

              曾經(jīng)有一段時(shí)間,驅(qū)動(dòng)程序的作者只要理解復(fù)雜的新硬件,學(xué)會(huì)操作系統(tǒng)接 口,就可以開始工作了,無論好壞,數(shù)天后一個(gè)驅(qū)動(dòng)器就會(huì)完成。今天,驅(qū)動(dòng)程序的作者必須了解復(fù)雜的硬件和I/O的分層子系統(tǒng),才只不過到了工作描述的階 段,下決心開發(fā)一個(gè)什幺樣的驅(qū)動(dòng)程序都是一個(gè)有趣的挑戰(zhàn),下決心去重寫或者重用一個(gè)層別將是令一個(gè)挑戰(zhàn),這一部分描述在硬件世界,操作系統(tǒng)中不同的驅(qū)動(dòng)程 序。

              在最高層,WIN2000支持用戶模式,內(nèi)核模式兩種驅(qū)動(dòng)程序,從名字上來看,用戶模式驅(qū)動(dòng)程序是運(yùn)行在用戶模式的系統(tǒng)級(jí)代 碼,例如: 一個(gè)為虛擬的硬件或者新的環(huán)境子系統(tǒng)所寫的虛擬驅(qū)動(dòng)器。既然WINN2000不支持直接訪問硬件,虛擬驅(qū)動(dòng)器依賴運(yùn)行在內(nèi)核模式的真正的驅(qū)動(dòng) 器。本書不將討論用戶模式驅(qū)動(dòng)程序。

              內(nèi)核模式驅(qū)動(dòng)程序使用系統(tǒng)級(jí)代碼編寫,且運(yùn)行在內(nèi)核模式下,因?yàn)閮?nèi)核模式允許直接訪問硬件,這些驅(qū)動(dòng)程序被用來直接控制硬件。

              向下移動(dòng)一層,內(nèi)核模式驅(qū)動(dòng)程序可被進(jìn)一步的分成兩種,遺留模式的驅(qū)動(dòng)程序和Windows驅(qū)動(dòng)模式的驅(qū)動(dòng)程序(WDM)。遺留模式的驅(qū)動(dòng)程序需要去偵測硬件和與I/O子系統(tǒng)連接,這些是已經(jīng)由其它文獻(xiàn)說明過了。感激的,這些遺留模式的驅(qū)動(dòng)程序可被移植到WIN2000(和WIN98)上。

              Windows驅(qū)動(dòng)模式的驅(qū)動(dòng)程序支持即插即用,電源管理,熱拔插,自動(dòng)配置。一個(gè)好的Windows驅(qū)動(dòng)模式的驅(qū)動(dòng)程序可以在WIN2000和Win98上使用,雖然微軟不保證二進(jìn)制兼容。最多我們?cè)儆肳IN98 DDK編譯一遍。

              再向下移動(dòng)一層,遺留模式的驅(qū)動(dòng)程序和Windows驅(qū)動(dòng)模式的驅(qū)動(dòng)程序可被進(jìn)一步的分成三種: 高層,中間層,低層。顧名思義,高層驅(qū)動(dòng)程序依靠中間層和低層驅(qū)動(dòng)程序去完成工作,中間層驅(qū)動(dòng)程序則依靠低層驅(qū)動(dòng)程序去完成工作。

              高層驅(qū)動(dòng)程序包括文件系統(tǒng)驅(qū)動(dòng)程序(FSDs),依次的翻譯程序請(qǐng)求成為特定的驅(qū)動(dòng)器請(qǐng)求,當(dāng)?shù)蛯拥尿?qū)動(dòng)程序的服務(wù)已經(jīng)準(zhǔn)備好的時(shí)候它也是需要的。

              微軟提供一個(gè)安裝文件系統(tǒng)工具包(IFS),不在MSDN和其它產(chǎn)品中,是單獨(dú)出售的。這個(gè)安裝文件系統(tǒng)工具包需要和驅(qū)動(dòng)程序開發(fā)包和其它產(chǎn)品一起才能完成開發(fā)。使用這種工具包有很多限制。相關(guān)信悉請(qǐng)登祿微軟的網(wǎng)站,本書不介紹文件系統(tǒng)的開發(fā)。

               中間層驅(qū)動(dòng)程序包括磁盤鏡像驅(qū)動(dòng)器,類驅(qū)動(dòng)器(Class),迷你驅(qū)動(dòng)器(MINI),過濾驅(qū)動(dòng)器(FILTER)等。這些驅(qū)動(dòng)器位于低層驅(qū)動(dòng)器和高層 驅(qū)動(dòng)器之間。例如:  磁盤鏡像驅(qū)動(dòng)器接收到文件系統(tǒng)傳來的寫文件的請(qǐng)求,將它轉(zhuǎn)換成為兩個(gè)不同的請(qǐng)求傳給兩個(gè)不同的低層驅(qū)動(dòng)器。

               類驅(qū)動(dòng)器是對(duì)代碼重用的一次嘗試,因?yàn)橐环N特定設(shè)備有多個(gè)驅(qū)動(dòng)程序,它們之間大部分是相同的,這些相同的部分被作為一個(gè)類驅(qū)動(dòng)器和其它部分分開。例如:  所有的IDE驅(qū)動(dòng)器共享大部分的代碼,這樣就只用一次編寫好這些公用的代碼,把它作為一般的類驅(qū)動(dòng)器加載。對(duì)于一個(gè)指定的設(shè)備,我們就只用編寫以類驅(qū)動(dòng) 器為基礎(chǔ)的迷你驅(qū)動(dòng)程序就可以了。

              過濾驅(qū)動(dòng)器可以截取程序?qū)Υ嬖诘尿?qū)動(dòng)程序發(fā)出的請(qǐng)求。在請(qǐng)求到達(dá)驅(qū)動(dòng)程序之前,它給我們一個(gè)更改請(qǐng)求內(nèi)容的機(jī)會(huì)。

               事實(shí)上,在Windows驅(qū)動(dòng)模式的世界中,中間層驅(qū)動(dòng)程序也是由基本的驅(qū)動(dòng)程序所組成,這些驅(qū)動(dòng)程序可能即不是類驅(qū)動(dòng)器,也不是迷你驅(qū)動(dòng)器,但是,它 們縱是扮演著轉(zhuǎn)換抽象的I/O請(qǐng)求到低層物理驅(qū)動(dòng)器代碼的角色。在DDK的文獻(xiàn)中,迷你驅(qū)動(dòng)器和類驅(qū)動(dòng)器的術(shù)語有時(shí)顛倒了,但從上下文可以分辨出來。

              低層驅(qū)動(dòng)器包括硬件和總線的控制器。例如: SCSI適配器是一個(gè)低層驅(qū)動(dòng)器,這些低層驅(qū)動(dòng)器和HAL于硬件結(jié)合緊密。在WDM中低層驅(qū)動(dòng)器包括物理驅(qū)動(dòng)器的概念,行為。這些物理驅(qū)動(dòng)器與一個(gè)或者多個(gè)功能驅(qū)動(dòng)器結(jié)合。圖1.4是WIN2000的分層驅(qū)動(dòng)器總圖。


            圖1.4 WIN2000的分層驅(qū)動(dòng)器

              特殊驅(qū)動(dòng)器結(jié)構(gòu)

              除了上節(jié)介紹的驅(qū)動(dòng)器外,WIN2000還提供一些特殊的驅(qū)動(dòng)器:

              視頻驅(qū)動(dòng)程序,打印機(jī)驅(qū)動(dòng)程序,多媒體驅(qū)動(dòng)程序,網(wǎng)絡(luò)驅(qū)動(dòng)程序。

              視頻驅(qū)動(dòng)程序

              視頻驅(qū)動(dòng)程序非常特殊,因?yàn)閳D形接口經(jīng)常暴露給用戶,系統(tǒng)的速度也是通過這個(gè)部分判斷的。

               WIN2000視頻驅(qū)動(dòng)程序構(gòu)架如圖1.5所示,陰影部分為WIN2000所有,視頻驅(qū)動(dòng)程序?yàn)閺S商提供,因?yàn)楹芏嘁曨l適配器選用相同的視頻芯片,視頻 芯片制造商提供給視頻適配器制造商的是類(CLASS)驅(qū)動(dòng)程序,例如:  ET4000 MINI 驅(qū)動(dòng)程序提供給所有使用ET4000芯片的視頻適配器,這個(gè)芯片的其它硬件環(huán)境的驅(qū)動(dòng)程序則是視頻適配器自己的驅(qū)動(dòng)代碼。

              基本的,視頻驅(qū)動(dòng)程序在請(qǐng)求畫圖系統(tǒng)服務(wù)的時(shí)候可以直接和I/O管理器通訊,這點(diǎn)和一般的I/O構(gòu)架是不同的。用戶模式的代碼通常和GDI交互。

               GDI函數(shù)支持畫線,幾何圖形,文字。因此,GDI好象一個(gè)高層驅(qū)動(dòng)器,GDI也依賴I/O管理器和顯示驅(qū)動(dòng)來完成工作,顯示驅(qū)動(dòng)和GDI的通訊是雙向 的。GDI可直接調(diào)用顯示驅(qū)動(dòng)的函數(shù),這里的速度是致關(guān)重要的。這些函數(shù)是顯示驅(qū)動(dòng)的驅(qū)動(dòng)驅(qū)動(dòng)接口(DDI),前綴是Drv,相反的,顯示驅(qū)動(dòng)需要GDI 中的圖形庫例程,叫做圖形引擎調(diào)用(GEC),前綴是Eng。

              GDI通過傳統(tǒng)分層的設(shè)計(jì)來訪問I/O子系統(tǒng),GDI使用I/O管理器去調(diào)用MINI 驅(qū)動(dòng)程序和視頻口的例程,例如: 模式開關(guān)命令,它被傳給視頻口驅(qū)動(dòng)器的是標(biāo)準(zhǔn)的IRP格式,視頻口驅(qū)動(dòng)器轉(zhuǎn)換IRP格式為視頻請(qǐng)求包格式,然后傳給MINI 驅(qū)動(dòng)程序處理。

                     
            圖1.5 WIN2000視頻驅(qū)動(dòng)程序構(gòu)架

              打印機(jī)驅(qū)動(dòng)程序

              打印機(jī)驅(qū)動(dòng)程序與標(biāo)準(zhǔn)的WIN2000驅(qū)動(dòng)程序有以下幾點(diǎn)不同:

              1.假脫機(jī): 一個(gè)打印工作在傳送到物理打印機(jī)之前先傳送到假脫機(jī),因?yàn)槲锢泶蛴C(jī)的速度太慢。

              2.遠(yuǎn)程操作:  物理打印機(jī)通常被連接到一個(gè)遠(yuǎn)程計(jì)算器上,這里用到RPC.

              3.不定的打印協(xié)議: 不同的打印機(jī)當(dāng)然有不同的打印協(xié)議。

              假脫機(jī)部分如圖1.6所示,以后不再重復(fù)說明,陰影部分為WIN2000所有,如果假脫機(jī)被擊活,打印工作先被假脫機(jī)紀(jì)錄進(jìn)一個(gè)文件,假脫機(jī)像打印機(jī)一樣退出隊(duì)列,而后變的可用,這時(shí)數(shù)據(jù)才被傳入本地或者遠(yuǎn)程的打印機(jī)驅(qū)動(dòng)。

                      
            圖1.5 打印機(jī)驅(qū)動(dòng)程序的假脫機(jī)

              客戶端的假脫機(jī)部分(winspool.drv 或者 Win32spl.DLL(遠(yuǎn)程打印時(shí))),是一個(gè)以RPC為基礎(chǔ)的程序,它連接服務(wù)端(Spoolsv.exe)和假脫機(jī)的API函數(shù)。

              服務(wù)端的代碼依賴路由服務(wù)器(spoolss.dll), 這個(gè)路由服務(wù)器連接一個(gè)打印提供者,打印提供者是指定的打印機(jī)服務(wù)或者驅(qū)動(dòng)程序的抽象。打印提供者創(chuàng)建和管理一個(gè)指定的打印工作隊(duì)列。一個(gè)簡單的打印提供 者可以向整個(gè)打印機(jī)類提供服務(wù),本地,遠(yuǎn)程,網(wǎng)絡(luò)的打印提供者都被包含在WIN2000中。

              不同的打印機(jī),網(wǎng)絡(luò)協(xié)議有時(shí)需要特殊的打印提供者,例如:  Novell INC 提供給WIN2000設(shè)計(jì)了一個(gè)直接輸出到網(wǎng)絡(luò)打印服務(wù)的打印提供者。

              GDI必須轉(zhuǎn)換程序的畫圖命令成為打印機(jī)使用的特殊格式,GDI依靠打印機(jī)驅(qū)動(dòng)程序工作, 打印機(jī)驅(qū)動(dòng)程序由打印機(jī)繪圖DLL和打印機(jī)接口DLL組成。

              打印機(jī)繪圖DLL負(fù)責(zé)給指定的打印機(jī)轉(zhuǎn)換數(shù)據(jù),在WIN2000中,打印機(jī)繪圖DLL可以放置在用戶模式或者內(nèi)核模式中,用戶模式放置在可以產(chǎn)生高的系統(tǒng)可靠性和靈活的配置。

              打印機(jī)繪圖DLL的接口函數(shù)的前綴是Drv,這些接口函數(shù)在GDI轉(zhuǎn)換命令時(shí)被調(diào)用。

              打印機(jī)繪圖DLL負(fù)責(zé)依照用戶的參數(shù)配置打印機(jī)設(shè)備,例如: 多進(jìn)紙盒的打印機(jī)需要被設(shè)定缺省的紙張大小和進(jìn)紙盒。打印機(jī)繪圖DLL通過構(gòu)建一個(gè)或者多個(gè)配置窗體的形式提供給用戶接口,這些配置窗體上有一些標(biāo)準(zhǔn)的Windows控件,通過它可以方便的配置打印機(jī)。

              多媒體驅(qū)動(dòng)程序

              Windows 2000提供了內(nèi)核流(KS)去支持多媒體驅(qū)動(dòng)程序像聲卡驅(qū)動(dòng)程序,電視卡驅(qū)動(dòng)程序等。KS由過濾驅(qū)動(dòng)程序和功能驅(qū)動(dòng)程序組成,應(yīng)用軟件將KS和方法,事 件,等來自組件對(duì)象模型(COM)的東西于KS結(jié)合,這些機(jī)制應(yīng)用于四種提供給應(yīng)用程序的KS對(duì)象: 過濾器,針腳,時(shí)鐘,分配算符。每一個(gè)提供給應(yīng)用程 序的KS對(duì)象都是一個(gè)標(biāo)準(zhǔn)的I/O文件對(duì)象。

              過濾器對(duì)象(FILTER)(用以區(qū)別過濾器驅(qū)動(dòng)程序)是顯露給用戶的執(zhí)行多媒體操作的高層實(shí)體,例如: 應(yīng)用程序可以打開一個(gè)聲卡的話筒過濾器。

              針腳對(duì)象(PINS)是FILTER的子對(duì)象,它是設(shè)備的一個(gè)節(jié)點(diǎn)(輸入或者輸出),例如: 一個(gè)話筒過濾器可能給輸入提供一個(gè)針腳對(duì)象,一個(gè)輸出針腳對(duì)象然后去獲得(讀)那個(gè)數(shù)字化的信號(hào)。

              時(shí)鐘對(duì)象(CLOCK)給多媒體設(shè)備提供(在有請(qǐng)求時(shí)鐘的情況下)一個(gè)實(shí)時(shí)鐘,當(dāng)時(shí)間到的情況下,時(shí)鐘對(duì)象將發(fā)送給應(yīng)用程序一個(gè)事件。

              分配算符對(duì)象(Allocator)給多媒體設(shè)備提供一個(gè)直接內(nèi)存接口。這些內(nèi)存可以通過Allocator去分配或者釋放。

               Windows 2000擁有一個(gè)通用的類驅(qū)動(dòng)器Stream.sys,在多數(shù)情況下,必須編寫一個(gè)MINI驅(qū)動(dòng)器去支持指定的像聲卡,攝像機(jī)的設(shè)備。制造商提供的 MINI驅(qū)動(dòng)器利用類驅(qū)動(dòng)器(包括緩沖器和DMA支持)去支持設(shè)備指定的動(dòng)作,類驅(qū)動(dòng)器執(zhí)行Windows 2000的KS的抽象。

              網(wǎng)絡(luò)驅(qū)動(dòng)程序

              網(wǎng)絡(luò)驅(qū)動(dòng)程序使用ISO的開放的系統(tǒng)互連網(wǎng)羅標(biāo)準(zhǔn)(OSI),這是一個(gè)七層的模型,它的頂層是應(yīng)用軟件層,底層是硬件連接和網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),網(wǎng)絡(luò)接口卡(NIC)給大多數(shù)的平臺(tái)提供網(wǎng)絡(luò)的硬件接口,網(wǎng)絡(luò)驅(qū)動(dòng)程序是寫給指定的NIC的驅(qū)動(dòng)程序。

              網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范(NDIS)給NIC驅(qū)動(dòng)程序提供庫支持,通常只允許NIC廠商提供管理硬件特殊細(xì)節(jié)的MINI驅(qū)動(dòng)程序,更高層的NDIS(中間驅(qū)動(dòng)程序,協(xié)議驅(qū)動(dòng)程序)在需要的時(shí)候提供媒體轉(zhuǎn)換,過濾。分層的NDIS如圖1.7所示。

              WIN2000提供一個(gè)分層的內(nèi)核模式軟件傳輸驅(qū)動(dòng)接口(TDI),這個(gè)分層的在NDIS層和高層軟件抽象像插座和NetBIOS,TDI層使WIN2000的高層結(jié)構(gòu)具有更多的可移植性。


            圖1.7網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范

              小結(jié)

              WIN2000為應(yīng)用程序的開發(fā)提供充足的體系結(jié)構(gòu),當(dāng)然,這需要驅(qū)動(dòng)程序開發(fā)者花費(fèi)巨大的心血。WIN2000 I/O處理過程圖解是復(fù)雜的,但是必須的。這是對(duì)理解WIN2000中有什幺驅(qū)動(dòng)器,以及這些驅(qū)動(dòng)器在什幺位置是有益的。

            posted on 2006-04-16 22:58 笑笑生 閱讀(152) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            久久精品国产秦先生| 久久美女网站免费| 99久久久久| 久久五月精品中文字幕| 久久综合狠狠综合久久97色| 亚洲人成网站999久久久综合| 青青草原综合久久大伊人| 欧美伊人久久大香线蕉综合| 麻豆亚洲AV永久无码精品久久| 青青国产成人久久91网| 2019久久久高清456| 亚洲精品无码久久久久| 久久久久久免费一区二区三区| 99久久成人国产精品免费| 三级片免费观看久久| 国产毛片欧美毛片久久久| 性色欲网站人妻丰满中文久久不卡| 久久久久久久免费视频| 丁香狠狠色婷婷久久综合| 香蕉aa三级久久毛片 | 久久精品中文闷骚内射| 久久综合狠狠色综合伊人| 日韩欧美亚洲综合久久| 久久免费精品一区二区| 区久久AAA片69亚洲| AAA级久久久精品无码区| 国产69精品久久久久观看软件| 久久综合欧美成人| 亚洲AV无码久久| 久久久久亚洲AV成人网人人网站 | 国内精品免费久久影院| 久久久婷婷五月亚洲97号色 | 精品无码久久久久国产| 久久人人爽人人爽人人片av麻烦| 久久久久久A亚洲欧洲AV冫| 国产一久久香蕉国产线看观看| 伊人久久综合精品无码AV专区| 亚洲国产高清精品线久久| 国产精品成人99久久久久91gav| 久久精品国产亚洲综合色| 国产精品一区二区久久不卡|