本發(fā)明涉及嵌入式操作系統(tǒng)領(lǐng)域,尤其涉及一種任務(wù)創(chuàng)建、掛起和恢復(fù)方法。
背景技術(shù):
任務(wù)堆??臻g依據(jù)分配在不同的存儲(chǔ)器上,訪問的時(shí)延有所不同;訪問時(shí)延越短性能越好,依據(jù)訪問時(shí)延由短到長(zhǎng),堆??臻g的等級(jí)逐漸降低。
如圖1所示,現(xiàn)有的方案均為在任務(wù)創(chuàng)建時(shí),依據(jù)規(guī)劃給任務(wù)分配指定大小和等級(jí)的堆??臻g,而在后續(xù)任務(wù)調(diào)度執(zhí)行掛起和恢復(fù)時(shí)均不會(huì)動(dòng)態(tài)釋放或申請(qǐng)堆??臻g,也不會(huì)調(diào)整任務(wù)堆棧大小和堆棧等級(jí)。因此,任務(wù)不管處于什么狀態(tài)下,都將一直占用此堆??臻g。
當(dāng)任務(wù)被掛起時(shí),任務(wù)堆棧空間仍被這個(gè)任務(wù)占用,處于閑置狀態(tài),無(wú)法實(shí)現(xiàn)復(fù)用。這樣一來(lái),在內(nèi)存有限的情況下,增加了系統(tǒng)對(duì)內(nèi)存的需求,同時(shí)也不利于更好的利用高效率的堆棧內(nèi)存資源。任務(wù)創(chuàng)建時(shí)分配的堆??臻g一旦分配后是不可以調(diào)整的,無(wú)法根據(jù)當(dāng)前業(yè)務(wù)、內(nèi)存余量等信息,動(dòng)態(tài)調(diào)整任務(wù)的堆棧空間的等級(jí)和大小,也無(wú)法將高效率的堆??臻g分配給運(yùn)行效率要求更高的任務(wù)。堆??臻g內(nèi)的存儲(chǔ)信息將一直要維護(hù),也增加了任務(wù)掛起的開銷。
技術(shù)實(shí)現(xiàn)要素:
為解決現(xiàn)有技術(shù)存在的問題,本發(fā)明提供一種任務(wù)創(chuàng)建及執(zhí)行方法,包括
創(chuàng)建任務(wù),在創(chuàng)建所述任務(wù)時(shí)不分配堆??臻g;
在所述任務(wù)無(wú)法獲取資源時(shí)執(zhí)行掛起流程;
在所述任務(wù)獲取資源后執(zhí)行恢復(fù)流程,此時(shí)若所述任務(wù)沒有堆??臻g,則對(duì)其分配堆??臻g。
本發(fā)明還提供一種任務(wù)掛起方法,包括:
采用本發(fā)明所述任務(wù)創(chuàng)建及執(zhí)行方法創(chuàng)建任務(wù);
釋放當(dāng)前任務(wù)的堆棧空間以供其他任務(wù)申請(qǐng);以及
執(zhí)行任務(wù)切換流程,切換所述當(dāng)前任務(wù)到目標(biāo)任務(wù)。
可選的,釋放所述當(dāng)前任務(wù)的堆??臻g后,無(wú)需進(jìn)行所述當(dāng)前任務(wù)的上下文壓棧保護(hù)。
可選的,釋放所述當(dāng)前任務(wù)的堆??臻g后,任務(wù)管理項(xiàng)中所有對(duì)所述當(dāng)前任務(wù)的管理信息仍正常維護(hù),保證其可參與正常的任務(wù)調(diào)度過(guò)程。
可選的,執(zhí)行掛起前判定當(dāng)前任務(wù)是否允許釋放其堆??臻g,若否,則執(zhí)行所述當(dāng)前任務(wù)的上下文壓棧保護(hù)。
可選的,當(dāng)前任務(wù)的堆??臻g被釋放至空閑堆棧區(qū)。
本發(fā)明還提供一種任務(wù)恢復(fù)方法,包括
采用本發(fā)明所述任務(wù)創(chuàng)建及執(zhí)行方法創(chuàng)建任務(wù);
評(píng)估待恢復(fù)任務(wù)運(yùn)行所需的堆棧空間大??;
申請(qǐng)堆??臻g;以及
切換當(dāng)前任務(wù)至所述待恢復(fù)任務(wù)。
可選的,通過(guò)從任務(wù)管理項(xiàng)中獲取所述待恢復(fù)任務(wù)期望的任務(wù)堆棧等級(jí),并綜合考慮當(dāng)前業(yè)務(wù)狀態(tài)和堆??臻g余量等信息,評(píng)估出所述待恢復(fù)任務(wù)需要申請(qǐng)的堆棧等級(jí),以評(píng)估所需堆??臻g的大小。
可選的,申請(qǐng)堆??臻g后,配置所述待恢復(fù)任務(wù)的上下文信息。
可選的,從空閑堆棧區(qū)申請(qǐng)所述堆??臻g。
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種任務(wù)創(chuàng)建方法,在創(chuàng)建所述任務(wù)時(shí)不對(duì)應(yīng)任務(wù)分配堆棧空間;在所述任務(wù)無(wú)法獲取資源時(shí)執(zhí)行掛起流程;在所述任務(wù)獲取資源后執(zhí)行恢復(fù)流程,此時(shí)若所述任務(wù)沒有堆棧空間,則對(duì)其分配堆棧空間。如此一來(lái),實(shí)現(xiàn)任務(wù)堆棧動(dòng)態(tài)申請(qǐng)和釋放,同一任務(wù)在不同的業(yè)務(wù)需要下分配不同等級(jí)堆棧內(nèi)存資源,保證任務(wù)維持正常的調(diào)度管理。本發(fā)明提高了堆棧內(nèi)存資源的空間利用率,尤其實(shí)現(xiàn)了高效堆棧內(nèi)存資源的在不同任務(wù)之間的充分重復(fù)利用。
附圖說(shuō)明
圖1為現(xiàn)有技術(shù)中任務(wù)創(chuàng)建和執(zhí)行方法的流程圖;
圖2為本發(fā)明一實(shí)施例所述任務(wù)掛起方法的流程圖;
圖3為本發(fā)明一實(shí)施例所述任務(wù)恢復(fù)方法的流程圖。
具體實(shí)施方式
以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。根據(jù)下面說(shuō)明和權(quán)利要求書,本發(fā)明的優(yōu)點(diǎn)和特征將更清楚。需說(shuō)明的是,附圖均采用非常簡(jiǎn)化的形式且均使用非精準(zhǔn)的比率,僅用以方便、明晰地輔助說(shuō)明本發(fā)明實(shí)施例的目的。
本發(fā)明提供了一種任務(wù)創(chuàng)建及執(zhí)行方法,包括
創(chuàng)建任務(wù),在創(chuàng)建所述任務(wù)時(shí)不分配堆棧空間;
在所述任務(wù)無(wú)法獲取資源時(shí)執(zhí)行掛起流程;
在所述任務(wù)獲取資源后執(zhí)行恢復(fù)流程,此時(shí)若任務(wù)沒有堆棧空間,則對(duì)其分配堆??臻g。
本發(fā)明在創(chuàng)建任務(wù)時(shí)僅僅只是創(chuàng)建了任務(wù),不分配堆??臻g,這樣可有效避免在連續(xù)創(chuàng)建任務(wù)時(shí),對(duì)堆??臻g的需求達(dá)到峰值,增大對(duì)堆??臻g總量的需求。
本發(fā)明還提供了一種任務(wù)掛起方法,參見圖2任務(wù)掛起流程(虛線框中流程是比現(xiàn)有技術(shù)多出的步驟)。
步驟S101,任務(wù)處理完成當(dāng)前的工作后,去獲取消息或信號(hào)量等;當(dāng)其無(wú)法獲取所需要的資源后,任務(wù)便開始調(diào)度;
步驟S102,任務(wù)調(diào)度開始執(zhí)行任務(wù)掛起處理;
步驟S103,判定當(dāng)前任務(wù)是否允許釋放任務(wù)堆??臻g,若是則執(zhí)行步驟S104,否則執(zhí)行步驟S107;任務(wù)是否允許釋放任務(wù)堆??臻g,可通過(guò)設(shè)置任務(wù)參數(shù)來(lái)實(shí)現(xiàn);
步驟S104,釋放任務(wù)堆??臻g到堆棧區(qū),可供其它任務(wù)申請(qǐng);
步驟S105,維護(hù)任務(wù)管理項(xiàng)中此任務(wù)各項(xiàng)參數(shù),并標(biāo)注任務(wù)堆棧已經(jīng)釋放;此處任務(wù)管理項(xiàng)不釋放,以便此任務(wù)仍能正常參與任務(wù)調(diào)度(有別于將任務(wù)刪除);
步驟S106,因任務(wù)堆棧已釋放,任務(wù)運(yùn)行的上下文無(wú)需壓棧保護(hù),此處直接跳過(guò)原方案的壓棧保護(hù)流程,然后跳轉(zhuǎn)到S108;
步驟S107,將任務(wù)上下文信息保存到任務(wù)堆棧中;
步驟S108,執(zhí)行任務(wù)切換流程,切換到目標(biāo)任務(wù)。
本發(fā)明還提供一種任務(wù)恢復(fù)方法,參見圖3的任務(wù)恢復(fù)流程(虛線框中流程是比現(xiàn)有技術(shù)多出的步驟)。
步驟S201,當(dāng)任務(wù)獲取到所需要的資源后,任務(wù)便開始調(diào)度;
步驟S202,任務(wù)調(diào)度開始執(zhí)行任務(wù)恢復(fù)處理;
步驟S203,判定當(dāng)前任務(wù)是否已經(jīng)釋放任務(wù)堆??臻g,若是則執(zhí)行步驟S204,否則執(zhí)行步驟S207;任務(wù)是否已經(jīng)釋放任務(wù)堆??臻g,可通過(guò)設(shè)置任務(wù)參數(shù)來(lái)實(shí)現(xiàn);
步驟S204,從任務(wù)管理項(xiàng)中獲取當(dāng)前任務(wù)期望的任務(wù)堆棧等級(jí),并綜合考慮當(dāng)前業(yè)務(wù)狀態(tài)和堆??臻g余量等信息,評(píng)估出本次任務(wù)需要申請(qǐng)的堆棧等級(jí);
步驟S205,申請(qǐng)任務(wù)堆??臻g,并標(biāo)注任務(wù)堆棧已經(jīng)申請(qǐng);
步驟S206,初始化任務(wù)堆棧,配置任務(wù)初始上下文信息,然后跳轉(zhuǎn)到步驟S208;
步驟S207,從任務(wù)堆棧中恢復(fù)任務(wù)上下文信息;
步驟S208,執(zhí)行任務(wù)切換流程,切換到目標(biāo)任務(wù)。
本發(fā)明的技術(shù)方案,優(yōu)化了現(xiàn)有任務(wù)調(diào)度處理:
1.任務(wù)創(chuàng)建時(shí)不分配堆棧空間,只在任務(wù)恢復(fù)時(shí)若沒有分配則分配堆??臻g;
2.在任務(wù)無(wú)法獲取資源執(zhí)行掛起處理時(shí),判定當(dāng)前任務(wù)允許釋放任務(wù)堆棧,則跳過(guò)任務(wù)運(yùn)行上下保護(hù)處理,將任務(wù)的堆??臻g釋放到空閑堆棧區(qū),供其它任務(wù)申請(qǐng);但任務(wù)管理項(xiàng)中所有對(duì)這個(gè)任務(wù)的管理信息仍正常維護(hù),保證這個(gè)任務(wù)可參與正常的任務(wù)調(diào)度過(guò)程。
3.當(dāng)任務(wù)獲取到資源恢復(fù)時(shí),若需申請(qǐng)新的堆棧空間,則可根據(jù)當(dāng)前業(yè)務(wù)狀態(tài)、堆棧空間余量等信息進(jìn)行評(píng)估,根據(jù)評(píng)估處的堆棧等級(jí)和大小,申請(qǐng)對(duì)應(yīng)堆棧內(nèi)存資源。
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種任務(wù)創(chuàng)建方法,在創(chuàng)建所述任務(wù)時(shí)不對(duì)應(yīng)任務(wù)分配堆??臻g;在所述任務(wù)無(wú)法獲取資源時(shí)執(zhí)行掛起流程;在所述任務(wù)獲取資源后執(zhí)行恢復(fù)流程,此時(shí)若所述任務(wù)沒有堆棧空間,則對(duì)其分配堆??臻g。如此一來(lái),實(shí)現(xiàn)任務(wù)堆棧動(dòng)態(tài)申請(qǐng)和釋放,同一任務(wù)在不同的業(yè)務(wù)需要下分配不同等級(jí)堆棧內(nèi)存資源,保證任務(wù)維持正常的調(diào)度管理。本發(fā)明提高 了堆棧內(nèi)存資源的空間利用率,尤其實(shí)現(xiàn)了高效堆棧內(nèi)存資源的在不同任務(wù)之間的充分重復(fù)利用。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包括這些改動(dòng)和變型在內(nèi)。