亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于構(gòu)件的操作系統(tǒng)動(dòng)態(tài)設(shè)備驅(qū)動(dòng)的方法

文檔序號(hào):6605504閱讀:333來(lái)源:國(guó)知局
專利名稱:基于構(gòu)件的操作系統(tǒng)動(dòng)態(tài)設(shè)備驅(qū)動(dòng)的方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種基于構(gòu)件的操作系統(tǒng)動(dòng)態(tài)加載、卸載設(shè)備驅(qū)動(dòng)的方法,特別是指一種將驅(qū)動(dòng)程序構(gòu)件化,并只在應(yīng)用程序需要使用驅(qū)動(dòng)程序時(shí),才裝載驅(qū)動(dòng)程序并創(chuàng)建出驅(qū)動(dòng)構(gòu)件對(duì)象;且在驅(qū)動(dòng)構(gòu)件對(duì)象使用完畢后,就將驅(qū)動(dòng)程序刪除并卸載,從而實(shí)現(xiàn)合理而有效地使用CPU和內(nèi)存資源的設(shè)備驅(qū)動(dòng)的方法,屬于計(jì)算機(jī)技術(shù)領(lǐng)域。
背景技術(shù)
設(shè)備及其驅(qū)動(dòng)的管理是任何操作系統(tǒng)都必須具備的功能。操作系統(tǒng)通過(guò)驅(qū)動(dòng)程序來(lái)訪問(wèn)硬件設(shè)備,并通過(guò)驅(qū)動(dòng)程序的隔離,使操作系統(tǒng)不需要了解具體硬件的訪問(wèn)細(xì)節(jié)。
同時(shí),設(shè)備驅(qū)動(dòng)作為系統(tǒng)訪問(wèn)硬件的接口,其運(yùn)行模式必須與操作系統(tǒng)的運(yùn)行有機(jī)地結(jié)合起來(lái)。因而操作系統(tǒng)需要對(duì)設(shè)備驅(qū)動(dòng)程序的運(yùn)行進(jìn)行必要的管理和協(xié)調(diào),這些管理功能通常包括1)搜集硬件系統(tǒng)中的設(shè)備信息。這些設(shè)備信息可通過(guò)硬件本身的功能檢測(cè)得到,例如PCI總線上的設(shè)備;也可通過(guò)手工配置的方式,把設(shè)備信息添加到系統(tǒng)中。
2)對(duì)系統(tǒng)中的設(shè)備進(jìn)行標(biāo)識(shí),通過(guò)設(shè)備標(biāo)識(shí)能夠把設(shè)備與對(duì)應(yīng)的驅(qū)動(dòng)程序進(jìn)行匹配。例如在傳統(tǒng)的Unix系統(tǒng)中,通過(guò)主設(shè)備號(hào)和次設(shè)備號(hào)來(lái)標(biāo)識(shí)設(shè)備并找到其相應(yīng)的驅(qū)動(dòng)程序入口。
3)在上層應(yīng)用需要訪問(wèn)硬件設(shè)備時(shí),操作系統(tǒng)負(fù)責(zé)激活相應(yīng)的驅(qū)動(dòng)程序,通過(guò)驅(qū)動(dòng)程序?yàn)樯蠈討?yīng)用提供硬件訪問(wèn)接口。
4)操作系統(tǒng)協(xié)調(diào)設(shè)備驅(qū)動(dòng)程序的運(yùn)行,管理共享硬件資源,檢測(cè)及報(bào)告資源沖突,并為設(shè)備驅(qū)動(dòng)提供設(shè)備信息服務(wù)。
5)最后,操作系統(tǒng)還需要為設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)提供必要的支持手段。
傳統(tǒng)的操作系統(tǒng)中的設(shè)備管理子系統(tǒng)在完成上述必要的功能服務(wù)的同時(shí),通常也都存在以下三個(gè)的問(wèn)題第一,傳統(tǒng)的操作系統(tǒng),都沒(méi)有將驅(qū)動(dòng)程序構(gòu)件化。驅(qū)動(dòng)程序總是與操作系統(tǒng)綁定在一起,操作系統(tǒng)啟動(dòng)時(shí)加載所有的驅(qū)動(dòng)程序,而不管用戶是否使用到這個(gè)驅(qū)動(dòng)程序;這樣既耗費(fèi)CPU資源,也耗費(fèi)內(nèi)存資源。
第二,驅(qū)動(dòng)程序運(yùn)行在操作系統(tǒng)核內(nèi),而傳統(tǒng)操作系統(tǒng)中在核內(nèi)能進(jìn)行的操作是受限制的。例如不能訪問(wèn)文件系統(tǒng),不能訪問(wèn)標(biāo)準(zhǔn)輸入、輸出設(shè)備,不能使用一些在用戶態(tài)可以使用的許多標(biāo)準(zhǔn)函數(shù)及系統(tǒng)調(diào)用等。這些限制給驅(qū)動(dòng)程序的開(kāi)發(fā)帶來(lái)了極大的不便,驅(qū)動(dòng)程序員需要熟悉一大套與應(yīng)用開(kāi)發(fā)不一樣的開(kāi)發(fā)接口及編程約定,編寫驅(qū)動(dòng)程序的門檻由此變得很高。
第三,由于受到跨地址空間的約束,傳統(tǒng)操作系統(tǒng)中的驅(qū)動(dòng)程序上層接口大多都是以文件接口為基礎(chǔ)設(shè)計(jì)的。驅(qū)動(dòng)程序的開(kāi)發(fā)者無(wú)法根據(jù)設(shè)備特性定義自己的接口方法。

發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供一種基于構(gòu)件的操作系統(tǒng)動(dòng)態(tài)加載、卸載設(shè)備驅(qū)動(dòng)的方法,除實(shí)現(xiàn)傳統(tǒng)操作系統(tǒng)的所完成的常規(guī)設(shè)備及驅(qū)動(dòng)管理功能外,還將驅(qū)動(dòng)程序進(jìn)行構(gòu)件化,使得只有在應(yīng)用程序需要使用驅(qū)動(dòng)程序時(shí),驅(qū)動(dòng)程序才會(huì)被裝載并創(chuàng)建出驅(qū)動(dòng)構(gòu)件對(duì)象;而一旦驅(qū)動(dòng)構(gòu)件對(duì)象使用完畢,驅(qū)動(dòng)程序就會(huì)被刪除并卸載出內(nèi)存;合理而有效地使用CPU和內(nèi)存資源。
本發(fā)明的目的是這樣實(shí)現(xiàn)的一種基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,操作系統(tǒng)通過(guò)設(shè)備管理器管理所有的設(shè)備和驅(qū)動(dòng)構(gòu)件對(duì)象,構(gòu)件客戶程序通過(guò)設(shè)備管理器創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象,設(shè)備管理器與驅(qū)動(dòng)構(gòu)件對(duì)象通訊,驅(qū)動(dòng)構(gòu)件對(duì)象向構(gòu)件客戶程序提供應(yīng)用接口。
上述的設(shè)備管理器至少具有設(shè)備枚舉器接口,用于提供系統(tǒng)中所有的設(shè)備信息及其狀態(tài)信息;設(shè)備管理接口,用于提供創(chuàng)建設(shè)備驅(qū)動(dòng)構(gòu)件對(duì)象的功能;該設(shè)備枚舉器接口和設(shè)備管理接口提供給上層應(yīng)用;設(shè)備信息接口,提供給驅(qū)動(dòng)構(gòu)件對(duì)象,用于驅(qū)動(dòng)構(gòu)件對(duì)象從中獲得自己的設(shè)備信息。
上述的設(shè)備管理器通過(guò)系統(tǒng)的設(shè)備配置文件和/或設(shè)備枚舉器接口獲取設(shè)備信息,并在驅(qū)動(dòng)構(gòu)件對(duì)象初始化時(shí),將相應(yīng)的設(shè)備信息以設(shè)備信息接口參數(shù)的形式傳遞給驅(qū)動(dòng)構(gòu)件對(duì)象。
上述的設(shè)備管理器收集、管理系統(tǒng)中的所有設(shè)備信息,為每一個(gè)設(shè)備建立相應(yīng)的設(shè)備節(jié)點(diǎn),并使用設(shè)備標(biāo)識(shí)和設(shè)備號(hào)唯一地標(biāo)識(shí)系統(tǒng)中的每一個(gè)設(shè)備。
上述的驅(qū)動(dòng)構(gòu)件對(duì)象至少具有驅(qū)動(dòng)接口,用于驅(qū)動(dòng)構(gòu)件對(duì)象與設(shè)備管理器交互;應(yīng)用接口,用于應(yīng)用程序訪問(wèn)驅(qū)動(dòng)構(gòu)件對(duì)象。
上述的驅(qū)動(dòng)構(gòu)件對(duì)象還具有設(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口,用于提供設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口。
設(shè)備管理器創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象的具體過(guò)程為
步驟11使用COM規(guī)范規(guī)定的用于創(chuàng)建構(gòu)件對(duì)象的標(biāo)準(zhǔn)功能創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象;步驟12從驅(qū)動(dòng)構(gòu)件對(duì)象取設(shè)備標(biāo)識(shí)并根據(jù)設(shè)備識(shí)別找到相應(yīng)的設(shè)備節(jié)點(diǎn);步驟13如果沒(méi)有找到該設(shè)備節(jié)點(diǎn),則為驅(qū)動(dòng)構(gòu)件對(duì)象創(chuàng)建的新設(shè)備節(jié)點(diǎn);步驟14初始化設(shè)備的驅(qū)動(dòng)構(gòu)件對(duì)象;步驟15返回該驅(qū)動(dòng)構(gòu)件對(duì)象接口。
在創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象的步驟之前還進(jìn)一步包括步驟10檢測(cè)對(duì)應(yīng)的驅(qū)動(dòng)構(gòu)件對(duì)象是否已經(jīng)被激活,如果沒(méi)有激活則執(zhí)行步驟11;步驟10A如果已經(jīng)激活,則進(jìn)一步檢測(cè)該驅(qū)動(dòng)構(gòu)件對(duì)象是否可以共享;步驟10B如果可以共享,則返回該驅(qū)動(dòng)構(gòu)件對(duì)象接口,否則告知?jiǎng)?chuàng)建失敗。
在找到設(shè)備節(jié)點(diǎn)之后,還進(jìn)一步檢測(cè)該設(shè)備資源是否與已活動(dòng)的設(shè)備沖突,如果不沖突則執(zhí)行步驟14;否則告知?jiǎng)?chuàng)建失敗。
上述的沖突檢測(cè)為在找到與驅(qū)動(dòng)構(gòu)件對(duì)象相應(yīng)的設(shè)備信息后,將當(dāng)前新創(chuàng)建的驅(qū)動(dòng)構(gòu)件對(duì)象的設(shè)備信息與驅(qū)動(dòng)構(gòu)件對(duì)象已被創(chuàng)建的設(shè)備信息進(jìn)行比較,如果占用的設(shè)備資源相同或部分相同,則表明發(fā)生了沖突,否則則沒(méi)有沖突。
在初始化設(shè)備驅(qū)動(dòng)構(gòu)件對(duì)象之后,還進(jìn)一步包括步驟14A判斷設(shè)備節(jié)點(diǎn)信息中是否有中斷號(hào);如果沒(méi)有則執(zhí)行步驟15;
步驟14B進(jìn)一步查詢?cè)O(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口,如果查詢失敗則告知?jiǎng)?chuàng)建失?。徊襟E14C如果查詢成功則安裝中斷服務(wù)程序;執(zhí)行步驟15。
本發(fā)明的方法還進(jìn)一步包括當(dāng)驅(qū)動(dòng)構(gòu)件對(duì)象的引用結(jié)束時(shí),該驅(qū)動(dòng)構(gòu)件對(duì)象將自己刪除;具體的刪除過(guò)程至少包括步驟21當(dāng)驅(qū)動(dòng)構(gòu)件對(duì)象引用結(jié)束后,將引用計(jì)數(shù)值減1步驟22判斷該引用計(jì)數(shù)值是否為零;如果不是,則不刪除該驅(qū)動(dòng)構(gòu)件對(duì)象,并執(zhí)行步驟26;步驟23詢問(wèn)該驅(qū)動(dòng)構(gòu)件對(duì)象是否能被立即刪除,如果不能刪除則等待一預(yù)設(shè)的時(shí)間后重復(fù)執(zhí)行本步驟;步驟24注銷該驅(qū)動(dòng)構(gòu)件對(duì)象;步驟25刪除該驅(qū)動(dòng)構(gòu)件對(duì)象;步驟26返回引用計(jì)數(shù)值。
當(dāng)驅(qū)動(dòng)構(gòu)件對(duì)象被設(shè)定為常駐狀態(tài)時(shí);對(duì)應(yīng)的常駐驅(qū)動(dòng)構(gòu)件對(duì)象在引用結(jié)束時(shí)不被刪除;其具體的處理過(guò)程為當(dāng)常駐驅(qū)動(dòng)構(gòu)件對(duì)象的引用計(jì)數(shù)值為零時(shí),將該驅(qū)動(dòng)構(gòu)件對(duì)象設(shè)置為非激活狀態(tài);當(dāng)下次構(gòu)件客戶再次創(chuàng)建同樣的驅(qū)動(dòng)構(gòu)件對(duì)象時(shí),則直接返回已經(jīng)存在的驅(qū)動(dòng)構(gòu)件對(duì)象的接口,并將該驅(qū)動(dòng)構(gòu)件對(duì)象的狀態(tài)設(shè)置為激活狀態(tài)。
一種基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)實(shí)現(xiàn)的方法,至少根據(jù)如下的方式定義驅(qū)動(dòng)構(gòu)件通過(guò)聲明驅(qū)動(dòng)構(gòu)件類,使相應(yīng)的驅(qū)動(dòng)構(gòu)件類至少包含設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口。
所述的設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口至少包括獲取設(shè)備標(biāo)識(shí)的功能,用于返回驅(qū)動(dòng)對(duì)象所驅(qū)動(dòng)的設(shè)備的標(biāo)識(shí);使設(shè)備管理器與相應(yīng)的設(shè)備節(jié)點(diǎn)進(jìn)行匹配;驅(qū)動(dòng)對(duì)象初始化功能,用于使驅(qū)動(dòng)對(duì)象采用傳入的設(shè)備信息接口參數(shù)取得自己的設(shè)備信息;共享功能,用于標(biāo)識(shí)驅(qū)動(dòng)對(duì)象是否支持多線程、多進(jìn)程;可立即卸載功能,用于在驅(qū)動(dòng)對(duì)象將要被卸載時(shí)根據(jù)任務(wù)完成情況決定是否立即退出。
在聲明驅(qū)動(dòng)構(gòu)件類時(shí)還進(jìn)一步使該驅(qū)動(dòng)構(gòu)件類包含設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口;該入口至少由設(shè)備管理器自動(dòng)安裝,并在中斷發(fā)生時(shí)被調(diào)用。
所述的驅(qū)動(dòng)構(gòu)件通過(guò)如下的方法實(shí)現(xiàn)根據(jù)驅(qū)動(dòng)構(gòu)件的定義,在編譯時(shí)生成相應(yīng)驅(qū)動(dòng)構(gòu)件的源程序框架,并由驅(qū)動(dòng)開(kāi)發(fā)者實(shí)現(xiàn)所有相應(yīng)的功能。
所述的源程序框架中至少包括用戶自定義的上層應(yīng)用接口功能和設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口功能。所述的源程序框架中還包括有設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口。
本發(fā)明除實(shí)現(xiàn)了傳統(tǒng)操作系統(tǒng)的所完成的常規(guī)設(shè)備及驅(qū)動(dòng)管理功能外,還將驅(qū)動(dòng)程序進(jìn)行構(gòu)件化,使得只有在應(yīng)用程序需要使用驅(qū)動(dòng)程序時(shí),驅(qū)動(dòng)程序才會(huì)被裝載并創(chuàng)建出驅(qū)動(dòng)構(gòu)件對(duì)象;而一旦驅(qū)動(dòng)構(gòu)件對(duì)象使用完畢,驅(qū)動(dòng)程序就會(huì)被刪除并卸載出內(nèi)存;從而合理而有效地使用了CPU和內(nèi)存資源;與此同時(shí),運(yùn)行在操作系統(tǒng)核內(nèi)的驅(qū)動(dòng)程序不再受操作系統(tǒng)內(nèi)核的限制,開(kāi)發(fā)驅(qū)動(dòng)構(gòu)件和開(kāi)發(fā)普通的應(yīng)用構(gòu)件在可使用的系統(tǒng)調(diào)用及API上沒(méi)什么區(qū)別,因此降低了驅(qū)動(dòng)程序的開(kāi)發(fā)門檻;由于驅(qū)動(dòng)構(gòu)件不受跨地址空間的約束,可以自定義用戶接口,使得驅(qū)動(dòng)程序的開(kāi)發(fā)者可以根據(jù)設(shè)備特性定義自己的接口方法。


圖1為本發(fā)明總體結(jié)構(gòu)關(guān)系原理示意圖;圖2為本發(fā)明創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象實(shí)施例的流程圖;圖3為本發(fā)明刪除驅(qū)動(dòng)構(gòu)件對(duì)象實(shí)施例的流程圖。
具體實(shí)施例方式
以下結(jié)合附圖和具體的實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明本發(fā)明使操作系統(tǒng)可以通過(guò)設(shè)備管理器(DeviceManager),來(lái)管理操作系統(tǒng)中所有的設(shè)備與相應(yīng)的驅(qū)動(dòng)構(gòu)件對(duì)象。該操作系統(tǒng)的設(shè)備驅(qū)動(dòng)模型以構(gòu)件化的設(shè)備管理器為核心,并基于如下的原則實(shí)現(xiàn)首先,由設(shè)備管理器收集、管理操作系統(tǒng)中的所有的設(shè)備信息,并且為每一個(gè)設(shè)備建立一個(gè)設(shè)備節(jié)點(diǎn),并使用設(shè)備標(biāo)識(shí)與設(shè)備號(hào)來(lái)唯一標(biāo)識(shí)這些設(shè)備。
然后,把驅(qū)動(dòng)構(gòu)件對(duì)象作為設(shè)備的一個(gè)屬性,當(dāng)且僅當(dāng)相應(yīng)設(shè)備節(jié)點(diǎn)的驅(qū)動(dòng)構(gòu)件對(duì)象被創(chuàng)建出來(lái)以后后,該設(shè)備節(jié)點(diǎn)才成為被激活了的設(shè)備或活動(dòng)設(shè)備(Actived Device)。
再由設(shè)備管理器創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象,并使用設(shè)備標(biāo)識(shí)、設(shè)備號(hào)來(lái)匹配設(shè)備節(jié)點(diǎn)與驅(qū)動(dòng)構(gòu)件對(duì)象。
上述的驅(qū)動(dòng)構(gòu)件所實(shí)現(xiàn)的接口分為兩大類一是系統(tǒng)接口,它是系統(tǒng)定義的標(biāo)準(zhǔn)接口,由操作系統(tǒng)調(diào)用;二是上層用戶接口,由驅(qū)動(dòng)構(gòu)件的開(kāi)發(fā)者定義,并由驅(qū)動(dòng)構(gòu)件對(duì)象的客戶程序調(diào)用。
設(shè)備管理器管理驅(qū)動(dòng)構(gòu)件對(duì)象的創(chuàng)建及消亡過(guò)程,但不參與驅(qū)動(dòng)構(gòu)件對(duì)象的使用過(guò)程。
參見(jiàn)圖1,其為構(gòu)件化的設(shè)備管理器、驅(qū)動(dòng)構(gòu)件對(duì)象和構(gòu)件客戶程序之間實(shí)現(xiàn)設(shè)備驅(qū)動(dòng)的關(guān)系示意。其中,驅(qū)動(dòng)構(gòu)件對(duì)象實(shí)現(xiàn)了兩個(gè)標(biāo)準(zhǔn)系統(tǒng)接口設(shè)備驅(qū)動(dòng)接口IDriver及設(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口IDriverISR(可選),這兩個(gè)接口對(duì)上層構(gòu)件客戶程序是不可見(jiàn)的,只能由設(shè)備管理器使用,另外,驅(qū)動(dòng)構(gòu)件對(duì)象向客戶程序提供應(yīng)用接口A,可使客戶程序調(diào)用接口方法。
設(shè)備管理器提供設(shè)備信息接口IDeviceInfo給驅(qū)動(dòng)構(gòu)件對(duì)象,驅(qū)動(dòng)構(gòu)件對(duì)象可以從該設(shè)備信息接口中得到自己的設(shè)備信息。
此外,設(shè)備管理器還向上層應(yīng)用提供設(shè)備枚舉器接口IDeviceEnumerator和設(shè)備管理接口IDeviceManager。設(shè)備枚舉器接口IDeviceEnumerator用于列出系統(tǒng)中所有的設(shè)備信息及其狀態(tài);構(gòu)件客戶程序使用設(shè)備管理接口IDeviceManager中的建立驅(qū)動(dòng)功能(CreateDriver)來(lái)創(chuàng)建設(shè)備驅(qū)動(dòng)構(gòu)件對(duì)象。
要讓驅(qū)動(dòng)構(gòu)件對(duì)象能夠運(yùn)行在正確的設(shè)備上,操作系統(tǒng)中的所有設(shè)備需要有全局性的唯一標(biāo)識(shí)。本發(fā)明使用設(shè)備識(shí)別符號(hào)(DeviceId)和設(shè)備號(hào)(DeviceNo)來(lái)標(biāo)識(shí)設(shè)備。
其中,設(shè)備識(shí)別符號(hào)為字符串形式,用它可以將不同種類的設(shè)備區(qū)分開(kāi);例如串行口的設(shè)備識(shí)別符號(hào)是“COM”,IDE控制器的設(shè)備識(shí)別符號(hào)是“IDE”。設(shè)備號(hào)為數(shù)字形式,用以區(qū)分系統(tǒng)中的多個(gè)相同設(shè)備,通常從數(shù)值“1”開(kāi)始編號(hào)。例如第一個(gè)串行口的設(shè)備號(hào)為1,第二個(gè)串行口的設(shè)備號(hào)為2,以此類推。
與普通構(gòu)件不同的是驅(qū)動(dòng)構(gòu)件類的屬性欄里必須用相應(yīng)的關(guān)鍵字,例如“driver”,聲明這是一個(gè)驅(qū)動(dòng)構(gòu)件類。使用關(guān)鍵字“driver”,驅(qū)動(dòng)構(gòu)件對(duì)象包含了兩個(gè)隱含的標(biāo)準(zhǔn)系統(tǒng)接口設(shè)備驅(qū)動(dòng)接口IDriver及設(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口IDriverISR,這意味著驅(qū)動(dòng)構(gòu)件的編寫者必須實(shí)現(xiàn)這兩個(gè)接口。
設(shè)備驅(qū)動(dòng)接口IDriver是設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口,設(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口IDriverISR是設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口。
對(duì)不需要中斷服務(wù)程序的設(shè)備驅(qū)動(dòng)而言,可以使用關(guān)鍵字“noisr”聲明驅(qū)動(dòng)構(gòu)件類,這樣,編譯器在編譯設(shè)備驅(qū)動(dòng)構(gòu)件類時(shí)就不會(huì)把設(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口IDriverISR包含到構(gòu)件類之中。
設(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口IDriverISR中的中斷服務(wù)例程功能被作為驅(qū)動(dòng)的中斷服務(wù)程序入口,由設(shè)備管理器自動(dòng)安裝,并在中斷發(fā)生時(shí)被調(diào)用。
使用驅(qū)動(dòng)構(gòu)件的客戶端程序可以使用驅(qū)動(dòng)構(gòu)件類智能指針來(lái)實(shí)例化一個(gè)驅(qū)動(dòng)構(gòu)件對(duì)象。在此之前,可以先指定設(shè)備號(hào)(缺省值為1)。
參見(jiàn)圖2,設(shè)備管理器創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象的過(guò)程包括步驟10檢測(cè)對(duì)應(yīng)的驅(qū)動(dòng)構(gòu)件對(duì)象是否已經(jīng)被激活,如果沒(méi)有激活則執(zhí)行步驟11;步驟10A如果已經(jīng)激活,則進(jìn)一步檢測(cè)該驅(qū)動(dòng)構(gòu)件對(duì)象是否可以共享;步驟10B如果可以共享,則返回該驅(qū)動(dòng)構(gòu)件對(duì)象接口,否則告知?jiǎng)?chuàng)建失敗;步驟11使用COM規(guī)范規(guī)定的用于創(chuàng)建構(gòu)件對(duì)象的標(biāo)準(zhǔn)功能創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象;步驟12讀取設(shè)備標(biāo)識(shí)并根據(jù)設(shè)備識(shí)別找到相應(yīng)的設(shè)備節(jié)點(diǎn);在找到設(shè)備節(jié)點(diǎn)之后,還進(jìn)一步檢測(cè)該設(shè)備資源是否與已活動(dòng)的設(shè)備沖突,如果不沖突則執(zhí)行步驟14;否則告知?jiǎng)?chuàng)建失敗。
步驟13如果沒(méi)有找到該設(shè)備節(jié)點(diǎn),則為驅(qū)動(dòng)構(gòu)件對(duì)象創(chuàng)建的新設(shè)備節(jié)點(diǎn)步驟14初始化設(shè)備的驅(qū)動(dòng)構(gòu)件對(duì)象;步驟14A判斷設(shè)備節(jié)點(diǎn)信息中是否有中斷號(hào);如果沒(méi)有則執(zhí)行步驟15;步驟14B進(jìn)一步查詢?cè)O(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口,如果查詢失敗則告知?jiǎng)?chuàng)建失?。徊襟E14C如果查詢成功則安裝中斷服務(wù)程序;
步驟15返回該驅(qū)動(dòng)構(gòu)件對(duì)象接口。
與普通構(gòu)件一樣,一旦構(gòu)件客戶不再使用驅(qū)動(dòng)構(gòu)件對(duì)象,并且系統(tǒng)中沒(méi)有其它引用到驅(qū)動(dòng)構(gòu)件對(duì)象的地方,即驅(qū)動(dòng)構(gòu)件對(duì)象的引用計(jì)數(shù)變?yōu)榱銜r(shí),驅(qū)動(dòng)構(gòu)件對(duì)象把自己從內(nèi)存中刪除。所不同的是,驅(qū)動(dòng)構(gòu)件對(duì)象在刪除自己之前,首先會(huì)確定該驅(qū)動(dòng)構(gòu)件對(duì)象能否立即被刪除,最后并且通知設(shè)備管理器,以便設(shè)備管理器能夠正確地維護(hù)和管理設(shè)備狀態(tài)。
參見(jiàn)圖3,驅(qū)動(dòng)構(gòu)件對(duì)象的刪除包括步驟21當(dāng)驅(qū)動(dòng)構(gòu)件對(duì)象引用結(jié)束后,將引用計(jì)數(shù)值減1步驟22判斷該引用計(jì)數(shù)值是否為零;如果不是,則不刪除該驅(qū)動(dòng)構(gòu)件對(duì)象,并執(zhí)行步驟26;步驟23詢問(wèn)該驅(qū)動(dòng)構(gòu)件對(duì)象是否能被立即刪除,如果不能刪除則等待一預(yù)設(shè)的時(shí)間后重復(fù)執(zhí)行本步驟;步驟24注銷該驅(qū)動(dòng)構(gòu)件對(duì)象;步驟25刪除該驅(qū)動(dòng)構(gòu)件對(duì)象;步驟26返回引用計(jì)數(shù)值。
在創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象的過(guò)程中,設(shè)備管理器在找到與驅(qū)動(dòng)構(gòu)件對(duì)象相應(yīng)的設(shè)備信息后,首先會(huì)檢查該設(shè)備占用的資源是否與其它設(shè)備沖突。檢測(cè)的內(nèi)容包括中斷號(hào)、I/O地址、內(nèi)存映像地址以及直接存儲(chǔ)器存取(DMA)通道號(hào)等。
傳統(tǒng)操作系統(tǒng),如Unix、Windows等的資源沖突檢測(cè)是靜態(tài)的,是把設(shè)備資源與系統(tǒng)中其它所有的設(shè)備資源進(jìn)行比較,以確定是否沖突。由于本發(fā)明操作系統(tǒng)的驅(qū)動(dòng)構(gòu)件對(duì)象可以動(dòng)態(tài)裝載和卸載,因此設(shè)備管理器確定資源是否沖突的方法也是動(dòng)態(tài)的,即該方法是把當(dāng)前的新創(chuàng)建的驅(qū)動(dòng)構(gòu)件對(duì)象的設(shè)備信息與其它活動(dòng)設(shè)備(驅(qū)動(dòng)構(gòu)件對(duì)象已經(jīng)被創(chuàng)建的設(shè)備)信息進(jìn)行比較。
這種動(dòng)態(tài)資源沖突檢測(cè)的優(yōu)點(diǎn)在于一些系統(tǒng)硬件資源可以復(fù)用。只要兩個(gè)設(shè)備的驅(qū)動(dòng)構(gòu)件不會(huì)同時(shí)啟用,就可以使用相同的硬件資源。例如系統(tǒng)上聲卡使用直接存儲(chǔ)器存取(DMA)通道1,光驅(qū)也使用DMA通道1,但只要不同時(shí)使用聲卡和光驅(qū),就不會(huì)出現(xiàn)資源沖突。
在設(shè)備管理器調(diào)用設(shè)備驅(qū)動(dòng)接口IDriver初始化驅(qū)動(dòng)構(gòu)件對(duì)象時(shí),會(huì)傳入一個(gè)設(shè)備信息接口參數(shù)。驅(qū)動(dòng)構(gòu)件對(duì)象通過(guò)該設(shè)備信息接口取得自己的設(shè)備相關(guān)的信息。
驅(qū)動(dòng)構(gòu)件開(kāi)發(fā)者比較重要的是設(shè)備所占用的硬件資源,如I/O地址、內(nèi)存地址、DMA通道號(hào)等。由于中斷服務(wù)程序是由設(shè)備管理器自動(dòng)安裝,所以驅(qū)動(dòng)構(gòu)件的實(shí)現(xiàn)通常不需要關(guān)心中斷號(hào)。
對(duì)有些設(shè)備,如硬盤、網(wǎng)卡等,由于它們經(jīng)常使用,不希望其驅(qū)動(dòng)構(gòu)件對(duì)象頻繁地被創(chuàng)建和刪除,從而影響操作系統(tǒng)的效率。因此需要一種能夠支持常駐型驅(qū)動(dòng)程序開(kāi)發(fā)的機(jī)制。本發(fā)明的解決辦法是在定義驅(qū)動(dòng)構(gòu)件時(shí),聲明驅(qū)動(dòng)構(gòu)件為常駐狀態(tài),一旦驅(qū)動(dòng)構(gòu)件被聲明為常駐,該常駐驅(qū)動(dòng)構(gòu)件對(duì)象不會(huì)在引用計(jì)數(shù)變?yōu)榱銜r(shí)真正刪除掉該驅(qū)動(dòng)構(gòu)件對(duì)象。實(shí)際上,在常駐驅(qū)動(dòng)構(gòu)件對(duì)象的引用計(jì)數(shù)變?yōu)榱銜r(shí),該驅(qū)動(dòng)構(gòu)件對(duì)象通知設(shè)備管理器,設(shè)備管理器則將這個(gè)驅(qū)動(dòng)構(gòu)件對(duì)象置為非激活狀態(tài);在下次構(gòu)件客戶創(chuàng)建同樣的驅(qū)動(dòng)構(gòu)件對(duì)象時(shí),設(shè)備管理器直接將已經(jīng)存在的驅(qū)動(dòng)構(gòu)件對(duì)象的接口返回,并將驅(qū)動(dòng)構(gòu)件對(duì)象的狀態(tài)設(shè)置為激活狀態(tài)。
本發(fā)明中,設(shè)備管理器通過(guò)兩種渠道收集設(shè)備信息一是從操作系統(tǒng)標(biāo)準(zhǔn)的設(shè)備配置文件讀入設(shè)備信息;二是通過(guò)設(shè)備枚舉器驅(qū)動(dòng)獲取設(shè)備信息。得到的設(shè)備信息以鏈表形式存放以便于檢索。并在調(diào)用驅(qū)動(dòng)構(gòu)件對(duì)象的初始化功能時(shí),將相應(yīng)的設(shè)備信息以設(shè)備信息接口參數(shù)的形式傳遞給驅(qū)動(dòng)構(gòu)件對(duì)象。
如上所述,設(shè)備管理器通過(guò)設(shè)備枚舉器驅(qū)動(dòng)獲取設(shè)備信息時(shí),設(shè)備枚舉器接口列出設(shè)備枚舉器中的所有設(shè)備信息,然后通過(guò)如下的功能檢測(cè)到相應(yīng)的設(shè)備信息1、取當(dāng)前設(shè)備節(jié)點(diǎn)的信息;2、移至下一個(gè)設(shè)備節(jié)點(diǎn);3、恢復(fù)到初始狀態(tài)。
典型的設(shè)備枚舉器驅(qū)動(dòng)是各種總線及控制器驅(qū)動(dòng)。例如周邊元件擴(kuò)展接口(PCI)總線驅(qū)動(dòng),通過(guò)其枚舉器接口可以得到PCI總線上自動(dòng)檢測(cè)到的所有設(shè)備信息。設(shè)備管理器在創(chuàng)建新的設(shè)備驅(qū)動(dòng)構(gòu)件對(duì)象時(shí),總會(huì)檢查該驅(qū)動(dòng)構(gòu)件對(duì)象是否支持設(shè)備枚舉器接口,如果支持,則通過(guò)該接口取出枚舉器里的所有設(shè)備信息。
在本發(fā)明的實(shí)施例中,驅(qū)動(dòng)構(gòu)件通過(guò)如下的方式實(shí)現(xiàn)定義一個(gè)驅(qū)動(dòng)構(gòu)件類,該驅(qū)動(dòng)構(gòu)件類與普通構(gòu)件不同的是,驅(qū)動(dòng)構(gòu)件類的必須用相應(yīng)的關(guān)鍵字(例如driver)來(lái)聲明該構(gòu)件類為一驅(qū)動(dòng)構(gòu)件類。事實(shí)上,該聲明用于使驅(qū)動(dòng)構(gòu)件類包含兩個(gè)隱含的標(biāo)準(zhǔn)系統(tǒng)接口設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口和設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口。
對(duì)有些不需要中斷服務(wù)程序的設(shè)備驅(qū)動(dòng)而言,可以使用相應(yīng)的關(guān)鍵字(例如noisr)聲明驅(qū)動(dòng)構(gòu)件類不需要中斷服務(wù)程序,這樣,在編譯該設(shè)備驅(qū)動(dòng)構(gòu)件類時(shí)就不會(huì)將設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口包含到構(gòu)件類之中。
在上述定義的驅(qū)動(dòng)構(gòu)件類中至少應(yīng)包括獲取設(shè)備標(biāo)識(shí)、初始化、對(duì)象共享以及可立即卸載等功能;其中獲取設(shè)備標(biāo)識(shí)功能用于返回驅(qū)動(dòng)對(duì)象所驅(qū)動(dòng)的設(shè)備的標(biāo)識(shí),設(shè)備管理器用它與相應(yīng)的設(shè)備節(jié)點(diǎn)進(jìn)行匹配;初始化是驅(qū)動(dòng)對(duì)象被創(chuàng)建后調(diào)用的第一個(gè)功能,用于驅(qū)動(dòng)對(duì)象的初始化;驅(qū)動(dòng)對(duì)象可通過(guò)傳入的設(shè)備信息接口參數(shù)取得自己的設(shè)備信息;共享功能用于標(biāo)識(shí)驅(qū)動(dòng)對(duì)象是否支持多線程或多進(jìn)程;可立即卸載功能在驅(qū)動(dòng)對(duì)象將要卸載時(shí)被調(diào)用,這實(shí)際上是給驅(qū)動(dòng)對(duì)象一個(gè)選擇機(jī)會(huì),以根據(jù)任務(wù)完成情況決定是否立即退出。
設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口中包含有中斷服務(wù)例程功能,其被作為驅(qū)動(dòng)的中斷服務(wù)程序入口,由設(shè)備管理器自動(dòng)安裝,并在中斷發(fā)生時(shí)被調(diào)用。
在定義了驅(qū)動(dòng)構(gòu)件后,可以通過(guò)運(yùn)行特定的編譯工具生成驅(qū)動(dòng)構(gòu)件的源程序框架。生成的源程序框架中,除了包括用戶自定義的上層應(yīng)用接口功能外,還包括上述的設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口和設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口(如果用戶沒(méi)有指定“noisr”屬性的話)接口中的所有功能。驅(qū)動(dòng)開(kāi)發(fā)者可按指定的語(yǔ)義實(shí)現(xiàn)所有這些功能。
設(shè)備管理器調(diào)用上述的初始化功能初始化驅(qū)動(dòng)對(duì)象時(shí),會(huì)傳入一個(gè)設(shè)備信息(IdeviceInfo)接口參數(shù)。驅(qū)動(dòng)對(duì)象通過(guò)IDeviceInfo可以取得自己的設(shè)備相關(guān)信息。其中對(duì)驅(qū)動(dòng)構(gòu)件開(kāi)發(fā)者比較重要的是設(shè)備所占用的硬件資源,如I/O地址、內(nèi)存地址、DMA通道號(hào)等。由于中斷服務(wù)程序可由設(shè)備管理器自動(dòng)安裝,所以驅(qū)動(dòng)構(gòu)件的實(shí)現(xiàn)通常不需要關(guān)心中斷號(hào)。
最后應(yīng)說(shuō)明的是以上實(shí)施例僅用以說(shuō)明本發(fā)明而并非限制本發(fā)明所描述的技術(shù)方案;因此,盡管本說(shuō)明書參照上述的各個(gè)實(shí)施例對(duì)本發(fā)明已進(jìn)行了詳細(xì)的說(shuō)明,但是,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,仍然可以對(duì)本發(fā)明進(jìn)行修改或者等同替換;而一切不脫離本發(fā)明的精神和范圍的技術(shù)方案及其改進(jìn),其均應(yīng)涵蓋在本發(fā)明的權(quán)利要求范圍當(dāng)中。
權(quán)利要求
1.一種基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于操作系統(tǒng)通過(guò)設(shè)備管理器管理所有的設(shè)備和驅(qū)動(dòng)構(gòu)件對(duì)象,構(gòu)件客戶程序通過(guò)設(shè)備管理器創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象,設(shè)備管理器與驅(qū)動(dòng)構(gòu)件對(duì)象通訊,驅(qū)動(dòng)構(gòu)件對(duì)象向構(gòu)件客戶程序提供應(yīng)用接口。
2.根據(jù)權(quán)利要求1所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于所述的設(shè)備管理器至少具有設(shè)備枚舉器接口,用于提供系統(tǒng)中所有的設(shè)備信息及其狀態(tài)信息;設(shè)備管理接口,用于提供創(chuàng)建設(shè)備驅(qū)動(dòng)構(gòu)件對(duì)象的功能;該設(shè)備枚舉器接口和設(shè)備管理接口提供給上層應(yīng)用;設(shè)備信息接口,提供給驅(qū)動(dòng)構(gòu)件對(duì)象,用于驅(qū)動(dòng)構(gòu)件對(duì)象從中獲得自己的設(shè)備信息。
3.根據(jù)權(quán)利要求2所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于所述的設(shè)備管理器通過(guò)系統(tǒng)的設(shè)備配置文件和/或設(shè)備枚舉器接口獲取設(shè)備信息,并在驅(qū)動(dòng)構(gòu)件對(duì)象初始化時(shí),將相應(yīng)的設(shè)備信息以設(shè)備信息接口參數(shù)的形式傳遞給驅(qū)動(dòng)構(gòu)件對(duì)象。
4.根據(jù)權(quán)利要求1或2或3所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于所述的設(shè)備管理器收集、管理系統(tǒng)中的所有設(shè)備信息,為每一個(gè)設(shè)備建立相應(yīng)的設(shè)備節(jié)點(diǎn),并使用設(shè)備標(biāo)識(shí)和設(shè)備號(hào)唯一地標(biāo)識(shí)系統(tǒng)中的每一個(gè)設(shè)備。
5.根據(jù)權(quán)利要求1所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于所述的驅(qū)動(dòng)構(gòu)件對(duì)象至少具有驅(qū)動(dòng)接口,用于驅(qū)動(dòng)構(gòu)件對(duì)象與設(shè)備管理器交互;應(yīng)用接口,用于應(yīng)用程序訪問(wèn)驅(qū)動(dòng)構(gòu)件對(duì)象。
6.根據(jù)權(quán)利要求5所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于所述的驅(qū)動(dòng)構(gòu)件對(duì)象還具有設(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口,用于提供設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口。
7.根據(jù)權(quán)利要求1所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于設(shè)備管理器創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象的具體過(guò)程為步驟11使用COM規(guī)范規(guī)定的用于創(chuàng)建構(gòu)件對(duì)象的標(biāo)準(zhǔn)功能創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象;步驟12從驅(qū)動(dòng)構(gòu)件對(duì)象取設(shè)備標(biāo)識(shí)并根據(jù)設(shè)備識(shí)別找到相應(yīng)的設(shè)備節(jié)點(diǎn);步驟13如果沒(méi)有找到該設(shè)備節(jié)點(diǎn),則為驅(qū)動(dòng)構(gòu)件對(duì)象創(chuàng)建的新設(shè)備節(jié)點(diǎn);步驟14初始化設(shè)備的驅(qū)動(dòng)構(gòu)件對(duì)象;步驟15返回該驅(qū)動(dòng)構(gòu)件對(duì)象接口。
8.根據(jù)權(quán)利要求7所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于在創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象之前還包括步驟10檢測(cè)對(duì)應(yīng)的驅(qū)動(dòng)構(gòu)件對(duì)象是否已經(jīng)被激活,如果沒(méi)有激活則執(zhí)行步驟11;步驟10A如果已經(jīng)激活,則進(jìn)一步檢測(cè)該驅(qū)動(dòng)構(gòu)件對(duì)象是否可以共享;步驟10B如果可以共享,則返回該驅(qū)動(dòng)構(gòu)件對(duì)象接口,否則告知?jiǎng)?chuàng)建失敗。
9.根據(jù)權(quán)利要求7所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于在找到設(shè)備節(jié)點(diǎn)之后,還進(jìn)一步檢測(cè)該設(shè)備資源是否與已活動(dòng)的設(shè)備沖突,如果不沖突則執(zhí)行步驟14;否則告知?jiǎng)?chuàng)建失敗。
10.根據(jù)權(quán)利要求9所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于所述的沖突檢測(cè)為在找到與驅(qū)動(dòng)構(gòu)件對(duì)象相應(yīng)的設(shè)備信息后,將當(dāng)前新創(chuàng)建的驅(qū)動(dòng)構(gòu)件對(duì)象的設(shè)備信息與驅(qū)動(dòng)構(gòu)件對(duì)象已被創(chuàng)建的設(shè)備信息進(jìn)行比較,如果占用的設(shè)備資源相同或部分相同,則表明發(fā)生了沖突,否則沒(méi)有沖突。
11.根據(jù)權(quán)利要求7所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于在初始化設(shè)備驅(qū)動(dòng)構(gòu)件對(duì)象之后,還進(jìn)一步包括步驟14A判斷設(shè)備節(jié)點(diǎn)信息中是否有中斷號(hào);如果沒(méi)有則執(zhí)行步驟15;步驟14B進(jìn)一步查詢?cè)O(shè)備驅(qū)動(dòng)中斷服務(wù)例程接口,如果查詢失敗則告知?jiǎng)?chuàng)建失??;步驟14C如果查詢成功則安裝中斷服務(wù)程序;執(zhí)行步驟15。
12.根據(jù)權(quán)利要求1所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于該方法還進(jìn)一步包括當(dāng)驅(qū)動(dòng)構(gòu)件對(duì)象的引用結(jié)束時(shí),該驅(qū)動(dòng)構(gòu)件對(duì)象將自己刪除;具體的刪除過(guò)程至少包括步驟21當(dāng)驅(qū)動(dòng)構(gòu)件對(duì)象引用結(jié)束后,將引用計(jì)數(shù)值減1步驟22判斷該引用計(jì)數(shù)值是否為零;如果不是,則不刪除該驅(qū)動(dòng)構(gòu)件對(duì)象,并執(zhí)行步驟26;步驟23詢問(wèn)該驅(qū)動(dòng)構(gòu)件對(duì)象是否能被立即刪除,如果不能刪除則等待一預(yù)設(shè)的時(shí)間后重復(fù)執(zhí)行本步驟;步驟24注銷該驅(qū)動(dòng)構(gòu)件對(duì)象;步驟25刪除該驅(qū)動(dòng)構(gòu)件對(duì)象;步驟26返回引用計(jì)數(shù)值。
13.根據(jù)權(quán)利要求1或12所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)的方法,其特征在于當(dāng)驅(qū)動(dòng)構(gòu)件對(duì)象被設(shè)定為常駐狀態(tài)時(shí);對(duì)應(yīng)的常駐驅(qū)動(dòng)構(gòu)件對(duì)象在引用結(jié)束時(shí)不被刪除;其具體的處理過(guò)程為當(dāng)常駐驅(qū)動(dòng)構(gòu)件對(duì)象的引用計(jì)數(shù)值為零時(shí),將該驅(qū)動(dòng)構(gòu)件對(duì)象設(shè)置為非激活狀態(tài);當(dāng)下次構(gòu)件客戶再次創(chuàng)建同樣的驅(qū)動(dòng)構(gòu)件對(duì)象時(shí),則直接返回已經(jīng)存在的驅(qū)動(dòng)構(gòu)件對(duì)象的接口,并將該驅(qū)動(dòng)構(gòu)件對(duì)象的狀態(tài)設(shè)置為激活狀態(tài)。
14.一種基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)實(shí)現(xiàn)的方法,其特征在于至少根據(jù)如下的方式定義驅(qū)動(dòng)構(gòu)件通過(guò)聲明驅(qū)動(dòng)構(gòu)件類,使相應(yīng)的驅(qū)動(dòng)構(gòu)件類至少包含設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口。
15.根據(jù)權(quán)利要求14所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)實(shí)現(xiàn)的方法,其特征在于所述的設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口至少包括獲取設(shè)備標(biāo)識(shí)的功能,用于返回驅(qū)動(dòng)對(duì)象所驅(qū)動(dòng)的設(shè)備的標(biāo)識(shí);使設(shè)備管理器與相應(yīng)的設(shè)備節(jié)點(diǎn)進(jìn)行匹配;驅(qū)動(dòng)對(duì)象初始化功能,用于使驅(qū)動(dòng)對(duì)象采用傳入的設(shè)備信息接口參數(shù)取得自己的設(shè)備信息;共享功能,用于標(biāo)識(shí)驅(qū)動(dòng)對(duì)象是否支持多線程、多進(jìn)程;可立即卸載功能,用于在驅(qū)動(dòng)對(duì)象將要被卸載時(shí)根據(jù)任務(wù)完成情況決定是否立即退出。
16.根據(jù)權(quán)利要求14所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)實(shí)現(xiàn)的方法,其特征在于在聲明驅(qū)動(dòng)構(gòu)件類時(shí)還進(jìn)一步使該驅(qū)動(dòng)構(gòu)件類包含設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口;該入口至少由設(shè)備管理器自動(dòng)安裝,并在中斷發(fā)生時(shí)被調(diào)用。
17.根據(jù)權(quán)利要求14或16所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)實(shí)現(xiàn)的方法,其特征在于所述的驅(qū)動(dòng)構(gòu)件通過(guò)如下的方法實(shí)現(xiàn)根據(jù)驅(qū)動(dòng)構(gòu)件的定義,在編譯時(shí)生成相應(yīng)驅(qū)動(dòng)構(gòu)件的源程序框架,并由驅(qū)動(dòng)開(kāi)發(fā)者實(shí)現(xiàn)所有相應(yīng)的功能。
18.根據(jù)權(quán)利要求17所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)實(shí)現(xiàn)的方法,其特征在于所述的源程序框架中至少包括用戶自定義的上層應(yīng)用接口功能和設(shè)備驅(qū)動(dòng)構(gòu)件向設(shè)備管理器提供的交互接口功能。
19.根據(jù)權(quán)利要求18所述的基于構(gòu)件的操作系統(tǒng)設(shè)備動(dòng)態(tài)驅(qū)動(dòng)實(shí)現(xiàn)的方法,其特征在于所述的源程序框架中還進(jìn)一步包括設(shè)備驅(qū)動(dòng)中斷服務(wù)例程的入口。
全文摘要
一種基于構(gòu)件的操作系統(tǒng)動(dòng)態(tài)設(shè)備驅(qū)動(dòng)的方法,操作系統(tǒng)通過(guò)設(shè)備管理器管理所有的設(shè)備和驅(qū)動(dòng)構(gòu)件對(duì)象,客戶程序通過(guò)設(shè)備管理器創(chuàng)建驅(qū)動(dòng)構(gòu)件對(duì)象,設(shè)備管理器與驅(qū)動(dòng)構(gòu)件對(duì)象通訊,驅(qū)動(dòng)構(gòu)件對(duì)象向客戶程序提供應(yīng)用接口。本發(fā)明將驅(qū)動(dòng)程序進(jìn)行構(gòu)件化,使得只有在應(yīng)用程序需要使用驅(qū)動(dòng)程序時(shí),驅(qū)動(dòng)程序才會(huì)被裝載并創(chuàng)建出驅(qū)動(dòng)構(gòu)件對(duì)象;一旦驅(qū)動(dòng)構(gòu)件對(duì)象使用完畢,驅(qū)動(dòng)程序就會(huì)被刪除并卸載出內(nèi)存。
文檔編號(hào)G06F9/46GK1512335SQ0215947
公開(kāi)日2004年7月14日 申請(qǐng)日期2002年12月31日 優(yōu)先權(quán)日2002年12月31日
發(fā)明者陳榕, 蘇翼鵬, 杜永文, 鄧康, 榕 陳 申請(qǐng)人:北京科泰世紀(jì)科技有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1