本發(fā)明涉及用于處理nvme命令的nvme控制器,特別地,涉及在nvme控制器中準確識別nvme隊列狀態(tài)。
背景技術(shù):
:設(shè)備之間通過隊列交換命令或消息是常用的。命令發(fā)送方將命令插入提交隊列尾部,命令接收方從隊列尾部取出命令并處理,將處理結(jié)果插入到完成隊列尾部,命令發(fā)送方從完成隊列頭部取出命令處理結(jié)果。通過隊列交換命令,能夠在發(fā)送方與接收方直接維護多個并發(fā)的命令,并且命令之間的處理速度不必一致。nvme協(xié)議(參見“nvmexpressrevision1.2”,2014年11月3日,通過引用將其全文合并于本說明書)定義了主機(host)與設(shè)備(device)之間交換數(shù)據(jù)的命令與數(shù)據(jù)結(jié)構(gòu)(如圖1所示)。主機中維護多個隊列,每個隊列中可填充多個命令。主機與設(shè)備基于隊列交換數(shù)據(jù)。主機將命令c填入提交隊列,設(shè)備從提交隊列中取得命令c,并按命令c的內(nèi)容進行處理,將處理結(jié)果填入完成隊列。主機從完成隊列獲取命令c的處理結(jié)果以知曉命令c的處理完成。依據(jù)nvme協(xié)議,在設(shè)備端維護多個隊列的隊首與隊尾指針。主機與設(shè)備都會更新隊首與隊尾指針。主機向設(shè)備發(fā)送命令時,主機將命令插入提交隊列的隊尾,并更新隊尾指針。設(shè)備端比較提交隊列的隊首指針與隊尾指針,在二者不同時,確定隊列中有待處理的命令。設(shè)備端從隊列中取出命令后,更新隊首指針。主機端基于隊首指針與隊尾指針,可確定隊列中是否有空間容納新的命令。在軟件組件之間、集成電路組件之間以及軟件與硬件之間也使用隊列交換消息或命令。發(fā)明人提出了在設(shè)備端維護隊列指針的方式(申請?zhí)枮?01510997494.x、發(fā)明名稱為nvme門鈴處理方法及其裝置的中國專利申請)。(參看圖2),將隊列指針存儲在設(shè)備端的nvme控制器的存儲器中,從而設(shè)備端的nvme控制器可維護不同數(shù)量的nvme隊列指針。當在主機與設(shè)備之間有n個隊列時,在存儲器中存儲2n個指針。為每個隊列在存儲器中存儲隊首指針與隊尾指針。在nvme控制器中還提供狀態(tài)寄存器,用以指示各個隊列的狀態(tài)(隊首指針與隊尾指針是否相同,隊首指針與隊尾指針不同,意味著隊列中有待處理的nvme命令),狀態(tài)寄存器中為每個隊列提供一個寄存器位。在圖2中,主機能夠訪問設(shè)備端的存儲器中存儲的隊列指針;nvme控制器的cpu能夠訪問存儲器中存儲的隊列指針;監(jiān)控器組件1,在監(jiān)視到主機更新存儲器中的隊尾指針時,設(shè)置狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位;監(jiān)控器組件2,在監(jiān)視到nvme控制器的cpu更新存儲器中的隊首指針時,讀取與該隊首指針相對應(yīng)的隊尾指針,在隊首指針與隊尾指針不同時,設(shè)置狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位;在隊首指針與隊尾指針相同時,清除狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位。技術(shù)實現(xiàn)要素:然而,(1)存儲器的訪問速度較慢,而nvme控制器中的cpu指令執(zhí)行速度較快。從而當cpu執(zhí)行指令更新存儲器中的隊列指針后,會繼續(xù)依據(jù)狀態(tài)寄存器的指示,確定是否對隊列進行處理。而在nvmecpu更新存儲器中的隊列指針與狀態(tài)寄存器反映出真實的隊列狀態(tài)之間存在時間窗口。在該時間窗口內(nèi),狀態(tài)寄存器可能指示隊列中有命令需要處理,但相應(yīng)的命令已被nvmecpu處理完成。從而狀態(tài)寄存器指示的狀態(tài)信息是錯誤的。在多cpu的情況下,這種問題將更加嚴重。參看下表,在t0時刻,nvme控制器cpu發(fā)出指令更新隊列指針(隊首指針)。存儲器的訪問速度較慢,在t2時候才完成對存儲器中的隊首指針的更新。監(jiān)控器在t3時刻從存儲器中查詢到隊尾指針。在t4時刻,狀態(tài)寄存器才能反映出隊列真實的狀態(tài)。這導(dǎo)致在t1-t3的時間窗口內(nèi),nvmecpu無法通過狀態(tài)寄存器獲得隊列的真實狀態(tài)。時間軸t0t1t2t3t4nvmecpu發(fā)出指令更新隊首指針存儲器隊首指針被更新監(jiān)控器查詢查詢隊尾指針狀態(tài)寄存器錯誤隊列狀態(tài)錯誤隊列狀態(tài)錯誤隊列狀態(tài)反映真實隊列狀態(tài)(2)主機與nvme控制器的cpu都會更新存儲器中的隊首指針和/或隊尾指針;在nvme控制器cpu更新存儲器中的隊列指針后,依然需要查詢存儲器才能確定隊列狀態(tài),這也導(dǎo)致在一定時間窗口內(nèi)狀態(tài)寄存器指示的狀態(tài)信息是錯誤的。參看下表,在t0時刻,nvme控制器cpu發(fā)出指令更新隊列指針(隊首指針)。在t1時刻,主機更新隊尾指針,由于存儲器訪問端口被占用,直到t5時刻,狀態(tài)寄存器才能反映出隊列真實的狀態(tài)。這導(dǎo)致在t1-t4的時間窗口內(nèi),nvmecpu無法通過狀態(tài)寄存器獲得隊列的真實狀態(tài)。時間軸t0t1t2t3t4t5nvmecpu發(fā)出指令更新隊首指針主機發(fā)出指令更新隊尾指針存儲器隊首指針被更新隊尾指針被更新監(jiān)控器查詢查詢隊尾指針狀態(tài)寄存器錯誤隊列狀態(tài)錯誤隊列狀態(tài)錯誤隊列狀態(tài)反映真實隊列狀態(tài)因而,需要提供技術(shù)方案,使得nvme控制器cpu能夠獲知隊列的真實狀態(tài)。根據(jù)本發(fā)明的第一方面,提供了根據(jù)本發(fā)明第一方面的第一命令隊列處理器,包括存儲器、處理器、監(jiān)視器、狀態(tài)寄存器以及標志寄存器;所述狀態(tài)寄存器用于指示命令隊列的狀態(tài),其中在命令隊列非空時,所述狀態(tài)寄存器中相對應(yīng)的比特被所述監(jiān)視器置位;所述標志寄存器可被所述cpu與所述監(jiān)視器訪問;其中當所述標志寄存器被置位時,所述標志寄存器指示所述狀態(tài)寄存器的值反應(yīng)了隊列的真實狀態(tài),而當所述標志寄存器被清除時,所述標志寄存器指示所述狀態(tài)寄存器的值并不反映隊列的真實狀態(tài)。根據(jù)本發(fā)明第一方面的第一命令隊列處理器,還提供了根據(jù)本發(fā)明第一方面的第二命令隊列處理器,其中當所述cpu更新所述存儲器中的隊列指針后,所述cpu清除所述標志寄存器;以及當所述監(jiān)視器設(shè)置所述狀態(tài)寄存器后,還將所述標志寄存器置位。根據(jù)本發(fā)明第一方面的第一與第二命令隊列處理器之一,還提供了根據(jù)本發(fā)明第一方面的第三命令隊列處理器,其中所述cpu讀取所述標志寄存器,確定所述標志寄存器被置位后,才訪問所述狀態(tài)寄存器,并依據(jù)所述狀態(tài)寄存器對所述命令隊列進行處理。根據(jù)本發(fā)明第一方面的第一至第三命令隊列處理器之一,還提供了根據(jù)本發(fā)明第一方面的第四命令隊列處理器,其中所述cpu讀取所述標志寄存器,確定所述標志寄存器被清除時,忽略所述狀態(tài)寄存器的指示。根據(jù)本發(fā)明第一方面的第一至第四命令隊列處理器之一,還提供了根據(jù)本發(fā)明第一方面的第五命令隊列處理器,其中所述監(jiān)視器響應(yīng)于所述cpu更新了所述存儲器中的第一隊列指針,所述監(jiān)視器讀取與所述第一隊列指針相對應(yīng)的第二隊列指針,并依據(jù)所述第一隊列指針與所述第二隊列指針確定所述命令隊列的狀態(tài),并進而更新所述狀態(tài)寄存器以及將所述標志寄存器置位。根據(jù)本發(fā)明第一方面的第一至第五命令隊列處理器之一,還提供了根據(jù)本發(fā)明第一方面的第六命令隊列處理器,其中所述監(jiān)控器基于所述cpu訪問所述存儲器的地址識別所述cpu更新了所述存儲器中的第一隊列指針。根據(jù)本發(fā)明第一方面的第一至第六命令隊列處理器之一,還提供了根據(jù)本發(fā)明第一方面的第七命令隊列處理器,所述命令隊列處理器還包括第二處理器,其中所述標志寄存器與所述存儲器可被所述第二處理器訪問;所述cpu或第二cpu訪問所述狀態(tài)寄存器前,對所述標志寄存器加鎖,并依據(jù)所述標記寄存器的內(nèi)容決定是否訪問所述狀態(tài)寄存器。根據(jù)本發(fā)明第一方面的第一至第七命令隊列處理器之一,還提供了根據(jù)本發(fā)明第一方面的第八命令隊列處理器,其中所述監(jiān)視器響應(yīng)于主機更新了所述存儲器中的第二隊列指針,將所述狀態(tài)寄存器置位,并將所述標志寄存器置位,所述cpu基于所述標志寄存器被置位,確定當前所述狀態(tài)寄存器反映了所述隊列的真實狀態(tài)。根據(jù)本發(fā)明的第二方面,提供了根據(jù)本發(fā)明第二方面的第一命令隊列處理方法,包括:清除標志寄存器;更新存儲器中的隊首指針;讀取標志寄存器,確定所述標志寄存器被置位后,才訪問所述狀態(tài)寄存器,并依據(jù)所述狀態(tài)寄存器對所述命令隊列進行處理。根據(jù)本發(fā)明第二方面的第一命令隊列處理方法,還提供了根據(jù)本發(fā)明第二方面的第一命令隊列處理方法,還包括:在更新存儲器中的隊首指針后,讀取標志寄存器之前,執(zhí)行不依賴于狀態(tài)寄存器的任務(wù)或休眠。根據(jù)本發(fā)明第二方面的第一或第二命令隊列處理方法,還提供了根據(jù)本發(fā)明第二方面的第三命令隊列處理方法,其中讀取標志寄存器,確定所述標志寄存器被清除時,忽略所述狀態(tài)寄存器的指示或休眠。根據(jù)本發(fā)明第二方面的第一至第三命令隊列處理方法之一,還提供了根據(jù)本發(fā)明第二方面的第四命令隊列處理方法,其中訪問所述標志寄存器時,對所述狀態(tài)寄存器加鎖。根據(jù)本發(fā)明第二方面的第一至第四命令隊列處理方法之一,還提供了根據(jù)本發(fā)明第二方面的第五命令隊列處理方法,其中訪問狀態(tài)寄存器前,對所述標志寄存器加鎖,并依據(jù)所述標記寄存器的內(nèi)容決定是否訪問所述狀態(tài)寄存器。根據(jù)本發(fā)明第二方面的第三至第五命令隊列處理方法之一,還提供了根據(jù)本發(fā)明第二方面的第六命令隊列處理方法,還包括查詢所述標志寄存器,確定所述標志寄存器被置位后,才訪問所述狀態(tài)寄存器,并依據(jù)所述狀態(tài)寄存器對所述命令隊列進行處理。根據(jù)本發(fā)明第二方面的第三至第六命令隊列處理方法之一,還提供了根據(jù)本發(fā)明第二方面的第七命令隊列處理方法,其中所述清除標志寄存器與所述更新存儲器中的隊首指針的操作是原子操作。根據(jù)本發(fā)明的第三方面,提供了根據(jù)本發(fā)明第三方面的命令隊列處理裝置,包括:用于清除標志寄存器的模塊;用于更新存儲器中的隊首指針的模塊;以及用于讀取標志寄存器,確定所述標志寄存器被置位后,才訪問所述狀態(tài)寄存器,并依據(jù)所述狀態(tài)寄存器對所述命令隊列進行處理的模塊。根據(jù)本發(fā)明的第四方面,提供了根據(jù)本發(fā)明第四方面的包括指令代碼的程序,當被載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時,所述程序使所述存儲設(shè)備的處理器執(zhí)行根據(jù)本發(fā)明第二方面的命令隊列處理方法之一。附圖說明當連同附圖閱讀時,通過參考后面對示出性的實施例的詳細描述,將最佳地理解本發(fā)明以及優(yōu)選的使用模式和其進一步的目的和優(yōu)點,其中附圖包括:圖1示出了現(xiàn)有技術(shù)中主機與設(shè)備間通過隊列交換命令的示意圖;圖2示出了根據(jù)現(xiàn)有技術(shù)的nvme控制器的方框圖;圖3示出了根據(jù)本發(fā)明實施例的nvme控制器的方框圖;圖4示出了根據(jù)本發(fā)明實施例的nvme控制器cpu隊列處理過程的流程圖;圖5示出了根據(jù)本發(fā)明又一實施例的nvme控制器的方框圖;圖6示出了根據(jù)本發(fā)明依然又一實施例的nvme控制器的方框圖。具體實施方式圖3示出了根據(jù)本發(fā)明實施例的nvme控制器的方框圖。在根據(jù)圖3的實施例中,主機與設(shè)備根據(jù)nvme協(xié)議而通過隊列交換命令。在設(shè)備中包括nvme控制器。設(shè)備作為舉例可以是支持nvme協(xié)議的固態(tài)硬盤。圖3的nvme控制器包括存儲器、處理器(cpu)、監(jiān)控器、狀態(tài)寄存器以及可被處理器與監(jiān)控器訪問的標志寄存器。在存儲器中存儲根據(jù)nvme協(xié)議的隊列指針。主機能夠訪問存儲器中存儲的隊列指針。nvme控制器的cpu能夠訪問存儲器中存儲的隊列指針。監(jiān)控器在監(jiān)視到nvme控制器的cpu更新存儲器中的隊首指針時,讀取與該隊首指針相對應(yīng)的隊尾指針,在隊首指針與隊尾指針不同時,設(shè)置狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位;在隊首指針與隊尾指針相同時,清除狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位。cpu與監(jiān)控器均可訪問標志寄存器。nvme控制器cpu通過執(zhí)行指令可清除標志寄存器,nvme控制器cpu通過執(zhí)行指令可讀取標志寄存器的值。監(jiān)控器可置位標志寄存器。標志寄存器被置位時,表示狀態(tài)寄存器的值反應(yīng)了隊列的當前真實狀態(tài),而當標志寄存器被清除時,表示狀態(tài)寄存器的值并不反映隊列的真實狀態(tài)。(在操作時)在nvme控制器cpu更新存儲器中的隊列指針(隊首指針)后,一并清除標志寄存器的值。從而提示nvme控制器cpu中執(zhí)行的軟件,狀態(tài)寄存器當前并不反映隊列的真實狀態(tài)。nvme控制器cpu中執(zhí)行的軟件可查詢標志寄存器,當發(fā)現(xiàn)標志寄存器被清除,則可知曉狀態(tài)寄存器并不反映隊列的真實狀態(tài)。監(jiān)控器在發(fā)現(xiàn)nvme控制器cpu更新了共享存儲器中的隊列指針后,監(jiān)控器讀取與nvme控制器cpu更新的隊列指針(隊首指針)相對應(yīng)的隊尾指針,并確定隊列是否有待處理的條目,進而更新狀態(tài)寄存器。此時狀態(tài)寄存器指示了隊列的真實狀態(tài)。繼而監(jiān)控器設(shè)置標志寄存器。此后,nvme控制器cpu再查詢標志寄存器時,將發(fā)現(xiàn)標志寄存器被置位,從而知曉狀態(tài)寄存器反映了隊列的真實狀態(tài)。繼而nvme控制器cpu可查詢狀態(tài)寄存器并對隊列中的條目進行處理。圖4示出了根據(jù)本發(fā)明實施例的nvme控制器cpu隊列處理過程的流程圖。nvme控制器cpu在從命令隊列(從隊首)中取出主機發(fā)出的nvme命令后,會更新命令隊列的頭指針。頭指針存放于存儲器中。在cpu更新存儲器中的頭指針(參看圖4,步驟420)之前或同時,cpu操作標志寄存器來清除標志寄存器(步驟410)。作為舉例,清除標志寄存器可以是將標志寄存器設(shè)為邏輯0。從而此后該cpu或其他cpu能夠識別到標志寄存器的值為邏輯0,并意識到當前狀態(tài)寄存器的值不能反映隊列的真實狀態(tài)。接下來,cpu等待狀態(tài)寄存器反映隊列的真實狀態(tài)(即等待標志寄存器被監(jiān)控器置位,例如,設(shè)為邏輯1),在等待期間,cpu可以執(zhí)行其他操作以提高效率(步驟430)。當cpu發(fā)現(xiàn)標志寄存器被置位(步驟450),此時狀態(tài)寄存器已經(jīng)反映隊列的真實狀態(tài),因而cpu讀取狀態(tài)寄存器,并依據(jù)狀態(tài)寄存器確定是否有命令隊列需要處理。結(jié)合圖3與圖4,cpu更新存儲其中的隊列頭指針時(步驟420),監(jiān)控器識別到cpu對存儲器中的隊列頭指針的更新。作為響應(yīng),監(jiān)控器從存儲器中讀取與該頭指針相對應(yīng)的尾指針,并通過比較頭指針與尾指針來確定隊列狀態(tài)(隊列中是否有命令需要處理,或者隊列為空或非空的狀態(tài))。監(jiān)控器在狀態(tài)寄存器中反映隊列的狀態(tài),接下來設(shè)置標志寄存器以向cpu指示對狀態(tài)寄存器的更新已經(jīng)完成,狀態(tài)寄存器已經(jīng)反映了隊列的真實狀態(tài)。在一個例子中,cpu以訪問通用寄存器的方式訪問標志寄存器。在另一個例子中,cpu執(zhí)行訪存指令時,作為訪存指令的附加作用,當訪問指定地址空間(存儲隊首指針的地址空間)時,清除標志寄存器??梢栽谠L存指令中指示存儲隊首指針的地址空間,也可以在寄存器中配置存儲隊首指針的地址空間。在又一個例子中,標志寄存器用作cpu的條件操作指令的標志位,cpu在讀取狀態(tài)寄存器時,使用條件操作指令。當標志寄存器被置位時,執(zhí)行對狀態(tài)寄存器的讀取操作,而當標志寄存器被清除時,忽略對狀態(tài)寄存器的讀取操作。在依然又一個例子中,估計從cpu更新隊首指針到狀態(tài)寄存器反映隊列的真實狀態(tài)的時間間隔t,并依據(jù)該時間間隔t設(shè)置定時器。在cpu更新隊首指針后啟動定時器,而在定時器到時后cpu再嘗試訪問標志寄存器以判斷狀態(tài)寄存器是否反映了隊列的真實狀態(tài)。圖5示出了根據(jù)本發(fā)明又一實施例的nvme控制器的方框圖。圖5的nvme控制器包括存儲器、處理器1(cpu1)、處理器2(cpu2)、監(jiān)控器、狀態(tài)寄存器以及可被處理器與監(jiān)控器訪問的標志寄存器。在存儲器中存儲根據(jù)nvme協(xié)議的隊列指針。主機能夠訪問存儲器中存儲的隊列指針。nvme控制器的cpu能夠訪問存儲器中存儲的隊列指針。監(jiān)控器在監(jiān)視到nvme控制器的cpu更新存儲器中的隊首指針時,讀取與該隊首指針相對應(yīng)的隊尾指針,在隊首指針與隊尾指針不同時,設(shè)置狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位;在隊首指針與隊尾指針相同時,清除狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位。cpu1、cpu2與監(jiān)控器均可訪問標志寄存器。cpu通過執(zhí)行指令可清除標志寄存器,nvme控制器cpu通過執(zhí)行指令可讀取標志寄存器的值。監(jiān)控器可置位標志寄存器。標志寄存器為cpu1與cpu2所共享。在cpu1或cpu2訪問狀態(tài)寄存器前,需要對標志寄存器加鎖,以獨占對標志寄存器的訪問權(quán),并獲取標志寄存器的值,并依據(jù)標志寄存器的內(nèi)容決定如何訪問狀態(tài)寄存器。在標志寄存器被置位時,狀態(tài)寄存器反映了隊列的真實狀態(tài),而在標志寄存器被清除時,狀態(tài)寄存器不反映隊列的真實狀態(tài)。圖6示出了根據(jù)本發(fā)明的依然又一實施例的nvme控制器的方框圖。圖6的nvme控制器包括存儲器、處理器(cpu)、監(jiān)控器1、監(jiān)控器2、狀態(tài)寄存器以及可被處理器與監(jiān)控器訪問的標志寄存器。監(jiān)控器1與監(jiān)控器2均可訪問標志寄存器。在存儲器中存儲根據(jù)nvme協(xié)議的隊列指針。主機能夠訪問存儲器中存儲的隊列指針。nvme控制器的cpu能夠訪問存儲器中存儲的隊列指針。為了向設(shè)備發(fā)送命令,主機將命令填入命令隊列,并更新存儲器中的隊列隊尾指針。監(jiān)控器2在監(jiān)視到主機更新存儲器中的隊尾指針時,更新狀態(tài)寄存器,以反映隊列中有新命令等待處理,接下來或同時,監(jiān)控器2還將標志寄存器置位,以指示當前狀態(tài)寄存器反映了隊列的真實狀態(tài)。監(jiān)控器1在監(jiān)視到nvme控制器的cpu更新存儲器中的隊首指針時,讀取與該隊首指針相對應(yīng)的隊尾指針,在隊首指針與隊尾指針不同時,設(shè)置狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位;在隊首指針與隊尾指針相同時,清除狀態(tài)寄存器中與該隊尾指針所屬的隊列所對應(yīng)的位。總體而言,當監(jiān)控器1或監(jiān)控器2識別到對存儲中的隊列指針的更新,依據(jù)隊列狀態(tài)設(shè)置狀態(tài)寄存器,并設(shè)置標志寄存器已向cpu指示當前狀態(tài)寄存器反映隊列的真實狀態(tài)。而在無論何時cpu訪問狀態(tài)寄存器前,都先查詢標志寄存器,以確定狀態(tài)寄存器是否反映隊列的真實狀態(tài),以及在cpu更新存儲器中的隊列指針前,都清除標志寄存器。cpu清除標志寄存器的操作與更新存儲器中的隊首指針的操作,優(yōu)選地緊鄰地執(zhí)行,以使標志寄存器盡可能準確地反映狀態(tài)寄存器的真實性。所屬領(lǐng)域技術(shù)人員將意識到,除應(yīng)用于訪問根據(jù)nvme協(xié)議的命令隊列的nvme控制器,根據(jù)本發(fā)明的實施例還可應(yīng)用于其他基于隊列交換在發(fā)送方與接收方交換命令和/或數(shù)據(jù)的場合。本發(fā)明實施例還提供一種包含程序代碼的程序,當被載入cpu并在cpu中執(zhí)行時,所述程序代碼使所述cpu執(zhí)行上面所述的方法。本發(fā)明實施例還提供一種包括程序代碼的程序,當被載入存儲設(shè)備并在存儲設(shè)備上執(zhí)行時,所述程序使所述存儲設(shè)備的處理器執(zhí)行上面所述的方法之一。應(yīng)該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以分別由包括計算機程序指令的各種裝置來實施。這些計算機程序指令可以加載到通用計算機、專用計算機或其他可編程數(shù)據(jù)控制設(shè)備上以產(chǎn)生機器,從而在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令創(chuàng)建了用于實現(xiàn)一個或多個流程圖框中指定的功能的裝置。這些計算機程序指令還可以存儲在可以引導(dǎo)計算機或其他可編程數(shù)據(jù)控制設(shè)備的計算機可讀存儲器中從而以特定方式起作用,從而能夠利用存儲在計算機可讀存儲器中的指令來制造包括用于實現(xiàn)一個或多個流程圖框中所指定功能的計算機可讀指令的制品。計算機程序指令還可以加載到計算機或其他可編程數(shù)據(jù)控制設(shè)備上以使得在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行一系列的操作操作,從而產(chǎn)生計算機實現(xiàn)的過程,進而在計算機或其他可編程數(shù)據(jù)控制設(shè)備上執(zhí)行的指令提供了用于實現(xiàn)一個或多個流程圖框中所指定功能的操作。因而,框圖和流程圖的框支持用于執(zhí)行指定功能的裝置的組合、用于執(zhí)行指定功能的操作的組合和用于執(zhí)行指定功能的程序指令裝置的組合。還應(yīng)該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以由執(zhí)行指定功能或操作的、基于硬件的專用計算機系統(tǒng)實現(xiàn),或由專用硬件和計算機指令的組合實現(xiàn)。雖然當前發(fā)明參考的示例被描述,其只是為了解釋的目的而不是對本發(fā)明的限制,對實施方式的改變,增加和/或刪除可以被做出而不脫離本發(fā)明的范圍。這些實施方式所涉及的、從上面描述和相關(guān)聯(lián)的附圖中呈現(xiàn)的教導(dǎo)獲益的領(lǐng)域中的技術(shù)人員將認識到這里記載的本發(fā)明的很多修改和其他實施方式。因此,應(yīng)該理解,本發(fā)明不限于公開的具體實施方式,旨在將修改和其他實施方式包括在所附權(quán)利要求書的范圍內(nèi)。盡管在這里采用了特定的術(shù)語,但是僅在一般意義和描述意義上使用它們并且不是為了限制的目的而使用。當前第1頁12