專利名稱:操作系統(tǒng)中的時(shí)鐘控制方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域、自動化和控制領(lǐng)域等,具體涉及操作系統(tǒng)中的時(shí)鐘控制方法。
背景技術(shù):
在實(shí)時(shí)系統(tǒng)中,操作系統(tǒng)設(shè)計(jì)的好壞對一個(gè)系統(tǒng)的運(yùn)轉(zhuǎn)起關(guān)鍵的作用。在操作系統(tǒng)的核心內(nèi)容——調(diào)度控制、內(nèi)存控制、中斷控制、時(shí)鐘控制、通訊控制中,時(shí)鐘控制起了非常重要的作用。在一個(gè)實(shí)時(shí)系統(tǒng)中,對時(shí)鐘的設(shè)定、取消是一個(gè)很頻繁的操作,在對時(shí)鐘控制準(zhǔn)確性要求的同時(shí),還要求時(shí)鐘控制的高效性。
傳統(tǒng)時(shí)鐘控制采用了一個(gè)定時(shí)隊(duì)列的控制方式,在設(shè)置定時(shí)時(shí),要根據(jù)當(dāng)前用戶設(shè)定的定時(shí)長度到隊(duì)列中找到自己所在的位置。它必須從第一個(gè)定時(shí)器開始,檢查該定時(shí)器的設(shè)定時(shí)間值,如果比自己設(shè)定的時(shí)間短,則繼續(xù)查找下一個(gè)定時(shí)器,下一個(gè)定時(shí)器的設(shè)定時(shí)間值加上前面的定時(shí)器的設(shè)定時(shí)間值和再同用戶設(shè)定的定時(shí)時(shí)長相比較。如此反復(fù),直至前面定時(shí)器的設(shè)定時(shí)間和大于用戶設(shè)置的時(shí)長,才將該定時(shí)器插入隊(duì)列中,同時(shí)要修改自己和在自己后面的一個(gè)定時(shí)器的設(shè)定時(shí)間值。
如果在一個(gè)頻繁的進(jìn)行定時(shí)操作的實(shí)時(shí)系統(tǒng),例如交換機(jī)中,有1000用戶同時(shí)打電話,從主叫摘機(jī)到通話后掛機(jī)釋放,至少要進(jìn)行5次定時(shí)器設(shè)定、取消的操作,那么就可能同時(shí)有上千個(gè)定時(shí)器須同時(shí)設(shè)定。按照傳統(tǒng)定時(shí)器控制的方式,所消耗的時(shí)間和占用的系統(tǒng)資源將非常可觀。
因此,傳統(tǒng)的時(shí)鐘控制不能提供一個(gè)高效率的時(shí)鐘控制方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種操作系統(tǒng)中的時(shí)鐘控制方法,用于多時(shí)鐘的控制和管理,既能保障時(shí)鐘控制的高效性,又能保障時(shí)鐘控制的準(zhǔn)確性,特別是在對時(shí)鐘操作頻繁的實(shí)時(shí)系統(tǒng)中,高效性和準(zhǔn)確性更加明顯。
本發(fā)明的目的是這樣實(shí)現(xiàn)的本發(fā)明公開了一種操作系統(tǒng)中的時(shí)鐘控制方法,用于對多時(shí)鐘控制隊(duì)列進(jìn)行處理,該方法包括定時(shí)的中斷處理,用于完成定時(shí)器的定時(shí)時(shí)長的減1操作及準(zhǔn)備超時(shí)消息的產(chǎn)生;定時(shí)器的設(shè)置與取消,分別用于完成將定時(shí)器掛入定時(shí)隊(duì)列和取出;超時(shí)消息調(diào)度,供系統(tǒng)調(diào)度使用的,用于產(chǎn)生超時(shí)消息;在所述定時(shí)的中斷處理、定時(shí)器的設(shè)置與取消、超時(shí)消息調(diào)度中均包含有多時(shí)鐘控制隊(duì)列處理,其處理過程至少包括不同隊(duì)列完成不同定時(shí)時(shí)長的處理,每個(gè)定時(shí)隊(duì)列只完成固定時(shí)長的定時(shí),在隊(duì)列控制頭中用剩余時(shí)間這一變量來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和,新的定時(shí)器掛入相應(yīng)隊(duì)列的隊(duì)尾時(shí),無需查找它隊(duì)列中在它前面的所有定時(shí)器的剩余時(shí)間之和。
所述多時(shí)鐘控制隊(duì)列主要包含以下的控制隊(duì)列定時(shí)空閑隊(duì)列,用來控制空閑的定時(shí)器;定時(shí)即將到達(dá)隊(duì)列,用來控制定時(shí)時(shí)長即將到達(dá)的定時(shí)器;定時(shí)忙隊(duì)列,定時(shí)時(shí)間已到,等待調(diào)度控制給設(shè)定定時(shí)的進(jìn)程發(fā)送超時(shí)消息;控制不同時(shí)長的多個(gè)隊(duì)列,用來控制不同定時(shí)時(shí)長的處理。
所述操作系統(tǒng)中的時(shí)鐘控制方法,每個(gè)隊(duì)列的隊(duì)列控制頭和定時(shí)器均包含以下的基本信息前向指針,用于找到下一個(gè)定時(shí)器;后向指針,用于找到上一個(gè)定時(shí)器;隊(duì)列標(biāo)記,用來指明當(dāng)前是哪個(gè)隊(duì)列;設(shè)定時(shí)長,如果是隊(duì)列控制頭,用來表明當(dāng)前該隊(duì)列所處理的定時(shí)時(shí)長;如果是定時(shí)器,則記錄該定時(shí)器需完成的定時(shí)時(shí)長;剩余時(shí)間,如果是隊(duì)列控制頭,則用來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和;如果是定時(shí)器,則記錄該定時(shí)器完成當(dāng)前所在隊(duì)列定時(shí)的剩余時(shí)間;設(shè)定定時(shí)器的進(jìn)程號,用以記錄是哪一個(gè)進(jìn)程設(shè)定定時(shí)操作的。
所述操作系統(tǒng)中的時(shí)鐘控制方法,多個(gè)隊(duì)列的處理采用以下的方式(1)當(dāng)用戶設(shè)定了一個(gè)m的定時(shí),根據(jù)該定時(shí)器的定時(shí)時(shí)長找到它所在的隊(duì)列,將該定時(shí)器掛入該定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為m減去該隊(duì)列的設(shè)定時(shí)長;
(2)當(dāng)該隊(duì)列的定時(shí)完成時(shí),再根據(jù)它的定時(shí)時(shí)長查找下一個(gè)隊(duì)列,將該定時(shí)器掛入該定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為m減去該隊(duì)列的設(shè)定時(shí)長減去下一個(gè)隊(duì)列的設(shè)定時(shí)長;(3)重復(fù)前面的操作,一直到該定時(shí)器的定時(shí)時(shí)長小于定時(shí)即將到達(dá)隊(duì)列中定時(shí)時(shí)長,將該定時(shí)器取出并掛入定時(shí)即將到達(dá)隊(duì)列;對于定時(shí)即將到達(dá)隊(duì)的處理,在中斷里需對該隊(duì)列中的所有定時(shí)器進(jìn)行掃描,如定時(shí)到,再將該定時(shí)器取出掛入定時(shí)忙隊(duì)列,由調(diào)度控制進(jìn)行調(diào)度,并給相應(yīng)的進(jìn)程發(fā)送超時(shí)消息。
所述定時(shí)的中斷處理包括對于定時(shí)即將到達(dá)隊(duì)列,需檢查隊(duì)列中的每一個(gè)定時(shí)器,如定時(shí)到則掛入定時(shí)忙隊(duì)列,否則對定時(shí)器的設(shè)定時(shí)長進(jìn)行減1的操作;對于其它的隊(duì)列,只處理隊(duì)列控制頭和隊(duì)列中的第一個(gè)定時(shí)器,將隊(duì)列控制頭的剩余時(shí)間和隊(duì)列中的第一個(gè)定時(shí)器的剩余時(shí)間減1,當(dāng)?shù)谝粋€(gè)定時(shí)器的剩余時(shí)間為0時(shí),將該定時(shí)器取出并掛入下一隊(duì)列,再繼續(xù)查找下一個(gè)剩余時(shí)間為0的定時(shí)器,并將它取出并掛入下一隊(duì)列,對隊(duì)列中的剩余時(shí)間不為0的定時(shí)器并不處理。
所述定時(shí)器的設(shè)置包括在每個(gè)隊(duì)列只進(jìn)行固定時(shí)長的定時(shí)處理,每一個(gè)掛入該隊(duì)列的定時(shí)器都進(jìn)行相同的定時(shí),每一個(gè)定時(shí)器的剩余時(shí)間值是由該隊(duì)列控制頭的設(shè)定時(shí)長減掉在它前面的所有定時(shí)器的剩余時(shí)間值;新的定時(shí)器掛入時(shí),新的定時(shí)器的剩余時(shí)間為隊(duì)列控制頭的設(shè)定時(shí)長減去隊(duì)列控制頭的剩余時(shí)間值,將隊(duì)列控制頭的剩余時(shí)間置為隊(duì)列控制頭的設(shè)定時(shí)長。
所述定時(shí)器的時(shí)鐘取消包括如果定時(shí)器已在空閑隊(duì)列中,則不做如何處理;當(dāng)在定時(shí)忙隊(duì)列或定時(shí)即將到達(dá)隊(duì)列,只需要將定時(shí)器取出并掛入空閑隊(duì)列即可;否則除了要將定時(shí)器取出并掛入空閑隊(duì)列,還需修改定時(shí)器的剩余時(shí)間值。
所述定時(shí)器的時(shí)鐘取消還包括當(dāng)需取消的定時(shí)器是所在隊(duì)列中的最后一個(gè)定時(shí)器,則隊(duì)列控制頭的剩余時(shí)間=隊(duì)列控制頭的原有剩余時(shí)間減去需取消定時(shí)的定時(shí)器的剩余時(shí)間值;否則,該定時(shí)器后面的一個(gè)定時(shí)器的剩余時(shí)間=后面定時(shí)器原有的剩余時(shí)間加上需取消定時(shí)器的剩余時(shí)間值。
所述超時(shí)消息調(diào)度還包括檢查該隊(duì)列是否為空,如不空,則根據(jù)該定時(shí)器中保留的進(jìn)行號給相應(yīng)進(jìn)程發(fā)送超時(shí)消息,并將定時(shí)器歸還空閑隊(duì)列。
所述操作系統(tǒng)中的時(shí)鐘控制方法,還包括初始化處理步驟,包括申請數(shù)據(jù)區(qū)、初始化隊(duì)列頭、設(shè)置隊(duì)列標(biāo)記、剩余時(shí)長清零、設(shè)置隊(duì)列頭的時(shí)長值,將定時(shí)器掛入空閑隊(duì)列。
圖1為本發(fā)明定時(shí)器隊(duì)列控制框圖;圖2為本發(fā)明定時(shí)器處理過程框圖;圖3為本發(fā)明檢查定時(shí)器設(shè)定時(shí)長的流程圖;圖4為本發(fā)明檢查定時(shí)器剩余時(shí)間的流程圖;圖5為本發(fā)明定時(shí)器定時(shí)設(shè)置的流程圖;圖6為本發(fā)明定時(shí)器定時(shí)取消的流程圖;圖7為本發(fā)明超時(shí)消息調(diào)度流程圖。
具體實(shí)施例方式
本發(fā)明時(shí)鐘控制方法,主要由三部分組成一、定時(shí)的中斷處理模塊,它完成的基本功能是定時(shí)器的定時(shí)時(shí)長的減1操作及準(zhǔn)備超時(shí)消息的產(chǎn)生;二、定時(shí)器的設(shè)置與取消模塊,分別完成將定時(shí)器掛入定時(shí)隊(duì)列和取出的功能。三、超時(shí)消息調(diào)度模塊,是供系統(tǒng)調(diào)度使用的,用以產(chǎn)生超時(shí)消息;多時(shí)鐘控制隊(duì)列它的處理過程分別包含在上述三部分內(nèi)容中,共同組成了我們設(shè)計(jì)的時(shí)鐘控制系統(tǒng)。
本發(fā)明多時(shí)鐘控制隊(duì)列的方法,它的核心方法用簡單的語言描述如下不同隊(duì)列完成不同定時(shí)時(shí)長的處理,每個(gè)定時(shí)隊(duì)列只完成固定時(shí)長的定時(shí),在隊(duì)列控制頭中用剩余時(shí)間這一變量來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和,以便新的定時(shí)器掛入相應(yīng)隊(duì)列的隊(duì)尾時(shí)無需查找它隊(duì)列中在它前面的所有定時(shí)器的剩余時(shí)間和。下面所進(jìn)行的所有操作都是為了實(shí)現(xiàn)這一思想。
本發(fā)明的時(shí)鐘控制隊(duì)列主要包含以下的控制隊(duì)列定時(shí)空閑隊(duì)列用來控制空閑的定時(shí)器;定時(shí)即將到達(dá)隊(duì)列用來控制定時(shí)時(shí)長即將到達(dá)的的定時(shí)器;定時(shí)忙隊(duì)列定時(shí)時(shí)間已到,等待調(diào)度控制給設(shè)定定時(shí)的進(jìn)程發(fā)送超時(shí)消息;
控制不同時(shí)長的多個(gè)隊(duì)列用來控制不同定時(shí)時(shí)長的處理;每個(gè)隊(duì)列的隊(duì)列控制頭和定時(shí)器均包含以下的基本信息(1)前向指針由于采用了隊(duì)列的控制方式,必須通過前向指針找到下一個(gè)定時(shí)器;(2)后向指針通過它找到上一個(gè)定時(shí)器;(3)隊(duì)列標(biāo)記用來指明當(dāng)前是哪個(gè)隊(duì)列;(4)設(shè)定時(shí)長如果是隊(duì)列控制頭,用來表明當(dāng)前該隊(duì)列所處理的定時(shí)時(shí)長;如果是定時(shí)器,則記錄該定時(shí)器需完成的定時(shí)時(shí)長;(5)剩余時(shí)間如果是隊(duì)列控制頭,則用來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和;如果是定時(shí)器,則記錄該定時(shí)器完成當(dāng)前所在隊(duì)列定時(shí)的剩余時(shí)間;(6)設(shè)定定時(shí)器的進(jìn)程號用以記錄是哪一個(gè)進(jìn)程設(shè)定定時(shí)操作的。
對多個(gè)隊(duì)列的處理,采用以下的方式當(dāng)用戶設(shè)定了一個(gè)m的定時(shí),首先根據(jù)該定時(shí)器的定時(shí)時(shí)長找到它所在的隊(duì)列,將該定時(shí)器掛入該定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為m減去該隊(duì)列的設(shè)定時(shí)長;當(dāng)該隊(duì)列的定時(shí)完成時(shí),再根據(jù)它的定時(shí)時(shí)長查找下一個(gè)隊(duì)列,將該定時(shí)器掛入該定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為m減去該隊(duì)列的設(shè)定時(shí)長減去下一個(gè)隊(duì)列的設(shè)定時(shí)長;重復(fù)前面的操作,一直到該定時(shí)器的定時(shí)時(shí)長小于定時(shí)即將到達(dá)隊(duì)列中定時(shí)時(shí)長,將該定時(shí)器取出并掛入定時(shí)即將到達(dá)隊(duì)列。對于定時(shí)即將到達(dá)隊(duì)的處理,在中斷里需對該隊(duì)列中的所有定時(shí)器進(jìn)行掃描,如定時(shí)到,再將該定時(shí)器取出掛入定時(shí)忙隊(duì)列,由調(diào)度控制進(jìn)行調(diào)度,并給相應(yīng)的進(jìn)程發(fā)送超時(shí)消息。
1.定時(shí)器的中斷處理中斷處理的實(shí)時(shí)性要求處理的步驟盡可能少,動作盡可能快。對于定時(shí)即將到達(dá)隊(duì)列,需檢查隊(duì)列中的每一個(gè)定時(shí)器,如定時(shí)到則掛入定時(shí)忙隊(duì)列,否則對定時(shí)器的設(shè)定時(shí)長進(jìn)行減1的操作;對于其它的隊(duì)列,我們只處理隊(duì)列控制頭和隊(duì)列中的第一個(gè)定時(shí)器,將隊(duì)列控制頭的剩余時(shí)間和隊(duì)列中的第一個(gè)定時(shí)器的剩余時(shí)間減1,當(dāng)?shù)谝粋€(gè)定時(shí)器的剩余時(shí)間為0時(shí),將該定時(shí)器取出并掛入下一隊(duì)列,再繼續(xù)查找下一個(gè)剩余時(shí)間為0的定時(shí)器,并將它取出并掛入下一隊(duì)列,對隊(duì)列中的剩余時(shí)間不為0的定時(shí)器并不處理。
2.定時(shí)器的時(shí)鐘設(shè)置
從前面介紹的傳統(tǒng)定時(shí)器的控制方式可以看到,定時(shí)器的設(shè)置是非常占用系統(tǒng)資源和耗時(shí)的。原因在于它需要到隊(duì)列中逐個(gè)查找定時(shí)器,直到發(fā)現(xiàn)它應(yīng)該插入的位置。而我們采用的多隊(duì)列的控制方式,直接將定時(shí)器掛入相應(yīng)隊(duì)列的隊(duì)尾,從根本上改變這種查找、插入的工作方式。這也是采用這種多隊(duì)列控制最大的優(yōu)勢。
隊(duì)列控制頭的剩余時(shí)間是用來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和,當(dāng)隊(duì)列為空時(shí),剩余時(shí)間值為0;由于每個(gè)隊(duì)列只進(jìn)行固定時(shí)長的定時(shí)處理,每一個(gè)掛入該隊(duì)列的定時(shí)器都進(jìn)行相同的定時(shí),因此每一個(gè)定時(shí)器的剩余時(shí)間值是由該隊(duì)列控制頭的設(shè)定時(shí)長減掉在它前面的所有定時(shí)器的剩余時(shí)間值,這樣才是它自己真正的時(shí)間剩余值。而我們正是用隊(duì)列控制頭的剩余時(shí)間來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和,以便新的定時(shí)器掛入時(shí),新的定時(shí)器的剩余時(shí)間為隊(duì)列控制頭的設(shè)定時(shí)長減去隊(duì)列控制頭的剩余時(shí)間值。由于剛掛入一個(gè)定時(shí)器,顯然需要將隊(duì)列控制頭的剩余時(shí)間置為隊(duì)列控制頭的設(shè)定時(shí)長;定時(shí)器的設(shè)定時(shí)長=用戶要求的設(shè)定時(shí)長-隊(duì)列控制頭的設(shè)定時(shí)長;定時(shí)器的剩余時(shí)間=隊(duì)列控制頭的設(shè)定時(shí)長-隊(duì)列控制頭的剩余時(shí)間;隊(duì)列控制頭的剩余時(shí)間=隊(duì)列控制頭的設(shè)定時(shí)長。
3.定時(shí)器的時(shí)鐘取消由于定時(shí)器中有一個(gè)隊(duì)列標(biāo)記,可以很容易的知道當(dāng)前所處的隊(duì)列。如果當(dāng)前已在空閑隊(duì)列中,則不做如何處理;如果是在定時(shí)忙隊(duì)列或定時(shí)即將到達(dá)隊(duì)列,只需要將定時(shí)器取出并掛入空閑隊(duì)列即可;否則除了要將定時(shí)器取出并掛入空閑隊(duì)列,還需修改定時(shí)器的剩余時(shí)間值。如果需取消的定時(shí)器是所在隊(duì)列中的最后一個(gè)定時(shí)器,則隊(duì)列控制頭的剩余時(shí)間=隊(duì)列控制頭的原有剩余時(shí)間減去需取消定時(shí)的定時(shí)器的剩余時(shí)間值;如果不是的話,該定時(shí)器后面的一個(gè)定時(shí)器的剩余時(shí)間=后面定時(shí)器原有的剩余時(shí)間加上需取消定時(shí)器的剩余時(shí)間值。
4.超時(shí)消息調(diào)度該模塊是供系統(tǒng)調(diào)度使用的,用以產(chǎn)生超時(shí)消息。檢查該隊(duì)列是否為空,如不空,則根據(jù)該定時(shí)器中保留的進(jìn)行號給相應(yīng)進(jìn)程發(fā)送超時(shí)消息,并將定時(shí)器歸還空閑隊(duì)列。
下面舉例說明采用11個(gè)隊(duì)列來進(jìn)行時(shí)鐘的控制過程,這11個(gè)隊(duì)列分別如下1.定時(shí)空閑隊(duì)列用來控制空閑的定時(shí)器;2.定時(shí)忙隊(duì)列定時(shí)時(shí)間已到,等待調(diào)度控制給設(shè)定定時(shí)的進(jìn)程發(fā)送超時(shí)消息;3.定時(shí)即將到達(dá)隊(duì)列用來控制定時(shí)時(shí)長小于50ms的定時(shí)器;4.50ms定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于50ms但小于100ms的定時(shí)器;5.100ms定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于100ms但小于500ms的定時(shí)器;6.500ms定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于500ms但小于1s的定時(shí)器;7.1s定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于1s但小于5s的定時(shí)器;8.5s定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于5s但小于10s的定時(shí)器;9.10s定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于10s但小于50s的定時(shí)器;10.50s定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于50s但小于100s的定時(shí)器;11.100s定時(shí)隊(duì)列用來控制定時(shí)時(shí)長大于等于100s的定時(shí)器;如圖1所示每個(gè)隊(duì)列分別采用一個(gè)隊(duì)列頭1,隊(duì)列的控制采用雙向鏈表的方式,隊(duì)列頭1的前向指針指向第一個(gè)定時(shí)器2,后向指針指向最后一個(gè)定時(shí)器5,中間定時(shí)器3、4的前向指針、后向指針分別指向下一個(gè)和前一個(gè)定時(shí)器。
隊(duì)列頭和定時(shí)器采用相同結(jié)構(gòu),主要包含以下的數(shù)據(jù)結(jié)構(gòu),如下所示typedef struct{WORD next;前向指針;WORD last;后向指針;WORD root;隊(duì)列標(biāo)記,用來指明當(dāng)前是哪個(gè)隊(duì)列;WORD len; 設(shè)定時(shí)長;WORD rst; 剩余時(shí)間;BYTE pno; 設(shè)定定時(shí)器的進(jìn)程號;}TCB;
下面舉例說明這些隊(duì)列的應(yīng)用。
假如用戶設(shè)定了一個(gè)1130ms的定時(shí),首先將該定時(shí)器掛入1s定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為1130-1000=130ms;當(dāng)1s的定時(shí)完成時(shí),將該定時(shí)器取出掛入100ms定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為130-100=30ms;當(dāng)100ms的定時(shí)完成時(shí),將該定時(shí)器取出掛入定時(shí)即將到達(dá)隊(duì)列,用戶設(shè)定的定時(shí)時(shí)長不變;對定時(shí)即將到達(dá)隊(duì)列,在中斷里需對其中的所有定時(shí)器進(jìn)行掃描,如定時(shí)到,再將該定時(shí)器取出掛入定時(shí)忙隊(duì)列,由調(diào)度控制進(jìn)行調(diào)度,并給相應(yīng)的進(jìn)程發(fā)送超時(shí)消息。
以下我們以1s定時(shí)器隊(duì)列為例,說明我們采用的這種定時(shí)器的設(shè)置方式。
隊(duì)列控制頭的設(shè)定時(shí)長長1000ms/中斷產(chǎn)生間隔,假設(shè)中斷間隔為10ms,即每10ms產(chǎn)生一次中斷,用戶設(shè)置的定時(shí)器最大會產(chǎn)生10ms的誤差。這樣隊(duì)列控制頭的設(shè)定時(shí)長為100,這個(gè)值在初始化時(shí)進(jìn)行設(shè)定,是個(gè)常量。
由于該隊(duì)列固定處理1000ms的定時(shí),每一個(gè)掛入該隊(duì)列的定時(shí)器只進(jìn)行1000ms的定時(shí),因此每一個(gè)定時(shí)器的剩余時(shí)間值是由1000ms減掉在它前面的所有定時(shí)器的剩余時(shí)間值,這樣才是它自己真正的時(shí)間剩余值。
定時(shí)器的設(shè)定時(shí)長=用戶要求的設(shè)定時(shí)長-100;定時(shí)器的剩余時(shí)間=100-隊(duì)列控制頭的剩余時(shí)間;隊(duì)列控制頭的剩余時(shí)間=100;圖2為定時(shí)器處理過程圖,是先掛入一個(gè)設(shè)定時(shí)長為4200ms的定時(shí)器,經(jīng)過200ms后,再掛入一個(gè)設(shè)定時(shí)長為3400ms的定時(shí)器處理過程。
初始化處理模塊1申請所有定時(shí)器和定時(shí)器隊(duì)列頭所需的數(shù)據(jù)區(qū);2初始化所有的定時(shí)器隊(duì)列頭,將每個(gè)隊(duì)列頭中的前向指針和后向指針分別指向隊(duì)列頭自己,設(shè)置隊(duì)列頭中的隊(duì)列標(biāo)記為具體的哪一個(gè)隊(duì)列,將所有隊(duì)列中剩余時(shí)間清0;3設(shè)置所有隊(duì)列頭中的時(shí)長len值;(由于我們采用了10ms中斷,故相應(yīng)隊(duì)列頭的時(shí)間值要除10,如下所示50ms定時(shí)隊(duì)列的len=5;100ms定時(shí)隊(duì)列的len=10;500ms定時(shí)隊(duì)列的len=50;1s定時(shí)隊(duì)列的len=100;5s定時(shí)隊(duì)列的len=500;10s定時(shí)隊(duì)列的len=1000;50s定時(shí)隊(duì)列的len=5000;100s定時(shí)隊(duì)列的len=10000;)
4將所有的定時(shí)器掛入定時(shí)器空閑隊(duì)列中。
中斷處理模塊中斷處理模塊顧名思義是在中斷里處理的,它每10ms處理一次,需掃描所有的隊(duì)列,其處理步驟如下1.掃描定時(shí)即將到達(dá)隊(duì)列過程;2.掃描50ms定時(shí)隊(duì)列過程;3.掃描100ms定時(shí)隊(duì)列過程;4.掃描500ms定時(shí)隊(duì)列過程;5.掃描1s定時(shí)隊(duì)列過程;6.掃描5s定時(shí)隊(duì)列過程;7.掃描10s定時(shí)隊(duì)列過程;8.掃描50s定時(shí)隊(duì)列過程;9.掃描100s定時(shí)隊(duì)列過程;掃描定時(shí)即將到達(dá)隊(duì)列過程的處理,是按順序從隊(duì)列控制頭開始對隊(duì)列中的每一個(gè)定時(shí)器進(jìn)行檢查,如定時(shí)時(shí)間為0則掛入定時(shí)忙隊(duì)列,如未到,則繼續(xù)查找下一個(gè)定時(shí)器,直至所有隊(duì)列中的定時(shí)器均檢查過。
對于整個(gè)隊(duì)列而言,處理過程如圖3所示開始(步驟30),判斷隊(duì)列是否為空?(步驟31)若是,則退出;若否,則判斷設(shè)定時(shí)器的設(shè)定時(shí)長len是否為0?(步驟33),若是,則從隊(duì)列中取出該定時(shí)器(步驟37),將該定時(shí)器插入定時(shí)器忙隊(duì)列(步驟38);若否,定時(shí)器的設(shè)定時(shí)長減1(步驟34),檢查是否到隊(duì)列尾(步驟35),如果沒有,取下一個(gè)定時(shí)器(步驟32)重復(fù)上述步驟。
對于定時(shí)器的剩余時(shí)間,從掃描50ms隊(duì)列開始,隊(duì)列的處理方式是一致的,它的處理如圖4所示開始(步驟40),判斷隊(duì)列是否為空(步驟41)?若是,則退出;若否,將隊(duì)列控制頭的剩余時(shí)間減1(步驟42),并將隊(duì)列中的第一個(gè)定時(shí)器的剩余時(shí)間減1(步驟43),如果定時(shí)器的剩余時(shí)間不為0(步驟44),則退出。如果為0,將該定時(shí)器取出并根據(jù)它的設(shè)定時(shí)長把它掛入響應(yīng)隊(duì)列中(步驟45)。再判斷隊(duì)列是否為空(步驟46),如果空,則退出。如果不為空,則檢查下一個(gè)定時(shí)器的剩余時(shí)間值(步驟47),返回到步驟44。
給用戶提供的設(shè)置、取消定時(shí)所用的兩個(gè)原語(primitive),設(shè)置定時(shí)的原語SET_TIMER,它的處理如圖5所示,取消定時(shí)的原語KILL_TIMER,它的處理如圖6所示。
圖5中,開始,從定時(shí)器空閑隊(duì)列中取出一定時(shí)器,記錄下當(dāng)前的進(jìn)程號和設(shè)定時(shí)長(步驟50),如果設(shè)定時(shí)長為0,則將該定時(shí)器掛入定時(shí)忙隊(duì)列(步驟56),退出;如果設(shè)定時(shí)長不為0但小于50ms,將該定時(shí)器掛入定時(shí)時(shí)長小于50ms隊(duì)列的隊(duì)尾(步驟58),退出(步驟59)。如果設(shè)定時(shí)長不小于50ms,根據(jù)定時(shí)器的時(shí)長找出相應(yīng)的隊(duì)列(步驟53),將該定時(shí)器掛入該隊(duì)列的隊(duì)尾(步驟54),計(jì)算定時(shí)器的設(shè)定時(shí)長、定時(shí)器的剩余時(shí)間和隊(duì)列控制頭的剩余時(shí)間(步驟55)。
圖6中,取出該定時(shí)器所在的隊(duì)列號(步驟60),檢查定時(shí)器是否還在該隊(duì)列中(步驟61),不在,則退出。如果在,判斷該定時(shí)器是否在空閑隊(duì)列中(步驟62),如果不在,判斷是否在忙隊(duì)列中或者定時(shí)即將到達(dá)隊(duì)列中(步驟63),若是,則從隊(duì)列中刪除該定時(shí)器,將定時(shí)器掛入空閑隊(duì)列中(步驟68),退出。再取出該定時(shí)器的下一個(gè)定時(shí)器(步驟64),判斷是否是隊(duì)尾(步驟65)?如果是,隊(duì)列控制頭的剩余時(shí)間等于隊(duì)列控制頭的剩余時(shí)間減去該定時(shí)器的剩余時(shí)間(步驟69),如果否,則下一個(gè)定時(shí)器的剩余時(shí)間等于下一個(gè)定時(shí)器的剩余時(shí)間加上該定時(shí)器的剩余時(shí)間(步驟66),最后,從隊(duì)列中刪除該定時(shí)器并將定時(shí)器掛入空閑隊(duì)列中(步驟67)。
圖7所示為超時(shí)消息調(diào)度模塊的流程圖,超時(shí)消息調(diào)度模塊是供系統(tǒng)調(diào)度使用的,用以產(chǎn)生超時(shí)消息。
首先判斷定時(shí)器是否為空(步驟70)?如果不為空,從定時(shí)器忙隊(duì)列中刪除該定時(shí)器(步驟71),根據(jù)定時(shí)器中保留的進(jìn)程號調(diào)度執(zhí)行該進(jìn)程(步驟72),然后將該定時(shí)器歸還定時(shí)器空閑隊(duì)列(步驟73),判斷定時(shí)器隊(duì)列是否為空,如果不空,取下一個(gè)定時(shí)器,返回步驟71。
定時(shí)器的隊(duì)列標(biāo)記(root)需特別說明,當(dāng)定時(shí)器掛入空閑隊(duì)列時(shí),隊(duì)列標(biāo)記中記錄的是自己的定時(shí)器號;而當(dāng)隊(duì)列掛入其它隊(duì)列時(shí),隊(duì)列標(biāo)記中記錄的則是隊(duì)列頭的定時(shí)器號,主要的作用是可以很容易的知道當(dāng)前定時(shí)器所處的隊(duì)列號。
以上幾個(gè)基本部分,共同組成了時(shí)鐘控制的功能。其中,初始化模塊在系統(tǒng)剛開始運(yùn)行時(shí)調(diào)用一次,以后不再執(zhí)行;中斷處理模塊供系統(tǒng)在中斷里調(diào)用,每次中斷產(chǎn)生調(diào)用一次;超時(shí)消息調(diào)度模塊供調(diào)度控制在系統(tǒng)主循環(huán)里調(diào)度;兩個(gè)原語SET_TIMER和KILL_TIMER則是提供給用戶所用的。
由于是介紹方法,故我們這里只簡單的提供了設(shè)置、取消定時(shí)操作的兩個(gè)原語的設(shè)計(jì),用戶可以根據(jù)自己的需要增加相應(yīng)的原語,如定時(shí)給某個(gè)進(jìn)程發(fā)送超時(shí)消息或取消該操作的原語,提供周期性的發(fā)送超時(shí)消息或取消的原語等。
權(quán)利要求
1.一種操作系統(tǒng)中的時(shí)鐘控制方法,用于對多時(shí)鐘控制隊(duì)列進(jìn)行處理,該方法包括定時(shí)的中斷處理,用于完成定時(shí)器的定時(shí)時(shí)長的減1操作及準(zhǔn)備超時(shí)消息的產(chǎn)生;定時(shí)器的設(shè)置與取消,分別用于完成將定時(shí)器掛入定時(shí)隊(duì)列和取出;超時(shí)消息調(diào)度,供系統(tǒng)調(diào)度使用的,用于產(chǎn)生超時(shí)消息;其特征在于,在所述定時(shí)的中斷處理、定時(shí)器的設(shè)置與取消、超時(shí)消息調(diào)度中均包含有多時(shí)鐘控制隊(duì)列處理,其處理過程至少包括不同隊(duì)列完成不同定時(shí)時(shí)長的處理,每個(gè)定時(shí)隊(duì)列只完成固定時(shí)長的定時(shí),在隊(duì)列控制頭中用剩余時(shí)間這一變量來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和,新的定時(shí)器掛入相應(yīng)隊(duì)列的隊(duì)尾時(shí),無需查找它隊(duì)列中在它前面的所有定時(shí)器的剩余時(shí)間之和。
2.如權(quán)利要求1所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,所述多時(shí)鐘控制隊(duì)列主要包含以下的控制隊(duì)列定時(shí)空閑隊(duì)列,用來控制空閑的定時(shí)器;定時(shí)即將到達(dá)隊(duì)列,用來控制定時(shí)時(shí)長即將到達(dá)的定時(shí)器;定時(shí)忙隊(duì)列,定時(shí)時(shí)間已到,等待調(diào)度控制給設(shè)定定時(shí)的進(jìn)程發(fā)送超時(shí)消息;控制不同時(shí)長的多個(gè)隊(duì)列,用來控制不同定時(shí)時(shí)長的處理。
3.如權(quán)利要求1或者2所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,每個(gè)隊(duì)列的隊(duì)列控制頭和定時(shí)器均包含以下的基本信息前向指針,用于找到下一個(gè)定時(shí)器;后向指針,用于找到上一個(gè)定時(shí)器;隊(duì)列標(biāo)記,用來指明當(dāng)前是哪個(gè)隊(duì)列;設(shè)定時(shí)長,如果是隊(duì)列控制頭,用來表明當(dāng)前該隊(duì)列所處理的定時(shí)時(shí)長;如果是定時(shí)器,則記錄該定時(shí)器需完成的定時(shí)時(shí)長;剩余時(shí)間,如果是隊(duì)列控制頭,則用來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和;如果是定時(shí)器,則記錄該定時(shí)器完成當(dāng)前所在隊(duì)列定時(shí)的剩余時(shí)間;設(shè)定定時(shí)器的進(jìn)程號,用以記錄是哪一個(gè)進(jìn)程設(shè)定定時(shí)操作的。
4.如權(quán)利要求1所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,多個(gè)隊(duì)列的處理采用以下的方式(1)當(dāng)用戶設(shè)定了一個(gè)m的定時(shí),根據(jù)該定時(shí)器的定時(shí)時(shí)長找到它所在的隊(duì)列,將該定時(shí)器掛入該定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為m-該隊(duì)列的設(shè)定時(shí)長;(2)當(dāng)該隊(duì)列的定時(shí)完成時(shí),再根據(jù)它的定時(shí)時(shí)長查找下一個(gè)隊(duì)列,將該定時(shí)器掛入該定時(shí)隊(duì)列,并將該定時(shí)器中定時(shí)時(shí)長改為m-該隊(duì)列的設(shè)定時(shí)長-下一個(gè)隊(duì)列的設(shè)定時(shí)長;(3)重復(fù)前面的操作,一直到該定時(shí)器的定時(shí)時(shí)長小于定時(shí)即將到達(dá)隊(duì)列中定時(shí)時(shí)長,將該定時(shí)器取出并掛入定時(shí)即將到達(dá)隊(duì)列;對于定時(shí)即將到達(dá)隊(duì)的處理,在中斷里需對該隊(duì)列中的所有定時(shí)器進(jìn)行掃描,如定時(shí)到,再將該定時(shí)器取出掛入定時(shí)忙隊(duì)列,由調(diào)度控制進(jìn)行調(diào)度,并給相應(yīng)的進(jìn)程發(fā)送超時(shí)消息。
5.如權(quán)利要求1所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,所述定時(shí)的中斷處理包括對于定時(shí)即將到達(dá)隊(duì)列,需檢查隊(duì)列中的每一個(gè)定時(shí)器,如定時(shí)到則掛入定時(shí)忙隊(duì)列,否則對定時(shí)器的設(shè)定時(shí)長進(jìn)行減1的操作;對于其它的隊(duì)列,只處理隊(duì)列控制頭和隊(duì)列中的第一個(gè)定時(shí)器,將隊(duì)列控制頭的剩余時(shí)間和隊(duì)列中的第一個(gè)定時(shí)器的剩余時(shí)間減1,當(dāng)?shù)谝粋€(gè)定時(shí)器的剩余時(shí)間為0時(shí),將該定時(shí)器取出并掛入下一隊(duì)列,再繼續(xù)查找下一個(gè)剩余時(shí)間為0的定時(shí)器,并將它取出并掛入下一隊(duì)列,對隊(duì)列中的剩余時(shí)間不為0的定時(shí)器并不處理。
6.如權(quán)利要求1所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,所述定時(shí)器的設(shè)置包括在每個(gè)隊(duì)列只進(jìn)行固定時(shí)長的定時(shí)處理,每一個(gè)掛入該隊(duì)列的定時(shí)器都進(jìn)行相同的定時(shí),每一個(gè)定時(shí)器的剩余時(shí)間值是由該隊(duì)列控制頭的設(shè)定時(shí)長減掉在它前面的所有定時(shí)器的剩余時(shí)間值;新的定時(shí)器掛入時(shí),新的定時(shí)器的剩余時(shí)間為隊(duì)列控制頭的設(shè)定時(shí)長-隊(duì)列控制頭的剩余時(shí)間值,將隊(duì)列控制頭的剩余時(shí)間置為隊(duì)列控制頭的設(shè)定時(shí)長。
7.如權(quán)利要求1所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,所述定時(shí)器的時(shí)鐘取消包括如果定時(shí)器已在空閑隊(duì)列中,則不做如何處理;當(dāng)在定時(shí)忙隊(duì)列或定時(shí)即將到達(dá)隊(duì)列,只需要將定時(shí)器取出并掛入空閑隊(duì)列即可;否則除了要將定時(shí)器取出并掛入空閑隊(duì)列,還需修改定時(shí)器的剩余時(shí)間值。
8.如權(quán)利要求7所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,所述定時(shí)器的時(shí)鐘取消還包括當(dāng)需取消的定時(shí)器是所在隊(duì)列中的最后一個(gè)定時(shí)器,則隊(duì)列控制頭的剩余時(shí)間=隊(duì)列控制頭的原有剩余時(shí)間-需取消定時(shí)的定時(shí)器的剩余時(shí)間值;否則,該定時(shí)器后面的一個(gè)定時(shí)器的剩余時(shí)間=后面定時(shí)器原有的剩余時(shí)間+需取消定時(shí)器的剩余時(shí)間值。
9.如權(quán)利要求1所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,所述超時(shí)消息調(diào)度還包括檢查該隊(duì)列是否為空,如不空,則根據(jù)該定時(shí)器中保留的進(jìn)行號給相應(yīng)進(jìn)程發(fā)送超時(shí)消息,并將定時(shí)器歸還空閑隊(duì)列。
10.如權(quán)利要求1所述操作系統(tǒng)中的時(shí)鐘控制方法,其特征在于,該方法還包括初始化處理步驟,包括申請數(shù)據(jù)區(qū)、初始化隊(duì)列頭、設(shè)置隊(duì)列標(biāo)記、剩余時(shí)長清零、設(shè)置隊(duì)列頭的時(shí)長值,將定時(shí)器掛入空閑隊(duì)列。
全文摘要
本發(fā)明涉及一種操作系統(tǒng)中的時(shí)鐘控制方法,用于對多時(shí)鐘控制隊(duì)列進(jìn)行處理,該方法包括定時(shí)的中斷處理、定時(shí)器的設(shè)置與取消和超時(shí)消息調(diào)度,在所述定時(shí)的中斷處理、定時(shí)器的設(shè)置與取消、超時(shí)消息調(diào)度中均包含有多時(shí)鐘控制隊(duì)列處理,其處理過程至少包括不同隊(duì)列完成不同定時(shí)時(shí)長的處理,每個(gè)定時(shí)隊(duì)列只完成固定時(shí)長的定時(shí),在隊(duì)列控制頭中用剩余時(shí)間這一變量來記錄隊(duì)列中所有定時(shí)器的剩余時(shí)間之和,新的定時(shí)器掛入相應(yīng)隊(duì)列的隊(duì)尾時(shí),無需查找它隊(duì)列中在它前面的所有定時(shí)器的剩余時(shí)間之和。本發(fā)明既能保障時(shí)鐘控制的高效性,又能保障時(shí)鐘控制的準(zhǔn)確性,特別是在對時(shí)鐘操作頻繁的實(shí)時(shí)系統(tǒng)中更為明顯。
文檔編號G05B19/00GK1570785SQ0313996
公開日2005年1月26日 申請日期2003年7月24日 優(yōu)先權(quán)日2003年7月24日
發(fā)明者王永新, 朱西延, 任小燕, 毛曉峻, 宣志堅(jiān) 申請人:中興通訊股份有限公司