專(zhuān)利名稱(chēng):一種基于多線(xiàn)程的衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種基于多線(xiàn)程的衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度方法,適用于衛(wèi)星
地面應(yīng)用系統(tǒng)數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)的調(diào)度。
背景技術(shù):
隨著衛(wèi)星數(shù)據(jù)應(yīng)用業(yè)務(wù)的快速發(fā)展,衛(wèi)星地面應(yīng)用系統(tǒng)面臨衛(wèi)星數(shù)據(jù)產(chǎn)品種類(lèi) 多、處理流程復(fù)雜、任務(wù)種類(lèi)和任務(wù)量快速增加的難題。為解決上述問(wèn)題,需要一種有效的 調(diào)度方法,實(shí)現(xiàn)自動(dòng)、科學(xué)有效地系統(tǒng)資源調(diào)配與任務(wù)調(diào)度,滿(mǎn)足遙感數(shù)據(jù)產(chǎn)品快速、高效、 可靠生產(chǎn)的要求。 以往的衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)需求量有限,應(yīng)用系統(tǒng)規(guī)模小,任務(wù)調(diào)度軟件同時(shí)能調(diào) 度的任務(wù)數(shù)量少,產(chǎn)品生產(chǎn)的延遲性大。目前,衛(wèi)星地面應(yīng)用系統(tǒng)規(guī)模增大,進(jìn)行衛(wèi)星數(shù)據(jù) 產(chǎn)品生產(chǎn)的設(shè)備數(shù)量增多,可以進(jìn)行大量產(chǎn)品的同時(shí)生產(chǎn),提高了產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度 的要求。以往的任務(wù)調(diào)度方法已經(jīng)無(wú)法滿(mǎn)足衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)量急劇增長(zhǎng)、任務(wù)調(diào)度 的實(shí)時(shí)性和并行性要求增高等需求。
發(fā)明內(nèi)容
本發(fā)明的技術(shù)解決問(wèn)題是克服現(xiàn)有技術(shù)的不足,提供一種基于多線(xiàn)程的衛(wèi)星數(shù) 據(jù)產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度方法,該方法解決了衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)流程復(fù)雜、任務(wù)量大、任務(wù) 種類(lèi)多等問(wèn)題,提高了任務(wù)調(diào)度的實(shí)時(shí)性和并行性。 本發(fā)明的技術(shù)解決方案是一種基于多線(xiàn)程的衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度方 法,其特征在于包括任務(wù)生成、優(yōu)先級(jí)隊(duì)列管理、線(xiàn)程池創(chuàng)建、線(xiàn)程池管理4個(gè)部分,實(shí)現(xiàn) 如下 (1)任務(wù)生成根據(jù)衛(wèi)星數(shù)據(jù)產(chǎn)品數(shù)據(jù)要求,生成任務(wù)并確定任務(wù)的優(yōu)先級(jí)和任 務(wù)在優(yōu)先級(jí)隊(duì)列中的最長(zhǎng)等待時(shí)間; (2)優(yōu)先級(jí)隊(duì)列管理根據(jù)步驟(1)確定的任務(wù)優(yōu)先級(jí)和優(yōu)先級(jí)別數(shù)量,創(chuàng)建相 應(yīng)優(yōu)先級(jí)別和優(yōu)先級(jí)數(shù)量的線(xiàn)程安全的隊(duì)列,將待執(zhí)行的任務(wù)按照其優(yōu)先級(jí)的級(jí)別插入到 相應(yīng)的隊(duì)列中,并為任務(wù)增加一個(gè)時(shí)間戳,記錄該任務(wù)加入到隊(duì)列的時(shí)間,在任務(wù)調(diào)度過(guò)程 中,檢查非最高優(yōu)先級(jí)隊(duì)列中每個(gè)任務(wù)的等待時(shí)間,如果超過(guò)步驟(1)中的最長(zhǎng)等待時(shí)間 而該任務(wù)仍未被執(zhí)行,則將該任務(wù)轉(zhuǎn)移到上一級(jí)優(yōu)先級(jí)更高的隊(duì)列中并更改時(shí)間戳,以防 止低優(yōu)先級(jí)的任務(wù)長(zhǎng)時(shí)間得不到執(zhí)行; (3)創(chuàng)建線(xiàn)程池將線(xiàn)程分為守護(hù)線(xiàn)程和任務(wù)線(xiàn)程,根據(jù)系統(tǒng)CPU的數(shù)量、任務(wù)的 I/O等待時(shí)間和任務(wù)生成頻率確定任務(wù)線(xiàn)程的最大數(shù)量和最小數(shù)量,并設(shè)置任務(wù)線(xiàn)程的最 長(zhǎng)空閑時(shí)間,根據(jù)任務(wù)線(xiàn)程的最小數(shù)量創(chuàng)建并啟動(dòng)相應(yīng)數(shù)量的任務(wù)線(xiàn)程,任務(wù)線(xiàn)程的狀態(tài) 分為Ready態(tài)、空閑態(tài)、運(yùn)行態(tài)和終結(jié)態(tài)四種狀態(tài),并為每個(gè)任務(wù)線(xiàn)程分配唯一的ID,任務(wù) 線(xiàn)程按照優(yōu)先級(jí)由高到低的順序從優(yōu)先級(jí)隊(duì)列中取出任務(wù)進(jìn)行執(zhí)行;創(chuàng)建并啟動(dòng)唯一的守 護(hù)線(xiàn)程,并由守護(hù)線(xiàn)程生成任務(wù)線(xiàn)程狀態(tài)表,用于調(diào)整和控制線(xiàn)程池中任務(wù)線(xiàn)程的數(shù)量和
3狀態(tài); (4)線(xiàn)程池管理守護(hù)線(xiàn)程維護(hù)線(xiàn)程池中任務(wù)線(xiàn)程的數(shù)量和任務(wù)線(xiàn)程狀態(tài)表,記 錄和控制任務(wù)線(xiàn)程狀態(tài)的變化,如果有新任務(wù)加入到優(yōu)先級(jí)隊(duì)列,而當(dāng)前無(wú)空閑的任務(wù)線(xiàn) 程,并且任務(wù)線(xiàn)程總數(shù)小于設(shè)定的任務(wù)最大線(xiàn)程數(shù)量,則守護(hù)線(xiàn)程負(fù)責(zé)創(chuàng)建新的任務(wù)線(xiàn)程 執(zhí)行任務(wù);如果所有優(yōu)先級(jí)隊(duì)列為空,即無(wú)需要執(zhí)行的任務(wù),任務(wù)線(xiàn)程將進(jìn)入空閑狀態(tài),并 通過(guò)兩種方式轉(zhuǎn)變?yōu)榻K結(jié)態(tài)第一種方式是空閑狀態(tài)超過(guò)設(shè)定的最長(zhǎng)空閑時(shí)間,則自動(dòng)結(jié) 束轉(zhuǎn)變?yōu)榻K結(jié)態(tài);第二種方式是守護(hù)線(xiàn)程掃描所有的空閑線(xiàn)程,由守護(hù)線(xiàn)程結(jié)束任務(wù)線(xiàn)程 將其轉(zhuǎn)變?yōu)榻K結(jié)態(tài),但守護(hù)線(xiàn)程要保證線(xiàn)程池中任務(wù)線(xiàn)程的數(shù)量不少于設(shè)定的任務(wù)線(xiàn)程最 小數(shù)量。 所述步驟(3)中最大線(xiàn)程數(shù)量的確定為N^ (l+Tw/Ts),最小線(xiàn)程數(shù)量確定為Fc^ (Tw+Ts) , Tw為任務(wù)的I/O等待時(shí)間,單位為秒,Ts為真正占用CPU的時(shí)間,單位為秒,N為 系統(tǒng)CPU的數(shù)量,F(xiàn)c為任務(wù)生成頻率,最小線(xiàn)程數(shù)量可設(shè)定為Fc * (Tw+Ts),任務(wù)線(xiàn)程的最 長(zhǎng)空閑時(shí)間設(shè)定為1/Fc,單位秒。
本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)點(diǎn) (1)本發(fā)明該方法能夠合理利用系統(tǒng)資源,根據(jù)任務(wù)優(yōu)先級(jí)調(diào)度任務(wù),解決了復(fù)雜 的生產(chǎn)流程、大任務(wù)量等帶來(lái)的調(diào)度問(wèn)題,同時(shí)能調(diào)度的任務(wù)數(shù)量極大增加,滿(mǎn)足了任務(wù)調(diào) 度的實(shí)時(shí)性、并行性和高效率的需求。 (2)本發(fā)明優(yōu)先級(jí)隊(duì)列根據(jù)優(yōu)先級(jí)級(jí)別數(shù)量采用多個(gè)隊(duì)列存儲(chǔ)不同優(yōu)先級(jí)的任 務(wù),而傳統(tǒng)采用單一隊(duì)列的方式,需要使用排序算法將任務(wù)插入到相應(yīng)位置,插入效率較 低。
(3)本發(fā)明優(yōu)先級(jí)隊(duì)列管理中為每個(gè)加入的任務(wù)設(shè)置一個(gè)加入時(shí)間戳,如果該任
務(wù)在隊(duì)列中等待的時(shí)間超過(guò)設(shè)定的最長(zhǎng)等待時(shí)間,則將任務(wù)轉(zhuǎn)移到上一級(jí)優(yōu)先級(jí)更高的隊(duì)
列中,并更改時(shí)間戳,該方法有效防止了低優(yōu)先級(jí)的任務(wù)長(zhǎng)時(shí)間得不到執(zhí)行的問(wèn)題。
(4)本發(fā)明將線(xiàn)程池中的線(xiàn)程分為守護(hù)線(xiàn)程和任務(wù)線(xiàn)程,并設(shè)定線(xiàn)程池的任務(wù)最
小數(shù)量、最大數(shù)量以及最長(zhǎng)空閑時(shí)間,守護(hù)線(xiàn)程維護(hù)和控制任務(wù)線(xiàn)程的數(shù)量和狀態(tài),最大限
度的使用系統(tǒng)資源同時(shí)又減小了對(duì)系統(tǒng)資源的浪費(fèi)。 總之,本本發(fā)明與傳統(tǒng)的調(diào)度方法相比,該方法解決了衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)流程復(fù) 雜、任務(wù)執(zhí)行時(shí)間長(zhǎng)、任務(wù)量大、任務(wù)調(diào)度的實(shí)時(shí)和并行處理要求高等問(wèn)題,工程實(shí)現(xiàn)表明, 采用本發(fā)明方法進(jìn)行的任務(wù)調(diào)度性能優(yōu)越,實(shí)時(shí)性和并行性滿(mǎn)足用戶(hù)要求,實(shí)際可行,已成 功地應(yīng)用于某衛(wèi)星的地面處理系統(tǒng)中得到的有效的應(yīng)用和驗(yàn)證。
圖1為本發(fā)明的功能結(jié)構(gòu)圖; 圖2為本發(fā)明中任務(wù)線(xiàn)程狀態(tài)轉(zhuǎn)移示意圖; 圖3為本發(fā)明中守護(hù)線(xiàn)程的流程示意圖。
具體實(shí)施例方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說(shuō)明。 衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)根據(jù)生產(chǎn)要求的不同,任務(wù)的優(yōu)先等級(jí)、流程復(fù)雜程度以
4及任務(wù)執(zhí)行時(shí)間也不同,本發(fā)明根據(jù)任務(wù)的特點(diǎn)由多個(gè)優(yōu)先級(jí)隊(duì)列存儲(chǔ)任務(wù),采用多線(xiàn)程 調(diào)度任務(wù)執(zhí)行,并用線(xiàn)程池管理多線(xiàn)程。本發(fā)明的功能組成如圖l所示。
本發(fā)明的實(shí)現(xiàn)過(guò)程如下 1、根據(jù)衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)要求,生成生產(chǎn)任務(wù),確定任務(wù)的優(yōu)先級(jí)和任務(wù)在隊(duì)列 中的最長(zhǎng)等待時(shí)間。所有任務(wù)的實(shí)現(xiàn)都繼承Rurmable()接口 ,為任務(wù)的執(zhí)行提供統(tǒng)一的 run()方法入口。 2、根據(jù)任務(wù)的優(yōu)先級(jí)和優(yōu)先級(jí)別數(shù)量,創(chuàng)建相應(yīng)級(jí)別和數(shù)量的線(xiàn)程安全的隊(duì)列, 如任務(wù)的優(yōu)先級(jí)從高到低分為1 5級(jí),則相應(yīng)的創(chuàng)建5個(gè)優(yōu)先級(jí)隊(duì)列,分別存儲(chǔ)1 5 級(jí)的任務(wù)。 3、將待執(zhí)行的任務(wù)按照其優(yōu)先級(jí)插入到相應(yīng)的隊(duì)列中,并為任務(wù)增加一個(gè)時(shí)間
戳,記錄該任務(wù)加入到隊(duì)列的時(shí)間。檢查非最高優(yōu)先級(jí)隊(duì)列中每個(gè)任務(wù)的等待時(shí)間,如果等
待時(shí)間超過(guò)設(shè)定的任務(wù)最長(zhǎng)等待時(shí)間而該任務(wù)仍未被執(zhí)行,則將該任務(wù)轉(zhuǎn)移到上一級(jí)優(yōu)先
級(jí)更高的隊(duì)列中并更改時(shí)間戳為當(dāng)前加入隊(duì)列的時(shí)間。 4、創(chuàng)建線(xiàn)程池,生成并啟動(dòng)守護(hù)線(xiàn)程和任務(wù)線(xiàn)程,具體步驟如下 (1)根據(jù)系統(tǒng)CPU的數(shù)量、任務(wù)的I/O等待時(shí)間和任務(wù)生成頻率等情況確定任務(wù)
線(xiàn)程的最大數(shù)量和最小數(shù)量,并設(shè)置任務(wù)線(xiàn)程的最長(zhǎng)空閑時(shí)間。假設(shè)任務(wù)的1/0等待時(shí)間
為T(mén)w (單位秒),真正占用CPU的時(shí)間Ts (單位秒),系統(tǒng)CPU的數(shù)量為N,任務(wù)生成頻率
為Fc(單位個(gè)每秒),則線(xiàn)程池中的任務(wù)線(xiàn)程的最大數(shù)量設(shè)定為(l+Tw/Ts),任務(wù)線(xiàn)程
的最小數(shù)量設(shè)定為Fc * (Tw+Ts),任務(wù)線(xiàn)程的最長(zhǎng)空閑時(shí)間設(shè)定為1/Fc(單位秒)。 (2)線(xiàn)程池創(chuàng)建并啟動(dòng)唯一的守護(hù)線(xiàn)程,根據(jù)設(shè)定的任務(wù)線(xiàn)程的最小數(shù)量創(chuàng)建任
務(wù)線(xiàn)程,并為每個(gè)任務(wù)線(xiàn)程分配唯一的ID ;將任務(wù)線(xiàn)程的狀態(tài)分為Ready態(tài)、空閑態(tài)、運(yùn)行
態(tài)和終結(jié)態(tài)四種狀態(tài)。任務(wù)線(xiàn)程狀態(tài)轉(zhuǎn)變?nèi)?圖所示任務(wù)線(xiàn)程創(chuàng)建成功但未啟動(dòng)時(shí),任務(wù)
線(xiàn)程為Ready態(tài);如果任務(wù)線(xiàn)程開(kāi)始執(zhí)行任務(wù)則轉(zhuǎn)變?yōu)檫\(yùn)行態(tài);如果優(yōu)先級(jí)隊(duì)列全部為空,
則將任務(wù)線(xiàn)程在空隊(duì)列上阻塞,并設(shè)置最長(zhǎng)阻塞時(shí)間,此時(shí)任務(wù)線(xiàn)程轉(zhuǎn)變空閑態(tài);如果任務(wù)
線(xiàn)程被守護(hù)線(xiàn)程終止或達(dá)到最長(zhǎng)空閑時(shí)間,則轉(zhuǎn)變?yōu)榻K結(jié)態(tài)。 (3)啟動(dòng)線(xiàn)程池中所有任務(wù)線(xiàn)程,按優(yōu)先級(jí)由高到低的順序從優(yōu)先級(jí)隊(duì)列中取出 任務(wù)進(jìn)行執(zhí)行。 5、守護(hù)線(xiàn)程維護(hù)調(diào)整線(xiàn)程池中線(xiàn)程的數(shù)量和任務(wù)線(xiàn)程狀態(tài)表,記錄和控制任務(wù)線(xiàn) 程狀態(tài)的變化,守護(hù)線(xiàn)程執(zhí)行流程如圖3所示,具體步驟如下 (1)如果有新任務(wù)加入到隊(duì)列,而當(dāng)前無(wú)處于Ready態(tài)或空閑態(tài)的任務(wù)線(xiàn)程,并 且任務(wù)線(xiàn)程總數(shù)小于設(shè)定的任務(wù)線(xiàn)程最大數(shù)量,則守護(hù)線(xiàn)程負(fù)責(zé)創(chuàng)建新的任務(wù)線(xiàn)程執(zhí)行任 務(wù); (2)如果所有優(yōu)先級(jí)隊(duì)列為空,即無(wú)需要執(zhí)行的任務(wù),任務(wù)線(xiàn)程進(jìn)入空閑狀態(tài),如
果處于空閑態(tài)的時(shí)間超過(guò)設(shè)定的最長(zhǎng)空閑時(shí)間,則任務(wù)線(xiàn)程自動(dòng)結(jié)束轉(zhuǎn)變?yōu)榻K結(jié)態(tài); (3)如果所有優(yōu)先級(jí)隊(duì)列為空,守護(hù)線(xiàn)程掃描所有的空閑線(xiàn)程,由守護(hù)線(xiàn)程設(shè)置終
結(jié)標(biāo)識(shí),結(jié)束處于空閑態(tài)的任務(wù)線(xiàn)程將其轉(zhuǎn)變?yōu)榻K結(jié)態(tài),但守護(hù)線(xiàn)程要保證線(xiàn)程池中任務(wù)
線(xiàn)程的數(shù)量不少于設(shè)定的任務(wù)線(xiàn)程的最小數(shù)量。 下面結(jié)合具體的實(shí)施示例對(duì)本發(fā)明進(jìn)一步詳細(xì)闡述。 實(shí)施示例
1、假設(shè)目前要求在100個(gè)小時(shí)內(nèi)生產(chǎn)1000個(gè)某遙感衛(wèi)星數(shù)據(jù)的幾何精校正產(chǎn)品(任務(wù)生成頻率為1/360個(gè)每秒),各產(chǎn)品采用的原始數(shù)據(jù)源和參數(shù)等不同,根據(jù)這1000個(gè)產(chǎn)品的生產(chǎn)要求,在100個(gè)小時(shí)內(nèi)將創(chuàng)建1000個(gè)執(zhí)行產(chǎn)品生產(chǎn)的任務(wù)。所有任務(wù)的實(shí)現(xiàn)都繼承Rimnable ()接口 ,為任務(wù)的執(zhí)行提供統(tǒng)一的run ()方法入口 。 2、根據(jù)產(chǎn)品需求的緊急程度確定任務(wù)的優(yōu)先級(jí)和任務(wù)在隊(duì)列中的最長(zhǎng)等待時(shí)間,設(shè)任務(wù)優(yōu)先級(jí)為1到5級(jí)共5個(gè)級(jí)別,5級(jí)為最高優(yōu)先級(jí),第1步創(chuàng)建的1000個(gè)任務(wù)中,1 5級(jí)各有200個(gè)任務(wù),各級(jí)對(duì)應(yīng)的最長(zhǎng)等待時(shí)間分別為24小時(shí)、20小時(shí),16小時(shí)、12小時(shí)和6小時(shí)。 3、與任務(wù)的優(yōu)先級(jí)對(duì)應(yīng),創(chuàng)建1到5級(jí)共5個(gè)優(yōu)先級(jí)隊(duì)列,將生成的任務(wù)插入到相應(yīng)級(jí)別的優(yōu)先級(jí)隊(duì)列中,并為任務(wù)增加一個(gè)時(shí)間戳,記錄該任務(wù)在何時(shí)加入到優(yōu)先級(jí)隊(duì)列中。在任務(wù)調(diào)度執(zhí)行過(guò)程中,檢查非最高優(yōu)先級(jí)隊(duì)列中每個(gè)任務(wù)的等待時(shí)間,如果等待時(shí)間超過(guò)設(shè)定的任務(wù)最長(zhǎng)等待時(shí)間而該任務(wù)仍未被執(zhí)行,則將該任務(wù)轉(zhuǎn)移到上一級(jí)優(yōu)先級(jí)更高的隊(duì)列中并更改時(shí)間戳為當(dāng)前加入隊(duì)列的時(shí)間。 4、創(chuàng)建線(xiàn)程池,生成并啟動(dòng)守護(hù)線(xiàn)程和任務(wù)線(xiàn)程,具體步驟如下
(1)假設(shè)任務(wù)的I/O等待時(shí)間為3600秒,真正占用CPU的時(shí)間10秒,系統(tǒng)CPU的數(shù)量為4個(gè),任務(wù)生成頻率為1/360個(gè)每秒,則線(xiàn)程池中的任務(wù)線(xiàn)程的最大數(shù)量為4 *(1+3600/60) = 1444個(gè),任務(wù)線(xiàn)程的最小數(shù)量為1/360* (3600+10) " IO個(gè),任務(wù)線(xiàn)程的最長(zhǎng)空閑時(shí)間為360秒; (2)線(xiàn)程池創(chuàng)建并啟動(dòng)唯一的守護(hù)線(xiàn)程,根據(jù)設(shè)定的任務(wù)線(xiàn)程的最小數(shù)量創(chuàng)建10個(gè)任務(wù)線(xiàn)程,并為每個(gè)任務(wù)線(xiàn)程分配唯一的ID,此時(shí)任務(wù)線(xiàn)程為Ready態(tài);
(3)啟動(dòng)線(xiàn)程池中所有任務(wù)線(xiàn)程,所有任務(wù)線(xiàn)程變?yōu)檫\(yùn)行態(tài),任務(wù)線(xiàn)程按優(yōu)先級(jí)由高到低的順序從5級(jí)到1級(jí)優(yōu)先級(jí)隊(duì)列中取出任務(wù)進(jìn)行執(zhí)行,即如果5級(jí)隊(duì)列為空,則從4級(jí)對(duì)列中取任務(wù),如果5級(jí)和4級(jí)隊(duì)列都為空,則從3級(jí)隊(duì)列中取任務(wù),以此類(lèi)推。
5、守護(hù)線(xiàn)程維護(hù)調(diào)整線(xiàn)程池中線(xiàn)程的數(shù)量和任務(wù)線(xiàn)程狀態(tài)表,記錄和控制任務(wù)線(xiàn)程狀態(tài)的變化,具體步驟如下 (1)如果有新任務(wù)加入到隊(duì)列,而當(dāng)前無(wú)處于Ready態(tài)或空閑態(tài)的任務(wù)線(xiàn)程,并且任務(wù)線(xiàn)程總數(shù)小于設(shè)定的任務(wù)線(xiàn)程最大數(shù)量1444個(gè),則守護(hù)線(xiàn)程負(fù)責(zé)創(chuàng)建新的任務(wù)線(xiàn)程執(zhí)行任務(wù); (2)如果所有優(yōu)先級(jí)隊(duì)列為空,即無(wú)需要執(zhí)行的任務(wù),任務(wù)線(xiàn)程進(jìn)入空閑狀態(tài),如果處于空閑態(tài)的時(shí)間超過(guò)設(shè)定的任務(wù)線(xiàn)程最長(zhǎng)空閑時(shí)間360s,則任務(wù)線(xiàn)程自動(dòng)結(jié)束轉(zhuǎn)變?yōu)榻K結(jié)態(tài); (3)如果所有優(yōu)先級(jí)隊(duì)列為空,守護(hù)線(xiàn)程掃描所有的空閑線(xiàn)程,由守護(hù)線(xiàn)程設(shè)置終結(jié)標(biāo)識(shí),結(jié)束處于空閑態(tài)的任務(wù)線(xiàn)程將其轉(zhuǎn)變?yōu)榻K結(jié)態(tài),但守護(hù)線(xiàn)程要保證線(xiàn)程池中任務(wù)線(xiàn)程的數(shù)量不少于設(shè)定的任務(wù)線(xiàn)程的最小數(shù)量10個(gè)。 本發(fā)明主要應(yīng)用于衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)調(diào)度系統(tǒng)。目前,根據(jù)上述的基于多線(xiàn)
程的任務(wù)調(diào)度方法已經(jīng)成功應(yīng)用于某衛(wèi)星地面處理系統(tǒng)運(yùn)行管理系統(tǒng)中,經(jīng)過(guò)該系統(tǒng)兩年
的實(shí)際運(yùn)行證明本發(fā)明應(yīng)用結(jié)果良好。 本發(fā)明未詳細(xì)闡述部分屬于本領(lǐng)域公知技術(shù)。
權(quán)利要求
一種基于多線(xiàn)程的衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度方法,其特征在于包括任務(wù)生成、優(yōu)先級(jí)隊(duì)列管理、線(xiàn)程池創(chuàng)建、線(xiàn)程池管理4個(gè)部分,實(shí)現(xiàn)如下(1)任務(wù)生成根據(jù)衛(wèi)星數(shù)據(jù)產(chǎn)品數(shù)據(jù)要求,生成任務(wù)并確定任務(wù)的優(yōu)先級(jí)和任務(wù)在優(yōu)先級(jí)隊(duì)列中的最長(zhǎng)等待時(shí)間;(2)優(yōu)先級(jí)隊(duì)列管理根據(jù)步驟(1)確定的任務(wù)優(yōu)先級(jí)和優(yōu)先級(jí)別數(shù)量,創(chuàng)建相應(yīng)優(yōu)先級(jí)別和優(yōu)先級(jí)數(shù)量的線(xiàn)程安全的隊(duì)列,將待執(zhí)行的任務(wù)按照其優(yōu)先級(jí)的級(jí)別插入到相應(yīng)的隊(duì)列中,并為任務(wù)增加一個(gè)時(shí)間戳,記錄該任務(wù)加入到隊(duì)列的時(shí)間,在任務(wù)調(diào)度過(guò)程中,檢查非最高優(yōu)先級(jí)隊(duì)列中每個(gè)任務(wù)的等待時(shí)間,如果超過(guò)步驟(1)中的最長(zhǎng)等待時(shí)間而該任務(wù)仍未被執(zhí)行,則將該任務(wù)轉(zhuǎn)移到上一級(jí)優(yōu)先級(jí)更高的隊(duì)列中并更改時(shí)間戳,以防止低優(yōu)先級(jí)的任務(wù)長(zhǎng)時(shí)間得不到執(zhí)行;(3)創(chuàng)建線(xiàn)程池將線(xiàn)程分為守護(hù)線(xiàn)程和任務(wù)線(xiàn)程,根據(jù)系統(tǒng)CPU的數(shù)量、任務(wù)的I/O等待時(shí)間和任務(wù)生成頻率確定任務(wù)線(xiàn)程的最大數(shù)量和最小數(shù)量,并設(shè)置任務(wù)線(xiàn)程的最長(zhǎng)空閑時(shí)間,根據(jù)任務(wù)線(xiàn)程的最小數(shù)量創(chuàng)建并啟動(dòng)相應(yīng)數(shù)量的任務(wù)線(xiàn)程,任務(wù)線(xiàn)程的狀態(tài)分為Ready態(tài)、空閑態(tài)、運(yùn)行態(tài)和終結(jié)態(tài)四種狀態(tài),并為每個(gè)任務(wù)線(xiàn)程分配唯一的ID,任務(wù)線(xiàn)程按照優(yōu)先級(jí)由高到低的順序從優(yōu)先級(jí)隊(duì)列中取出任務(wù)進(jìn)行執(zhí)行;創(chuàng)建并啟動(dòng)唯一的守護(hù)線(xiàn)程,并由守護(hù)線(xiàn)程生成任務(wù)線(xiàn)程狀態(tài)表,用于調(diào)整和控制線(xiàn)程池中任務(wù)線(xiàn)程的數(shù)量和狀態(tài);(4)線(xiàn)程池管理守護(hù)線(xiàn)程維護(hù)線(xiàn)程池中任務(wù)線(xiàn)程的數(shù)量和任務(wù)線(xiàn)程狀態(tài)表,記錄和控制任務(wù)線(xiàn)程狀態(tài)的變化,如果有新任務(wù)加入到優(yōu)先級(jí)隊(duì)列,而當(dāng)前無(wú)空閑的任務(wù)線(xiàn)程,并且任務(wù)線(xiàn)程總數(shù)小于設(shè)定的任務(wù)最大線(xiàn)程數(shù)量,則守護(hù)線(xiàn)程負(fù)責(zé)創(chuàng)建新的任務(wù)線(xiàn)程執(zhí)行任務(wù);如果所有優(yōu)先級(jí)隊(duì)列為空,即無(wú)需要執(zhí)行的任務(wù),任務(wù)線(xiàn)程將進(jìn)入空閑狀態(tài),并通過(guò)兩種方式轉(zhuǎn)變?yōu)榻K結(jié)態(tài)第一種方式是空閑狀態(tài)超過(guò)設(shè)定的最長(zhǎng)空閑時(shí)間,則自動(dòng)結(jié)束轉(zhuǎn)變?yōu)榻K結(jié)態(tài);第二種方式是守護(hù)線(xiàn)程掃描所有的空閑線(xiàn)程,由守護(hù)線(xiàn)程結(jié)束任務(wù)線(xiàn)程將其轉(zhuǎn)變?yōu)榻K結(jié)態(tài),但守護(hù)線(xiàn)程要保證線(xiàn)程池中任務(wù)線(xiàn)程的數(shù)量不少于設(shè)定的任務(wù)線(xiàn)程最小數(shù)量。
2. 根據(jù)權(quán)利要求l的一種基于多線(xiàn)程的衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度方法,其特 征在于所述步驟(3)中最大線(xiàn)程數(shù)量的確定為N^ (l+Tw/Ts),最小線(xiàn)程數(shù)量確定為Fc^ (Tw+Ts) , Tw為任務(wù)的I/O等待時(shí)間,單位為秒,Ts為真正占用CPU的時(shí)間,單位為秒,N為 系統(tǒng)CPU的數(shù)量,F(xiàn)c為任務(wù)生成頻率,最小線(xiàn)程數(shù)量可設(shè)定為Fc * (Tw+Ts),任務(wù)線(xiàn)程的最 長(zhǎng)空閑時(shí)間設(shè)定為1/Fc,單位秒。
全文摘要
一種基于多線(xiàn)程的衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)任務(wù)并行調(diào)度方法,包括為待調(diào)度執(zhí)行的任務(wù)設(shè)置優(yōu)先級(jí)并實(shí)現(xiàn)統(tǒng)一接口;將任務(wù)按照優(yōu)先級(jí)由高到底的順序加入到優(yōu)先級(jí)隊(duì)列;設(shè)置線(xiàn)程池的任務(wù)最大數(shù)量,最小數(shù)量和線(xiàn)程的最長(zhǎng)空閑時(shí)間;啟動(dòng)線(xiàn)程池中的守護(hù)線(xiàn)程和多個(gè)任務(wù)線(xiàn)程執(zhí)行任務(wù),守護(hù)線(xiàn)程根據(jù)任務(wù)量情況動(dòng)態(tài)調(diào)整任務(wù)線(xiàn)程的數(shù)量。本發(fā)明能夠合理利用系統(tǒng)資源,針對(duì)衛(wèi)星地面應(yīng)用系統(tǒng)的數(shù)據(jù)產(chǎn)品生產(chǎn),解決了產(chǎn)品生產(chǎn)流程復(fù)雜、任務(wù)執(zhí)行時(shí)間長(zhǎng)、任務(wù)量大、任務(wù)調(diào)度實(shí)時(shí)性、并行度高等難點(diǎn)。
文檔編號(hào)G06F9/46GK101739293SQ200910243098
公開(kāi)日2010年6月16日 申請(qǐng)日期2009年12月24日 優(yōu)先權(quán)日2009年12月24日
發(fā)明者劉華, 孫曉良, 李穎, 梁潔雯, 石貞云 申請(qǐng)人:航天恒星科技有限公司