国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于PowerPC處理器結(jié)構(gòu)的分級任務(wù)切換方法

      文檔序號:6379107閱讀:310來源:國知局
      專利名稱:基于PowerPC處理器結(jié)構(gòu)的分級任務(wù)切換方法
      技術(shù)領(lǐng)域
      基于PowerPC處理器結(jié)構(gòu)的分級任務(wù)切換方法屬于嵌入式實時操作系統(tǒng)技術(shù)領(lǐng)域,尤其涉及基于PowerPC處理器結(jié)構(gòu)的嵌入式實時操作系統(tǒng)技術(shù)領(lǐng)域。
      背景技術(shù)
      任務(wù)切換機制是多任務(wù)實時操作系統(tǒng)的核心。其中,堆棧操作是任務(wù)切換的主要操作。堆棧操作的合理性,直接關(guān)系到操作系統(tǒng)的穩(wěn)定性和運行效率。任務(wù)切換機制的主要任務(wù)是保存和恢復(fù)必要的程序運行現(xiàn)場,使得程序可以在執(zhí)行過程中被打斷而不產(chǎn)生錯誤結(jié)果。一方面,實時操作系統(tǒng)要求任務(wù)切換過程具有較高的速度;另一方面,嵌入式系統(tǒng)要求任務(wù)切換過程盡量節(jié)省資源。采用占先式調(diào)度的操作系統(tǒng),中斷處理過程和任務(wù)切換過程緊密聯(lián)系,任務(wù)切換所需的堆棧操作更為復(fù)雜。好的任務(wù)切換方法必須在保證系統(tǒng)可靠性的前提下,實現(xiàn)時間開銷和空間開銷的平衡。
      目前,現(xiàn)存的嵌入式實時操作系統(tǒng)種類繁多,各具特色。比較著名的嵌入式實時操作系統(tǒng)包括VxWorks、pSOS、QNX、WinCE、μC/OS-II和各種嵌入式實時Linux等等。為了保證通用性,上述各種嵌入式實時操作系統(tǒng)的任務(wù)切換機制均采用與處理器無關(guān)的實現(xiàn)框架,針對不同類型的處理器只進行細微的代碼改動,這種方式有利于減少代碼移植的工作量。但是,目前各種處理器在堆棧操作、尋址操作等方面的指令系統(tǒng)特征差別很大,如果針對特定的處理器結(jié)構(gòu)設(shè)計任務(wù)切換機制,將更有利于充分利用特定處理器的功能,提高在該處理器平臺上的運行效率。
      在現(xiàn)有的任務(wù)切換機制中,保存和恢復(fù)程序運行現(xiàn)場(在多任務(wù)操作系統(tǒng)中即為用戶任務(wù)上下文,Context)是一次完成的,這個過程存在一些多余的操作,也就是說,程序運行現(xiàn)場的一部分狀態(tài)實際上并沒有被改變,不需要保存。一些操作系統(tǒng)根據(jù)不同情況,保存用戶任務(wù)上下文的某一個或多個部分,以減少多余操作。但這種做法限制了后續(xù)程序的操作內(nèi)容,降低了系統(tǒng)的靈活性。
      程序運行現(xiàn)場在內(nèi)存中的保存位置有兩種不同選擇在用戶堆棧中或在系統(tǒng)堆棧中?,F(xiàn)有實時操作系統(tǒng)的任務(wù)切換機制只采用兩種堆棧中的一種。在存在中斷嵌套的系統(tǒng)中,只用用戶堆棧使得每個用戶任務(wù)都必須預(yù)留較大的堆??臻g;而只用系統(tǒng)堆棧則使得在發(fā)生任務(wù)調(diào)度時要進行額外的堆棧調(diào)整,降低了速度。

      發(fā)明內(nèi)容
      針對現(xiàn)有實時操作系統(tǒng)的任務(wù)切換機制與處理器特性結(jié)合不夠緊密、切換過程中存在多余操作、堆棧使用不夠經(jīng)濟的問題,本發(fā)明基于PowerPC結(jié)構(gòu)指令體系堆棧操作指令可以批量分配堆??臻g的特殊功能,提出了分級任務(wù)切換方法,主要包括下列內(nèi)容1、分級入棧技術(shù)將用戶任務(wù)上下文劃分為基本、擴展和可選部分。在中斷處理中,根據(jù)系統(tǒng)配置和任務(wù)調(diào)度性質(zhì)的不同,采用只有基本部分入棧、基本部分和擴展部分入棧和全部上下文入棧三種方式。中斷處理過程首先執(zhí)行第一級入棧操作,保存上下文的基本部分,執(zhí)行中斷處理程序后,判斷任務(wù)調(diào)度要求,選擇執(zhí)行下一級入棧操作并激活調(diào)度器,或者恢復(fù)現(xiàn)場返回用戶任務(wù)。
      2、用戶堆棧和系統(tǒng)堆棧間切換機制在中斷預(yù)處理中進行堆棧切換,使用戶堆棧只保留用戶任務(wù)上下文,系統(tǒng)堆棧保留中斷服務(wù)程序上下文,降低用戶堆棧的負荷。
      3、提供了系統(tǒng)配置接口,可供用戶進行系統(tǒng)級和任務(wù)級兩種級別的配置。
      4、提供了對用戶中斷服務(wù)程序的封裝。用戶可以自行編寫中斷服務(wù)程序,經(jīng)過封裝自動生成實現(xiàn)上述機制的系統(tǒng)。
      本發(fā)明的特征在于它除了實現(xiàn)由用戶任務(wù)來執(zhí)行激活新任務(wù)或申請調(diào)度的操作外,主要針對以操作系統(tǒng)代碼的形式來執(zhí)行由中斷程序激活任務(wù)而產(chǎn)生任務(wù)切換的情況;所述的操作系統(tǒng)代碼含有以下部分系統(tǒng)啟動代碼放在MPC555微控制器地址0x100處,在系統(tǒng)上電復(fù)位時自動執(zhí)行,依次含有硬件初始化、初始化堆棧、初始化就緒任務(wù)列表以及開始調(diào)度的操作。系統(tǒng)內(nèi)核操作代碼包括供系統(tǒng)啟動代碼、用戶任務(wù)代碼、或中斷處理程序調(diào)用的激活任務(wù)、終止任務(wù)和按照規(guī)定策略從就緒任務(wù)列表中選取一個用戶任務(wù)再跳轉(zhuǎn)到該任務(wù)執(zhí)行的這樣一種調(diào)度器操作;系統(tǒng)內(nèi)核操作代碼支持搶占式調(diào)度,即當用戶任務(wù)代碼或者中斷處理程序調(diào)用系統(tǒng)內(nèi)核操作激活一個高優(yōu)先級的用戶任務(wù)的時候,激活任務(wù)操作可以調(diào)用調(diào)度器選擇新激活的任務(wù),強制打斷正在運行的優(yōu)先級較低的用戶任務(wù),而轉(zhuǎn)到激活的任務(wù)去執(zhí)行。
      用戶任務(wù)代碼任務(wù)由用戶自定義。該用戶任務(wù)可以調(diào)用系統(tǒng)內(nèi)核操作,激活其他任務(wù)、申請調(diào)度或者終止自身的執(zhí)行。
      就緒任務(wù)列表記錄當前可以執(zhí)行的用戶任務(wù)信息,包括任務(wù)優(yōu)先級、用戶程序入口地址和用戶堆棧指針這三個數(shù)值。
      中斷處理程序操作代碼它依次含有中斷處理程序入口、用戶中斷服務(wù)程序和中斷處理程序結(jié)束三個部分。其中,外部中斷處理程序放在MPC555微控制器的入口地址0x500處,計數(shù)器中斷處理程序放在入口地址0x900處,該中斷處理的優(yōu)先級高于用戶任務(wù)優(yōu)先級,由用戶中斷服務(wù)程序激活了的新任務(wù),只能等中斷處理程序結(jié)束后再通過調(diào)度器來執(zhí)行。
      所述的中斷處理程序,其框架依次包含保存現(xiàn)場、堆棧切換、調(diào)用用戶服務(wù)程序、中斷恢復(fù)處理四個步驟,現(xiàn)分述如下(1)保存現(xiàn)場在批量預(yù)留堆棧空間的條件下,分級入棧式的保存被打斷任務(wù)的執(zhí)行現(xiàn)場,即MPC555中CPU的各種寄存器的值。PowerPC處理器結(jié)構(gòu)下的寄存器遵循統(tǒng)一的PowerPC-EABI(基于PowerPC結(jié)構(gòu)的嵌入式系統(tǒng)代碼接口)規(guī)范。
      首先,把用戶任務(wù)上下文即寄存器按內(nèi)容劃分為以下三個部分基本部分包括鏈接寄存器(LR)、機器狀態(tài)寄存器(MSR)、保存中斷結(jié)束后返回地址的機器狀態(tài)保存/恢復(fù)寄存器(SRR0)、保存中斷發(fā)生時MSR狀態(tài)的機器狀態(tài)保存/恢復(fù)寄存器(SRR1)、條件寄存器(CR)、整數(shù)異常寄存器(XER)、計數(shù)寄存器(CTR)及通用寄存器r0、r3~r12;在調(diào)用高級語言函數(shù)時應(yīng)當保存。
      擴展部分包括通用寄存器r14~r31,只在任務(wù)調(diào)度時需要保存。
      可選部分浮點寄存器f0~f31和浮點狀態(tài)寄存器FPSCR,只用于浮點計算情況下。
      其次,在執(zhí)行任務(wù)過程中產(chǎn)生中斷時,或者在執(zhí)行另一個中斷處理程序過程中產(chǎn)生中斷即中斷嵌套時,在根據(jù)PowerPC處理器指令體系所定義的堆棧操作指令批量預(yù)留了保存完整上下文即全部寄存器內(nèi)容的條件下,只先執(zhí)行第一級入棧操作即只先執(zhí)行保留基本部分的操作;在中斷處理程序結(jié)束后若要進行任務(wù)調(diào)度時,再進行第二級入棧操作保存擴展部分或第二級和第三級保存可選部分的入棧操作,激活調(diào)度器,否則恢復(fù)現(xiàn)場返回用戶任務(wù)。
      (2)堆棧切換使用戶堆棧只保留用戶任務(wù)上下文,系統(tǒng)堆棧保留中斷服務(wù)程序上下文,根據(jù)中斷層數(shù)或中斷處理結(jié)束后任務(wù)調(diào)度的情況使堆棧指針在用戶堆棧和系統(tǒng)堆棧之間進行堆棧切換。
      (3)調(diào)用用戶中斷服務(wù)程序中斷處理程序通過一個包括中斷索引地址和對應(yīng)的用戶中斷服務(wù)程序入口地址兩項的中斷查找表跳轉(zhuǎn)到用戶編寫的中斷服務(wù)程序;再通過系統(tǒng)定義的一個全局性的調(diào)度標志來通知中斷處理程序是否需要進行任務(wù)切換,該調(diào)度標準設(shè)在系統(tǒng)內(nèi)核操作代碼中,在第一層中斷處理程序進行堆棧切換的同時置為0,當用戶中斷服務(wù)程序要激活新任務(wù)時,把調(diào)度標志置為1,通知中斷服務(wù)程序需要進行任務(wù)切換,它根據(jù)系統(tǒng)配置情況進行第二級或第二、第三級入棧操作,把相應(yīng)寄存器的值寫入第一級入棧操作時預(yù)留的用戶堆??臻g里。
      (4)中斷恢復(fù)處理若用戶中斷服務(wù)程序完成后,判斷不需要進行任務(wù)切換,則中斷處理程序直接執(zhí)行恢復(fù)現(xiàn)場操作,返回被中斷的用戶任務(wù)。
      經(jīng)過在MPC555平臺上初步測試,用本發(fā)明所述的方法從產(chǎn)生中斷到進入用戶中斷處理程序所需時間比采用通用方法要少,提高了任務(wù)切換的效率。


      圖1.清華OSEK操作系統(tǒng)內(nèi)核部分組成2.由中斷產(chǎn)生任務(wù)切換的流程示意3.MPC555微控制器結(jié)構(gòu)4.MPC555的CPU結(jié)構(gòu)框5.MPC555寄存器分類示意6.分級任務(wù)切換方法的實現(xiàn)程序框7.第一級入棧過程示意8.第二、第三級入棧過程示意9.中斷處理程序框架流程圖具體實施方式
      本發(fā)明提出的方法是嵌入式實時操作系統(tǒng)內(nèi)核的一部分,以操作系統(tǒng)代碼的形式實現(xiàn)。下面以清華大學自主開發(fā)的清華OSEK(汽車電子開放式系統(tǒng)及其相應(yīng)接口)操作系統(tǒng)、基于MPC555微控制器的硬件平臺環(huán)境為例,說明分級任務(wù)切換方法的具體實施方式

      MPC555微控制器中,規(guī)定了多個程序入口地址。系統(tǒng)啟動代碼放在入口地址0x100處,外部中斷處理程序放在入口地址0x500處、計數(shù)器中斷處理程序放在入口地址0x900處。當系統(tǒng)上電復(fù)位時,從0x100地址處開始執(zhí)行啟動代碼。
      運行于MPC555平臺上的清華OSEK操作系統(tǒng)包括五部分啟動代碼、系統(tǒng)內(nèi)核操作、用戶任務(wù)代碼、就緒任務(wù)列表和中斷處理程序。如附圖1所示。
      啟動代碼在系統(tǒng)上電復(fù)位時自動執(zhí)行。第一步先進行硬件初始化操作,即暫時禁止硬件中斷、設(shè)置系統(tǒng)時鐘頻率以及關(guān)閉軟件看門狗。這些操作的細節(jié)見表2說明。第二步操作是將堆棧指針寄存器和數(shù)據(jù)段基地址寄存器(在后面有詳細介紹)分別設(shè)置為系統(tǒng)堆棧和數(shù)據(jù)段的地址(具體數(shù)值由用戶指定)。第三步操作是將可以開始執(zhí)行的任務(wù)添加到就緒任務(wù)列表中。最后,啟動代碼打開硬件中斷開關(guān)允許硬件中斷,再執(zhí)行系統(tǒng)內(nèi)核操作中的調(diào)度操作,開始執(zhí)行用戶任務(wù)。
      系統(tǒng)內(nèi)核操作包括激活任務(wù)、終止任務(wù)和調(diào)度器三個操作。激活任務(wù)操作將一個用戶任務(wù)添加到就緒任務(wù)列表,終止任務(wù)操作將任務(wù)從就緒任務(wù)列表中刪除。調(diào)度器是任務(wù)切換機制的核心,按照一定的策略從就緒任務(wù)列表中選取一個用戶任務(wù),跳轉(zhuǎn)到該任務(wù)開始執(zhí)行。
      用戶任務(wù)代碼是用戶編寫的一段程序,完成一定的功能,任務(wù)何時可以開始執(zhí)行、何時結(jié)束、進行什么操作均由用戶自行定義,不屬于操作系統(tǒng)設(shè)計的內(nèi)容。用戶任務(wù)可以調(diào)用系統(tǒng)內(nèi)核操作,激活其他任務(wù)、申請調(diào)度或者終止自身的執(zhí)行。
      就緒任務(wù)列表記錄當前可以執(zhí)行的用戶任務(wù)信息,包括任務(wù)優(yōu)先級、用戶程序入口地址、用戶堆棧指針。這三個數(shù)值最初均由用戶自行定義。在系統(tǒng)運行過程中,用戶代碼或者操作系統(tǒng)代碼都可以修改用戶堆棧指針的值,從而達到在堆棧中保存或者恢復(fù)數(shù)據(jù)的目的。如果一個任務(wù)放在就緒任務(wù)列表中,稱這些任務(wù)處于就緒態(tài)。
      中斷處理程序是操作系統(tǒng)中相對獨立的一部分,這部分代碼放在中斷處理程序入口地址處。中斷處理程序通常只在啟動代碼執(zhí)行完畢、進入用戶任務(wù)之后才被允許執(zhí)行,它由系統(tǒng)中的硬件事件觸發(fā),何時執(zhí)行由運行時的軟硬件狀態(tài)決定,在設(shè)計中無法預(yù)計。中斷處理程序可以調(diào)用系統(tǒng)內(nèi)核操作,激活新任務(wù),從而打亂用戶任務(wù)執(zhí)行的流程。
      清華OSEK作為符合OSEK規(guī)范的操作系統(tǒng),具有如下特征1、每個任務(wù)用一個優(yōu)先級數(shù)值表示其重要程度。調(diào)度器選擇處于就緒任務(wù)列表中的最高優(yōu)先級的任務(wù)執(zhí)行。
      2、支持搶占式調(diào)度,即一個優(yōu)先級高的用戶任務(wù)可以強制打斷一個優(yōu)先級低的用戶任務(wù)的執(zhí)行。
      3、中斷處理程序優(yōu)先級高于用戶任務(wù)優(yōu)先級。在中斷處理程序中如果激活了新任務(wù),不能立刻進行任務(wù)調(diào)度,而應(yīng)該等中斷處理程序結(jié)束后才進行。所以,搶占式調(diào)度只發(fā)生在第一層中斷程序結(jié)束處。
      在符合OSEK規(guī)范的操作系統(tǒng)中,發(fā)生任務(wù)調(diào)度有兩種可能情況。一種是用戶任務(wù)執(zhí)行了可能激活新任務(wù)的操作,另一種是用戶任務(wù)執(zhí)行被中斷,中斷處理程序激活新任務(wù)。在本發(fā)明實現(xiàn)的系統(tǒng)中,對第一種情況的處理和目前其他操作系統(tǒng)的處理基本一致,主要針對第二種情況進行改進。
      由中斷處理程序激活任務(wù)而產(chǎn)生任務(wù)切換的情況見附圖2所示。用戶中斷服務(wù)程序調(diào)用系統(tǒng)內(nèi)核操作,激活希望執(zhí)行的任務(wù),將其添加到用戶任務(wù)列表。中斷處理程序在結(jié)束的時候,調(diào)用調(diào)度器,如果新激活的任務(wù)優(yōu)先級比正在執(zhí)行的當前任務(wù)優(yōu)先級高,就將原來處于執(zhí)行狀態(tài)的當前任務(wù)切換為就緒態(tài),然后將新激活的任務(wù)作為當前運行任務(wù),跳轉(zhuǎn)到該任務(wù)的代碼,開始執(zhí)行。
      MPC555微控制器的結(jié)構(gòu)見附圖3所示。它主要包括精簡指令CPU、內(nèi)部存儲器、外部設(shè)備和總線接口。其中,和本發(fā)明相關(guān)的主要是前兩部分。內(nèi)部存儲器是操作系統(tǒng)代碼和數(shù)據(jù)的存放空間,精簡指令CPU是代碼的運行環(huán)境。精簡指令CPU的結(jié)構(gòu)如附圖4所示。它包括一系列寄存器和處理單元。本發(fā)明所涉及的硬件部分主要是CPU中的寄存器,如圖4中淺色框標出的部分。寄存器保留了程序運行過程的所有瞬時信息。MPC555的寄存器全集見附圖5,其中,用戶程序運行需要用到的寄存器如表1所示。
      表1 PowerPC結(jié)構(gòu)處理器主要寄存器列表


      按照PowerPC-EABI規(guī)范,通用寄存器r1在操作系統(tǒng)中作為系統(tǒng)堆棧的指針,又稱為堆棧寄存器(簡稱SP)。
      在PowerPC硬件體系結(jié)構(gòu)中,中斷處理程序代碼根據(jù)其類型的不同,放在內(nèi)存的不同起始地址處。當硬件產(chǎn)生中斷信號以后,CPU響應(yīng)中斷,自動切換到相應(yīng)的入口地址執(zhí)行指令。
      在清華OSEK操作系統(tǒng)中,本發(fā)明提出的方法被作為操作系統(tǒng)核心代碼的一部分實現(xiàn)并封裝起來,在系統(tǒng)生成的時候放置在MPC555處理器規(guī)定的外部中斷入口地址0x500、計數(shù)器中斷入口地址0x900處(還可以視用戶要求增加入口地址),成為中斷處理程序框架。這一框架包括保存現(xiàn)場、堆棧切換、調(diào)用用戶處理程序、中斷恢復(fù)處理四個步驟。附圖6為本發(fā)明所述方法具體實施的程序框圖。
      假設(shè)系統(tǒng)原來在運行某一任務(wù),當中斷產(chǎn)生時,如附圖6中標有“中斷響應(yīng)”的箭頭所示,CPU當前指令指針由指向任務(wù)程序改為指向中斷處理程序入口,開始執(zhí)行本發(fā)明設(shè)計的中斷處理程序框架。
      中斷處理程序框架的第一步操作是保存被打斷任務(wù)的執(zhí)行現(xiàn)場,也就是CPU的各種寄存器的值。PowerPC處理器結(jié)構(gòu)下的寄存器遵循統(tǒng)一的規(guī)范(PowerPC-EABI規(guī)范),有嚴格的用途劃分,在堆棧中的位置也有嚴格要求。
      在PowerPC處理器結(jié)構(gòu)中,LR保存函數(shù)調(diào)用時的返回地址,MSR保存程序運行過程的處理器配置狀態(tài),SRR0保存中斷結(jié)束后的返回地址,SRR1保存中斷發(fā)生時的MSR狀態(tài),CR、XER保存整數(shù)運算、邏輯運算和浮點運算指令設(shè)置的標志位,CTR用于程序循環(huán)計數(shù)。這些寄存器是程序運行過程必不可少的。因此,一段程序如果被打斷后恢復(fù)執(zhí)行,必須恢復(fù)這些寄存器原來的狀態(tài),才能使程序運行正常。
      根據(jù)PowerPC-EABI規(guī)范,通用寄存器r0~r31中,r1為堆棧指針,r2、r13為系統(tǒng)小數(shù)據(jù)段的基地址,這幾個寄存器的內(nèi)容不會被用戶任務(wù)破壞。r0、r3~r12用于函數(shù)調(diào)用時傳入和返回參數(shù),不論用戶任務(wù)或者中斷處理程序,都可能修改這些寄存器的值。所以在任務(wù)切換過程中和中斷處理中都必須保留這些寄存器的值。
      r14~r31用于保存臨時變量,如果一段程序需要用到這些寄存器,應(yīng)該先保存它的數(shù)值,在這段程序退出的時候恢復(fù)。如果用戶任務(wù)執(zhí)行過程發(fā)生中斷,中斷處理程序而不激活新任務(wù),那么中斷處理程序結(jié)束的時候會恢復(fù)這些寄存器中改動的部分,返回用戶程序的時候就像沒有修改過一樣,所以,一般的中斷處理過程中不需要保存這些寄存器。而如果中斷處理程序激活了新任務(wù),則新任務(wù)可能修改這些寄存器,并且無法預(yù)計什么時候會切換回原來的用戶任務(wù),這個時候,就必須在中斷處理程序中把這些寄存器保存下來。
      浮點寄存器用于浮點計算,只有當用戶程序進行浮點運算時才會改動。一般而言,操作系統(tǒng)核心代碼以及絕大部分中斷處理程序都不需要使用浮點寄存器。浮點狀態(tài)寄存器保存浮點運算時設(shè)置的標志,隨浮點寄存器一起被改動。
      依據(jù)以上規(guī)定,可將寄存器、也就是程序上下文劃分為三個部分1.基本部分包括寄存器LR、MSR、SRR0、SRR1、CR、XER、CTR及通用寄存器r0、r3~r12。這些寄存器在調(diào)用高級語言函數(shù)時內(nèi)容可能被破壞,需要保存。
      2.擴展部分通用寄存器r14~r31,這些寄存器只在任務(wù)調(diào)度時需要保存。
      3.可選部分浮點寄存器f0~f31和浮點狀態(tài)寄存器FPSCR,只對使用浮點計算的用戶任務(wù)有意義。
      在符合OSEK規(guī)范的操作系統(tǒng)中,如果中斷是在執(zhí)行任務(wù)時產(chǎn)生的,那么視中斷處理的結(jié)果,有可能只需要保存第1部分也有可能需要保存第1、2部分或者全部三部分,這是無法預(yù)測的。如果中斷是在執(zhí)行另一個中斷處理程序時產(chǎn)生的,則只需要保留第1部分。
      本發(fā)明采用折中辦法,即留出保留全部內(nèi)容的空間,但只先執(zhí)行保留第1部分的操作。這樣,既能兼顧各種可能的處理結(jié)果,又減少了不必要的操作,而且不違反PowerPC-EABI規(guī)范對寄存器存放位置的規(guī)定。
      為方便敘述,設(shè)保存上下文第1部分所需的內(nèi)存空間字節(jié)數(shù)為S1,保存1、2部分所需內(nèi)存空間為S2,保存全部內(nèi)容所需空間為S3。在MPC555處理器中,S1=80,S2=152,S3=416。
      PowerPC處理器指令體系所定義的堆棧操作指令與i386等處理器體系定義的逐字push/pop(即只在堆棧指針的頂部進行數(shù)據(jù)存取,指針每次只能上移或下移一個數(shù)據(jù)單元)不同,采用預(yù)留堆??臻g和偏移地址訪問(指針可以一次移動多個數(shù)據(jù)單元的位置,可以對堆棧內(nèi)部進行數(shù)據(jù)存取操作)。本發(fā)明利用這一特性,批量預(yù)留了堆??臻g。程序首先執(zhí)行stwu指令,將堆棧指針上移,留出S2或S3的空間(視系統(tǒng)配置的結(jié)果,詳敘見后),但是只將基本部分的值保存到堆棧中,占S1空間。如附圖7所示。
      由于第一級入棧操作時預(yù)留了保存完整上下文的空間,這樣,后面如果進行第二級入棧操作將不需要重新分配空間和作額外的調(diào)整,提高了處理效率。
      保存現(xiàn)場之后,中斷處理程序框架進行堆棧切換。首先,將用來記錄中斷層數(shù)的變量加一,如果是第一層中斷,則將堆棧指針由指向被打斷任務(wù)的用戶堆棧區(qū)改為指向系統(tǒng)堆棧區(qū)。這樣,當發(fā)生中斷嵌套時,中斷處理程序的程序現(xiàn)場在系統(tǒng)堆棧中保存,而用戶任務(wù)的程序現(xiàn)場是在堆棧切換前保存的,在用戶堆棧區(qū)。這樣,既降低了用戶堆棧的負荷,又便于進行任務(wù)調(diào)度。如果是嵌套中斷,由于第一層中斷處理程序已經(jīng)進行了切換,堆棧指針已經(jīng)指向系統(tǒng)堆棧區(qū),無須再進行切換。
      隨后,中斷處理程序框架通過查詢中斷查找表,跳轉(zhuǎn)到用戶編寫的中斷服務(wù)程序。中斷查找表包括中斷索引地址和對應(yīng)的用戶中斷服務(wù)程序入口地址兩項。中斷索引地址是MPC555處理器定義的一個序數(shù)表,用不同的中斷請求號表示不同的引起中斷的硬件。發(fā)生中斷的時候,MPC555的SIVEC寄存器記錄了當前應(yīng)該處理的中斷請求號。用戶在編寫中斷服務(wù)程序時只需實現(xiàn)自己所要的處理功能,并將函數(shù)入口地址填入中斷查找表相應(yīng)中斷請求號的表項中。中斷處理程序框架通過讀取SIVEC,就可以檢索中斷查找表中對應(yīng)中斷請求號的表項,轉(zhuǎn)到對應(yīng)的用戶中斷服務(wù)程序地址執(zhí)行。
      操作系統(tǒng)中定義了一個全局標志,稱為調(diào)度標志。中斷處理程序框架在第一層中斷處理程序進行堆棧切換的同時,將調(diào)度標志置為0,然后再執(zhí)行用戶編寫的中斷服務(wù)程序。用戶中斷服務(wù)程序如果想激活新任務(wù),需要調(diào)用系統(tǒng)內(nèi)核操作才能實現(xiàn),操作系統(tǒng)會在系統(tǒng)內(nèi)核操作中將調(diào)度標志置為1,以通知中斷服務(wù)程序框架需要進行任務(wù)切換。
      從用戶中斷服務(wù)程序返回本程序后,進入中斷恢復(fù)處理步驟。這一步驟包括多個判斷分支和對應(yīng)的任務(wù)切換操作。
      在中斷恢復(fù)處理步驟中,將記錄中斷層數(shù)的變量減一,判斷是否為第一層中斷。如果是不是第一層中斷,不需要進行堆棧切換,而且按照OSEK規(guī)范的要求,不能進行任務(wù)調(diào)度。于是程序執(zhí)行恢復(fù)現(xiàn)場操作將從堆棧中讀出上下文基本部分的寄存器值,逐一放到CPU對應(yīng)的寄存器中,然后執(zhí)行中斷返回指令rfi。這時,CPU的當前指令指針會指回上一層中斷處理程序,繼續(xù)執(zhí)行上一次層中斷。如果是第一層中斷,則進行堆棧切換,使堆棧指針指回用戶任務(wù)區(qū)。
      隨后,中斷處理程序框架判斷調(diào)度標志是否為1,如果是,則需要進行任務(wù)切換,應(yīng)進行第二級入棧操作,將擴展部分和可選部分的寄存器填入堆棧中已經(jīng)預(yù)留好的空間。如果系統(tǒng)配置選擇該任務(wù)使用可選部分的寄存器,則CPU中擴展部分和可選部分寄存器的值都應(yīng)寫入第一級入棧操作時預(yù)留的堆??臻g里。如果系統(tǒng)配置選擇該任務(wù)不使用可選部分,則只將擴展部分寄存器寫入。如附圖8所示。
      清華OSEK操作系統(tǒng)按照OSEK實現(xiàn)語言規(guī)范(OSEK-OIL),提供了系統(tǒng)配置接口,通過該接口用戶可以進行系統(tǒng)級和任務(wù)級兩種級別的配置,即指定所有用戶任務(wù)或者個別用戶任務(wù)使用或不使用可選部分的寄存器。
      經(jīng)過上述操作以后,用戶堆棧中保存的上下文結(jié)構(gòu)與從一個任務(wù)切換到另一個任務(wù)時的上下文結(jié)構(gòu)完全一樣,所有任務(wù)都可以通過調(diào)度器被掛起或執(zhí)行。中斷處理程序執(zhí)行最后一步操作,調(diào)用調(diào)度器,選擇應(yīng)該執(zhí)行的用戶任務(wù),從堆棧中恢復(fù)寄存器的值到CPU中,切換到該用戶任務(wù)執(zhí)行。
      如果中斷處理完成后,判斷不需要進行任務(wù)切換,則中斷處理程序直接執(zhí)行恢復(fù)現(xiàn)場操作,返回被中斷的用戶任務(wù)。
      MPC555處理器由中斷處理程序或者調(diào)度器切換到上一層中斷處理程序或者用戶任務(wù)的機制如下在用戶任務(wù)代碼或者中斷處理程序代碼被打斷時,保存現(xiàn)場的操作將該段代碼恢復(fù)執(zhí)行時的返回地址存入堆棧中,當前面所述過程中執(zhí)行恢復(fù)現(xiàn)場操作時,又將返回地址寫入SRR0寄存器,然后調(diào)度器或者中斷處理程序執(zhí)行中斷返回指令rji,CPU就將當前指令指針指向SRR0所指的地址,從而實現(xiàn)了切換到用戶任務(wù)代碼或者上一層中斷處理程序代碼的功能。
      上述整個中斷處理程序框架的詳細流程圖見附圖9。
      本發(fā)明的方法,在清華OSEK操作系統(tǒng)中進行了應(yīng)用,作為中斷處理程序的核心,在系統(tǒng)中成功嵌入了時鐘中斷、CAN總線中斷和串口中斷。經(jīng)過在MPC555平臺上初步測試,采用上述方法,從產(chǎn)生中斷到進入用戶中斷處理程序只需要13微秒;而如果采用通用的方法,需要23~33微秒。由此可見,本發(fā)明所述的方法提高了任務(wù)切換的效率。本發(fā)明實施方式中涉及的主要MPC555硬件操作如表2所示。
      本發(fā)明所述方法適用于所有PowerPC處理器結(jié)構(gòu)的微控制器。
      表2主要MPC555硬件操作列表

      權(quán)利要求
      1.基于PowerPC處理器結(jié)構(gòu)的分級任務(wù)切換方法,以操作系統(tǒng)代碼的形式實現(xiàn)任務(wù)的切換,其特征在于它除了實現(xiàn)由用戶任務(wù)來執(zhí)行激活新任務(wù)或申請調(diào)度的操作外,主要針對以操作系統(tǒng)代碼的形式來執(zhí)行由中斷程序激活任務(wù)而產(chǎn)生任務(wù)切換的情況;所述的操作系統(tǒng)代碼含有以下部分系統(tǒng)啟動代碼放在MPC555微控制器地址0x100處,在系統(tǒng)上電復(fù)位時自動執(zhí)行,依次含有硬件初始化、初始化堆棧、初始化就緒任務(wù)列表以及開始調(diào)度的操作;系統(tǒng)內(nèi)核操作代碼包括供系統(tǒng)啟動代碼、用戶任務(wù)代碼、或中斷處理程序調(diào)用的激活任務(wù)、終止任務(wù)和按照規(guī)定策略從就緒任務(wù)列表中選取一個用戶任務(wù)再跳轉(zhuǎn)到該任務(wù)執(zhí)行的這樣一種調(diào)度器操作;系統(tǒng)內(nèi)核操作代碼支持搶占式調(diào)度,即當用戶任務(wù)代碼或者中斷處理程序調(diào)用系統(tǒng)內(nèi)核操作激活一個高優(yōu)先級的用戶任務(wù)的時候,激活任務(wù)操作可以調(diào)用調(diào)度器選擇新激活的任務(wù),強制打斷正在運行的優(yōu)先級較低的用戶任務(wù),而轉(zhuǎn)到激活的任務(wù)去執(zhí)行;用戶任務(wù)代碼任務(wù)由用戶自定義;該用戶任務(wù)可以調(diào)用系統(tǒng)內(nèi)核操作,激活其他任務(wù)、申請調(diào)度或者終止自身的執(zhí)行;就緒任務(wù)列表記錄當前可以執(zhí)行的用戶任務(wù)信息,包括任務(wù)優(yōu)先級、用戶程序入口地址和用戶堆棧指針這三個數(shù)值;中斷處理程序操作代碼它依次含有中斷處理程序入口、用戶中斷服務(wù)程序和中斷處理程序結(jié)束三個部分;其中,外部中斷處理程序放在MPC555微控制器的入口地址0x500處,計數(shù)器中斷處理程序放在入口地址0x900處,該中斷處理的優(yōu)先級高于用戶任務(wù)優(yōu)先級,由用戶中斷服務(wù)程序激活了的新任務(wù),只能等中斷處理程序結(jié)束后再通過調(diào)度器來執(zhí)行;所述的中斷處理程序,其框架依次包含保存現(xiàn)場、堆棧切換、調(diào)用用戶服務(wù)程序、中斷恢復(fù)處理四個步驟,現(xiàn)分述如下(1)保存現(xiàn)場在批量預(yù)留堆??臻g的條件下,分級入棧式的保存被打斷任務(wù)的執(zhí)行現(xiàn)場,即MPC555中CPU的各種寄存器的值;PowerPC處理器結(jié)構(gòu)下的寄存器遵循統(tǒng)一的PowerPC-EABI(基于PowerPC結(jié)構(gòu)的嵌入式系統(tǒng)代碼接口)規(guī)范;首先,把用戶任務(wù)上下文即寄存器按內(nèi)容劃分為以下三個部分基本部分包括鏈接寄存器(LR)、機器狀態(tài)寄存器(MSR)、保存中斷結(jié)束后返回地址的機器狀態(tài)保存/恢復(fù)寄存器(SRR0)、保存中斷發(fā)生時MSR狀態(tài)的機器狀態(tài)保存/恢復(fù)寄存器(SRR1)、條件寄存器(CR)、整數(shù)異常寄存器(XER)、計數(shù)寄存器(CTR)及通用寄存器r0、r3~r12;在調(diào)用高級語言函數(shù)時應(yīng)當保存;擴展部分包括通用寄存器r14~r31,只在任務(wù)調(diào)度時需要保存;可選部分浮點寄存器f0~f31和浮點狀態(tài)寄存器FPSCR,只用于浮點計算情況下;其次,在執(zhí)行任務(wù)過程中產(chǎn)生中斷時,或者在執(zhí)行另一個中斷處理程序過程中產(chǎn)生中斷即中斷嵌套時,在根據(jù)PowerPC處理器指令體系所定義的堆棧操作指令批量預(yù)留了保存完整上下文即全部寄存器內(nèi)容的條件下,只先執(zhí)行第一級入棧操作即只先執(zhí)行保留基本部分的操作;在中斷處理程序結(jié)束后若要進行任務(wù)調(diào)度時,再進行第二級入棧操作保存擴展部分或第二級和第三級保存可選部分的入棧操作,激活調(diào)度器,否則恢復(fù)現(xiàn)場返回用戶任務(wù);(2)堆棧切換使用戶堆棧只保留用戶任務(wù)上下文,系統(tǒng)堆棧保留中斷服務(wù)程序上下文,根據(jù)中斷層數(shù)或中斷處理結(jié)束后任務(wù)調(diào)度的情況使堆棧指針在用戶堆棧和系統(tǒng)堆棧之間進行堆棧切換;(3)調(diào)用用戶中斷服務(wù)程序中斷處理程序通過一個包括中斷索引地址和對應(yīng)的用戶中斷服務(wù)程序入口地址兩項的中斷查找表跳轉(zhuǎn)到用戶編寫的中斷服務(wù)程序;再通過系統(tǒng)定義的一個全局性的調(diào)度標志來通知中斷處理程序是否需要進行任務(wù)切換,該調(diào)度標準設(shè)在系統(tǒng)內(nèi)核操作代碼中,在第一層中斷處理程序進行堆棧切換的同時置為0,當用戶中斷服務(wù)程序要激活新任務(wù)時,把調(diào)度標志置為1,通知中斷服務(wù)程序需要進行任務(wù)切換,它根據(jù)系統(tǒng)配置情況進行第二級或第二、第三級入棧操作,把相應(yīng)寄存器的值寫入第一級入棧操作時預(yù)留的用戶堆??臻g里;(4)中斷恢復(fù)處理若用戶中斷服務(wù)程序完成后,判斷不需要進行任務(wù)切換,則中斷處理程序直接執(zhí)行恢復(fù)現(xiàn)場操作,返回被中斷的用戶任務(wù)。
      全文摘要
      基于PowerPC處理器結(jié)構(gòu)的分級任務(wù)切換方法,屬于嵌入式實時操作系統(tǒng)領(lǐng)域,其特征在于它針對PowerPC處理器結(jié)構(gòu)的特殊性,把用戶任務(wù)上下文劃分為基本、擴展和可選三部分,在中斷處理中,根據(jù)系統(tǒng)配置和任務(wù)調(diào)度情況,采用只有基本部分入棧、基本和擴展部分入棧和全部上下文入棧三種方式;中斷處理程序首先執(zhí)行基本部分入棧,執(zhí)行中斷處理后判斷任務(wù)調(diào)度性質(zhì),選擇執(zhí)行下一級入棧操作、調(diào)用調(diào)度器,或者恢復(fù)現(xiàn)場返回用戶任務(wù)。減少了不必要的堆棧操作。作為清華大學汽車電子開放式系統(tǒng)的一部分,在MPC555平臺上實施。測試表明,它提高了任務(wù)切換的效率,加快了系統(tǒng)運行速度。
      文檔編號G06F9/48GK1490722SQ03157389
      公開日2004年4月21日 申請日期2003年9月19日 優(yōu)先權(quán)日2003年9月19日
      發(fā)明者孫曉民, 蔡云鵬 申請人:清華大學
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1