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