一種基于tms320c6747的任務(wù)上下文切換優(yōu)化方法
【專利摘要】本發(fā)明公開(kāi)了一種基于TMS320C6747的任務(wù)上下文切換優(yōu)化方法,包括:對(duì)任務(wù)上下文切換需要保存的寄存器進(jìn)行篩選,以最少的寄存器保證操作系統(tǒng)的正常運(yùn)行;通過(guò)TMS320C6747的硬件流水線提高任務(wù)上下文切換代碼的并行執(zhí)行度;通過(guò)雙字指令減少訪存次數(shù),提高代碼執(zhí)行效率。采用本發(fā)明方法對(duì)基于TMS320C6747硬件平臺(tái)的嵌入式實(shí)時(shí)操作系統(tǒng)的任務(wù)上下文切換代碼進(jìn)行優(yōu)化之后,操作系統(tǒng)的任務(wù)切換時(shí)間有明顯的減少,從而提高了操作系統(tǒng)的實(shí)時(shí)性,使其能夠滿足對(duì)實(shí)時(shí)性要求較高的場(chǎng)合。
【專利說(shuō)明】
一種基于TMS320C6747的任務(wù)上下文切換優(yōu)化方法
技術(shù)領(lǐng)域
[00011本發(fā)明屬于嵌入式操作系統(tǒng)技術(shù)領(lǐng)域,具體涉及一種基于TMS320C6747的任務(wù)上 下文切換優(yōu)化方法。
【背景技術(shù)】
[0002] 任務(wù)上下文(即任務(wù)的運(yùn)行環(huán)境),一般指CPU寄存器的內(nèi)容;任務(wù)上下文的切換是 任務(wù)調(diào)度的核心內(nèi)容,包括保存當(dāng)前任務(wù)的運(yùn)行環(huán)境,恢復(fù)將要運(yùn)行任務(wù)的運(yùn)行環(huán)境等。 SmartOSEK-MicroSat是由浙江大學(xué)ESE工程中心研發(fā)的一款面向微小衛(wèi)星領(lǐng)域的嵌入式實(shí) 時(shí)操作系統(tǒng),主要包括任務(wù)管理模塊、資源管理模塊、事件處理模塊、Alarm模塊、中斷處理 模塊等。SmartOSEK-MicroSat的任務(wù)上下文切換可以分為以下四種情況:
[0003] (1)啟動(dòng)一個(gè)新任務(wù),并不保存舊任務(wù)的上下文。這種情況發(fā)生于操作系統(tǒng)啟動(dòng)時(shí) 調(diào)度運(yùn)行第一個(gè)任務(wù)或者當(dāng)前任務(wù)完成,操作系統(tǒng)去調(diào)度一個(gè)沒(méi)有執(zhí)行過(guò)的新任務(wù)運(yùn)行。
[0004] (2)啟動(dòng)一個(gè)新任務(wù),并保存舊任務(wù)的上下文。這種情況發(fā)生于當(dāng)前任務(wù)還買(mǎi)有執(zhí) 行完成,操作系統(tǒng)去調(diào)度一個(gè)沒(méi)有執(zhí)行過(guò)的新任務(wù)運(yùn)行。
[0005] (3)啟動(dòng)一個(gè)原先被中斷的任務(wù),恢復(fù)其上下文,并不保存舊任務(wù)的上下文;這種 情況發(fā)生于當(dāng)前任務(wù)已經(jīng)執(zhí)行完,操作系統(tǒng)去調(diào)度一個(gè)之前被中斷的任務(wù)運(yùn)行。
[0006] (4)啟動(dòng)一個(gè)原先被中斷的任務(wù),恢復(fù)其上下文,并保存舊任務(wù)的上下文;這是最 復(fù)雜的一種分類情形,當(dāng)前任務(wù)沒(méi)有執(zhí)行完,此時(shí)操作系統(tǒng)去調(diào)度一個(gè)之前被中斷的任務(wù) 運(yùn)行。
[0007] 針對(duì)上述四種分類情況,SmartOSEK-MicroSat分別設(shè)計(jì)了對(duì)應(yīng)的任務(wù)上下文切換 核心函數(shù);在進(jìn)行任務(wù)上下文切換時(shí)根據(jù)不同的情況可能需要對(duì)任務(wù)的上下文內(nèi)容進(jìn)行保 存或者恢復(fù),這里上下文內(nèi)容主要是指系統(tǒng)運(yùn)行所必不可少的寄存器的內(nèi)容;在設(shè)計(jì)核心 函數(shù)的時(shí)候?qū)⑸舷挛牡谋4婧突謴?fù)部分設(shè)計(jì)成可復(fù)用代碼的形式。
[0008] TMS320C6747是由德州儀器研發(fā)的一款32位浮點(diǎn)低功耗數(shù)字信號(hào)處理器,其CPU包 含兩個(gè)通用寄存器組(共64個(gè)32位通用寄存器)、一個(gè)控制寄存器組(包括AMR、CSR、IER等控 制寄存器共30個(gè))、兩組數(shù)據(jù)存儲(chǔ)通路、兩組數(shù)據(jù)存儲(chǔ)通路、8個(gè)可并行使用的功能單元。支 持40位和64位數(shù)據(jù)類型,可以一次讀寫(xiě)64位數(shù)據(jù);支持流水線操作,最多允許8條指令并行 執(zhí)行(即一個(gè)執(zhí)行包最多包含8條指令)。
【發(fā)明內(nèi)容】
[0009] 為了提高嵌入式實(shí)時(shí)操作系統(tǒng)的實(shí)時(shí)性,本發(fā)明提出了一種基于TMS320C6747的 任務(wù)上下文切換優(yōu)化方法,其采用的技術(shù)方案包括以下三部分:
[0010] (1)對(duì)TMS320C6747中的寄存器進(jìn)行篩選;
[0011] (2)利用TMS320C6747中的取指單元以取指包為單位從程序存儲(chǔ)器中調(diào)取指令,然 后將取指包中符合并行條件的指令組合成執(zhí)行包,并行執(zhí)行處于同一執(zhí)行包中的所有指 令;
[0012] (3)采用寄存器對(duì)的方式存儲(chǔ)40位或64位的數(shù)據(jù);對(duì)于訪存指令,利用LDDW(雙字 節(jié)讀取指令)和STDW(雙字節(jié)存儲(chǔ)指令)分別替換LDW(單字節(jié)讀取指令)和STW(單字節(jié)存儲(chǔ) 指令)。
[0013] 所述對(duì)TMS320C6747中的寄存器進(jìn)行篩選的策略為:對(duì)于嵌入式實(shí)時(shí)操作系統(tǒng)初 始化完成后就一直保持不變的寄存器,進(jìn)行過(guò)濾不將這些寄存器保存任務(wù)堆棧中。
[0014] 所述的取指包包含有八條指令,所述的執(zhí)行包所包含的指令數(shù)不超過(guò)八條。
[0015] 所述的執(zhí)行包由同一取指包中的若干個(gè)并行指令組成,或由分屬于不同取指包中 的若干個(gè)并行指令組成。
[0016] 同一執(zhí)行包內(nèi)的指令必須滿足以下三個(gè)條件:
[0017] 1.所有指令均為并行執(zhí)行的;
[0018] 2.指令之間不存在使用相同功能單元的情況;
[0019] 3.指令之間不存在對(duì)同一個(gè)目的地址進(jìn)行讀寫(xiě)的情況。
[0020] 所述的TMS320C6747具有兩組數(shù)據(jù)通路,每組數(shù)據(jù)通路包括兩條32位的讀取通路 和兩條32位的存儲(chǔ)通路。
[0021] 所述的TMS320C6747具有30個(gè)控制寄存器和64個(gè)通用寄存器,其中64個(gè)通用寄存 器分為兩組,每32個(gè)為一組。
[0022] 本發(fā)明優(yōu)化方法通過(guò)對(duì)寄存器進(jìn)行篩選,在進(jìn)行任務(wù)上下文切換時(shí)只保存系統(tǒng)運(yùn) 行所必不可少的寄存器,能夠避免程序出現(xiàn)堆棧溢出導(dǎo)致崩潰的問(wèn)題,同時(shí)減少上下文保 存和恢復(fù)所需要的時(shí)間,以最少的寄存器信息保證系統(tǒng)的正常運(yùn)行。同時(shí),本發(fā)明在指令譯 碼階段,使執(zhí)行包中的指令分派到不同的功能單元,將可以在同一時(shí)鐘周期執(zhí)行的指令并 行,可以在減少程序代碼的同時(shí)提高代碼的執(zhí)行效率,有效地減少任務(wù)上下文的切換時(shí)間。 [0023]此外,本發(fā)明利用TMS320C6747具有同時(shí)讀寫(xiě)64位數(shù)據(jù)的能力,對(duì)于比較耗時(shí)的訪 存指令,通過(guò)采用雙字節(jié)指令取代單字節(jié)指令,前者一次可以完成64位數(shù)據(jù)的讀寫(xiě)操作,能 夠減少訪存次數(shù),提高代碼執(zhí)行效率。
[0024]由此可見(jiàn),采用本發(fā)明方法對(duì)基于TMS320C6747硬件平臺(tái)的嵌入式實(shí)時(shí)操作系統(tǒng) 的任務(wù)上下文切換代碼進(jìn)行優(yōu)化之后,操作系統(tǒng)的任務(wù)切換時(shí)間有明顯的減少,從而提高 了操作系統(tǒng)的實(shí)時(shí)性,使其能夠滿足對(duì)實(shí)時(shí)性要求較高的場(chǎng)合。
【附圖說(shuō)明】
[0025] 圖1為本發(fā)明寄存器篩選的過(guò)程示意圖。
[0026] 圖2為本發(fā)明指令并行執(zhí)行的過(guò)程示意圖。
[0027] 圖3為本發(fā)明采用雙字指令減少訪存次數(shù)的代碼實(shí)例圖。
【具體實(shí)施方式】
[0028] 為了更為具體地描述本發(fā)明,下面結(jié)合附圖及【具體實(shí)施方式】對(duì)本發(fā)明的技術(shù)方案 進(jìn)行詳細(xì)說(shuō)明。
[0029]本發(fā)明基于TMS320C6747的任務(wù)上下文切換優(yōu)化方法,其所采用的技術(shù)方案包括 以下三部分:
[0030] (1)寄存器篩選。在進(jìn)行任務(wù)上下文切換時(shí)要將寄存器當(dāng)前的值保存到任務(wù)的任 務(wù)堆棧中,由于TMS320C6747的寄存器(64個(gè)通用寄存器和30個(gè)控制寄存器)相對(duì)比較多,如 果將所有這些寄存器都保存到任務(wù)堆棧中既容易造成任務(wù)堆棧的溢出導(dǎo)致程序崩潰,同時(shí) 也增加了任務(wù)上下文切換所需的時(shí)間。為了避免程序出現(xiàn)堆棧溢出的問(wèn)題同時(shí)降低上下文 切換所需要的時(shí)間,對(duì)需要保存的寄存器進(jìn)行篩選,以最少的寄存器信息保證系統(tǒng)的正常 運(yùn)行。寄存器篩選的過(guò)程如圖1所示,篩選的基本原則對(duì)于一些系統(tǒng)初始化完成后就保持不 變的寄存器,在上下文保存時(shí),應(yīng)該給予過(guò)濾。
[0031] (2)指令并行。TMS320C6747的取指單元可以一次容納8條指令,構(gòu)成一個(gè)取值包 (Fetch packet,F(xiàn)P),取指包中的多條指令可以形成一個(gè)執(zhí)行包(Execute Packet,EP),處 于同一個(gè)執(zhí)行包中的指令是可以并行執(zhí)行的。執(zhí)行包中的指令可以分屬于不同的取指包, 但每個(gè)執(zhí)行包所包含的指令數(shù)不能超過(guò)8個(gè),而且指令之間不可以存在使用相同功能單元 的情況,也不可以存在對(duì)同一個(gè)目的地址進(jìn)行讀寫(xiě)的情況。在指令譯碼階段,執(zhí)行包中的指 令會(huì)分派到不同的功能單元,從而可以實(shí)現(xiàn)指令的并行運(yùn)行,圖2為指令并行運(yùn)行的過(guò)程。 采用指令并行運(yùn)行,可以在減少程序代碼同時(shí)也可以提高代碼的執(zhí)行效率。
[0032] (3)減少訪存次數(shù)。TMS320C6747支持40位和64位數(shù)據(jù)類型,對(duì)于超過(guò)32位的數(shù)據(jù) 在存儲(chǔ)時(shí)需要采用寄存器對(duì)(Register Pair)的方式。此外TMS320C6747的兩個(gè)數(shù)據(jù)通路(A 和B)均有兩個(gè)32位讀取或存儲(chǔ)通路,使得CPU具有同時(shí)讀寫(xiě)64位數(shù)據(jù)的能力,對(duì)于比較耗時(shí) 的訪存指令(如Load和Store),可以用LDDW和STDW指令替換LDW和STW,前者一次可以完成64 位數(shù)據(jù)的讀寫(xiě)操作。圖3為采用LDDW/STDW替換LDW/STW的代碼實(shí)例,其中A1: A0和B3: B2為 TMS320C6747支持的寄存器對(duì)組合。
[0033]在嵌入式操實(shí)時(shí)作系統(tǒng)領(lǐng)域中,任務(wù)切換時(shí)間是衡量操作系統(tǒng)實(shí)時(shí)性的一條重要 指標(biāo)。本發(fā)明在TMS320C6747數(shù)字信號(hào)處理器和SmartOSEK-MicroSat實(shí)時(shí)操作系統(tǒng)上的實(shí) 施為例,對(duì)任務(wù)上下文切換最復(fù)雜情況下的時(shí)間性能進(jìn)行對(duì)比分析,具體實(shí)施時(shí)可以分為 以下三個(gè)步驟:
[0034] 步驟1:根據(jù)權(quán)利要求書(shū)提到的優(yōu)化方法對(duì)SmartOSEK-MicroSat嵌入式實(shí)時(shí)操作 系統(tǒng)的任務(wù)上下文切換代碼進(jìn)行優(yōu)化。在通用寄存器中B15用作堆棧指針寄存器(Stack Pointer)、A15用作當(dāng)前棧幀的棧底位置,控制寄存器中IRP作為中斷返回地址指針寄存器、 IER作為中斷使能寄存器、AMR作為尋址方式控制寄存器、CSR作為控制狀態(tài)寄存器,上述這 些寄存器都是操作系統(tǒng)正常運(yùn)行所必不可少的,所以要將其保存到任務(wù)的堆棧中,而對(duì)于 A15~A31以及B15~B31以及其他一些控制寄存器,則將其忽略,篩選過(guò)程見(jiàn)圖1。
[0035] TMS320C6747具有8個(gè)可以并行使用的功能單元,在編寫(xiě)任務(wù)上下文切換代碼的時(shí) 候可以將使用不同功能單元的指令并行處理,比如對(duì)于LDW(單字節(jié)加載指令)和MVC(數(shù)據(jù) 傳遞指令),其所用到的功能單元分別為.D和.&,對(duì)于這兩個(gè)指令就可以讓他們并行。在保 存上下文的時(shí)候,由于要將A0~A15、B0~B15保存到任務(wù)堆棧中,為了減少訪存的次數(shù)可以 采用LDDW(雙字節(jié)加載指令)替換LDW(單字節(jié)加載指令)見(jiàn)圖3。
[0036]步驟2:在對(duì)任務(wù)上下文切換的代碼進(jìn)行優(yōu)化之后,需要進(jìn)行實(shí)施方案的具體配 置。在進(jìn)行實(shí)施方案的具體配置時(shí),通過(guò)配置工具配置了兩個(gè)任務(wù)〇sTask_0和0sTask_l,其 中0sTask_0采用自啟動(dòng)方式且其優(yōu)先級(jí)低于0sTask_l,兩個(gè)任務(wù)均可被搶占。在0sTask_0 中調(diào)用ActivateTask激活0STask_l,0sTask_]^4占運(yùn)行(具有較高優(yōu)先級(jí)),0STask_l中因 調(diào)用WaitEvent而阻塞,此時(shí)系統(tǒng)重新調(diào)度OSTaskJ)運(yùn)行,此時(shí)發(fā)生的任務(wù)切換過(guò)程就是任 務(wù)上下文切換四種分類情況中最復(fù)雜的一種。
[0037]步驟3:在完成實(shí)施方案具體任務(wù)的配置之后,需要在程序添加用于測(cè)量任務(wù)切換 時(shí)間的代碼。本實(shí)施方案采用"打粧"的方式來(lái)測(cè)量任務(wù)切換時(shí)間,即在代碼的合適位置插 入代碼以改變某個(gè)GPI0引腳的狀態(tài),并通過(guò)邏輯分析儀捕捉該GPI0引腳的狀態(tài)變化從而得 到任務(wù)切換的具體時(shí)間。
[0038]本實(shí)施方案采用TMS320C6747的GPI02_11引腳作為邏輯分析儀的檢測(cè)引腳,在 0STask_0中先將該引腳置高,在0STask_l被阻塞以后會(huì)調(diào)用任務(wù)切換函數(shù) OSTaskSaveLoadRun,在該函數(shù)的開(kāi)頭將GPI02_11引腳拉低,此時(shí)會(huì)捕捉到一個(gè)下降沿,在 OsTaskJ)中再將該引腳置高,此時(shí)邏輯分析儀又會(huì)捕捉到一個(gè)上升沿,該上升沿與之前捕 捉到的下降沿的時(shí)間間隔即為該種情況下的任務(wù)切換時(shí)間,具體的測(cè)量結(jié)果如表1所示,表 1為測(cè)量8次的任務(wù)上下文切換優(yōu)化前后時(shí)間性能對(duì)比數(shù)據(jù)(單位:us)。
[0039]表 1
[0041]從表1中可以看出在使用本發(fā)明優(yōu)化方法對(duì)嵌入式實(shí)時(shí)操作系統(tǒng)任務(wù)上下文切換 的代碼進(jìn)行優(yōu)化之后,其在最復(fù)雜情況下的任務(wù)切換時(shí)間比優(yōu)化前減少了 3us以上。
[0042]上述的對(duì)實(shí)施例的描述是為便于本技術(shù)領(lǐng)域的普通技術(shù)人員能理解和應(yīng)用本發(fā) 明。熟悉本領(lǐng)域技術(shù)的人員顯然可以容易地對(duì)上述實(shí)施例做出各種修改,并把在此說(shuō)明的 一般原理應(yīng)用到其他實(shí)施例中而不必經(jīng)過(guò)創(chuàng)造性的勞動(dòng)。因此,本發(fā)明不限于上述實(shí)施例, 本領(lǐng)域技術(shù)人員根據(jù)本發(fā)明的揭示,對(duì)于本發(fā)明做出的改進(jìn)和修改都應(yīng)該在本發(fā)明的保護(hù) 范圍之內(nèi)。
【主權(quán)項(xiàng)】
1. 一種基于TMS320C6747的任務(wù)上下文切換優(yōu)化方法,包括: (1) 對(duì)TMS320C6747中的寄存器進(jìn)行篩選; (2) 利用TMS320C6747中的取指單元以取指包為單位從程序存儲(chǔ)器中調(diào)取指令,然后將 取指包中符合并行條件的指令組合成執(zhí)行包,并行執(zhí)行處于同一執(zhí)行包中的所有指令; (3) 采用寄存器對(duì)的方式存儲(chǔ)40位或64位的數(shù)據(jù);對(duì)于訪存指令,利用LDDW和STDW分別 替換LDW和STW。2. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:所述對(duì)TMS320C6747 中的寄存器進(jìn)行篩選的策略為:對(duì)于嵌入式實(shí)時(shí)操作系統(tǒng)初始化完成后就一直保持不變的 寄存器,進(jìn)行過(guò)濾不將這些寄存器保存任務(wù)堆棧中。3. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:所述的取指包包含有 八條指令,所述的執(zhí)行包所包含的指令數(shù)不超過(guò)八條。4. 根據(jù)權(quán)利要求3所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:所述的執(zhí)行包由同一 取指包中的若干個(gè)并行指令組成,或由分屬于不同取指包中的若干個(gè)并行指令組成。5. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:同一執(zhí)行包內(nèi)的指令 必須滿足以下三個(gè)條件: ① 所有指令均為并行執(zhí)行的; ② 指令之間不存在使用相同功能單元的情況; ③ 指令之間不存在對(duì)同一個(gè)目的地址進(jìn)行讀寫(xiě)的情況。6. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:所述的TMS320C6747 具有兩組數(shù)據(jù)通路,每組數(shù)據(jù)通路包括兩條32位的讀取通路和兩條32位的存儲(chǔ)通路。7. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:所述的TMS320C6747 具有30個(gè)控制寄存器和64個(gè)通用寄存器,其中64個(gè)通用寄存器分為兩組,每32個(gè)為一組。8. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:通過(guò)對(duì)寄存器進(jìn)行篩 選,在進(jìn)行任務(wù)上下文切換時(shí)只保存系統(tǒng)運(yùn)行所必不可少的寄存器,能夠避免程序出現(xiàn)堆 棧溢出導(dǎo)致崩潰的問(wèn)題,同時(shí)減少上下文保存和恢復(fù)所需要的時(shí)間,以最少的寄存器信息 保證系統(tǒng)的正常運(yùn)行。9. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:在指令譯碼階段,使 執(zhí)行包中的指令分派到不同的功能單元,將可以在同一時(shí)鐘周期執(zhí)行的指令并行,可以在 減少程序代碼的同時(shí)提高代碼的執(zhí)行效率,有效地減少任務(wù)上下文的切換時(shí)間。10. 根據(jù)權(quán)利要求1所述的任務(wù)上下文切換優(yōu)化方法,其特征在于:利用TMS320C6747具 有同時(shí)讀寫(xiě)64位數(shù)據(jù)的能力,對(duì)于比較耗時(shí)的訪存指令,通過(guò)采用雙字節(jié)指令取代單字節(jié) 指令,前者一次可以完成64位數(shù)據(jù)的讀寫(xiě)操作,能夠減少訪存次數(shù),提高代碼執(zhí)行效率。
【文檔編號(hào)】G06F9/46GK105868003SQ201610179811
【公開(kāi)日】2016年8月17日
【申請(qǐng)日】2016年3月25日
【發(fā)明人】李紅, 楊國(guó)青, 王劉龍, 金榆林, 吳朝暉
【申請(qǐng)人】浙江大學(xué)