• <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年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567
            統(tǒng)計
            • 隨筆 - 8
            • 文章 - 91
            • 評論 - 16
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(4)

            隨筆分類(4)

            隨筆檔案(8)

            文章分類(77)

            文章檔案(91)

            相冊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

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

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

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

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

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

              穩(wěn)定性和可靠性: 操作系統(tǒng)不會因為用戶的誤操作而損壞,一個用戶程序應(yīng)該不會使操作系統(tǒng)崩潰。

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

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

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

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

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

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

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

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

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

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

              可移植性

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


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

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

              可擴展性

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

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

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

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

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

              性能

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

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

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

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

              執(zhí)行部件

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


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

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

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

              對象管理器

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

              配置管理

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

              進程管理器

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

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

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

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

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

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

              本地進程調(diào)用

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

              I/O管理器

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

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

              活動目錄服務(wù)

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

              基本操作系統(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í)行它們的工作,因為它是很重要的,所以我們將要在后面詳細的討論。

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

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

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

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

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

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

              WIN32子系統(tǒng)

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

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

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

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

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

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

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

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

              其它子系統(tǒng)

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

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

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

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


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

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

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

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

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

              1.可移植性: 平臺之間。

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

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

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

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

              6. 支持I/O請求包:  I/O管理器的請求使用一種獨特的格式。

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

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

              WIN2000驅(qū)動器的種類

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

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

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

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

              Windows驅(qū)動模式的驅(qū)動程序支持即插即用,電源管理,熱拔插,自動配置。一個好的Windows驅(qū)動模式的驅(qū)動程序可以在WIN2000和Win98上使用,雖然微軟不保證二進制兼容。最多我們再用WIN98 DDK編譯一遍。

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

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

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

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

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

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

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

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


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

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

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

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

              視頻驅(qū)動程序

              視頻驅(qū)動程序非常特殊,因為圖形接口經(jīng)常暴露給用戶,系統(tǒng)的速度也是通過這個部分判斷的。

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

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

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

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

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

              打印機驅(qū)動程序

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

              1.假脫機: 一個打印工作在傳送到物理打印機之前先傳送到假脫機,因為物理打印機的速度太慢。

              2.遠程操作:  物理打印機通常被連接到一個遠程計算器上,這里用到RPC.

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

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

                      
            圖1.5 打印機驅(qū)動程序的假脫機

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

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

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

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

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

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

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

              多媒體驅(qū)動程序

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

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

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

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

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

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

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

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

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

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


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

              小結(jié)

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

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

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


             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            欧美成a人片免费看久久| 99久久免费国产精品特黄| 青草国产精品久久久久久| 亚洲国产另类久久久精品小说 | 久久人妻少妇嫩草AV蜜桃| 国产成年无码久久久免费| 狠狠色丁香久久婷婷综| 久久精品国产欧美日韩| 久久综合国产乱子伦精品免费| 日本久久久久久中文字幕| 91麻豆国产精品91久久久| 岛国搬运www久久| 亚洲精品乱码久久久久久按摩| 国产精品日韩深夜福利久久| 久久无码专区国产精品发布 | 91超碰碰碰碰久久久久久综合| 人妻无码久久精品| 久久免费美女视频| 久久天天躁狠狠躁夜夜avapp| 久久久久久A亚洲欧洲AV冫 | 99久久精品国产毛片| 亚洲精品国产美女久久久| 久久综合伊人77777麻豆| 99精品久久久久中文字幕| 国产精品乱码久久久久久软件| 国产亚州精品女人久久久久久| 人妻无码久久一区二区三区免费 | 久久精品www人人爽人人| 日韩亚洲国产综合久久久| 国产精品成人精品久久久| 久久99免费视频| AV狠狠色丁香婷婷综合久久| 熟妇人妻久久中文字幕| 久久久久久免费视频| 伊人伊成久久人综合网777| 久久无码AV中文出轨人妻| 久久久精品久久久久特色影视| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久国产综合精品五月天| 亚洲国产一成人久久精品| 国产精品综合久久第一页|