欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

調(diào)度驅(qū)動(dòng)程序?yàn)椴划a(chǎn)生中斷的設(shè)備實(shí)現(xiàn)使用時(shí)間估計(jì)的協(xié)議的方法和裝置的制作方法

文檔序號(hào):6471817閱讀:238來源:國知局
專利名稱:調(diào)度驅(qū)動(dòng)程序?yàn)椴划a(chǎn)生中斷的設(shè)備實(shí)現(xiàn)使用時(shí)間估計(jì)的協(xié)議的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)。特別說,本發(fā)明涉及一個(gè)調(diào)度驅(qū)動(dòng)程序,它使用時(shí)間估計(jì)實(shí)現(xiàn)一個(gè)協(xié)議,用于不產(chǎn)生中斷的設(shè)備。
背景技術(shù)
一般,驅(qū)動(dòng)程序是一個(gè)控制設(shè)備的程序。每一個(gè)設(shè)備,諸如打印機(jī)、磁盤驅(qū)動(dòng)器、或鍵盤,都需要有一個(gè)驅(qū)動(dòng)程序與計(jì)算機(jī)協(xié)作。許多驅(qū)動(dòng)程序,諸如鍵盤驅(qū)動(dòng)程序,與操作系統(tǒng)一起提供。對(duì)于其它設(shè)備,需要在把該設(shè)備連接到計(jì)算機(jī)上時(shí)加載驅(qū)動(dòng)程序。驅(qū)動(dòng)程序的作用像在設(shè)備和使用該設(shè)備的應(yīng)用程序之間的翻譯器。每一設(shè)備有它自己的特殊命令集,這只有它的驅(qū)動(dòng)程序知道。反之,大多數(shù)應(yīng)用程序使用普通命令訪問驅(qū)動(dòng)設(shè)備。因此,驅(qū)動(dòng)程序從應(yīng)用程序接受普通命令,把它們翻譯成為這些設(shè)備的專門的命令。
大多數(shù)設(shè)備驅(qū)動(dòng)程序使用下面的步驟序列處理硬件請(qǐng)求1.啟動(dòng)一個(gè)硬件請(qǐng)求或者在它忙時(shí)把它放在一個(gè)隊(duì)列中,2.當(dāng)設(shè)備產(chǎn)生中斷時(shí),當(dāng)前請(qǐng)求已經(jīng)完成。在此點(diǎn),返回請(qǐng)求結(jié)果給應(yīng)用程序,并啟動(dòng)隊(duì)列中的下一請(qǐng)求。
通常,每一應(yīng)用程序使用一個(gè)同步調(diào)用來執(zhí)行它的請(qǐng)求。操作系統(tǒng)(O/S)在驅(qū)動(dòng)程序完成請(qǐng)求時(shí)返回控制給應(yīng)用程序,這在設(shè)備產(chǎn)生中斷時(shí)發(fā)生。
然而,當(dāng)處理不產(chǎn)生中斷的慢設(shè)備時(shí)會(huì)發(fā)生問題。不幸的是,用于不產(chǎn)生中斷的設(shè)備的大多數(shù)驅(qū)動(dòng)程序不具有在競(jìng)爭(zhēng)應(yīng)用程序之間對(duì)設(shè)備公平訪問的機(jī)構(gòu),而趨向于使用中央處理單元(CPU)的處理時(shí)間無效地調(diào)和競(jìng)爭(zhēng)應(yīng)用程序。例如,一些用于這類設(shè)備的驅(qū)動(dòng)程序輪詢?cè)O(shè)備寄存器以決定I/O完成。不幸的是,使用這類驅(qū)動(dòng)程序,應(yīng)用程序在設(shè)備處理期間經(jīng)常暫?;蛲V箞?zhí)行以等待輸入/輸出(I/O)請(qǐng)求的完成,或執(zhí)行超量的I/O請(qǐng)求,這兩者都不必要地浪費(fèi)了CPU的處理時(shí)間。


從本發(fā)明下面的說明,本發(fā)明的特征和優(yōu)點(diǎn)將變得十分明顯,其中,圖1是示意圖,表示一個(gè)計(jì)算機(jī)系統(tǒng)環(huán)境實(shí)例,在其中實(shí)現(xiàn)本發(fā)明的一個(gè)實(shí)施例。
圖2表示根據(jù)本發(fā)明的一個(gè)實(shí)施例用于一個(gè)應(yīng)用程序的處理的流程圖,該應(yīng)用程序與調(diào)度程序交互作用,并使用時(shí)間估計(jì)執(zhí)行對(duì)一個(gè)設(shè)備的輸入/輸出(I/O)事務(wù)處理。
圖3表示根據(jù)本發(fā)明的一個(gè)實(shí)施例用于調(diào)度驅(qū)動(dòng)程序的處理的流程圖,為開始一個(gè)I/O請(qǐng)求和給應(yīng)用程序提供為一個(gè)I/O事務(wù)處理估計(jì)的處理時(shí)間。
圖4表示根據(jù)本發(fā)明的一個(gè)實(shí)施例用于調(diào)度驅(qū)動(dòng)程序的處理的流程圖,為給應(yīng)用程序提供I/O操作結(jié)果或給所述應(yīng)用程序提供為要完成的I/O事務(wù)處理剩余的估計(jì)處理時(shí)間。
具體實(shí)施例方式
本發(fā)明提供一種用于調(diào)度驅(qū)動(dòng)程序的方法和裝置,它使用時(shí)間估計(jì)實(shí)現(xiàn)一個(gè)協(xié)議,用于不產(chǎn)生中斷的設(shè)備。應(yīng)用程序調(diào)用該調(diào)度驅(qū)動(dòng)程序以開始對(duì)一個(gè)設(shè)備的輸入/輸出(I/O)請(qǐng)求。該調(diào)度驅(qū)動(dòng)程序決定設(shè)備是否忙。如果設(shè)備不忙,則調(diào)度驅(qū)動(dòng)程序啟動(dòng)對(duì)該設(shè)備的I/O請(qǐng)求,和給應(yīng)用程序提供為要完成的I/O請(qǐng)求的估計(jì)的處理時(shí)間(EPT)。
在一個(gè)實(shí)施例中,如果設(shè)備忙,則調(diào)度驅(qū)動(dòng)程序計(jì)算到該設(shè)備可為應(yīng)用程序使用時(shí)估計(jì)的剩下的時(shí)間量(EATL),并提供這一EATL給應(yīng)用程序。當(dāng)設(shè)備不忙時(shí),應(yīng)用程序休息估計(jì)的處理時(shí)間(EPT)并調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果。如果I/O請(qǐng)求已經(jīng)完成,則調(diào)度驅(qū)動(dòng)程序給應(yīng)用程序提供I/O操作結(jié)果。
然而,如果I/O請(qǐng)求尚未完成,則調(diào)度驅(qū)動(dòng)程序?yàn)橐瓿傻腎/O請(qǐng)求計(jì)算估計(jì)的剩余處理時(shí)間(EPTR)并提供該EPTR給應(yīng)用程序。然后應(yīng)用程序休息估計(jì)的剩余處理時(shí)間(EPTR),并再次調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果。這些操作可以重復(fù),直到I/O請(qǐng)求完成。
在下面的說明中,將詳細(xì)說明本發(fā)明的各種實(shí)施例。然而,包含這些細(xì)節(jié)是為了方便理解本發(fā)明和為說明為實(shí)現(xiàn)本發(fā)明的例示實(shí)施例。不應(yīng)該使用這些細(xì)節(jié)來限制本發(fā)明到所說明的特定的實(shí)施例,因?yàn)樵诒景l(fā)明的范圍內(nèi)仍然可以有其它變種和實(shí)施例。此外,雖然敘述了大量細(xì)節(jié)以便提供徹底理解本發(fā)明,但是對(duì)熟悉本技術(shù)領(lǐng)域的人顯然,為實(shí)現(xiàn)本發(fā)明這些細(xì)節(jié)不是必需的。在其它場(chǎng)合,諸如公知的電氣結(jié)構(gòu)和電路這些細(xì)節(jié)以方框圖形式表示,以便不模糊本發(fā)明。
圖1是一個(gè)示意圖,表示一個(gè)示例計(jì)算機(jī)系統(tǒng)環(huán)境,在其中實(shí)現(xiàn)本發(fā)明的一個(gè)實(shí)施例。本發(fā)明可以以一個(gè)主計(jì)算機(jī)100實(shí)現(xiàn)。主計(jì)算機(jī)100可以包括至少一個(gè)中央處理單元(CPU)110,主總線120,存儲(chǔ)器控制器集線器(MCH)130,系統(tǒng)存儲(chǔ)器140,輸入/輸出控制器集線器(ICH)150,非易失存儲(chǔ)器、或系統(tǒng)閃存160,和至少一個(gè)輸入/輸出(I/O)設(shè)備170。I/O設(shè)備170可以包括監(jiān)視器172,鍵盤174,調(diào)制解調(diào)器178,打印機(jī)180,和存儲(chǔ)設(shè)備182(例如光盤驅(qū)動(dòng)器,硬盤驅(qū)動(dòng)器,軟盤驅(qū)動(dòng)器等),以及其它任何類型的I/O設(shè)備。
MCH 130可以集成到集成多種功能的芯片組中,諸如存儲(chǔ)器控制器和主從總線接口。相似地,ICH 150可以與MCH 130一起或分開集成到一個(gè)芯片組中以執(zhí)行I/O功能。為清楚起見,未表示出所有的外設(shè)總線??梢韵胍?,主計(jì)算機(jī)100還可以包括諸如外設(shè)部件互連(PCI)、加速圖形端口(AGP)、工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA)總線、和通用串行總線(USB)等外設(shè)總線。
CPU 110表示任何結(jié)構(gòu)類型的中央處理單元,諸如復(fù)雜指令集計(jì)算機(jī)(CISC)、精減指令集計(jì)算機(jī)(RISC)甚長指令字(VLIW)、或混合結(jié)構(gòu)。在一個(gè)實(shí)施例中,CPU與Intel結(jié)構(gòu)(IA)處理器兼容,諸如PentiumTM系列,IA-32TM和IA-64TM。在一個(gè)實(shí)施例中,計(jì)算機(jī)100可以是單處理器系統(tǒng),諸如臺(tái)式計(jì)算機(jī),它只有一個(gè)主中央處理單元,例如處理器110。在另外的實(shí)施例中,主計(jì)算機(jī)100可以包括多個(gè)處理器,例如,處理器110、110a、110b等。這樣,主計(jì)算機(jī)100可以是具有任何數(shù)目處理器的多處理器計(jì)算機(jī)系統(tǒng)。例如,多處理器主計(jì)算機(jī)100可以作為服務(wù)器或工作站環(huán)境的一部分操作。下面詳細(xì)討論處理器110的基本說明和操作。熟悉本技術(shù)領(lǐng)域的人理解,根據(jù)本發(fā)明的一個(gè)實(shí)施例,處理器110的基本說明和操作適用于處理器110a和110b,以及可以用于多處理器主計(jì)算機(jī)系統(tǒng)100的任何數(shù)目的處理器。
主總線120提供接口信號(hào)以允許處理器110或處理器110、110a、和110b與其它處理器或設(shè)備例如MCH 130通信,MCH 130提供為存儲(chǔ)器和輸入/輸出設(shè)備諸如系統(tǒng)存儲(chǔ)器140和ICH 150的控制和配置。系統(tǒng)存儲(chǔ)器140存儲(chǔ)系統(tǒng)代碼和數(shù)據(jù),諸如操作系統(tǒng)185、調(diào)度驅(qū)動(dòng)程序189、和應(yīng)用程序190。系統(tǒng)存儲(chǔ)器140可以以動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)或靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)實(shí)現(xiàn)。ICH 150執(zhí)行傳統(tǒng)I/O功能以控制I/O設(shè)備170。
I/O設(shè)備170可以包括I/O設(shè)備以執(zhí)行I/O功能。I/O設(shè)備170可以包括監(jiān)視器172、鍵盤174、調(diào)制解調(diào)器178、打印機(jī)180、和存儲(chǔ)設(shè)備182(例如光盤驅(qū)動(dòng)器,硬盤驅(qū)動(dòng)器,軟盤驅(qū)動(dòng)器等),以及其它任何類型的I/O設(shè)備,例如用于輸入設(shè)備(鼠標(biāo),軌跡球,指點(diǎn)設(shè)備)的控制器,介質(zhì)卡(例如音頻,視頻,圖形),網(wǎng)絡(luò)卡,和任何其它外設(shè)控制器。通常,I/O設(shè)備170可以定義為物理硬件的一個(gè)離散的物件,它可以以電方式連接到主計(jì)算機(jī)100,使得在主CPU 110上運(yùn)行的軟件可以使用定義的指令序列改變?cè)撛O(shè)備的物理或電氣狀態(tài)。當(dāng)I/O設(shè)備170以電方式連接到主計(jì)算機(jī)100上時(shí),稱為被連接到主計(jì)算機(jī)。
設(shè)備輸入/輸出(I/O)是一個(gè)過程,通過該過程一個(gè)定義的機(jī)器指令序列使用電(通常是數(shù)字)信號(hào)引起主CPU 110改變連接的I/O設(shè)備170的物理或電氣狀態(tài)。I/O請(qǐng)求是由主CPU產(chǎn)生的一個(gè)電信號(hào),該信號(hào)在I/O設(shè)備中產(chǎn)生原子的物理或電氣狀態(tài)的改變。通常,I/O請(qǐng)求在主CPU產(chǎn)生引起原子設(shè)備狀態(tài)改變的信號(hào)時(shí)的時(shí)間點(diǎn)被啟動(dòng),而在當(dāng)一個(gè)設(shè)備響應(yīng)來自主CPU的信號(hào)完成改變狀態(tài)時(shí)的時(shí)間點(diǎn)完成。在I/O請(qǐng)求被啟動(dòng)和它被完成之間的時(shí)間期間,I/O設(shè)備處理該請(qǐng)求。
一個(gè)I/O請(qǐng)求的處理時(shí)間是在當(dāng)一個(gè)I/O請(qǐng)求被啟動(dòng)和當(dāng)它被完成之間持續(xù)的時(shí)間期間。一個(gè)特定請(qǐng)求的處理時(shí)間取決于為I/O設(shè)備170完全實(shí)現(xiàn)所請(qǐng)求的狀態(tài)改變所需要的時(shí)間。對(duì)于某些請(qǐng)求,處理時(shí)間是確定的。對(duì)于這些請(qǐng)求的處理時(shí)間可以以高準(zhǔn)確度決定,只要給出請(qǐng)求類型和參數(shù)。對(duì)于一些請(qǐng)求,處理時(shí)間是不確定的。不能單獨(dú)從請(qǐng)求類型和參數(shù)決定為這些請(qǐng)求的精確的處理時(shí)間。這通常意味著,處理時(shí)間從一個(gè)這種請(qǐng)求到另一個(gè)隨機(jī)變化,或者正比于一個(gè)或者多個(gè)環(huán)境因素。取決于請(qǐng)求的性質(zhì),處理時(shí)間的估計(jì)可以以不同的精確程度進(jìn)行。
當(dāng)I/O設(shè)備170忙時(shí),不能啟動(dòng)I/O請(qǐng)求,因?yàn)樵撛O(shè)備正在處理它的最大數(shù)目的同時(shí)請(qǐng)求。對(duì)于大多數(shù)I/O設(shè)備的最大數(shù)目的同時(shí)請(qǐng)求是1。每當(dāng)這種設(shè)備正在處理任何請(qǐng)求時(shí),它們便忙。某些設(shè)備可以同時(shí)處理兩個(gè)或更多請(qǐng)求。這些設(shè)備在處理一個(gè)請(qǐng)求時(shí)可以處理對(duì)一個(gè)新請(qǐng)求的啟動(dòng)。這種設(shè)備通常對(duì)在處理其它請(qǐng)求時(shí)可以處理的請(qǐng)求類型施加某些限制。這種設(shè)備通常對(duì)可以被同時(shí)處理的請(qǐng)求類型施加某些限制。這樣,一個(gè)設(shè)備是否忙可以根據(jù)希望的請(qǐng)求的性質(zhì)決定。
系統(tǒng)存儲(chǔ)器140存儲(chǔ)諸如操作系統(tǒng)185的系統(tǒng)代碼和數(shù)據(jù),至少一個(gè)諸如調(diào)度驅(qū)動(dòng)程序189的驅(qū)動(dòng)程序,和應(yīng)用程序190。操作系統(tǒng)185是軟件部件的集合,它們提供基本系統(tǒng)操作。操作系統(tǒng)185管理建立、撤消和調(diào)度處理環(huán)境(contexts),以及響應(yīng)用戶請(qǐng)求加載軟件部件。操作系統(tǒng)185管理處理環(huán)境,以及響應(yīng)用戶請(qǐng)求加載軟件部件。操作系統(tǒng)185管理處理環(huán)境,以建立在具有有限數(shù)目的CPU 110(例如1個(gè))的單一主計(jì)算機(jī)100上同時(shí)運(yùn)行的任何數(shù)目的活動(dòng)的軟件部件的假象。它的部件常常被限制到使用系統(tǒng)特征的一個(gè)小的子集。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,調(diào)度驅(qū)動(dòng)程序189是一個(gè)主要設(shè)計(jì)為代表其它軟件部件包括操作系統(tǒng)185和應(yīng)用程序190執(zhí)行設(shè)備I/O的軟件部件。調(diào)度驅(qū)動(dòng)程序189用作操作系統(tǒng)的一部分。特別是,本發(fā)明提供一種用于調(diào)度驅(qū)動(dòng)程序189的方法和裝置,它使用時(shí)間估計(jì)實(shí)現(xiàn)一個(gè)協(xié)議,使得調(diào)度設(shè)備驅(qū)動(dòng)程序可用于不產(chǎn)生中斷的設(shè)備。在圖1中只表示出一個(gè)調(diào)度設(shè)備驅(qū)動(dòng)程序,然而,應(yīng)該理解,可以有任何數(shù)目的調(diào)度設(shè)備驅(qū)動(dòng)程序189,取決于存在有多少I/O設(shè)備170。
通常,設(shè)備驅(qū)動(dòng)程序以高的CPU優(yōu)先級(jí)運(yùn)行,使得它們可以訪問啟動(dòng)I/O請(qǐng)求需要的特征。設(shè)備驅(qū)動(dòng)程序需要仔細(xì)與操作系統(tǒng)協(xié)作,以便維護(hù)系統(tǒng)穩(wěn)定性和性能。因?yàn)轵?qū)動(dòng)程序作用為操作系統(tǒng)的一部分,因此許多系統(tǒng)特征不能用于驅(qū)動(dòng)程序代碼。在一些操作系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序可以是活動(dòng)的部件,但是在大多數(shù)操作系統(tǒng)中,設(shè)備驅(qū)動(dòng)程序是被動(dòng)部件,諸如根據(jù)本發(fā)明的一個(gè)實(shí)施例的調(diào)度驅(qū)動(dòng)程序189。產(chǎn)生I/O請(qǐng)求的多條驅(qū)動(dòng)程序代碼常常運(yùn)行在不管什么應(yīng)用程序請(qǐng)求的設(shè)備I/O的處理環(huán)境中。設(shè)備驅(qū)動(dòng)程序存在,以便允許書寫應(yīng)用程序而不需要特別知道如何使用各種設(shè)備。相反,應(yīng)用程序使用對(duì)操作系統(tǒng)定義的一組調(diào)用來實(shí)現(xiàn)設(shè)備I/O。這種結(jié)構(gòu)允許使用不同的驅(qū)動(dòng)程序來接口不同的設(shè)備而不需要應(yīng)用程序明顯地支持每一類型可用的設(shè)備。
應(yīng)用程序190是軟件程序(例如,字處理器,數(shù)據(jù)庫,游戲等),其由主計(jì)算機(jī)100使用,下面會(huì)討論,需要為I/O處理使用設(shè)備驅(qū)動(dòng)程序。一般,應(yīng)用程序190是不是操作系統(tǒng)185一部分的任何軟件部件。應(yīng)用程序通常不直接與設(shè)備170相互作用。反之,它們通過調(diào)用操作系統(tǒng)部件和/或設(shè)備驅(qū)動(dòng)程序請(qǐng)求I/O。
操作系統(tǒng)185、調(diào)度設(shè)備驅(qū)動(dòng)程序189、和應(yīng)用程序190都由多條代碼組成。一條代碼是具有任意大小的CPU機(jī)器指令的一個(gè)有序集合。當(dāng)單一主CPU 110中斷它的有順序的指令時(shí)執(zhí)行或運(yùn)行一條代碼,一次一條。每一條指令產(chǎn)生處理器的內(nèi)部寄存器的狀態(tài)的一個(gè)定義的改變,和/或主機(jī)主存儲(chǔ)器的內(nèi)容的定義的改變。一定的指令可以通過改變下一次執(zhí)行哪一條指令而改變執(zhí)行順序(控制轉(zhuǎn)移)。其它的指令可以引起CPU 110啟動(dòng)I/O請(qǐng)求??梢灾袛嘁粭l代碼以便允許CPU執(zhí)行其它任務(wù)(通過運(yùn)行其它條代碼),然后在曾經(jīng)中斷的點(diǎn)恢復(fù)。CPU在正常運(yùn)行時(shí)總是運(yùn)行某些條代碼。
處理環(huán)境是代碼運(yùn)行的軟件環(huán)境。處理環(huán)境包括在代碼中的存儲(chǔ)器地址和物理存儲(chǔ)器位置(地址空間)之間的映射,CPU寄存器的內(nèi)容,和執(zhí)行堆棧(用于臨時(shí)存儲(chǔ)的存儲(chǔ)器)。當(dāng)中斷一條代碼以允許CPU 110執(zhí)行其它任務(wù)時(shí),保存它的環(huán)境以便它可以在以后在恢復(fù)執(zhí)行該代碼前能夠恢復(fù)。這一機(jī)構(gòu)允許該代碼恢復(fù)運(yùn)行和處理,就像它未曾被中斷似的,這可以幫助建立多于一條代碼同時(shí)在單CPU 110上運(yùn)行的假象。在具有幾個(gè)CPU 110-110b的主計(jì)算機(jī)100上,一條代碼可以在一個(gè)CPU上運(yùn)行一會(huì)兒,中斷,然后在不同的CPU上恢復(fù),不破壞連續(xù)性的假象。單一主計(jì)算機(jī)可以具有幾個(gè)處理環(huán)境,但是在一個(gè)給定的時(shí)間點(diǎn)每一CPU只可以有一個(gè)處理環(huán)境是活動(dòng)的。這一活動(dòng)的處理環(huán)境是為當(dāng)前在該CPU上運(yùn)行的代碼的軟件環(huán)境。一個(gè)處理環(huán)境從不在多于一個(gè)CPU上同時(shí)活動(dòng)。
軟件部件是任何離散的代碼,對(duì)它們存在有定義的機(jī)構(gòu),以引起這些代碼被加載到系統(tǒng)存儲(chǔ)器140中,和由CPU 110執(zhí)行。通常,加載機(jī)構(gòu)為該部件定義的任何全局變量(例如狀態(tài)信息)自動(dòng)分配存儲(chǔ)器。一個(gè)軟件部件事例是一個(gè)加載的軟件部件的事例,包括該部件的代碼和為在主存儲(chǔ)器中存儲(chǔ)全局變量的存儲(chǔ)器,可在某些地址空間訪問。通常軟件部件的一個(gè)特別的事例總是運(yùn)行在一個(gè)特定的處理環(huán)境中,但是這并不總是這樣。
活動(dòng)的軟件部件被設(shè)計(jì)成在一個(gè)或多個(gè)專用的處理環(huán)境中運(yùn)行。當(dāng)加載一個(gè)活動(dòng)的軟件部件時(shí),加載代理程序建立一個(gè)新的處理環(huán)境(它可以包括一個(gè)新的地址空間)。它初始化這一環(huán)境,使得該部件的代碼將在這一環(huán)境為主CPU第一次編程活動(dòng)時(shí)的一個(gè)預(yù)先定義的主入口點(diǎn)開始運(yùn)行。然后使新建立的處理環(huán)境可為調(diào)度由操作系統(tǒng)使用?;顒?dòng)的軟件部件的每一事例是自治的和獨(dú)立的。它必須同步它的活動(dòng)與其它與它相互作用的軟件部件。一個(gè)活動(dòng)的軟件部件可以具有設(shè)計(jì)同時(shí)運(yùn)行在幾個(gè)處理環(huán)境上的代碼(多線程執(zhí)行)。通常,這一類型的部件的初始化代碼建立附加的處理環(huán)境,并使它們可用于運(yùn)行。當(dāng)活動(dòng)的部件的代碼結(jié)束執(zhí)行時(shí)自動(dòng)加載活動(dòng)部件,這一點(diǎn)是普通的,雖然不是必需的(例如當(dāng)CPU達(dá)到部件代碼的末尾時(shí),它必須轉(zhuǎn)移控制到某些系統(tǒng)代碼,因?yàn)樵贈(zèng)]有部件代碼可以運(yùn)行。這一系統(tǒng)代碼可以設(shè)計(jì)為自動(dòng)卸載處理環(huán)境)。
被動(dòng)軟件部件被設(shè)計(jì)成周期地運(yùn)行在為某些另外的活動(dòng)的部件建立的處理環(huán)境中。被動(dòng)軟件部件事例通常加載到為活動(dòng)的對(duì)方建立的地址空間中。在初始化后,它們僅當(dāng)另一個(gè)部件使用調(diào)用指令轉(zhuǎn)移控制給它們時(shí)才運(yùn)行。通常,被動(dòng)部件事例在它們每次被調(diào)用時(shí)執(zhí)行定義的任務(wù),然后它們返回控制給調(diào)用部件。一個(gè)被動(dòng)部件可以調(diào)用其它的被動(dòng)部件。一次調(diào)用的目的是一個(gè)函數(shù)(亦即使用一條調(diào)用指令轉(zhuǎn)移控制給一條代碼稱為調(diào)用函數(shù))。每一函數(shù)是一條執(zhí)行一個(gè)定義的任務(wù)然后返回控制給執(zhí)行調(diào)用指令的代碼的代碼。當(dāng)控制被返回時(shí),調(diào)用代碼從調(diào)用指令后的第一條指令開始繼續(xù)執(zhí)行。
操作系統(tǒng)(OS)185包括調(diào)度程序192,后者是在處理環(huán)境之間周期切換CPU 110或多個(gè)CPU(110-110b)的一條代碼。這一切換(稱為處理調(diào)度或線程調(diào)度)保證所有獲得的軟件部件似乎平穩(wěn)和連續(xù)運(yùn)行,每一個(gè)接收到公平的共享CPU時(shí)間。系統(tǒng)定時(shí)器194是這樣一個(gè)設(shè)備,其目的是以規(guī)律的間隔產(chǎn)生中斷。通常,操作系統(tǒng)提供中斷服務(wù)子例程(ISR)來處理這一中斷。一般,調(diào)度程序192使用這一硬件中斷以跟蹤時(shí)間和調(diào)度處理環(huán)境運(yùn)行。此外,由調(diào)度驅(qū)動(dòng)程序189使用一個(gè)驅(qū)動(dòng)程序時(shí)鐘196來跟蹤時(shí)間,并用于決定估計(jì)的處理時(shí)間,下面會(huì)說明。驅(qū)動(dòng)程序時(shí)鐘196與系統(tǒng)定時(shí)器194在鎖定步驟同步。一個(gè)定時(shí)器的滴答(tick)指示系統(tǒng)定時(shí)器194和驅(qū)動(dòng)程序時(shí)鐘196同時(shí)產(chǎn)生一個(gè)中斷的時(shí)刻。在每一定時(shí)器滴答時(shí)更新系統(tǒng)時(shí)間,而其它活動(dòng)諸如處理調(diào)度和估計(jì)處理時(shí)間可以發(fā)生。定時(shí)器滴答區(qū)間(TTI)是在任何兩個(gè)相鄰的定時(shí)器滴答之間的時(shí)間期間(在一個(gè)定時(shí)器滴答發(fā)生和后隨的一個(gè)定時(shí)器滴答發(fā)生之間的時(shí)間期間)。
當(dāng)一條代碼“被封鎖”時(shí),它暫停或停止它的執(zhí)行而等待某些外部事件(諸如I/O完成或某些從在不同處理環(huán)境中運(yùn)行的軟件部件來的信號(hào))發(fā)生。通常,調(diào)度程序192切換正在運(yùn)行代碼的CPU 110到不同處理環(huán)境,而被封鎖的代碼在它等待的事件發(fā)生前不安排再次運(yùn)行。封鎖調(diào)用是對(duì)可以封鎖的功能進(jìn)行的調(diào)用。普通類型的封鎖調(diào)用是封鎖系統(tǒng)調(diào)用,這是一個(gè)系統(tǒng)調(diào)用,它可以封鎖-通常等待設(shè)備I/O完成。
當(dāng)在當(dāng)前環(huán)境中運(yùn)行的部件明顯地執(zhí)行一定的動(dòng)作(諸如產(chǎn)生控制或進(jìn)行封鎖系統(tǒng)調(diào)用)時(shí)協(xié)作調(diào)度程序只切換CPU到不同的處理環(huán)境。這稱為協(xié)作調(diào)度程序是因?yàn)橹饔?jì)算機(jī)上的軟件部件必須協(xié)作以便保證每一個(gè)得到公平的CPU時(shí)間的份額。一個(gè)先發(fā)調(diào)度程序切換CPU到一個(gè)不同的處理,或者當(dāng)在當(dāng)前環(huán)境中運(yùn)行的部件明顯執(zhí)行一定的動(dòng)作,或者當(dāng)一定量的時(shí)間逝去而沒有進(jìn)行環(huán)境切換。先發(fā)調(diào)度程序通常在定時(shí)器滴答處理期間周期地運(yùn)行以決定一個(gè)不同的處理環(huán)境是否應(yīng)該在一個(gè)特定的CPU上運(yùn)行,和在需要時(shí)執(zhí)行環(huán)境切換。用先發(fā)調(diào)度程序調(diào)度應(yīng)用程序處理環(huán)境的操作系統(tǒng)可以給出令人相信的同時(shí)執(zhí)行多個(gè)應(yīng)用程序的假象。
當(dāng)應(yīng)用程序190休息時(shí),它明顯封鎖一個(gè)指定的時(shí)間區(qū)間。通常,休息是一個(gè)封鎖系統(tǒng)調(diào)用,它在給定的時(shí)間區(qū)間逝去后的一定時(shí)間前不返回控制。在這一時(shí)間區(qū)間期間,其它處理環(huán)境可以在進(jìn)行休息調(diào)用的CPU 110上運(yùn)行。當(dāng)處理環(huán)境可用于被執(zhí)行時(shí)它是可運(yùn)行的。當(dāng)調(diào)度CPU時(shí)間時(shí)調(diào)度程序192只能從可運(yùn)行處理環(huán)境組中選擇。已被封鎖的處理環(huán)境在它等待的事件發(fā)生前是不可運(yùn)行的。例如,一個(gè)正在休息的處理環(huán)境將在給定的時(shí)間期間逝去后才能再次可運(yùn)行。
本發(fā)明的一個(gè)實(shí)施例使用時(shí)間估計(jì)提供一種用于調(diào)度驅(qū)動(dòng)程序189的方法和裝置以實(shí)現(xiàn)一種協(xié)議,使得調(diào)度驅(qū)動(dòng)程序189可用于不產(chǎn)生中斷的設(shè)備170。在圖1的示例環(huán)境內(nèi)實(shí)現(xiàn)本發(fā)明時(shí),假定連接的I/O設(shè)備170一時(shí)只可以處理單一請(qǐng)求。如前所述,I/O設(shè)備170連接到具有一個(gè)或者多個(gè)CPU(110-110b)的主計(jì)算機(jī)100上。另外,主計(jì)算機(jī)100具有加載到系統(tǒng)存儲(chǔ)器140中的操作系統(tǒng)185。在一個(gè)實(shí)施例中,操作系統(tǒng)185使用一個(gè)先發(fā)調(diào)度程序來調(diào)度應(yīng)用程序190在其中運(yùn)行的處理環(huán)境。還提供一種機(jī)構(gòu)來加載應(yīng)用程序并使其可對(duì)調(diào)度程序192用于運(yùn)行。調(diào)度驅(qū)動(dòng)程序189加載到操作系統(tǒng)185中,使得應(yīng)用程序190可以使用調(diào)度驅(qū)動(dòng)程序189對(duì)連接的設(shè)備170產(chǎn)生I/O請(qǐng)求。在一個(gè)實(shí)施例中,調(diào)度驅(qū)動(dòng)程序189是一個(gè)被動(dòng)軟件部件,調(diào)度驅(qū)動(dòng)程序189的單一事例在訪問設(shè)備170的所有應(yīng)用程序190之間共享。
即使主計(jì)算機(jī)100只有一個(gè)CPU 110,也可以在一個(gè)單驅(qū)動(dòng)程序功能上同時(shí)放置幾個(gè)處理環(huán)境。在這些環(huán)境下,因?yàn)槊恳惶幚憝h(huán)境都被驅(qū)動(dòng)在CPU 100上運(yùn)行,因此調(diào)度驅(qū)動(dòng)程序189的功能的某些部分的代碼被執(zhí)行。這將建立驅(qū)動(dòng)程序功能同時(shí)由多于一個(gè)應(yīng)用程序190調(diào)用的假象。這樣,在理論上,在一個(gè)給定時(shí)間點(diǎn),任意數(shù)目的應(yīng)用程序190可以同時(shí)調(diào)用調(diào)度驅(qū)動(dòng)程序189以產(chǎn)生設(shè)備I/O請(qǐng)求。在多于一個(gè)CPU(110-110b)的主計(jì)算機(jī)100上,這一點(diǎn)確實(shí)是真的,因?yàn)轵?qū)動(dòng)程序代碼可以同時(shí)在幾個(gè)CPU上運(yùn)行。從調(diào)度驅(qū)動(dòng)程序189請(qǐng)求設(shè)備I/O的應(yīng)用程序190既可以是被動(dòng)的軟件部件,也可以是主動(dòng)的軟件部件。調(diào)度驅(qū)動(dòng)程序189保持一個(gè)“被鎖定的標(biāo)志”,其通常由在系統(tǒng)存儲(chǔ)器140中存在的一個(gè)特定地址處的一個(gè)特定數(shù)值表示,以指示它有一個(gè)I/O請(qǐng)求在進(jìn)行。調(diào)度驅(qū)動(dòng)程序189可以檢查設(shè)備170的狀態(tài)以決定是否由該設(shè)備已經(jīng)完成一個(gè)特定的I/O請(qǐng)求。調(diào)度驅(qū)動(dòng)程序189使用驅(qū)動(dòng)程序時(shí)鐘196跟蹤逝去的時(shí)間。
在一個(gè)實(shí)施例中,本發(fā)明為調(diào)度驅(qū)動(dòng)程序189提供一種方法和裝置來使用時(shí)間估計(jì)實(shí)現(xiàn)一種協(xié)議,使得調(diào)度驅(qū)動(dòng)程序189可用于不產(chǎn)生中斷的設(shè)備170。應(yīng)用程序190可以調(diào)用調(diào)度驅(qū)動(dòng)程序189開始對(duì)設(shè)備170的一個(gè)輸入/輸出(I/O)請(qǐng)求。調(diào)度驅(qū)動(dòng)程序189決定設(shè)備170是否忙。如果該設(shè)備不忙,則調(diào)度驅(qū)動(dòng)程序189給應(yīng)用程序提供為要完成的I/O請(qǐng)求的一個(gè)估計(jì)的處理時(shí)間(EPT)。
如果設(shè)備170忙,則調(diào)度驅(qū)動(dòng)程序189計(jì)算到設(shè)備170可用于應(yīng)用程序190時(shí)的一個(gè)估計(jì)的剩下的時(shí)間量(EATL)并提供這一EATL給應(yīng)用程序190。當(dāng)設(shè)備170不忙時(shí),應(yīng)用程序190休息估計(jì)的處理時(shí)間(EPT)并調(diào)用調(diào)度驅(qū)動(dòng)程序189來獲得I/O操作結(jié)果。如果I/O請(qǐng)求已經(jīng)完成,則調(diào)度驅(qū)動(dòng)程序提供I/O操作結(jié)果給應(yīng)用程序。
然而,如果I/O請(qǐng)求尚未完成,則調(diào)度驅(qū)動(dòng)程序189為要完成的I/O請(qǐng)求計(jì)算一個(gè)估計(jì)的剩余處理時(shí)間(EPTR)并提供該EPTR給應(yīng)用程序190。然后應(yīng)用程序190休息該估計(jì)的剩余處理時(shí)間(EPTR)并再次調(diào)用調(diào)度驅(qū)動(dòng)程序189以獲得I/O操作結(jié)果。這些操作可以重復(fù),直到I/O請(qǐng)求完成。轉(zhuǎn)向圖2-4,詳細(xì)討論在應(yīng)用程序190和調(diào)度驅(qū)動(dòng)程序189之間的相互反應(yīng)。
圖2表示根據(jù)本發(fā)明的一個(gè)實(shí)施例用于一個(gè)應(yīng)用程序的處理200的流程圖,該應(yīng)用程序與調(diào)度驅(qū)動(dòng)程序交互作用,并使用時(shí)間估計(jì)執(zhí)行對(duì)一個(gè)設(shè)備的輸入/輸出(I/O)事務(wù)處理。在開始時(shí)(框205)處理200調(diào)用調(diào)度驅(qū)動(dòng)程序開始I/O請(qǐng)求(方框210)。應(yīng)用程序?qū)φ{(diào)度驅(qū)動(dòng)程序的一個(gè)處理進(jìn)行調(diào)用以開始該I/O請(qǐng)求,和處理200前進(jìn)到圖3中表示的處理300的入口點(diǎn)310(方框210)。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,任何數(shù)目的應(yīng)用程序可以在任何時(shí)間點(diǎn)并發(fā)訪問調(diào)度驅(qū)動(dòng)程序要求調(diào)度驅(qū)動(dòng)程序產(chǎn)生設(shè)備I/O請(qǐng)求。然而,該設(shè)備一時(shí)只能處理一個(gè)請(qǐng)求,使得調(diào)度驅(qū)動(dòng)程序一時(shí)只能服務(wù)應(yīng)用程序?qū)σ粋€(gè)設(shè)備的一個(gè)I/O請(qǐng)求,而使其它應(yīng)用程序等待。這樣,每一應(yīng)用程序輪番被服務(wù),使得高度公平。
轉(zhuǎn)向圖3,圖3表示根據(jù)本發(fā)明的一個(gè)實(shí)施例用于調(diào)度驅(qū)動(dòng)程序的處理300的流程圖,為開始一個(gè)I/O請(qǐng)求,和給一個(gè)應(yīng)用程序提供為完成一個(gè)I/O事務(wù)處理而估計(jì)的處理時(shí)間。在入口點(diǎn)(框310),處理300決定是否設(shè)定了鎖定標(biāo)志。如果設(shè)定了鎖定標(biāo)志,則處理300計(jì)算到設(shè)備再次空閑時(shí)估計(jì)的剩下的時(shí)間量(EATL)(方框320)。這樣,該設(shè)備當(dāng)前忙于服務(wù)另一請(qǐng)求。通過從該請(qǐng)求原來估計(jì)的處理時(shí)間(EPT)中減去從正被處理的當(dāng)前請(qǐng)求被開始時(shí)逝去的時(shí)間計(jì)算估計(jì)的剩下的時(shí)間量(EATL)。如果EATL的計(jì)算是負(fù)的,則設(shè)定該EATL計(jì)算為零(方框320)。接著,處理300提供到該設(shè)備將可用于應(yīng)用程序的估計(jì)的剩下的時(shí)間量(EATL)(方框325)。然后處理300返回一個(gè)“忙”信號(hào)給處理200,并前進(jìn)到在圖2表示的處理200的方框215(方框300)。
另一方面,如果未設(shè)定封鎖的標(biāo)志,則啟動(dòng)I/O請(qǐng)求(方框335)并設(shè)定封鎖的標(biāo)志(方框340)。另外,為要完成的I/O請(qǐng)求決定估計(jì)的處理時(shí)間(EPT)。在設(shè)備自身為要完成的I/O請(qǐng)求計(jì)算估計(jì)的處理時(shí)間(EPT)的場(chǎng)合,處理300在啟動(dòng)該請(qǐng)求后立即從該設(shè)備接收這一值(方框345)。另外可選,處理300自身可以計(jì)算估計(jì)的處理時(shí)間(EPT)(方框345)。例如,調(diào)度驅(qū)動(dòng)程序根據(jù)請(qǐng)求類型和其它參數(shù)可以有一個(gè)平均EPT的表。另外,處理300記錄該請(qǐng)求被啟動(dòng)的當(dāng)前時(shí)間(方框345)。接著,處理300提供為要完成的I/O請(qǐng)求估計(jì)的處理時(shí)間(EPT)給應(yīng)用程序(方框350)。然后處理300返回一個(gè)“不忙”信號(hào)給處理200并前進(jìn)到圖2所示處理200的方框215(方框355)。應(yīng)該理解,為實(shí)現(xiàn)為調(diào)度驅(qū)動(dòng)程序的處理300的代碼是該代碼的一個(gè)關(guān)鍵部分,并且是不能重新進(jìn)入的一條代碼。這意味著,一旦該代碼開始在一個(gè)處理環(huán)境中運(yùn)行,則它不能在任何其它處理環(huán)境(無論在同一CPU或不同CPU上)中運(yùn)行,直到它結(jié)束在原來環(huán)境中的運(yùn)行。希望進(jìn)入該代碼的其它處理環(huán)境在當(dāng)前正處于該代碼中的環(huán)境結(jié)束運(yùn)行它前必須封鎖。
返回圖2,在框215,處理200根據(jù)來自處理300的輸入決定設(shè)備是否忙。如果設(shè)備“忙”,則處理200引起應(yīng)用程序休息由處理300決定的估計(jì)的剩下的時(shí)間量(EATL)(框220)。如果EATL值設(shè)定為零,則應(yīng)用程序休息一個(gè)時(shí)間滴答間隔(TTI)(框220)。另外,在休息指定的時(shí)間量后,處理200再次從框210的開始處開始。
然而,如果設(shè)備“不忙”,則處理200引起應(yīng)用程序休息來自處理300的估計(jì)的處理時(shí)間(EPT)(框225)。如果EPT值設(shè)定為零,則應(yīng)用程序休息一個(gè)時(shí)間滴答間隔(TTI) (框225)。在休息指定的時(shí)間量后,處理200調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果,處理200前進(jìn)到圖4所示處理400的入口點(diǎn)410(框230)。
調(diào)度驅(qū)動(dòng)程序是在應(yīng)用程序之間協(xié)調(diào)定時(shí)的單一代理程序。每一應(yīng)用程序精確休息由調(diào)度驅(qū)動(dòng)程序指定的時(shí)間期間。在驅(qū)動(dòng)程序指定一個(gè)零時(shí)間區(qū)間的任何時(shí)間,應(yīng)用程序通過休息一個(gè)定時(shí)器滴答間隔(TTI)產(chǎn)生它自己的時(shí)間片。這使得操作系統(tǒng)調(diào)度程序切換CPU到隊(duì)列中的下一應(yīng)用程序,但是當(dāng)前應(yīng)用程序保持可運(yùn)行。另外,調(diào)度驅(qū)動(dòng)程序這樣協(xié)調(diào)休息時(shí)間,使得當(dāng)有應(yīng)用程序休息時(shí),它將在同一定時(shí)器滴答中變得可運(yùn)行。
圖4表示根據(jù)本發(fā)明的一個(gè)實(shí)施例用于調(diào)度驅(qū)動(dòng)程序的處理400的流程圖,以提供I/O操作結(jié)果給應(yīng)用程序或給所述應(yīng)用程序提供為要完成的I/O事務(wù)處理估計(jì)的剩余處理時(shí)間。在入口點(diǎn)(框410),處理400決定設(shè)備是否仍然忙于處理I/O請(qǐng)求(框415)。如果設(shè)備仍然忙于處理I/O請(qǐng)求,則處理400計(jì)算估計(jì)的剩余處理時(shí)間(ENTR)(框420)。從它的估計(jì)處理時(shí)間(EPT)中減去從該請(qǐng)求被啟動(dòng)逝去的時(shí)間計(jì)算EPTR。如果該TPTR值是負(fù)的,則設(shè)定該EPTR值為零(框420)。接著,處理400給應(yīng)用程序提供該EPTR值(框425)。處理400返回一個(gè)“工作”信號(hào)給處理200并前進(jìn)到圖2所示處理200的框235(框430)。
另一方面,如果處理400已經(jīng)完成I/O請(qǐng)求,則處理清除鎖定標(biāo)志(框435)。接著,處理給應(yīng)用程序提供I/O操作結(jié)果(從該設(shè)備接收到的)(框440)。處理400返回一個(gè)“完成”信號(hào)給處理200并前進(jìn)到圖2所示處理200的框235(框445)。如同為處理300的代碼一樣,為實(shí)現(xiàn)用于調(diào)度驅(qū)動(dòng)程序的處理400的代碼是代碼的關(guān)鍵部分,并且是一條不可重新進(jìn)入的代碼。在任何給定的時(shí)間,任何數(shù)目的應(yīng)用程序可以等待鎖定標(biāo)志被清除,以便它們可以啟動(dòng)它們的請(qǐng)求。
返回圖2,處理200根據(jù)來自處理400的輸入決定設(shè)備是否仍在工作。如果該設(shè)備仍在工作,根據(jù)從處理400接收的“工作”信號(hào),則處理200引起應(yīng)用程序休息估計(jì)的剩余處理時(shí)間(EPTR)(框240)。如果EPTR值設(shè)定為零,則應(yīng)用程序休息一個(gè)定時(shí)器滴答區(qū)間(TTI)(框240)。在休息指定量的時(shí)間后,處理200返回到框230以再次調(diào)用調(diào)度驅(qū)動(dòng)程序以嘗試和獲取I/O操作結(jié)果(框230)。
然而,如果處理400已經(jīng)完成I/O請(qǐng)求并給處理200提供I/O操作結(jié)果和返回一個(gè)“完成”信號(hào)給處理200,則該I/O請(qǐng)求由應(yīng)用程序處理(框245)接著,處理200引起應(yīng)用程序在繼續(xù)前休息一個(gè)定時(shí)器滴答區(qū)間(TTI)(框250)。這將允許其它等待的應(yīng)用程序在這一應(yīng)用程序完成I/O請(qǐng)求后立即運(yùn)行,這對(duì)保證公平是必需的。然后處理200結(jié)束(框255)。
為應(yīng)用程序與調(diào)度驅(qū)動(dòng)程序的交互作用的處理為許多競(jìng)爭(zhēng)應(yīng)用程序提供一種優(yōu)雅的方式來公平共享對(duì)不產(chǎn)生中斷的設(shè)備的訪問。另外,本發(fā)明實(shí)現(xiàn)這一點(diǎn)而不引起系統(tǒng)性能的問題,這通過使用對(duì)設(shè)備完成每一請(qǐng)求需要多長時(shí)間的估計(jì)實(shí)現(xiàn)。因?yàn)樗械却膽?yīng)用程序變成在同一定時(shí)器滴答中可運(yùn)行,因此調(diào)度驅(qū)動(dòng)程序以和假定它們所有都被鎖定以等待設(shè)備變得可用的調(diào)度順序調(diào)度它們。然而,這假定OS調(diào)度程序公平地從一組同時(shí)剛剛變得可運(yùn)行的處理環(huán)境之中取下一個(gè)處理環(huán)境運(yùn)行。這樣,調(diào)度驅(qū)動(dòng)程序的公平性還基于由操作系統(tǒng)的調(diào)度程序調(diào)度處理環(huán)境的公平性。例如,本發(fā)明可相當(dāng)好地用于由微軟窗口(Microsoft Windows)操作系統(tǒng)(例如Windows 98,Windows NT 4.0,Windows 2000)使用的輪詢調(diào)度程序,它們操作的相當(dāng)公平。一般,本發(fā)明最適用于這樣的操作系統(tǒng),其中應(yīng)用程序一般處于同樣的優(yōu)先級(jí)和特別的優(yōu)先級(jí)以輪詢順序運(yùn)行。然而,應(yīng)該理解,本發(fā)明也可以很好地用于多種使用不同優(yōu)先級(jí)模式的操作系統(tǒng)調(diào)度程序。
應(yīng)該理解,前述功能部件可以以硬件、軟件、或硬件和軟件的組合實(shí)現(xiàn)。當(dāng)以軟件實(shí)現(xiàn)時(shí),本發(fā)明的元件是執(zhí)行必需的任務(wù)的代碼段。程序或代碼段可以存儲(chǔ)在機(jī)器可讀的介質(zhì)中,諸如處理器可讀介質(zhì)或計(jì)算機(jī)程序產(chǎn)品,或在傳輸介質(zhì)上由以載波實(shí)現(xiàn)的計(jì)算機(jī)數(shù)據(jù)信號(hào)、或由載波調(diào)制的信號(hào)傳輸??蓹C(jī)讀介質(zhì)可以包括可以存儲(chǔ)或傳輸形式為可由機(jī)器(例如處理器或計(jì)算機(jī)等)讀或執(zhí)行的信息的任何介質(zhì)。機(jī)讀介質(zhì)的例子包括電子電路、半導(dǎo)體存儲(chǔ)器設(shè)備、ROM、閃存、可擦寫可編程ROM(EPROM)、軟盤、緊致盤CD-ROM、光盤、硬盤、光纖介質(zhì)、射頻(RF)鏈路等。計(jì)算機(jī)數(shù)據(jù)信號(hào)可以包括任何可以在傳輸介質(zhì)上傳播的信號(hào),諸如電子網(wǎng)絡(luò)通道、光纖、空氣、電磁、RF鏈路等。代碼段可以通過計(jì)算機(jī)網(wǎng)絡(luò)諸如因特網(wǎng)、企業(yè)內(nèi)部網(wǎng)下載。
特別是,在本發(fā)明的一個(gè)實(shí)施例中,調(diào)度驅(qū)動(dòng)程序189通??梢栽谥饔?jì)算機(jī)100中作為一個(gè)或多個(gè)計(jì)算機(jī)程序?qū)崿F(xiàn),這些計(jì)算機(jī)程序在操作系統(tǒng)185的控制下執(zhí)行以執(zhí)行先前說明的希望的功能。
計(jì)算機(jī)程序由指令(例如代碼段)組成,其當(dāng)由計(jì)算機(jī)讀取并執(zhí)行時(shí)引起計(jì)算機(jī)執(zhí)行為實(shí)現(xiàn)和/或使用本發(fā)明所必需的操作。一般說,計(jì)算機(jī)程序可感知地以設(shè)備、載體或介質(zhì)體現(xiàn)和/或從其讀取,所述介質(zhì)例如有存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)設(shè)備、和/或通過數(shù)據(jù)通信設(shè)備連接到計(jì)算機(jī)的遠(yuǎn)程設(shè)備。在操作系統(tǒng)的控制下,計(jì)算機(jī)程序可以從存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)設(shè)備、和/或遠(yuǎn)程設(shè)備加載到計(jì)算機(jī)的存儲(chǔ)器中為在操作期間使用。
這樣,根據(jù)本發(fā)明的一個(gè)實(shí)施例調(diào)度驅(qū)動(dòng)程序189可以作為一種方法、裝置、或可機(jī)讀介質(zhì)(例如處理器可讀介質(zhì)或計(jì)算機(jī)可讀介質(zhì))實(shí)現(xiàn),使用標(biāo)準(zhǔn)的編程和/或工程技術(shù)以產(chǎn)生軟件、固件、硬件、或任何它們的組合。在這里使用的術(shù)語“可機(jī)讀介質(zhì)”(或另外可說“處理器可讀介質(zhì)”或“計(jì)算機(jī)可讀介質(zhì)”)意在包括為讀取和執(zhí)行可從任何機(jī)器/處理器/計(jì)算機(jī)訪問的介質(zhì)。當(dāng)然,熟悉本技術(shù)領(lǐng)域的人將認(rèn)識(shí)到,對(duì)這一結(jié)構(gòu)可以進(jìn)行許多修改而不離開本發(fā)明的范圍。
應(yīng)用程序與調(diào)度驅(qū)動(dòng)程序的相互反應(yīng)的處理,根據(jù)本發(fā)明的一個(gè)實(shí)施例,為許多競(jìng)爭(zhēng)應(yīng)用程序提供一種優(yōu)雅的方式來公平共享對(duì)不產(chǎn)生中斷的設(shè)備的訪問。本發(fā)明實(shí)現(xiàn)這一點(diǎn)而不引起系統(tǒng)性能的問題,這通過使用對(duì)設(shè)備完成每一請(qǐng)求需要多長時(shí)間的估計(jì)實(shí)現(xiàn)。另外,本發(fā)明可以用于大多數(shù)操作系統(tǒng)。它絕不封鎖調(diào)度驅(qū)動(dòng)程序-所有封鎖都以應(yīng)用程序代碼進(jìn)行。另外,即使設(shè)備請(qǐng)求同步在不同的操作系統(tǒng)上以不同的方式進(jìn)行,但是在本發(fā)明中使用的處理傾向于使其可移植。
另外,本發(fā)明優(yōu)雅地解決當(dāng)一個(gè)設(shè)備可以取非常長的時(shí)間(幾秒或更長)來服務(wù)一個(gè)請(qǐng)求時(shí)產(chǎn)生的問題,因?yàn)閼?yīng)用程序的處理環(huán)境在請(qǐng)求期間在休息狀態(tài)下只保持在封鎖狀態(tài)和調(diào)度驅(qū)動(dòng)程序是被動(dòng)的和空閑的。當(dāng)該請(qǐng)求正被處理時(shí),沒有什么調(diào)度驅(qū)動(dòng)程序資源需要由任何處理環(huán)境擁有。所以,如果一個(gè)處理環(huán)境在一個(gè)設(shè)備請(qǐng)求期間非正常結(jié)束,則系統(tǒng)不會(huì)失去穩(wěn)定性。特別是,在調(diào)度驅(qū)動(dòng)程序的關(guān)鍵段中的代碼不封鎖和輪詢,允許這些部分迅速激勵(lì),它們對(duì)系統(tǒng)的穩(wěn)定性、性能、和響應(yīng)性很重要。另外,在調(diào)度驅(qū)動(dòng)程序中不進(jìn)行輪詢?nèi)魏螙|西。主CPU在I/O處理期間自由執(zhí)行其它任務(wù)。
本發(fā)明的應(yīng)用程序側(cè)可以容易地容放在一個(gè)程序庫中,這將使設(shè)備請(qǐng)求從其它應(yīng)用程序側(cè)的觀點(diǎn)看上去像一個(gè)封鎖調(diào)用。另外,本發(fā)明使用一般可用于大多數(shù)操作系統(tǒng)上的基元(亦即休息,獲得當(dāng)前系統(tǒng)時(shí)間)。使用調(diào)度驅(qū)動(dòng)程序?qū)崿F(xiàn)的本發(fā)明的處理對(duì)競(jìng)爭(zhēng)應(yīng)用程序公平。
雖然參考圖示實(shí)施例說明了這一發(fā)明,但是這一說明不打算解釋為限制的意義。圖示實(shí)施例的各種修改、以及對(duì)熟悉本發(fā)明所屬技術(shù)領(lǐng)域的人來說是顯然的本發(fā)明的其它實(shí)施例,被視為在本發(fā)明的精神和范圍內(nèi)。
權(quán)利要求
1.一種方法,包括調(diào)用一個(gè)調(diào)度驅(qū)動(dòng)程序來開始為一個(gè)應(yīng)用程序?qū)σ粋€(gè)設(shè)備的輸入/輸出(I/O)請(qǐng)求;決定所述設(shè)備是否忙;如果該設(shè)備不忙,為應(yīng)用程序提供為要完成的I/O請(qǐng)求的一個(gè)估計(jì)處理時(shí)間(EPT)。
2.權(quán)利要求1的方法,其中,決定設(shè)備是否忙包括決定是否設(shè)定了一個(gè)鎖定標(biāo)志,如果設(shè)定了鎖定標(biāo)志,則設(shè)備忙,如果未設(shè)定鎖定標(biāo)志,則設(shè)備不忙。
3.權(quán)利要求1的方法,另外包括,如果設(shè)備不忙的話,則設(shè)定一個(gè)鎖定標(biāo)志。
4.權(quán)利要求1的方法,另外包括,休息估計(jì)的處理時(shí)間(EPT)。
5.權(quán)利要求4的方法,另外包括,在休息估計(jì)的處理時(shí)間后調(diào)用驅(qū)動(dòng)程序以獲得I/O操作結(jié)果并決定該I/O請(qǐng)求是否已經(jīng)完成。
6.權(quán)利要求5的方法,另外包括,如果I/O請(qǐng)求已經(jīng)完成的話清除鎖定標(biāo)志。
7.權(quán)利要求5的方法,另外包括,如果I/O請(qǐng)求已經(jīng)完成的話給應(yīng)用程序提供該I/O請(qǐng)求的I/O操作結(jié)果。
8.權(quán)利要求5的方法,另外包括,如果I/O請(qǐng)求已經(jīng)完成的話則休息一個(gè)定時(shí)器滴答區(qū)間(TTI)。
9.權(quán)利要求5的方法,另外包括,如果I/O請(qǐng)求未完成的話,則為要被完成的I/O請(qǐng)求計(jì)算一個(gè)估計(jì)的剩余處理時(shí)間(EPTR),并提供該估計(jì)的剩余處理時(shí)間(EPTR)給應(yīng)用程序。
10.權(quán)利要求9的方法,另外包括休息估計(jì)的剩余處理時(shí)間(EPTR);在休息估計(jì)的剩余處理時(shí)間(EPTR)后調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果;決定該I/O請(qǐng)求是否已經(jīng)完成。
11.權(quán)利要求10的方法,另外包括決定I/O請(qǐng)求是否已經(jīng)完成,和如果I/O請(qǐng)求尚未完成,為要被完成的I/O請(qǐng)求計(jì)算一個(gè)估計(jì)的剩余處理時(shí)間(EPTR);休息估計(jì)的剩余處理時(shí)間(EPTR);在休息估計(jì)的剩余處理時(shí)間(EPTR)后調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果;和如果I/O請(qǐng)求尚未完成,則重復(fù)執(zhí)行上述操作,直到I/O請(qǐng)求已經(jīng)完成。
12.權(quán)利要求1的方法,另外包括,如果設(shè)備忙,則計(jì)算到該設(shè)備可為應(yīng)用程序使用時(shí)的一個(gè)估計(jì)的剩下時(shí)間量(EATL),并把該估計(jì)的剩下時(shí)間量(EATL)提供給應(yīng)用程序。
13.權(quán)利要求12的方法,另外包括休息估計(jì)的剩下時(shí)間量(EATL);在休息該估計(jì)的剩下時(shí)間量(EATL)后調(diào)用調(diào)度驅(qū)動(dòng)程序?yàn)閼?yīng)用程序開始對(duì)設(shè)備的I/O請(qǐng)求;決定設(shè)備是否仍然忙。
14.權(quán)利要求13的方法,另外包括決定設(shè)備是否仍然忙,和如果設(shè)備仍然忙,則計(jì)算到該設(shè)備可用時(shí)的估計(jì)的剩下的時(shí)間量(EATL);休息該估計(jì)的剩下的時(shí)間量(EATL);在休息該估計(jì)的剩下時(shí)間量(EATL)后調(diào)用調(diào)度驅(qū)動(dòng)程序?yàn)閼?yīng)用程序開始對(duì)設(shè)備的I/O請(qǐng)求;和如果I/O請(qǐng)求尚未開始,則重復(fù)執(zhí)行上述操作,直到I/O請(qǐng)求已經(jīng)開始。
15.一種可機(jī)讀介質(zhì),其上存儲(chǔ)有指令,這些指令在由機(jī)器執(zhí)行時(shí)引起該機(jī)器執(zhí)行操作,所述操作包括調(diào)用一個(gè)調(diào)度驅(qū)動(dòng)程序來開始為一個(gè)應(yīng)用程序的對(duì)一個(gè)設(shè)備的輸入/輸出(I/O)請(qǐng)求;決定所述設(shè)備是否忙;如果該設(shè)備不忙,為應(yīng)用程序提供為要完成的I/O請(qǐng)求的一個(gè)估計(jì)處理時(shí)間(EPT)。
16.權(quán)利要求15的可機(jī)讀介質(zhì),其中,決定設(shè)備是否忙包括決定是否設(shè)定了鎖定標(biāo)志,如果設(shè)定了鎖定標(biāo)志,則設(shè)備忙,如果未設(shè)定鎖定標(biāo)志,則設(shè)備不忙。
17.權(quán)利要求15的可機(jī)讀介質(zhì),另外包括,如果設(shè)備不忙的話,則設(shè)定一個(gè)鎖定標(biāo)志的操作。
18.權(quán)利要求15的可機(jī)讀介質(zhì),另外包括,休息估計(jì)的處理時(shí)間(EPT)的操作。
19.權(quán)利要求18的可機(jī)讀介質(zhì),另外包括,在休息估計(jì)的處理時(shí)間后調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果并決定該I/O請(qǐng)求是否已經(jīng)完成的操作。
20.權(quán)利要求19的可機(jī)讀介質(zhì),另外包括,如果I/O請(qǐng)求已經(jīng)完成的話清除鎖定標(biāo)志的操作。
21.權(quán)利要求19的可機(jī)讀介質(zhì),另外包括,如果I/O請(qǐng)求已經(jīng)完成的話給應(yīng)用程序提供該I/O請(qǐng)求的I/O操作結(jié)果的操作。
22.權(quán)利要求19的可機(jī)讀介質(zhì),另外包括,如果I/O請(qǐng)求已經(jīng)完成的話則休息一個(gè)定時(shí)器滴答區(qū)間(TTI)的操作。
23.權(quán)利要求19的可機(jī)讀介質(zhì),另外包括,如果I/O請(qǐng)求未完成的話,則為要被完成的I/O請(qǐng)求計(jì)算一個(gè)估計(jì)的剩余處理時(shí)間(EPTR),并提供該估計(jì)的剩余處理時(shí)間(EPTR)給應(yīng)用程序。
24.權(quán)利要求19的可機(jī)讀介質(zhì),另外包括操作休息估計(jì)的剩余處理時(shí)間(EPTR);在休息估計(jì)的剩余處理時(shí)間(EPTR)后調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果;決定該I/O請(qǐng)求是否已經(jīng)完成。
25.權(quán)利要求24的可機(jī)讀介質(zhì),另外包括操作決定I/O請(qǐng)求是否已經(jīng)完成,和如果I/O請(qǐng)求尚未完成,則為要被完成的I/O請(qǐng)求計(jì)算一個(gè)估計(jì)的剩余處理時(shí)間(EPTR);休息估計(jì)的剩余處理時(shí)間(EPTR);在休息估計(jì)的剩余處理時(shí)間(EPTR)后調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果;和如果I/O請(qǐng)求尚未完成,則重復(fù)執(zhí)行上述操作,直到I/O請(qǐng)求已經(jīng)完成。
26.權(quán)利要求15的可機(jī)讀介質(zhì),另外包括操作如果設(shè)備忙,則計(jì)算到該設(shè)備可為應(yīng)用程序使用時(shí)的一個(gè)估計(jì)的剩下時(shí)間量(EATL),并把該估計(jì)的剩下時(shí)間量(EATL)提供給應(yīng)用程序。
27.權(quán)利要求26的可機(jī)讀介質(zhì),另外包括操作休息估計(jì)的剩下時(shí)間量(EATL);在休息該估計(jì)的剩下時(shí)間量(EATL)后調(diào)用調(diào)度驅(qū)動(dòng)程序?yàn)閼?yīng)用程序開始對(duì)設(shè)備的I/O請(qǐng)求;決定設(shè)備是否仍然忙。
28.權(quán)利要求27的可機(jī)讀介質(zhì),另外包括執(zhí)行操作決定設(shè)備是否仍然忙,和如果設(shè)備仍然忙,則計(jì)算到該設(shè)備可用時(shí)的估計(jì)的剩下的時(shí)間量(EATL);休息該估計(jì)的剩下的時(shí)間量(EATL);在休息該估計(jì)的剩下時(shí)間量(EATL)后調(diào)用調(diào)度驅(qū)動(dòng)程序?yàn)閼?yīng)用程序開始對(duì)設(shè)備的I/O請(qǐng)求;和如果I/O請(qǐng)求尚未開始,則重復(fù)執(zhí)行上述操作,直到I/O請(qǐng)求已經(jīng)開始。
29.一種裝置,包括一個(gè)處理器,具有連接到它的存儲(chǔ)器,存儲(chǔ)器存儲(chǔ)有應(yīng)用程序、調(diào)度驅(qū)動(dòng)程序,應(yīng)用程序調(diào)用調(diào)度驅(qū)動(dòng)程序開始對(duì)設(shè)備的輸入/輸出(I/O)請(qǐng)求;調(diào)度驅(qū)動(dòng)程序,決定一個(gè)設(shè)備是否忙;如果該設(shè)備不忙,為應(yīng)用程序提供為要完成的I/O請(qǐng)求的一個(gè)估計(jì)處理時(shí)間(EPT)。
30.權(quán)利要求29的裝置,其中,決定設(shè)備是否忙包括決定是否設(shè)定了鎖定標(biāo)志,如果設(shè)定了鎖定標(biāo)志,則設(shè)備忙,如果未設(shè)定鎖定標(biāo)志,則設(shè)備不忙。
31.權(quán)利要求29的裝置,其中,如果設(shè)備不忙的話,則調(diào)度驅(qū)動(dòng)程序設(shè)定一個(gè)鎖定標(biāo)志。
32.權(quán)利要求29的裝置,其中,應(yīng)用程序休息估計(jì)的處理時(shí)間(EPT)。
33.權(quán)利要求32的裝置,其中,在休息估計(jì)的處理時(shí)間后應(yīng)用程序調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果并決定該I/O請(qǐng)求是否已經(jīng)完成。
34.權(quán)利要求32的裝置,其中,如果I/O請(qǐng)求已經(jīng)完成的話調(diào)度驅(qū)動(dòng)程序清除鎖定標(biāo)志。
35.權(quán)利要求32的裝置,其中,如果I/O請(qǐng)求已經(jīng)完成的話調(diào)度驅(qū)動(dòng)程序給應(yīng)用程序提供該I/O請(qǐng)求的I/O操作結(jié)果。
36.權(quán)利要求32的裝置,其中,如果I/O請(qǐng)求已經(jīng)完成的話則應(yīng)用程序休息一個(gè)定時(shí)器滴答區(qū)間(TTI)。
37.權(quán)利要求32的裝置,其中,如果I/O請(qǐng)求未完成的話,則調(diào)度驅(qū)動(dòng)程序?yàn)橐煌瓿傻腎/O請(qǐng)求計(jì)算一個(gè)估計(jì)的剩余處理時(shí)間(EPTR),并提供該估計(jì)的剩余處理時(shí)間(EPTR)給應(yīng)用程序。
38.權(quán)利要求37的裝置,其中,應(yīng)用程序休息估計(jì)的剩余處理時(shí)間(EPTR);在休息估計(jì)的剩余處理時(shí)間(EPTR)后調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果;決定該I/O請(qǐng)求是否已經(jīng)完成。
39.權(quán)利要求38的裝置,其中,應(yīng)用程序決定I/O請(qǐng)求是否已經(jīng)完成,;休息由調(diào)度驅(qū)動(dòng)程序計(jì)算的估計(jì)的剩余處理時(shí)間(EPTR);在休息估計(jì)的剩余處理時(shí)間(EPTR)后調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果;如果I/O請(qǐng)求尚未完成,則重復(fù)執(zhí)行上述操作,直到I/O請(qǐng)求已經(jīng)完成。
40.權(quán)利要求29的裝置,其中,如果設(shè)備忙,則調(diào)度驅(qū)動(dòng)程序計(jì)算到該設(shè)備可為應(yīng)用程序使用時(shí)的一個(gè)估計(jì)的剩下時(shí)間量(EATL),并把該估計(jì)的剩下時(shí)間量(EATL)提供給應(yīng)用程序。
41.權(quán)利要求40的裝置,其中,應(yīng)用程序休息估計(jì)的剩下時(shí)間量(EATL);在休息估計(jì)的剩下時(shí)間量(EATL)后調(diào)用調(diào)度驅(qū)動(dòng)程序?yàn)閼?yīng)用程序開始對(duì)設(shè)備的I/O請(qǐng)求;決定設(shè)備是否仍然忙。
42.權(quán)利要求41的裝置,其中,應(yīng)用程序決定設(shè)備是否仍然忙;休息由調(diào)度驅(qū)動(dòng)程序計(jì)算的估計(jì)的剩下的時(shí)間量(EATL);在休息估計(jì)的剩下的時(shí)間量(EATL)后調(diào)用調(diào)度驅(qū)動(dòng)程序?yàn)閼?yīng)用程序開始對(duì)設(shè)備的I/O請(qǐng)求;如果I/O請(qǐng)求尚未開始,則重復(fù)執(zhí)行上述操作,直到I/O請(qǐng)求已經(jīng)開始。
全文摘要
本發(fā)明為調(diào)度驅(qū)動(dòng)程序提供一種方法和裝置,為使用時(shí)間估計(jì)實(shí)現(xiàn)一種協(xié)議,其可用于不產(chǎn)生中斷的設(shè)備。應(yīng)用程序調(diào)用調(diào)度驅(qū)動(dòng)程序開始對(duì)一個(gè)設(shè)備的輸入/輸出(I/O)請(qǐng)求。調(diào)度驅(qū)動(dòng)程序決定設(shè)備是否忙。如果設(shè)備不忙,則調(diào)度驅(qū)動(dòng)程序給應(yīng)用程序提供一個(gè)為要被完成的I/O請(qǐng)求的估計(jì)處理時(shí)間(EPT)。在一個(gè)實(shí)施例中,如果設(shè)備忙,則調(diào)度驅(qū)動(dòng)程序計(jì)算到該設(shè)備可為應(yīng)用程序使用時(shí)的一個(gè)估計(jì)的剩下的時(shí)間量(EATL),并給應(yīng)用程序提供這一EATL。當(dāng)設(shè)備不忙時(shí),應(yīng)用程序休息估計(jì)的處理時(shí)間(EPT)和調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果。如果I/O請(qǐng)求已經(jīng)完成,則調(diào)度驅(qū)動(dòng)程序提供I/O操作結(jié)果給應(yīng)用程序。然而,I/O請(qǐng)求尚未完成,則調(diào)度驅(qū)動(dòng)程序?yàn)橐煌瓿傻腎/O請(qǐng)求計(jì)算一個(gè)估計(jì)的剩余處理時(shí)間(EPTR)并將該EPTR提供給應(yīng)用程序。應(yīng)用程序休息估計(jì)的剩余處理時(shí)間(EPTR)并再次調(diào)用調(diào)度驅(qū)動(dòng)程序以獲得I/O操作結(jié)果??梢灾貜?fù)這些操作直到I/O請(qǐng)求已經(jīng)完成。
文檔編號(hào)G06F9/48GK1449522SQ01814716
公開日2003年10月15日 申請(qǐng)日期2001年6月8日 優(yōu)先權(quán)日2000年6月30日
發(fā)明者D·巴斯, D·納爾遜 申請(qǐng)人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
宿迁市| 上饶市| 柞水县| 巴林左旗| 金乡县| 融水| 桃园市| 肇源县| 黔江区| 会泽县| 秦皇岛市| 铜鼓县| 武清区| 祁连县| 洛川县| 榆林市| 溧阳市| 龙川县| 诸城市| 托克托县| 赤水市| 兴安盟| 离岛区| 康平县| 岳阳县| 六枝特区| 峨山| 大姚县| 金湖县| 永登县| 扎兰屯市| 拜城县| 永春县| 轮台县| 昌吉市| 康马县| 周至县| 莎车县| 承德市| 广元市| 滁州市|