青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Impossible is nothing  
  愛(ài)過(guò)知情重醉過(guò)知酒濃   花開(kāi)花謝終是空   緣份不停留像春風(fēng)來(lái)又走   女人如花花似夢(mèng)
公告
日歷
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456
統(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)了很長(zhǎng)時(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)前和未來(lái)的平臺(tái)上運(yùn)行。

  可擴(kuò)展性: 隨著時(shí)間的流逝,市場(chǎng)的改變,操作系統(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)沒(méi)有損害的范圍內(nèi)。例如: 通過(guò)虛擬內(nèi)存映像,一個(gè)程序不能訪問(wèn)其它程序的內(nèi)存區(qū)(兩個(gè)程序共同定義的公用內(nèi)存區(qū)除 外)。硬件I/O指令不能被執(zhí)行。所有的CPU指令(如CPU中斷)不能被執(zhí)行(在特定的特權(quán)級(jí)下)。所有的這些被阻止的操作如果想運(yùn)行,它們必須通過(guò)陷 阱門來(lái)請(qǐng)求操作系統(tǒng)內(nèi)核。

  操作系統(tǒng)內(nèi)核程序運(yùn)行在內(nèi)核模式下,它可以執(zhí)行所有有效的CPU指令,包括I/O操作,可訪問(wèn)任何程序的內(nèi)存區(qū),當(dāng)然是那些沒(méi)有被翻出內(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)總是使用這些抽象的代碼來(lái)在這兩個(gè)操作模式 下切換。例如: 在Intel平臺(tái)上,內(nèi)核模式使用Ring 0指令系統(tǒng),而用戶模式使用了Ring 3指令系統(tǒng)。

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

  可擴(kuò)展性

   WIN2000的內(nèi)核也負(fù)責(zé)系統(tǒng)中所有線程的調(diào)度與分配,線程是程序中最小的可獨(dú)立運(yùn)行的部分,為保持每個(gè)線程的獨(dú)立性,每個(gè)線程的設(shè)備上下文必須被保 存下來(lái),線程的上下文由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ì)作一些必要的增加,刪除,分離來(lái)作為改進(jìn)或折衷。WIN2000就是后來(lái)才加了活動(dòng)目錄服務(wù)。

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

  性能

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

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

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

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

  執(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)核模式可能只是簡(jiǎn)單的一個(gè)CPU指令或者是一個(gè)存儲(chǔ)于恢復(fù)上下文開(kāi)關(guān)。

  對(duì)象管理器

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

  配置管理

  配置管理器紀(jì)錄了計(jì)算器上所有硬件和軟件的安裝配置情況,這些信息被紀(jì)錄在一個(gè)叫做注冊(cè)表的數(shù)據(jù)庫(kù)中,設(shè)備驅(qū)動(dòng)程序通過(guò)注冊(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可以被用戶模式的程序訪問(wèn),也就是說(shuō),用戶模式的程序占用低2GB空間,如果程序需要?jiǎng)討B(tài)連接庫(kù)(DLL),動(dòng)態(tài)連接庫(kù)也必須在2GB空間內(nèi)。

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

虛擬內(nèi)存管理器(VMM)管理整個(gè)系統(tǒng)的內(nèi)存,對(duì)于一般的用戶模式程序,如果訪問(wèn)的虛擬內(nèi)存地址不在物理內(nèi)存上,虛擬內(nèi)存管理器將磁盤上相應(yīng)的文件映像到內(nèi)存中,這樣,內(nèi)存在磁盤和有限的RAM之間移動(dòng),好象程序可以訪問(wèn)比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)一的例程(例行的過(guò)程),I/O管理器的一個(gè)目標(biāo)就是使所有的從用戶模式到內(nèi)核模式的訪問(wèn)設(shè)備無(wú)關(guān),無(wú)論程序訪問(wè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)資源提供無(wú)限的名字空間。以前,標(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í)體分成元,樹(shù)和森林。

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

  WIN2000定義了這幺多的服務(wù),它們沒(méi)有被直接的暴露給用戶模式的程序。取而代之的是,WIN2000定義了很多應(yīng)用程序接口(API),用它們來(lái)使用操作系統(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)將干涉企圖直接訪問(wèn)設(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下重寫(xiě)。

  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é)合起來(lái)。例如: 程序的應(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)過(guò)本地進(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),它們是用戶模式的過(guò)程:

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

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

  RPC服務(wù): 它支持網(wǎng)絡(luò)的分布式應(yīng)用程序,通過(guò)遠(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)接 口,就可以開(kāi)始工作了,無(wú)論好壞,數(shù)天后一個(gè)驅(qū)動(dòng)器就會(huì)完成。今天,驅(qū)動(dòng)程序的作者必須了解復(fù)雜的硬件和I/O的分層子系統(tǒng),才只不過(guò)到了工作描述的階 段,下決心開(kāi)發(fā)一個(gè)什幺樣的驅(qū)動(dòng)程序都是一個(gè)有趣的挑戰(zhàn),下決心去重寫(xiě)或者重用一個(gè)層別將是令一個(gè)挑戰(zhàn),這一部分描述在硬件世界,操作系統(tǒng)中不同的驅(qū)動(dòng)程 序。

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

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

  向下移動(dòng)一層,內(nèi)核模式驅(qū)動(dòng)程序可被進(jìn)一步的分成兩種,遺留模式的驅(qū)動(dòng)程序和Windows驅(qū)動(dòng)模式的驅(qū)動(dòng)程序(WDM)。遺留模式的驅(qū)動(dòng)程序需要去偵測(cè)硬件和與I/O子系統(tǒng)連接,這些是已經(jīng)由其它文獻(xiàn)說(shuō)明過(guò)了。感激的,這些遺留模式的驅(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)程序開(kāi)發(fā)包和其它產(chǎn)品一起才能完成開(kāi)發(fā)。使用這種工具包有很多限制。相關(guān)信悉請(qǐng)登祿微軟的網(wǎng)站,本書(shū)不介紹文件系統(tǒng)的開(kāi)發(fā)。

   中間層驅(qū)動(dòng)程序包括磁盤鏡像驅(qū)動(dòng)器,類驅(qū)動(dòng)器(Class),迷你驅(qū)動(dòng)器(MINI),過(guò)濾驅(qū)動(dòng)器(FILTER)等。這些驅(qū)動(dòng)器位于低層驅(qū)動(dòng)器和高層 驅(qū)動(dòng)器之間。例如:  磁盤鏡像驅(qū)動(dòng)器接收到文件系統(tǒng)傳來(lái)的寫(xiě)文件的請(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)器和其它部分分開(kāi)。例如:  所有的IDE驅(qū)動(dòng)器共享大部分的代碼,這樣就只用一次編寫(xiě)好這些公用的代碼,把它作為一般的類驅(qū)動(dòng)器加載。對(duì)于一個(gè)指定的設(shè)備,我們就只用編寫(xiě)以類驅(qū)動(dòng) 器為基礎(chǔ)的迷你驅(qū)動(dòng)程序就可以了。

  過(guò)濾驅(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ù)語(yǔ)有時(shí)顛倒了,但從上下文可以分辨出來(lái)。

  低層驅(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)的速度也是通過(guò)這個(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)求畫(huà)圖系統(tǒng)服務(wù)的時(shí)候可以直接和I/O管理器通訊,這點(diǎn)和一般的I/O構(gòu)架是不同的。用戶模式的代碼通常和GDI交互。

   GDI函數(shù)支持畫(huà)線,幾何圖形,文字。因此,GDI好象一個(gè)高層驅(qū)動(dòng)器,GDI也依賴I/O管理器和顯示驅(qū)動(dòng)來(lái)完成工作,顯示驅(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 中的圖形庫(kù)例程,叫做圖形引擎調(diào)用(GEC),前綴是Eng。

  GDI通過(guò)傳統(tǒng)分層的設(shè)計(jì)來(lái)訪問(wèn)I/O子系統(tǒng),GDI使用I/O管理器去調(diào)用MINI 驅(qū)動(dòng)程序和視頻口的例程,例如: 模式開(kāi)關(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ù)說(shuō)明,陰影部分為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è)簡(jiǎn)單的打印提供 者可以向整個(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)換程序的畫(huà)圖命令成為打印機(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通過(guò)構(gòu)建一個(gè)或者多個(gè)配置窗體的形式提供給用戶接口,這些配置窗體上有一些標(biāo)準(zhǔn)的Windows控件,通過(guò)它可以方便的配置打印機(jī)。

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

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

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

  針腳對(duì)象(PINS)是FILTER的子對(duì)象,它是設(shè)備的一個(gè)節(jié)點(diǎn)(輸入或者輸出),例如: 一個(gè)話筒過(guò)濾器可能給輸入提供一個(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)存可以通過(guò)Allocator去分配或者釋放。

   Windows 2000擁有一個(gè)通用的類驅(qū)動(dòng)器Stream.sys,在多數(shù)情況下,必須編寫(xiě)一個(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的開(kāi)放的系統(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)程序是寫(xiě)給指定的NIC的驅(qū)動(dòng)程序。

  網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范(NDIS)給NIC驅(qū)動(dòng)程序提供庫(kù)支持,通常只允許NIC廠商提供管理硬件特殊細(xì)節(jié)的MINI驅(qū)動(dòng)程序,更高層的NDIS(中間驅(qū)動(dòng)程序,協(xié)議驅(qū)動(dòng)程序)在需要的時(shí)候提供媒體轉(zhuǎn)換,過(guò)濾。分層的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)用程序的開(kāi)發(fā)提供充足的體系結(jié)構(gòu),當(dāng)然,這需要驅(qū)動(dòng)程序開(kāi)發(fā)者花費(fèi)巨大的心血。WIN2000 I/O處理過(guò)程圖解是復(fù)雜的,但是必須的。這是對(duì)理解WIN2000中有什幺驅(qū)動(dòng)器,以及這些驅(qū)動(dòng)器在什幺位置是有益的。

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

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


 
Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲高清在线播放| 欧美一区二区三区男人的天堂| 亚洲精品在线视频| 欧美激情精品久久久久久蜜臀| 日韩网站在线观看| 欧美一站二站| 亚洲国产精品一区二区第一页 | 欧美v日韩v国产v| 亚洲青涩在线| 亚洲欧美日韩中文视频| 韩国av一区二区| 欧美精品久久久久久久久久| 亚洲视频免费在线| 久热精品在线视频| 一本色道久久综合| 国产一区二区0| 欧美国产亚洲另类动漫| 亚洲免费影视| 亚洲国产另类久久久精品极度| 亚洲视频一二区| 在线播放国产一区中文字幕剧情欧美 | 欧美日韩精品二区第二页| 一本久道久久综合狠狠爱| 久久国产婷婷国产香蕉| 在线观看中文字幕亚洲| 国产精品www| 久久婷婷成人综合色| 一本色道婷婷久久欧美| 美女爽到呻吟久久久久| 亚洲先锋成人| 亚洲激情小视频| 国产欧美另类| 欧美日韩成人| 久久亚洲色图| 欧美一二区视频| 日韩视频精品在线观看| 欧美不卡高清| 久久av一区| 亚洲综合精品四区| 日韩视频一区二区三区| 激情欧美亚洲| 国产欧美精品国产国产专区| 欧美激情亚洲国产| 久久三级福利| 欧美一级在线亚洲天堂| 一区二区欧美日韩| 亚洲国产成人久久综合| 麻豆精品在线观看| 欧美在现视频| 亚洲男人影院| 在线一区亚洲| 99国产精品私拍| 91久久嫩草影院一区二区| 国产一区二区三区四区老人| 国产精品免费福利| 国产精品99免视看9| 欧美激情一区二区在线| 美女精品在线观看| 麻豆成人综合网| 久久久久久一区二区三区| 欧美在线观看视频一区二区| 亚洲欧美激情视频| 亚洲一区二区在线免费观看| 一区二区三区高清不卡| 一区二区三区导航| 亚洲色无码播放| 亚洲午夜视频| 亚洲在线日韩| 香蕉久久夜色精品国产| 香蕉成人伊视频在线观看| 性欧美长视频| 欧美在线视频日韩| 久久久久久69| 免费成人av在线看| 女人色偷偷aa久久天堂| 免费不卡视频| 欧美精品一区二区三区蜜桃| 欧美人与性禽动交情品| 欧美日韩亚洲91| 国产精品久久福利| 国产精品在线看| 国产日韩欧美在线一区| 国内精品一区二区| 在线日韩av| 亚洲精品网站在线播放gif| 亚洲另类自拍| 亚洲专区在线| 久久精品一二三区| 美女脱光内衣内裤视频久久影院| 欧美成在线观看| 亚洲精品国产视频| 亚洲免费伊人电影在线观看av| 欧美在线观看网址综合| 快射av在线播放一区| 欧美精品日韩| 国产精品午夜春色av| 欲色影视综合吧| 99re这里只有精品6| 亚洲欧美999| 久久综合九色| 亚洲美女视频| 翔田千里一区二区| 嫩草影视亚洲| 国产精品theporn88| 国内精品久久久久久久果冻传媒 | 亚洲国产精品一区二区尤物区| 亚洲精品久久久一区二区三区| 亚洲一二三四区| 久久久久久久一区二区| 欧美乱在线观看| 国产日韩精品在线| 亚洲精品一区二区在线观看| 午夜精品影院在线观看| 欧美成人精品| 亚洲自拍偷拍网址| 欧美a级片一区| 国产日韩欧美精品一区| 日韩视频国产视频| 久久视频一区二区| 亚洲神马久久| 欧美激情国产高清| 一区二区三区在线不卡| 亚洲欧美日韩在线高清直播| 亚洲高清视频的网址| 午夜精品久久久久久| 欧美日本一区二区三区| 极品尤物一区二区三区| 亚洲在线观看视频网站| 欧美激情女人20p| 亚洲综合社区| 欧美日韩国产小视频在线观看| 今天的高清视频免费播放成人| 亚洲专区一二三| 亚洲欧洲精品一区二区三区不卡 | 两个人的视频www国产精品| 国产精品久久久久久超碰| 亚洲精品免费电影| 久久综合影视| 欧美一级视频精品观看| 国产精品久久91| 一本色道久久综合亚洲精品小说| 欧美电影在线免费观看网站| 香蕉av777xxx色综合一区| 国产精品久久波多野结衣| 99视频精品全部免费在线| 亚洲第一区中文99精品| 久久久久久久久一区二区| 国产亚洲女人久久久久毛片| 亚洲中无吗在线| 一区二区三区av| 欧美日韩伦理在线免费| 日韩视频不卡| 亚洲日本中文字幕区| 欧美国产激情| 亚洲精品在线视频| 亚洲国产婷婷| 欧美a级一区二区| 亚洲人成欧美中文字幕| 欧美激情91| 免费成人小视频| 亚洲人成人77777线观看| 欧美激情五月| 欧美精品久久天天躁| 日韩天堂av| 99精品国产在热久久| 欧美三级网址| 亚洲免费视频一区二区| 亚洲一区二区网站| 国产欧美日韩视频一区二区| 久久国产精品黑丝| 久久久国产午夜精品| 亚洲高清av在线| 亚洲高清av在线| 欧美日韩国产综合视频在线| 国产精品99久久久久久www| aa日韩免费精品视频一| 国产精品高潮视频| 久久久久久亚洲精品不卡4k岛国| 久久精品人人做人人综合| 亚洲国产专区校园欧美| 亚洲日本成人在线观看| 欧美亚日韩国产aⅴ精品中极品| 午夜视频一区| 久久久噜噜噜久久中文字免| 亚洲三级国产| 亚洲一区二区免费看| 在线成人av网站| 日韩视频在线你懂得| 国产日韩欧美亚洲| 欧美freesex8一10精品| 欧美日韩网址| 久久综合一区二区三区| 欧美精品一级| 欧美在线视频在线播放完整版免费观看| 久久狠狠婷婷| 9国产精品视频| 午夜精品久久久久影视 | 美女精品国产| 亚洲一区二区精品在线| 久久国产天堂福利天堂|