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

用于操作系統(tǒng)中的定時器管理裝置和管理方法

文檔序號:6602629閱讀:188來源:國知局
專利名稱:用于操作系統(tǒng)中的定時器管理裝置和管理方法
技術(shù)領(lǐng)域
本發(fā)明涉及操作系統(tǒng)領(lǐng)域,特別涉及用于操作系統(tǒng)中的定時器管理裝置和管理方 法。
背景技術(shù)
在計算機應(yīng)用中,用戶通過操作系統(tǒng)使用并管理計算機硬件及軟件資源。對于一 般的操作系統(tǒng),主要追求系統(tǒng)吞吐率以及用戶的平均響應(yīng)時間,而對于單個用戶的響應(yīng)時 間則沒有嚴格的時間限制。但對于實時操作系統(tǒng)而言,時間是一種重要的系統(tǒng)資源,對外部 事件的響應(yīng)和任務(wù)的執(zhí)行都必須在限定的時間內(nèi)完成。實時操作系統(tǒng)輸出結(jié)果的正確性不 僅取決于計算所形成的邏輯結(jié)果,還要取決于結(jié)果產(chǎn)生的時間。因此實時操作系統(tǒng)必須在 限定的時間和空間內(nèi)完成特定的任務(wù),如果邏輯和時序出現(xiàn)偏差會引起嚴重后果。比如用 于控制火箭發(fā)動機的嵌入式操作系統(tǒng),它所發(fā)出的指令不僅要求速度快,而且對多個發(fā)動 機之間的時序要求也非常嚴格,對于實時性方面的要求可能達到微秒甚至納秒量級,在其 運行過程中某一指令操作的延遲執(zhí)行,都將會造成不可估計的嚴重損失。操作系統(tǒng)提供定 時器機制,可以指定在未來的某個時刻觸發(fā)某個事件的執(zhí)行。因此定時器作為實時操作系 統(tǒng)時間管理的核心就顯得至關(guān)重要。大多數(shù)嵌入式操作系統(tǒng)都對實時性要求非常強。嵌入式實時操作系統(tǒng)廣泛應(yīng)用于 工廠生產(chǎn)過程控制,汽車業(yè),辦公自動化,計算機外設(shè),通信設(shè)備,機器人,航空航天,民用消 費等領(lǐng)域。在網(wǎng)絡(luò)通信中,一次通信過程需要多個定時器來完成不同的計時任務(wù),當同時通 信的用戶數(shù)增加時,所需定時器的數(shù)目急劇增加。如果定時器在時間和內(nèi)存方面的管理方 法效率低,則會因定時器數(shù)目太大而造成定時處理耗用系統(tǒng)資源過大,延長用戶的響應(yīng)時 間,進而影響整個系統(tǒng)的性能。嵌入式操作系統(tǒng)本身所具有內(nèi)存資源有限的特點,又加劇了 對定時器管理的依賴,因此,定時器管理方法的效率高低是反映嵌入式實時操作系統(tǒng)性能 的重要指標之一?,F(xiàn)有技術(shù)中對各種嵌入式操作系統(tǒng)的定時器管理方法很多,主要有以下三種類型。第一種以uc/os嵌入式操作系統(tǒng)等為典型代表,延時定時器是通過掃描、遞減每 個任務(wù)的當前定時值實現(xiàn)的,所以在硬件定時器的中斷服務(wù)程序中需要不斷掃描任務(wù)鏈。 當定時的任務(wù)較多時,會影響中斷服務(wù)程序?qū)崟r任務(wù)的響應(yīng),成為系統(tǒng)實時性能的瓶頸。第二種以Linux系列操作系統(tǒng)為典型代表,通過多級鏈表實現(xiàn)對超時時間不同 的定時器的分類,離當前時間點較遠的定時器可以在一個時間區(qū)間內(nèi)共享一個定時器鏈 表,離當前時間點較近的定時器只能是相同的定時時間點才能共享一個定時器鏈表。Linux 采用哈希索引的方法避免了定時器鏈表的反復(fù)查詢,特別適合定時器應(yīng)用較多的場合。Linux系列操作系統(tǒng)的定時器精度較高,如在Linux2. 4中定時器精度為10ms,在 LinuX2.6中進一步改進為1ms,但對于某些對實時性要求非常高的應(yīng)用領(lǐng)域,如航空航天 中對實時業(yè)務(wù)的響應(yīng)時間要求可達納秒級,Linux的毫秒級定時器依然不能滿足實時嵌入式操作系統(tǒng)中對實時性的高精度要求。
第三種以RTAI(Real-Time Application Interface)為典型代表,RTAI 是在 Linux基礎(chǔ)上進行實時改進而來的。RTAI將所有與進程調(diào)度時間相關(guān)的機制,如定時器實 現(xiàn),信號量等待、發(fā)送、接收超時時間處理等,都集中到進程操作上,對于進程的調(diào)度主要在 延時隊列和就緒隊列之間進行調(diào)度,更能體現(xiàn)實時性,且對調(diào)度時間集中管理,操作也更加 方便。在圖1中給出了 RTAI系統(tǒng)中與定時器管理有關(guān)模塊的示意圖,這些模塊包括進程 調(diào)度模塊、硬件時鐘模塊、進程定時器管理模塊。其中,進程調(diào)度模塊用于管理RTAI系統(tǒng)中 的就緒隊列和等待隊列,在每個調(diào)度點根據(jù)進程的恢復(fù)運行時間和周期間隔,選擇待執(zhí)行 的進程。同時進程調(diào)度模塊還可根據(jù)RTAI系統(tǒng)中的進程時間信息,動態(tài)更新硬件時鐘模塊 的下次觸發(fā)時間。硬件時鐘模塊用于當其所設(shè)置的觸發(fā)時間到達時,觸發(fā)進程調(diào)度模塊的 執(zhí)行。進程定時器管理模塊用于根據(jù)用戶設(shè)置的進程恢復(fù)運行時間和周期間隔,將該進程 動態(tài)插入到RTAI下的就緒隊列和等待隊列。RTAI系統(tǒng)中通過進程實現(xiàn)定時機制的主要流程如下首先,為用戶所設(shè)定的定時 任務(wù)創(chuàng)建與該定時任務(wù)相關(guān)聯(lián)的進程,設(shè)置進程中的恢復(fù)運行時間及周期間隔;然后,進程 定時器管理模塊根據(jù)進程的恢復(fù)運行時間和周期間隔,將該進程插入到等待隊列中,等待 定時時刻的到達。接著,進程調(diào)度模塊根據(jù)整個RTAI下就緒隊列和等待隊列,動態(tài)更新硬 件時鐘模塊的下次觸發(fā)時間。最后,當定時時刻到達時,硬件時鐘模塊觸發(fā)進程調(diào)度模塊, 進程調(diào)度模塊將前述進程從等待隊列中轉(zhuǎn)移到就緒隊列中,準備執(zhí)行用戶的定時任務(wù)。從上面的說明可以看出,在RTAI系統(tǒng)中需要為每個定時任務(wù)創(chuàng)建對應(yīng)的進程,而 每個進程都要被分配一定的內(nèi)存空間。對于通信系統(tǒng)中需要使用大量定時器的應(yīng)用場景, 這樣做將會占用大量的內(nèi)存空間。對內(nèi)存資源有限的嵌入式操作系統(tǒng)會造成嚴重的影響。

發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有RTAI系統(tǒng)為定時任務(wù)分配獨立進程會占用大量內(nèi)存空 間,對系統(tǒng)資源造成影響的缺陷,從而提供一種定時器管理裝置。為了實現(xiàn)上述目的,本發(fā)明提供了一種用于操作系統(tǒng)中的定時器管理裝置,包括 進程調(diào)度模塊、硬件時鐘模塊、進程定時器管理模塊,還包括定時器接口、定時器數(shù)據(jù)庫以 及定時器管理模塊;其中,所述的定時器接口用于向用戶提供操作定時器的接口 ;所述的定時器數(shù)據(jù)庫用于保存定時器鏈表,并提供對所述定時器鏈表的管理操 作;所述定時器鏈表由定時器按照其觸發(fā)時間依次鏈接而成,一個定時器代表一個定時任 務(wù),所述定時器中除了包括所述觸發(fā)時間外,還至少包括中斷處理函數(shù);所述的定時器管理模塊用于實現(xiàn)所述硬件時鐘模塊、進程定時器管理模塊以及所 述定時器數(shù)據(jù)庫的初始化與結(jié)束操作,還用于調(diào)用所述定時器中所包含的中斷處理函數(shù)。上述技術(shù)方案中,所述的定時器鏈表包括激活定時器鏈表與暫停定時器鏈表;所 述的激活定時器鏈表用于排列正在使用并等待觸發(fā)執(zhí)行的定時器,所述的暫停定時器鏈表 用于排列已經(jīng)觸發(fā)執(zhí)行過的非周期定時器或被取消的定時器。上述技術(shù)方案中,所述的定時器接口向用戶提供的操作包括創(chuàng)建定時器、設(shè)置定時器時間、獲取定時器時間、獲取定時器中斷處理函數(shù)的參數(shù)、取消定時器、刪除定時器。上述技術(shù)方案中,所述定時器中還包括定時器觸發(fā)周期、定時器中斷處理函數(shù)的輸入?yún)?shù)、定時器使用標志以及前后指針。本發(fā)明還提供了一種采用所述的用于操作系統(tǒng)中的定時器管理裝置實現(xiàn)定時器 管理的方法,包括步驟1)、通過定時器接口為定時任務(wù)創(chuàng)建定時器;步驟2)、所述的進程定時器管理模塊根據(jù)當前的進程執(zhí)行情況動態(tài)更新硬件時鐘 模塊的下次觸發(fā)時間,當下次觸發(fā)時間到達時,由所述硬件時鐘模塊觸發(fā)所述定時器中斷 處理進程,由定時器中斷處理進程從所述激活定時器鏈表中依次取出定時器,執(zhí)行相應(yīng)的 定時任務(wù);步驟3)、在定時器中斷處理進程執(zhí)行完定時任務(wù)后,更新所述的定時器鏈表。上述技術(shù)方案中,所述的步驟1)包括步驟1-1)、判斷所要創(chuàng)建的定時器是否是系統(tǒng)中的第一個定時器,若是的話,執(zhí)行 下一步,否則,直接執(zhí)行步驟1-5);步驟1-2)、利用所述的硬件時鐘模塊將硬件時鐘的觸發(fā)模式設(shè)置為oneshot模 式,并啟動硬件時鐘;步驟1-3)、初始化所述定時器數(shù)據(jù)庫中的激活定時器鏈表和暫停定時器鏈表;步驟1-4)、利用所述的進程定時器管理模塊創(chuàng)建定時器中斷處理進程,將該進程 中的恢復(fù)運行時間和周期間隔分別設(shè)置為所要創(chuàng)建的定時器的觸發(fā)時間和周期值,然后將 該定時器中斷處理進程插入到所述進程調(diào)度模塊的進程等待隊列中;步驟1-5)、根據(jù)定時任務(wù)為所要創(chuàng)建的定時器設(shè)置觸發(fā)時間、觸發(fā)周期和中斷處 理函數(shù);步驟1-6)、將所創(chuàng)建的定時器按照定時器的觸發(fā)時間插入所述定時器數(shù)據(jù)庫中的 激活定時器鏈表中;步驟1-7)、判斷新創(chuàng)建的定時器是否位于激活定時器鏈表的表頭,如果是的話,執(zhí) 行下一步,否則結(jié)束步驟1)的操作;步驟1-8)、將定時器中斷處理進程中的恢復(fù)運行時間和周期間隔分別設(shè)置為新創(chuàng) 建的定時器的觸發(fā)時間和周期值,結(jié)束步驟1)的操作。上述技術(shù)方案中,在所述的步驟2)中,由定時器中斷處理進程從所述激活定時器 鏈表中依次取出定時器,執(zhí)行相應(yīng)的定時任務(wù)包括步驟2-1)、從激活定時器鏈表中取出最近過期的定時器;步驟2-2)、判斷激活定時器鏈表是否為空,若為空,執(zhí)行步驟2-11),否則,執(zhí)行步 驟 2-3);步驟2-3)、判斷所取出的定時器中所設(shè)定的時間是否已經(jīng)到達,如果是,執(zhí)行步驟 2-4),否則,執(zhí)行步驟2-10);步驟2-4)、執(zhí)行所取出定時器中的中斷處理函數(shù),然后從激活定時器鏈表中刪除 已被執(zhí)行的定時器;步驟2-5)、判斷已被執(zhí)行的定時器是否具有周期性,如果是的話,執(zhí)行步驟2-6), 否則,執(zhí)行步驟2-7);
步驟2-6)、更新已被執(zhí)行的定時器的觸發(fā)時間;步驟2-7)、將更新過的定時器按照觸發(fā)時間插入到所述激活定時器鏈表中的相應(yīng) 位置后,結(jié)束步驟2)的操作;步驟2-8)、將已被執(zhí)行的定時器的執(zhí)行標記設(shè)為已經(jīng) 被執(zhí)行的狀態(tài);步驟2-9)、將已被執(zhí)行的定時器插入到暫停定時器鏈表中,結(jié)束步驟2)的操作;步驟2-10)、將所取出的定時器的觸發(fā)時刻設(shè)置為定時器中斷處理進程中的恢復(fù) 運行時間,然后執(zhí)行步驟2-12);步驟2-11)、將RTAI進程等待運行時間的最大值設(shè)置為定時器中斷處理進程的恢 復(fù)運行時間,然后執(zhí)行步驟2-12);步驟2-12)、將定時器中斷處理進程從就緒隊列中移到延時隊列中;步驟2-13)、觸發(fā)進程調(diào)度模塊,從就緒進程隊列中選擇下一個待執(zhí)行的進程。上述技術(shù)方案中,在所述的步驟3)中,所述的更新定時器鏈表包括當所述定時任務(wù)所對應(yīng)的定時器為周期性的定時器時,將該定時器重新插入所述 激活定時器鏈表中,并更新定時器中斷處理進程的下次恢復(fù)運行時間;當該定時器不是周 期性的定時器時,將該定時器插入所述暫停定時器鏈表中。上述技術(shù)方案中,還包括修改定時器觸發(fā)時間或觸發(fā)周期的步驟4),該步驟包 括步驟4-1)、判斷所要修改的定時器是否正在使用,如果該定時器正在使用,則需要 將該定時器從激活定時器鏈表中刪除,否則,需要將該定時器從暫停定時器鏈表中刪除;步驟4-2)、為該定時器重新設(shè)置觸發(fā)時間或觸發(fā)周期;步驟4-3)、將定時器的使用標記重新設(shè)置為代表等待觸發(fā)的狀態(tài)標記;步驟4-4)、將修改后的定時器根據(jù)觸發(fā)時間值插入到激活定時器鏈表中的相應(yīng)位 置;步驟4-5)、判斷修改后的定時器是否是最近過期定時器,如果是的話,則將該定時 器的觸發(fā)時間值作為定時器中斷處理進程的恢復(fù)運行時間,如果不是的話,否則無需更新 定時器中斷處理進程的恢復(fù)運行時間。上述技術(shù)方案中,還包括取消定時器的步驟5),該步驟包括步驟5-1)、判斷所要取消的定時器是否正在使用,如果是的話,結(jié)束操作,否則執(zhí) 行下一步;步驟5-2)、判斷所要取消的定時器是否是激活定時器鏈表中最近過期的定時器, 如果是的話,執(zhí)行下一步,否則執(zhí)行步驟5-6);步驟5-3)、判斷所要取消的定時器所在的激活定時器鏈表中是否還存在下一個定 時器,如果存在的話,執(zhí)行下一步,否則執(zhí)行步驟5-5);步驟5-4)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為激活定時器鏈表中的下 一個定時器的觸發(fā)時間值,然后執(zhí)行步驟5-6);步驟5-5)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為RTAI進程最大等待時 間,然后執(zhí)行步驟5-6);步驟5-6)、從激活定時器鏈表中刪除所要取消的定時器;步驟5-7)、將所要取消的定時器的使用標記設(shè)置為代表定時器當前處于暫停定時器鏈表中的狀態(tài)標記;步驟5-8)、將所要取消的定時器插入到暫停定時器鏈表中。
上述技術(shù)方案中,還包括刪除定時器的步驟6),該步驟包括步驟6-1)、判斷所要刪除的定時器是否正在使用,如果是的話,執(zhí)行下一步,否則 執(zhí)行步驟6-7);步驟6-2)、判斷所要刪除的定時器是否是激活定時器鏈表中最近過期的定時器, 如果是的話,執(zhí)行步驟6-3),否則執(zhí)行步驟6-6);步驟6-3)、判斷所要刪除的定時器在激活定時器鏈表中是否還存在下一個定時 器,如果存在的話,執(zhí)行步驟6-4),否則執(zhí)行步驟6-5);步驟6-4)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為激活定時器鏈表中的下 一個定時器的觸發(fā)時間值,然后執(zhí)行步驟6-6);步驟6-5)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為RTAI進程最大等待時 間,然后執(zhí)行步驟6-6);步驟6-6)、從激活定時器鏈表中刪除所要刪除的定時器,然后執(zhí)行步驟6-8);步驟6-7)、從暫停定時器鏈表中刪除所要刪除的定時器,然后執(zhí)行步驟6-8)。步驟6-8)、判斷激活定時器鏈表與暫停定時器鏈表中的定時器數(shù)目是否都為0, 如果是的話,執(zhí)行下一步,否則,結(jié)束操作;步驟6-9)、停止定時器,釋放定時器鏈表,結(jié)束定時中斷處理進程,然后結(jié)束操作。本發(fā)明的優(yōu)點在于本發(fā)明的定時器管理裝置具有高精度與內(nèi)存使用量小的優(yōu)點。


圖1為現(xiàn)有的RTAI系統(tǒng)中與定時器管理有關(guān)模塊的結(jié)構(gòu)示意圖;圖2為本發(fā)明的定時器管理裝置的結(jié)構(gòu)示意圖;圖3為本發(fā)明的定時器管理裝置創(chuàng)建定時器過程的流程圖;圖4為本發(fā)明的定時器管理裝置修改定時器觸發(fā)時間值和/或觸發(fā)周期過程的流 程圖;圖5為本發(fā)明的定時器管理裝置取消定時器過程的流程圖;圖6為本發(fā)明的定時器管理裝置刪除定時器過程的流程圖;圖7為本發(fā)明的定時器管理裝置實現(xiàn)中斷處理過程的流程圖;圖8為定時器狀態(tài)轉(zhuǎn)換圖。
具體實施例方式下面結(jié)合附圖和具體實施方式
對本發(fā)明加以說明。圖2中給出了本發(fā)明的定時器管理裝置的示意圖,圖2的左半部分與現(xiàn)有RTAI系 統(tǒng)中與定時器管理有關(guān)模塊相同,包括背景技術(shù)中所提到的進程調(diào)度模塊、硬件時鐘模塊 以及進程定時器管理模塊,這些模塊的功能與現(xiàn)有技術(shù)相比沒有發(fā)生變化。而在圖2的右 半部分,對定時器管理裝置中的定時器模塊做了描述,所述的定時器模塊包括三個子模塊, 它們分別是定時器接口(API)、定時器數(shù)據(jù)庫以及定時器管理模塊。下面對定時器模塊中的子模塊的功能分別予以說明。
定時器接口用于向用戶提供操作定時器的接口,對定時器的操作包括創(chuàng)建定時 器、設(shè)置定時器時間、獲取定時器時間、獲取定時器中斷處理函數(shù)的參數(shù)、取消定時器、刪除 定時器等。定時器數(shù)據(jù)庫用于保存定時器鏈表,并提供了對定時器鏈表的管理操作。這些管 理操作包括用戶通過所述定時器接口進行創(chuàng)建定時器、插入定時器、刪除定時器、查找定時 器等操作時,對定時器鏈表的更新操作。定時器鏈表包括兩類,一類是激活定時器鏈表,另 一類是暫停定時器鏈表。所述的激活定時器鏈表用于排列正在使用并等待觸發(fā)執(zhí)行的定時 器,而所述的暫停定時器鏈表則用于排列已經(jīng)觸發(fā)執(zhí)行過的非周期定時器,或取消的定時 器。暫停定時器鏈表中的定時器通過重設(shè)定時時間,可重新轉(zhuǎn)移到激活定時器鏈表中。激活定時器鏈表與暫停定時器鏈表的數(shù)據(jù)結(jié)構(gòu)基本相同,它們都由多個定時器鏈 接而成,每個定時器如下面的表1所示,包括定時器觸發(fā)時間,觸發(fā)周期,定時器中斷處理 函數(shù)(中斷處理函數(shù)也可以被稱為觸發(fā)函數(shù))及輸入?yún)?shù),定時器使用標志以及指向在激 活定時器鏈表或暫停定時器鏈表中前后定時器指針。 表1相比于RTAI中與定時任務(wù)有關(guān)的進程,本發(fā)明中用定時器鏈表中的定時器來描 述相應(yīng)的定時任務(wù),采用定時器鏈表實現(xiàn)定時器機制的最大優(yōu)點在于可以節(jié)省定時器對內(nèi) 存的占用量。由表1可知,每個定時器在內(nèi)存中僅需占用幾十個字節(jié),而每個進程則至少需 要占用幾K字節(jié)的內(nèi)存。這對于需要使用大量定時器的通信系統(tǒng)及內(nèi)存量較小的嵌入式系 統(tǒng)而言,將可以極大地節(jié)省內(nèi)存使用量。定時器管理模塊用于實現(xiàn)定時器模塊的初始化與結(jié)束操作,還用于調(diào)用定時器 中斷處理函數(shù)。定時器模塊的初始化包括將硬件時鐘模塊中的硬件時鐘觸發(fā)模式設(shè)置為 oneshot以啟動硬件定時器、初始化定時器鏈表、創(chuàng)建定時器中斷處理進程。定時器模塊的 結(jié)束操作包括停止硬件定時器、釋放定時器鏈表、結(jié)束定時器中斷處理進程等。此處所提到 的定時器中斷處理函數(shù)與定時器中斷處理進程雖然名稱相似,但卻是兩個含義完全不同的概念。定時器中斷處理函數(shù)是指當定時器所設(shè)定的時間到達時所要執(zhí)行的任務(wù),因此也被 稱為觸發(fā)函數(shù),可由用戶在使用定時器時靈活設(shè)置。在前述的用于描述定時器的表1中的 TIMERFUNC fimc標識就用來表示定時器中斷處理函數(shù)。定時器中斷處理進程則是當定時器 管理模塊啟動時即創(chuàng)建的一個實時進程,當某個定時器所設(shè)定的時間到達時,由該進程去 調(diào)用相應(yīng)定時器的中斷處理函數(shù)。簡而言之,在本發(fā)明中,定時器中斷處理進程只有一個, 而定時器中斷處理函數(shù)隨著用戶對定時器的使用可以有很多,所有定時器中斷處理函數(shù)都 是通過唯一的一個定時器中斷處理進程執(zhí)行的。以上是對定時器模塊中各個子模塊的作用的說明,下面結(jié)合本發(fā)明的定時器管理 裝置對本發(fā)明如何實現(xiàn)定時器管理的過程加以說明。
在步驟10中,用戶通過定時器接口 API創(chuàng)建定時器。在創(chuàng)建定時器時,根據(jù)所創(chuàng) 建的定時器是否屬于系統(tǒng)中的第一個定時器會有不同的操作。參考圖3,當所創(chuàng)建的定時器屬于系統(tǒng)中的第一個定時器時,需要通過定時器管理 模塊做初始化操作,所述的初始化操作包括以下步驟利用所述的硬件時鐘模塊將硬件時 鐘的觸發(fā)模式設(shè)置為oneshot模式,并啟動硬件時鐘(步驟11)。初始化所述定時器數(shù)據(jù)庫 中的激活定時器鏈表和暫停定時器鏈表(步驟12)。利用所述的進程定時器管理模塊創(chuàng)建 定時器中斷處理進程,將該進程中的恢復(fù)運行時間和周期間隔分別設(shè)置為所要創(chuàng)建的定時 器的觸發(fā)時間和周期值,然后將該定時器中斷處理進程插入到RTAI系統(tǒng)的進程等待隊列 中(步驟13)。在完成上述初始化操作后,接著要完成與定時器創(chuàng)建本身有關(guān)的操作。無論所要 創(chuàng)建的定時器是否屬于系統(tǒng)中的第一個定時器,這部分的操作并無不同,因此一并加以說 明。為所要創(chuàng)建的定時器設(shè)置觸發(fā)時間、觸發(fā)周期和觸發(fā)函數(shù)(步驟14)。然后將所創(chuàng)建 的定時器按照定時器的觸發(fā)時間插入定時器數(shù)據(jù)庫中的激活定時器鏈表中(步驟15),如 果新創(chuàng)建的定時器位于激活定時器鏈表的表頭(即新創(chuàng)建的定時器的觸發(fā)時間最近,也就 是最近過期)(步驟16),則還需要將定時器中斷處理進程中的恢復(fù)運行時間和周期間隔分 別設(shè)置為新創(chuàng)建的定時器的觸發(fā)時間和周期值(步驟17),否則,直接結(jié)束創(chuàng)建定時器的操 作。在步驟20中,RTAI中的進程定時器管理模塊根據(jù)當前的進程執(zhí)行情況動態(tài)更新 硬件時鐘模塊的下次觸發(fā)時間,當下次觸發(fā)時間到達時,由硬件時鐘模塊觸發(fā)進程定時器 管理模塊,進而觸發(fā)定時器中斷處理進程,由定時器中斷處理進程從激活定時器鏈表中依 次取出定時器,執(zhí)行相應(yīng)的定時任務(wù)。在步驟30中,在定時器中斷處理進程執(zhí)行完定時任務(wù)后,若該定時器是周期性事 件的定時器,則將該定時器重新插入激活定時器鏈表中,并更新定時器中斷處理進程的下 次恢復(fù)運行時間;若該定時器不是周期性事件的定時器,則將該定時器插入暫停定時器鏈 表中。在上述的步驟20中,簡單描述了定時器中斷處理進程如何實現(xiàn)中斷處理的過程, 下面結(jié)合圖7,對這一過程做詳細說明。步驟60、從激活定時器鏈表中取出位于表頭(即最近過期)的定時器。步驟61、判斷取出位于表頭的定時器后,所述激活定時器鏈表是否為空,若為空, 執(zhí)行步驟610,否則,執(zhí)行步驟62。
步驟62、判斷所取出的定時器中所設(shè)定的時間是否已經(jīng)到達,如果是,執(zhí)行步驟 63,否則,執(zhí)行步驟69。步驟63、執(zhí)行所取出定時器中的觸發(fā)函數(shù),然后從激活定時器鏈表中刪除已被執(zhí) 行的定時器。步驟64、判斷已被執(zhí)行的定時器是否具有周期性,如果是的話,執(zhí)行步驟65,否 貝丨J,執(zhí)行步驟66。步驟65、更新已被執(zhí)行的定時器的觸發(fā)時刻。步驟66、將更新過的定時器按照觸發(fā)時刻插入到激活定時器鏈表中的相應(yīng)位置 后,結(jié)束操作。步驟67、將已被執(zhí)行的定時器的執(zhí)行標記設(shè)為已經(jīng)被執(zhí)行。
步驟68、將已被執(zhí)行的定時器插入到暫停定時器鏈表中,結(jié)束操作。步驟69、將所取出的定時器的觸發(fā)時刻設(shè)置為定時器中斷處理進程中的恢復(fù)運行 時間,然后執(zhí)行步驟611。步驟610、當前激活定時器鏈表中已無定時器,因此將RTAI進程等待運行時間的 最大值設(shè)置為定時器中斷處理進程的恢復(fù)運行時間,然后執(zhí)行步驟611。步驟611、將定時器中斷處理進程從就緒隊列中移到延時隊列中。步驟612、觸發(fā)進程調(diào)度模塊,從就緒進程隊列中選擇下一個待執(zhí)行的進程。在定時器執(zhí)行過程中,除了前面所提到的創(chuàng)建定時器、執(zhí)行定時器操作外,還包括 有修改定時器觸發(fā)時間值、取消定時器、刪除定時器等操作。這些操作根據(jù)用戶的需要而被 觸發(fā),下面對這些操作的實現(xiàn)加以說明。如圖4所示,修改定時器觸發(fā)時間值和/或觸發(fā)周期的操作包括步驟31、判斷所要修改的定時器是否正在使用;步驟38、如果該定時器正在使用,則需要將該定時器從激活定時器鏈表中刪除;步驟32、如果該定時器未被使用,則需要將該定時器從暫停定時器鏈表中刪除。步驟33、為該定時器重新設(shè)置觸發(fā)時間值和/或觸發(fā)周期值。步驟34、將定時器的使用標記重新設(shè)置為代表等待觸發(fā)的狀態(tài)標記。步驟35、將修改后的定時器根據(jù)觸發(fā)時間值插入到激活定時器鏈表中的相應(yīng)位 置。步驟36、判斷修改后的定時器是否是最近過期定時器(即修改后的定時器是否位 于激活定時器鏈表的表頭)。步驟37、如果是的話,更新定時器中斷處理進程的恢復(fù)運行時間,即將該定時器的 觸發(fā)時間值作為定時器中斷處理進程的恢復(fù)運行時間,如果不是的話,則無需更新定時器 中斷處理進程的恢復(fù)運行時間。如圖5所示,取消定時器的操作包括步驟41、判斷所要取消的定時器是否正在使用,如果是的話,結(jié)束操作,否則執(zhí)行
下一步。步驟42、判斷所要取消的定時器是否是激活定時器鏈表中位于表頭的定時器,如 果是的話,執(zhí)行下一步,否則執(zhí)行步驟45。步驟43、判斷所要取消的定時器所在的激活定時器鏈表中是否還存在下一個定時器,如果存在的話,執(zhí)行下一步,否則執(zhí)行步驟48。步驟44、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為激活定時器鏈表中的下一 個定時器的觸發(fā)時間值,然后執(zhí)行步驟45。步驟48、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為RTAI進程最大等待時間, 然后執(zhí)行步驟45。步驟45、從激活定時器鏈表中刪除所要取消的定時器。步驟46、將該定時器的使用標記設(shè)置為代表定時器當前處于暫停定時器鏈 表中的 狀態(tài)標記。步驟47、將該定時器插入到暫停定時器鏈表中。如圖6所示,刪除定時器的操作包括步驟51、判斷所要刪除的定時器是否正在使用,如果是的話,執(zhí)行下一步,否則執(zhí) 行步驟59。步驟52、判斷所要刪除的定時器是否是激活定時器鏈表中位于表頭的定時器,如 果是的話,執(zhí)行步驟57,否則執(zhí)行步驟54。步驟57、判斷所要刪除的定時器在激活定時器鏈表中是否還存在下一個定時器, 如果存在的話,執(zhí)行步驟53,否則執(zhí)行步驟58。步驟53將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為激活定時器鏈表中的下一 個定時器的觸發(fā)時間值,然后執(zhí)行步驟54。步驟58、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為RTAI進程最大等待時間, 然后執(zhí)行步驟54。步驟54、從激活定時器鏈表中刪除所要刪除的定時器,然后執(zhí)行步驟55。步驟59、從暫停定時器鏈表中刪除所要刪除的定時器,然后執(zhí)行步驟55。步驟55、判斷激活定時器鏈表與暫停定時器鏈表中的定時器數(shù)目是否都為0,如 果是的話,執(zhí)行步驟56,否則,結(jié)束操作。步驟56、停止定時器,釋放定時器鏈表,結(jié)束定時中斷處理進程,然后結(jié)束操作。在圖8中對定時器在上述操作下如何在激活定時器鏈表和暫停定時器鏈表間進 行切換做了統(tǒng)一的說明。從圖中可以看出,在創(chuàng)建定時器時,新創(chuàng)建的定時器將會按照其觸 發(fā)時刻順序插入激活定時器鏈表中。當定時器觸發(fā)時刻到達時,執(zhí)行完定時器觸發(fā)函數(shù)后, 對于周期定時器,將按其觸發(fā)周期重新插入激活定時器鏈表中,對于非周期定時器,則將其 插入暫停定時器鏈表中。當重新設(shè)置定時器觸發(fā)時刻或觸發(fā)周期時,無論該定時器當前處 于哪個定時器鏈表,都將其重新插入激活定時器鏈表中。當取消定時器時,將該定時器插入 暫停定時器鏈表中。當刪除定時器時,則無論該定時器當前處于哪個定時器鏈表,都將其從 當前定時器鏈表中刪除。相比于Linux系列操作系統(tǒng)以毫秒為單位的定時器精度,本發(fā)明的定時器管理裝 置通過采用硬件時鐘定時以及利用RTAI中時鐘中斷的高優(yōu)先級,能夠為實時業(yè)務(wù)提供納 秒級的定時精度。同時根據(jù)實際使用場景中使用定時器規(guī)模大小,靈活選擇定時器鏈表結(jié) 構(gòu),實現(xiàn)定時器動態(tài)插入刪除過程中的操作時間復(fù)雜度由O(n)優(yōu)化為O(Iogn)。此外,在充分利用RTAI的實時性實現(xiàn)高精度定時器的同時,針對原RTAI定時機制 占用內(nèi)存大的不足,本發(fā)明通過在RTAI中實現(xiàn)一套單獨的定時器管理機制,大大減小了定時器的內(nèi)存使用量。 最后所應(yīng)說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制。盡管參照實施例對本發(fā)明進行了詳細說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解,對本發(fā)明的技術(shù)方 案進行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明 的權(quán)利要求范圍當中。
權(quán)利要求
一種用于操作系統(tǒng)中的定時器管理裝置,包括進程調(diào)度模塊、硬件時鐘模塊、進程定時器管理模塊,其特征在于,還包括定時器接口、定時器數(shù)據(jù)庫以及定時器管理模塊;其中,所述的定時器接口用于向用戶提供操作定時器的接口;所述的定時器數(shù)據(jù)庫用于保存定時器鏈表,并提供對所述定時器鏈表的管理操作;所述定時器鏈表由定時器按照其觸發(fā)時間依次鏈接而成,一個定時器代表一個定時任務(wù),所述定時器中除了包括所述觸發(fā)時間外,還至少包括中斷處理函數(shù);所述的定時器管理模塊用于實現(xiàn)所述硬件時鐘模塊、進程定時器管理模塊以及所述定時器數(shù)據(jù)庫的初始化與結(jié)束操作,還用于調(diào)用所述定時器中所包含的中斷處理函數(shù)。
2.根據(jù)權(quán)利要求1所述的用于操作系統(tǒng)中的定時器管理裝置,其特征在于,所述的定 時器鏈表包括激活定時器鏈表與暫停定時器鏈表;所述的激活定時器鏈表用于排列正在使 用并等待觸發(fā)執(zhí)行的定時器,所述的暫停定時器鏈表用于排列已經(jīng)觸發(fā)執(zhí)行過的非周期定 時器或被取消的定時器。
3.根據(jù)權(quán)利要求1所述的用于操作系統(tǒng)中的定時器管理裝置,其特征在于,所述的定 時器接口向用戶提供的操作包括創(chuàng)建定時器、設(shè)置定時器時間、獲取定時器時間、獲取定時 器中斷處理函數(shù)的參數(shù)、取消定時器、刪除定時器。
4.根據(jù)權(quán)利要求1所述的用于操作系統(tǒng)中的定時器管理裝置,其特征在于,所述定時 器中還包括定時器觸發(fā)周期、定時器中斷處理函數(shù)的輸入?yún)?shù)、定時器使用標志以及前后 指針。
5.一種采用權(quán)利要求1-4之一的用于操作系統(tǒng)中的定時器管理裝置實現(xiàn)定時器管理 的方法,包括步驟1)、通過定時器接口為定時任務(wù)創(chuàng)建定時器;步驟2)、所述的進程定時器管理模塊根據(jù)當前的進程執(zhí)行情況動態(tài)更新硬件時鐘模塊 的下次觸發(fā)時間,當下次觸發(fā)時間到達時,由所述硬件時鐘模塊觸發(fā)所述定時器中斷處理 進程,由定時器中斷處理進程從所述激活定時器鏈表中依次取出定時器,執(zhí)行相應(yīng)的定時 任務(wù);步驟3)、在定時器中斷處理進程執(zhí)行完定時任務(wù)后,更新所述的定時器鏈表。
6.根據(jù)權(quán)利要求5所述的定時器管理方法,其特征在于,所述的步驟1)包括步驟1-1)、判斷所要創(chuàng)建的定時器是否是系統(tǒng)中的第一個定時器,若是的話,執(zhí)行下一 步,否則,直接執(zhí)行步驟1-5);步驟1-2)、利用所述的硬件時鐘模塊將硬件時鐘的觸發(fā)模式設(shè)置為oneshot模式,并 啟動硬件時鐘;步驟1-3)、初始化所述定時器數(shù)據(jù)庫中的激活定時器鏈表和暫停定時器鏈表;步驟1-4)、利用所述的進程定時器管理模塊創(chuàng)建定時器中斷處理進程,將該進程中的 恢復(fù)運行時間和周期間隔分別設(shè)置為所要創(chuàng)建的定時器的觸發(fā)時間和周期值,然后將該定 時器中斷處理進程插入到所述進程調(diào)度模塊的進程等待隊列中;步驟1-5)、根據(jù)定時任務(wù)為所要創(chuàng)建的定時器設(shè)置觸發(fā)時間、觸發(fā)周期和中斷處理函數(shù);步驟1-6)、將所創(chuàng)建的定時器按照定時器的觸發(fā)時間插入所述定時器數(shù)據(jù)庫中的激活 定時器鏈表中;步驟1-7)、判斷新創(chuàng)建的定時器是否位于激活定時器鏈表的表頭,如果是的話,執(zhí)行下 一步,否則結(jié)束步驟1)的操作;步驟1-8)、將定時器中斷處理進程中的恢復(fù)運行時間和周期間隔分別設(shè)置為新創(chuàng)建的 定時器的觸發(fā)時間和周期值,結(jié)束步驟1)的操作。
7.根據(jù)權(quán)利要求5所述的定時器管理方法,其特征在于,在所述的步驟2)中,由定時器 中斷處理進程從所述激活定時器鏈表中依次取出定時器,執(zhí)行相應(yīng)的定時任務(wù)包括步驟2-1)、從激活定時器鏈表中取出最近過期的定時器;步驟2-2)、判斷激活定時器鏈表是否為空,若為空,執(zhí)行步驟2-11),否則,執(zhí)行步驟 2-3);步驟2-3)、判斷所取出的定時器中所設(shè)定的時間是否已經(jīng)到達,如果是,執(zhí)行步驟 2-4),否則,執(zhí)行步驟2-10);步驟2-4)、執(zhí)行所取出定時器中的中斷處理函數(shù),然后從激活定時器鏈表中刪除已被 執(zhí)行的定時器;步驟2-5)、判斷已被執(zhí)行的定時器是否具有周期性,如果是的話,執(zhí)行步驟2-6),否 則,執(zhí)行步驟2-7);步驟2-6)、更新已被執(zhí)行的定時器的觸發(fā)時間;步驟2-7)、將更新過的定時器按照觸發(fā)時間插入到所述激活定時器鏈表中的相應(yīng)位置 后,結(jié)束步驟2)的操作;步驟2-8)、將已被執(zhí)行的定時器的執(zhí)行標記設(shè)為已經(jīng)被執(zhí)行的狀態(tài); 步驟2-9)、將已被執(zhí)行的定時器插入到暫停定時器鏈表中,結(jié)束步驟2)的操作; 步驟2-10)、將所取出的定時器的觸發(fā)時刻設(shè)置為定時器中斷處理進程中的恢復(fù)運行 時間,然后執(zhí)行步驟2-12);步驟2-11)、將RTAI進程等待運行時間的最大值設(shè)置為定時器中斷處理進程的恢復(fù)運 行時間,然后執(zhí)行步驟2-12);步驟2-12)、將定時器中斷處理進程從就緒隊列中移到延時隊列中; 步驟2-13)、觸發(fā)進程調(diào)度模塊,從就緒進程隊列中選擇下一個待執(zhí)行的進程。
8.根據(jù)權(quán)利要求5所述的定時器管理方法,其特征在于,在所述的步驟3)中,所述的更 新定時器鏈表包括當所述定時任務(wù)所對應(yīng)的定時器為周期性的定時器時,將該定時器重新插入所述激活 定時器鏈表中,并更新定時器中斷處理進程的下次恢復(fù)運行時間;當該定時器不是周期性 的定時器時,將該定時器插入所述暫停定時器鏈表中。
9.根據(jù)權(quán)利要求5所述的定時器管理方法,其特征在于,還包括修改定時器觸發(fā)時間 或觸發(fā)周期的步驟4),該步驟包括步驟4-1)、判斷所要修改的定時器是否正在使用,如果該定時器正在使用,則需要將該 定時器從激活定時器鏈表中刪除,否則,需要將該定時器從暫停定時器鏈表中刪除; 步驟4-2)、為該定時器重新設(shè)置觸發(fā)時間或觸發(fā)周期; 步驟4-3)、將定時器的使用標記重新設(shè)置為代表等待觸發(fā)的狀態(tài)標記; 步驟4-4)、將修改后的定時器根據(jù)觸發(fā)時間值插入到激活定時器鏈表中的相應(yīng)位置; 步驟4-5)、判斷修改后的定時器是否是最近過期定時器,如果是的話,則將該定時器的觸發(fā)時間值作為定時器中斷處理進程的恢復(fù)運行時間,如果不是的話,否則無需更新定時 器中斷處理進程的恢復(fù)運行時間。
10.根據(jù)權(quán)利要求5所述的定時器管理方法,其特征在于,還包括取消定時器的步驟5),該步驟包括步驟5-1)、判斷所要取消的定時器是否正在使用,如果是的話,結(jié)束操作,否則執(zhí)行下一步;步驟5-2)、判斷所要取消的定時器是否是激活定時器鏈表中最近過期的定時器,如果 是的話,執(zhí)行下一步,否則執(zhí)行步驟5-6);步驟5-3)、判斷所要取消的定時器所在的激活定時器鏈表中是否還存在下一個定時 器,如果存在的話,執(zhí)行下一步,否則執(zhí)行步驟5-5);步驟5-4)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為激活定時器鏈表中的下一個 定時器的觸發(fā)時間值,然后執(zhí)行步驟5-6);步驟5-5)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為RTAI進程最大等待時間,然 后執(zhí)行步驟5-6);步驟5-6)、從激活定時器鏈表中刪除所要取消的定時器;步驟5-7)、將所要取消的定時器的使用標記設(shè)置為代表定時器當前處于暫停定時器鏈 表中的狀態(tài)標記;步驟5-8)、將所要取消的定時器插入到暫停定時器鏈表中。
11.根據(jù)權(quán)利要求5所述的定時器管理方法,其特征在于,還包括刪除定時器的步驟6),該步驟包括步驟6-1)、判斷所要刪除的定時器是否正在使用,如果是的話,執(zhí)行下一步,否則執(zhí)行 步驟6-7);步驟6-2)、判斷所要刪除的定時器是否是激活定時器鏈表中最近過期的定時器,如果 是的話,執(zhí)行步驟6-3),否則執(zhí)行步驟6-6);步驟6-3)、判斷所要刪除的定時器在激活定時器鏈表中是否還存在下一個定時器,如 果存在的話,執(zhí)行步驟6-4),否則執(zhí)行步驟6-5);步驟6-4)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為激活定時器鏈表中的下一個 定時器的觸發(fā)時間值,然后執(zhí)行步驟6-6);步驟6-5)、將定時器中斷處理進程的恢復(fù)運行時間設(shè)置為RTAI進程最大等待時間,然 后執(zhí)行步驟6-6);步驟6-6)、從激活定時器鏈表中刪除所要刪除的定時器,然后執(zhí)行步驟6-8); 步驟6-7)、從暫停定時器鏈表中刪除所要刪除的定時器,然后執(zhí)行步驟6-8)。 步驟6-8)、判斷激活定時器鏈表與暫停定時器鏈表中的定時器數(shù)目是否都為0,如果 是的話,執(zhí)行下一步,否則,結(jié)束操作;步驟6-9)、停止定時器,釋放定時器鏈表,結(jié)束定時中斷處理進程,然后結(jié)束操作。
全文摘要
本發(fā)明提供一種用于操作系統(tǒng)中的定時器管理裝置,包括進程調(diào)度模塊、硬件時鐘模塊、進程定時器管理模塊,還包括定時器接口、定時器數(shù)據(jù)庫以及定時器管理模塊;其中,定時器接口用于向用戶提供操作定時器的接口;定時器數(shù)據(jù)庫用于保存定時器鏈表,并提供對所述定時器鏈表的管理操作;所述定時器鏈表由定時器按照其觸發(fā)時間依次鏈接而成,一個定時器代表一個定時任務(wù),所述定時器中除了包括所述觸發(fā)時間外,還至少包括中斷處理函數(shù);定時器管理模塊用于實現(xiàn)所述硬件時鐘模塊、進程定時器管理模塊以及所述定時器數(shù)據(jù)庫的初始化與結(jié)束操作,還用于調(diào)用所述定時器中所包含的中斷處理函數(shù)。本發(fā)明的定時器管理裝置具有高精度與內(nèi)存使用量小的優(yōu)點。
文檔編號G06F9/50GK101859260SQ201010177499
公開日2010年10月13日 申請日期2010年5月14日 優(yōu)先權(quán)日2010年5月14日
發(fā)明者張子頔, 熊海泉, 王晴, 石晶林, 胡麗, 袁堯 申請人:中國科學(xué)院計算技術(shù)研究所
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
大同县| 永寿县| 祁连县| 武定县| 乡城县| 武宁县| 梁河县| 石柱| 合水县| 江西省| 辽宁省| 武川县| 平山县| 长治县| 巫山县| 卢湾区| 大埔区| 耒阳市| 东乡族自治县| 固安县| 六枝特区| 通山县| 桃园市| 阳新县| 芜湖市| 瑞金市| 山东省| 新郑市| 镇雄县| 青州市| 西乌珠穆沁旗| 西安市| 息烽县| 铁力市| 射阳县| 新宾| 汶川县| 三江| 江永县| 南城县| 依安县|