欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

任務處理裝置的制作方法

文檔序號:6570776閱讀:168來源:國知局
專利名稱:任務處理裝置的制作方法
技術領域
本發(fā)明涉及一種OS (Operating System,操作系統(tǒng))的功能,特別是涉及 一種任務調(diào)度技術。
背景技術
不僅是如個人計算機一樣的通用設備用OS,就連如移動電話一樣的專用 設備用OS中也逐漸要求高級功能。特別是能夠用一個CPU( Central Processing Unit,中央處理器)執(zhí)行多個任務的OS (以下將這種類型的OS稱作"多任務 OS")現(xiàn)已經(jīng)被配置在很多的電子裝置中。
多任務OS將CPU的處理時間分割為單位時間(時間片),并為多個任務 順序分配時間片。只有當從OS獲得時間片時,各任務才能夠使用CPU。在一 個時間片中執(zhí)行一個任務。由于時間片是非常短的時間,對于用戶而言,多個 任務看似是同時執(zhí)行的。根據(jù)這種處理方法,通過在任務A到達等待輸入的狀 態(tài)因而不需要用到CPU的處理能力時,將執(zhí)行權交給其它任務B,能夠有效 利用CPU的處理能力。這里所說的執(zhí)行權等同于使用CPU的權利。
多任務OS進行的執(zhí)行權轉(zhuǎn)移被稱作"任務切換"。任務切換是在時間片已 經(jīng)屆滿、或任務執(zhí)行規(guī)定命令時發(fā)生。當?shù)竭_任務切換的執(zhí)行時刻時,多任務 OS將執(zhí)行中的任務的上下文信息保存到TCB (Task Control Block:任務控制 塊)中。上下文信息是指任務執(zhí)行時存儲在CPU的寄存器中的數(shù)據(jù)、或與任 務執(zhí)行狀態(tài)有關的數(shù)據(jù)。TCB是指為了存儲只有任務才有的信息而在存儲器中 預留的區(qū)域。多任務OS將執(zhí)行中的任務的上下文信息保存到TCB中后,選擇 將分配給執(zhí)行權的任務,從TCB中讀出上下文信息,并將該信息加載到CPU 寄存器中。由此,各任務以時間片為單位一點點地執(zhí)行自身的處理。多任務os具有能夠高效地執(zhí)行多個任務的優(yōu)點,但是也具有產(chǎn)生與上下 文信息保存/加載相對應的開銷的缺點。通常多任務os的優(yōu)點遠遠大于與任務
切換有關的開銷。日本特開平lU72480號7>才艮 [專利文獻2]日本特開2001-75820號公報森久直,坂巻佳壽美,重松宏志,"用于嵌入式控制系統(tǒng) 的實時OS的硬件實現(xiàn)"("組込》制御夕^^厶向(少卩7Vl/夕>f厶O S co,、一 卜'々工7*化(Hardware implementation of a read-time operating system for embedded control system ),,),東京都立產(chǎn)業(yè)技術研究所研究報告,日本,2005 年8月4日(收稿),8, p.55-58。

發(fā)明內(nèi)容
本發(fā)明要解決的問題
近年來,嚴格要求在規(guī)定時間內(nèi)完成處理的實時OS (以下稱作"RTOS (Real-Time Operating System)" ) ^皮特別廣泛地應用于嵌入式系統(tǒng)(Embedded System)中。在這種時間要求嚴格的RTOS中,存在任務切換時的開銷大大影 響系統(tǒng)整體性能的情況。本發(fā)明人意識到為了進一步提高多任務處理的效率, 需要降低與任務切換有關的開銷。
本發(fā)明是鑒于上述問題而作出的,其主要目的在于提供一種用于在多任務 處理中更高效地控制任務執(zhí)行的技術。 用于解決問題的手段
本發(fā)明的一個方面涉及一種任務處理裝置。
所述任務處理裝置包括處理寄存器、將數(shù)據(jù)從存儲器加載到所述處理寄存 器中并按照該處理寄存器中的所述數(shù)據(jù)執(zhí)行任務的執(zhí)行控制電路、分別與多個 任務對應的多個保存寄存器、以及任務控制電路;
當執(zhí)行規(guī)定的系統(tǒng)調(diào)用命令時,執(zhí)行控制電路將通知所述任務控制電路;當收到系統(tǒng)調(diào)用命令執(zhí)行通知時,任務控制電路將所述處理寄存器中的所 述數(shù)據(jù)保存到與執(zhí)行中的任務相對應的保存寄存器中,接著選擇下一個應被執(zhí) 行的任務,并將與所選擇任務相對應的保存寄存器中的數(shù)據(jù)加載到所述處理寄 存器中,從而切換執(zhí)行對象的任務。
加載到所述處理寄存器中的數(shù)據(jù)可以包括命令(instruction)和操作數(shù)、 不具有操作數(shù)的命令、或者諸如程序計數(shù)器或堆棧指針的簡單數(shù)據(jù)。根據(jù)這種 處理方法,通過在對應每個任務的保存寄存器和執(zhí)行用處理寄存器之間適當調(diào) 換上下文信息,能夠?qū)崿F(xiàn)上下文信息的保存及加載。由于這樣實質(zhì)上不需要為 了處理寄存器中數(shù)據(jù)的保存/加載而訪問TCB,因此實現(xiàn)了高速的任務切換。
此外,以上結構要素的任意組合、以及通過方法、系統(tǒng)、記錄介質(zhì)、計算 機程序來表現(xiàn)本發(fā)明的實現(xiàn)方式,也可以作為本發(fā)明的有效方式。
本發(fā)明的有益效果
根據(jù)本發(fā)明,能夠在多任務處理中更高效地控制任務執(zhí)行。


圖1為任務的狀態(tài)轉(zhuǎn)換圖2為普通RTOS的概念圖3為執(zhí)行軟件RTOS的普通CPU的電路圖4為一個實施例中的RTOS的概念圖5為本實施例中的任務處理裝置的電路圖6為圖5所示CPU的電路圖7為表示執(zhí)行控制電路152使CPU時鐘停止的構造的電路圖8 (a)為表示中斷請求信號發(fā)生時各種信號之間關系的時序圖8 (b)為表示執(zhí)行系統(tǒng)調(diào)用時各種信號之間關系的時序圖9為用于說明流水線(pipeline)處理中CPU時鐘停止時刻的示意圖10為表示狀態(tài)存儲單元和任務切換電路之間關系的電路圖11為表示普通RTOS進行RUN-任務選擇時所采用的任務就緒表的圖; 圖12為執(zhí)行選擇電路的電路圖13為表示普通RTOS進行信號量(Semaphore )處理時所釆用的等待信 號量表(wait semaphore list)的圖; 圖14為信號量選擇電路的電路圖; 圖15為任務切換電路的狀態(tài)轉(zhuǎn)換圖16為圖5所示的任務處理裝置中未配置任務控制電路時的任務處理裝 置的電路圖17為圖5所示的任務處理裝置中未配置保存電路時的任務處理裝置的 電路圖。
具體實施例方式
本發(fā)明實施例所示的任務處理裝置100由電子電路來實現(xiàn)多任務OS的任 務調(diào)度功能。在詳細說明任務處理裝置100之前,首先參照圖l說明任務的狀 態(tài)轉(zhuǎn)換。這里雖然是對普通多任務OS中的任務狀態(tài)轉(zhuǎn)換進行說明,但是這些 說明對于任務處理裝置100中的任務狀態(tài)轉(zhuǎn)換同樣適用。另外,還對在任務處 理裝置100中執(zhí)行的系統(tǒng)調(diào)用進行概述。在參照圖2和圖3描述普通多任務 OS的設計思想的基礎上,參照圖4至圖IO詳細描述本實施例中的任務處理裝 置100的處理方法。并且,對于與信號量或互斥(Mutex)、事件等有關的處理, 也適當通過與一般技術進行比較來說明任務處理裝置100的特征。
任務的狀態(tài)轉(zhuǎn)換
圖1是任務的狀態(tài)轉(zhuǎn)換圖。在多任務處理中,各任務都具有"狀態(tài)(State)"。 各任務在多個狀態(tài)之間轉(zhuǎn)換,通常是處于某一個狀態(tài)。狀態(tài)轉(zhuǎn)換由"系統(tǒng)調(diào)用 的執(zhí)行"和"檢測出中斷請求信號"來觸發(fā)。系統(tǒng)調(diào)用是各任務執(zhí)行的命令中 的特殊命令。中斷請求信號是在按下鍵盤或點擊鼠標、接收通信數(shù)據(jù)等從外圍 設備接收規(guī)定數(shù)據(jù)時發(fā)生的信號。當然,當分配給各任務的時間片耗盡時也發(fā)生狀態(tài)轉(zhuǎn)換。
任務大致分為"常規(guī)任務"和"特殊任務"。常規(guī)任務是響應系統(tǒng)調(diào)用而 執(zhí)行的非特殊任務。特殊任務是響應檢測出中斷請求信號而執(zhí)行的任務,即所 謂的中斷處理程序。首先描述各個任務狀態(tài),然后說明各種系統(tǒng)調(diào)用命令。
(1) STOP狀態(tài)(休眠狀態(tài))
表示任務處于休眠狀態(tài)。常規(guī)任務和特殊任務都能夠處于STOP狀態(tài)。以 下將處于STOP狀態(tài)的任務稱作"STOP-任務"。 1-1.常規(guī)任務
當其它任務^L行指示啟動另一項任務的系統(tǒng)調(diào)用(以下稱作"啟動系統(tǒng)調(diào) 用")時,處于STOP狀態(tài)的常規(guī)任務轉(zhuǎn)換到后述的READY狀態(tài)。
1- 2.特殊任務
特殊任務通常處于STOP狀態(tài)。當通過后述的任務切換電路210檢測出中 斷請求信號時,特殊任務從STOP狀態(tài)轉(zhuǎn)換到后述的RUN狀態(tài)。此時原來處 于RUN狀態(tài)的任務轉(zhuǎn)換到READY狀態(tài)。
(2) RUN狀態(tài)(執(zhí)行狀態(tài))
表示任務正在執(zhí)行中,即任務被分配了時間片,獲得了 CPU的使用權的 狀態(tài)。常規(guī)任務和特殊任務都能夠處于RUN狀態(tài)。以下將處于RUN狀態(tài)的任 務稱作"RUN-任務"。多個任務中處于RUN狀態(tài)的任務始終只能有一個,而 不能有兩個任務同時處于RUN狀態(tài)。
2- 1.常規(guī)任務
當執(zhí)行規(guī)定的系統(tǒng)調(diào)用時,處于RUN狀態(tài)的常規(guī)任務從RUN狀態(tài)轉(zhuǎn)換到 READY狀態(tài)或者后述的WAIT狀態(tài)。處于RUN狀態(tài)的常規(guī)任務在耗盡時間片 時,也轉(zhuǎn)換到READY狀態(tài)。在任意一種情況下,原來處于READY狀態(tài)的常 規(guī)任務轉(zhuǎn)換到RUN狀態(tài),來替代原來處于RUN狀態(tài)的常規(guī)任務。當檢測出中 斷請求信號時,RUN-任務轉(zhuǎn)換到READY狀態(tài)。此時,原先處于STOP狀態(tài) 的特殊任務轉(zhuǎn)換到RUN狀態(tài)。當RUN-任務執(zhí)行使自身結束的系統(tǒng)調(diào)用(以下稱作"結束系統(tǒng)調(diào)用")時, 該RUN-任務轉(zhuǎn)換到STOP狀態(tài)。 2-2.特殊任務
當根據(jù)中斷請求信號從STOP狀態(tài)轉(zhuǎn)換到RUN狀態(tài)的特殊任務完成自身 處理時,返回到STOP狀態(tài)。特殊任務只能夠處于STOP狀態(tài)和RUN狀態(tài)。
(3 ) READY狀態(tài)(可執(zhí)行狀態(tài))
表示任務處于可被執(zhí)行的狀態(tài)。如果處于READY狀態(tài)的任務從OS得到 執(zhí)行權,則隨時都能夠轉(zhuǎn)換到RUN狀態(tài)。只有常規(guī)任務可以處于READY狀 態(tài)。以下將處于READY狀態(tài)的任務稱作"READY-任務"。
當原先處于RUN狀態(tài)的常規(guī)任務由于系統(tǒng)調(diào)用的執(zhí)行而轉(zhuǎn)換到RUN狀態(tài) 以外的狀態(tài)時,或者當處于RUN狀態(tài)的特殊任務完成自身處理而轉(zhuǎn)換到STOP 狀態(tài)時,READY-任務進而轉(zhuǎn)換到RUN狀態(tài)。常規(guī)任務只能從READY狀態(tài)來 轉(zhuǎn)換到RUN狀態(tài)。當有多個處于READY狀態(tài)的任務時,根據(jù)作為上下文信 息的一部分的任務優(yōu)先級,使某一個READY-任務轉(zhuǎn)換到RUN狀態(tài)。當有多 個任務優(yōu)先 目同的READY-任務時,最先轉(zhuǎn)換到READY狀態(tài)的任務轉(zhuǎn)換到 RUN狀態(tài)。
(4) WAIT狀態(tài)(待機狀態(tài))
表示等待規(guī)定的WAIT解除條件滿足的狀態(tài)。當WAIT解除條件滿足時, 處于WAIT狀態(tài)的任務轉(zhuǎn)換到READY狀態(tài)。只有常規(guī)任務能夠處于WAIT狀 態(tài)。以下將處于WAIT狀態(tài)的任務稱作"WAIT-任務"。關于WAIT解除條件將 在后面詳述。
綜上所述,只有當任務處于RUN狀態(tài)時,才能夠使用CPU來執(zhí)行其處理。 RTOS—邊管理多個任務的狀態(tài)一邊適當切換RUN-任務。由此,實現(xiàn)CPU總 是執(zhí)行某個任務的處理方式。
系統(tǒng)調(diào)用
下面附帶說明一下系統(tǒng)調(diào)用。系統(tǒng)調(diào)用大致分為"啟動系列"、"WAIT系列"和"SET系列"三種。
(1) 啟動系列系統(tǒng)調(diào)用
啟動系列系統(tǒng)調(diào)用是與在STOP狀態(tài)和READY狀態(tài)之間進行的轉(zhuǎn)換相關 聯(lián)的系統(tǒng)調(diào)用。
1-1.啟動系統(tǒng)調(diào)用
啟動系統(tǒng)調(diào)用是作為RUN-任務的任務A使另 一項常規(guī)任務B啟動的系統(tǒng) 調(diào)用。此時,處于STOP狀態(tài)的常規(guī)任務B轉(zhuǎn)換到READY狀態(tài)。
1- 2.結束系統(tǒng)調(diào)用
執(zhí)行該系統(tǒng)調(diào)用的任務結束自身處理,并從RUN狀態(tài)轉(zhuǎn)換到STOP狀態(tài)。 結束系統(tǒng)調(diào)用也可以是某項任務使另一項任務結束的命令。
(2) WAIT系列系統(tǒng)調(diào)用
WAIT系列系統(tǒng)調(diào)用是與在RUN狀態(tài)和WAIT狀態(tài)之間進行的轉(zhuǎn)換相關 聯(lián)的系統(tǒng)調(diào)用。
2- 1.等待信號量系統(tǒng)調(diào)用
等待信號量系統(tǒng)調(diào)用是請求獲得信號量(后述)的系統(tǒng)調(diào)用。 2-2.等待互斥系統(tǒng)調(diào)用
等待互斥系統(tǒng)調(diào)用是請求獲得互斥(后述)的系統(tǒng)調(diào)用。 2-3.等待事件系統(tǒng)調(diào)用
等待事件系統(tǒng)調(diào)用是等待建立事件(后述)的系統(tǒng)調(diào)用。為了執(zhí)行,等待 事件系統(tǒng)調(diào)用接收事件ID、等待標記模式(后述)和標記條件(后述)作為參 數(shù)。
在任何一種情況下,WAIT系列系統(tǒng)調(diào)用都設定各種WAIT解除條件。如 果在執(zhí)行WAIT系列系統(tǒng)調(diào)用時已經(jīng)滿足WAIT解除條件,已執(zhí)行所述系統(tǒng)調(diào) 用的RUN-任務轉(zhuǎn)換到READY狀態(tài)。同時,當不滿足WAIT解除條件時,RUN-任務轉(zhuǎn)換到等待滿足WAIT解除條件的WAIT狀態(tài)。
(3) SET系列系統(tǒng)調(diào)用聯(lián)的系統(tǒng)調(diào)用。SET系列系統(tǒng)調(diào)用的執(zhí)行觸發(fā)WAIT解除條件的建立。 3-1.釋放(release)信號量系統(tǒng)調(diào)用 其是釋放信號量的系統(tǒng)調(diào)用。 3-2.釋》文互斥系統(tǒng)調(diào)用 其是釋放互斥的系統(tǒng)調(diào)用。 3-3.設定事件(SetEvent)系統(tǒng)調(diào)用 其是建立事件的當前標記模式(后述)的系統(tǒng)調(diào)用。 3-4.清除標記系統(tǒng)調(diào)用 其是用于將當前標記才莫式清零的系統(tǒng)調(diào)用。
在對本實施例進^^兌明時,布i設采用了以上9種系統(tǒng)調(diào)用。除此之外,當 然還能夠?qū)崿F(xiàn)其他的各種系統(tǒng)調(diào)用。 普通RTOS的設計思想 圖2是普通RTOS的概念圖。
圖示的RTOS是多任務OS。普通RTOS是以軟件實現(xiàn)的。下面以從任務 A向任務B切換RUN-任務的情況為例進行說明。由于任務A占用著CPU,因 此RTOS向CPU申請中斷,以從任務A取得CPU的使用權。在此基礎上,RTOS 將任務A的上下文信息保存到TCB中。RTOS選擇任務B作為下一個RUN-任務,并將上下文信息從任務B的TCB加載到CPU的寄存器中。當加載完成 時,RTOS將CPU的使用權移交給任務B。由此,通過暫時獲取CPU的使用 權,RTOS執(zhí)行從任務A向任務B的任務切換。對于特殊任務的執(zhí)行也是相同 的,這種情況下,也是通過將RUN-任務的上下文信息保存到TCB中后,將 CPU的使用權移交給特殊任務來實現(xiàn)任務切換。
因為RTOS是以軟件實現(xiàn)的,因此為了執(zhí)行自身處理,RTOS需要CPU的 使用權。換句話說,RTOS和任務在CPU的使用權上是竟爭關系。以下將這樣 通過軟件實現(xiàn)的RTOS稱作"軟件RTOS"。圖3是執(zhí)行軟件RTOS的普通CPU的電路圖。
CPU84包括執(zhí)行控制電路90,用于總體地控制存儲器訪問、命令執(zhí)行 等;處理寄存器組92,用于存儲如任務的上下文信息等的各種數(shù)據(jù);以及運算 電路94,用于執(zhí)行運算。處理寄存器組92是多種寄存器的組合,大致分為特 殊寄存器88和通用寄存器86。特殊寄存器88是存儲程序計數(shù)器、堆棧指針以 及標記等的寄存器。通用寄存器86是存儲作業(yè)用數(shù)據(jù)的寄存器,包括R0 R15 共16個寄存器。特殊寄存器88存在用戶用和系統(tǒng)用兩面,但是通用寄存器86 只有一面。以下將存儲在處理寄存器組92中的數(shù)據(jù)稱作"處理數(shù)據(jù)"。
執(zhí)行控制電路90利用指示輸出選擇器98的控制信號(CTRL),將處理寄 存器組92中所期望的寄存器的處理數(shù)據(jù)輸出到運算電路94中。運算電路94 按照該處理數(shù)據(jù),即命令和變量,來執(zhí)行運算。運算結果向輸入選擇器96輸 出。執(zhí)行控制電路90利用指示輸入選擇器96的控制信號(CTRL),向處理寄 存器組92中所期望的寄存器輸入運算結果。
另外,執(zhí)行控制電路90通過CPU數(shù)據(jù)總線從存儲器中讀出數(shù)據(jù),并通過 輸入選擇器96將該數(shù)據(jù)適時加載到處理寄存器組92中。執(zhí)行控制電路90同 樣通過該CPU數(shù)據(jù)總線將處理數(shù)據(jù)適時記錄到存儲器中。執(zhí)行控制電路90 — 邊更新特殊寄存器88中的程序計數(shù)器, 一邊執(zhí)行任務。
當發(fā)生任務切換時,執(zhí)行控制電路90將處理數(shù)據(jù)保存到存儲器中預留的 區(qū)域即TCB中。如果任務A執(zhí)行系統(tǒng)調(diào)用,則認為發(fā)生了從任務A到任務B 的任務切換。系統(tǒng)調(diào)用的執(zhí)行觸發(fā)RTOS獲取CPU的使用權,因此CPU84將 暫時按照RTOS的程序來運行,其處理過程如下
<任務A的上下文信息的保存>
1. 執(zhí)行控制電路90將特殊寄存器88從用戶用切換到系統(tǒng)用。向系統(tǒng)用 特殊寄存器88中加載RTOS處理用的處理數(shù)據(jù)。
2. 執(zhí)行控制電路90將通用寄存器86中的數(shù)據(jù)保存到未示出的堆棧中。
3. 執(zhí)行控制電路90將用于RTOS的處理數(shù)據(jù)從未示出的記錄介質(zhì)中,例如其它寄存器中,加載到通用寄存器86中。在該階段,處理寄存器組92中的 處理數(shù)據(jù)被完全替換為RTOS用的處理數(shù)據(jù)。
4. RTOS從存儲器中識別出任務A的TCB,并將保存在堆棧中的處理數(shù) 據(jù)寫入該TCB中。另外,用戶用特殊寄存器88中的處理數(shù)據(jù)也作為上下文信 息的一部分寫入該TCB中。由此,任務A的處理數(shù)據(jù)^皮保存到該TCB中。RTOS 將任務A已從"RUN"狀態(tài)轉(zhuǎn)換到"READY (或者WAIT)"狀態(tài)的情況記錄 在任務A的TCB中。
〈任務B的上下文信息的加載>
1. RTOS從存儲器中識別出任務B的TCB,并將該TCB中的上下文信息 寫入堆棧和用戶用特殊寄存器88中。RTOS將任務B已從"READY"狀態(tài)轉(zhuǎn) 換到"RUN"狀態(tài)的情況記錄在任務B的TCB中。
2. RTOS將RTOS處理用數(shù)據(jù)從通用寄存器86保存到未示出的記錄介質(zhì)中。
3. 執(zhí)行控制電路90將堆棧中的上下文信息加載到通用寄存器86中。執(zhí) 行控制電路90將特殊寄存器88從系統(tǒng)用切換到用戶用。由此,任務B的處理 數(shù)據(jù)被加載到處理寄存器組92中。
經(jīng)過如上所述的處理過程,實現(xiàn)了任務切換。通常通用寄存器86是一面
果通用寄存器86也是兩面,則將無需通過堆棧來保存/加載數(shù)據(jù),因此能夠?qū)?現(xiàn)更高速的任務切換。
在本實施例中,還通過為每個任務設置保存寄存器110,來實現(xiàn)更高速的 任務切換。使用保存寄存器110的任務切換,將參照圖5進行詳述。在參照圖 3說明的CPU 84和普通軟件RTOS中,在進行任務切換時頻繁地訪問TCB。 在上述例子中,是以從任務A向任務B進行任務切換為例進行的說明,但是 實際上,RTOS為了選擇下面應執(zhí)行的任務B也需要執(zhí)行很多命令。此時,RTOS 將頻繁地訪問存儲器。通過采用后述的專門用于任務選擇的任務控制電路200本實施例中的任務處理裝置100實現(xiàn)了更高速的任務切換。 根據(jù)任務處理裝置100的RTOS硬件實現(xiàn) 圖4是本實施例中的RTOS的概念圖。
與普通軟件RTOS不同,本實施例中的RTOS主要是以與CPU分離的硬 件來實現(xiàn)的。以下將由硬件實現(xiàn)的RTOS稱作"硬件RTOS"。由于本實施例的 RTOS主要是與CPU分離的硬件,因此為了執(zhí)行自身處理,則實質(zhì)上基本不需 要CPU的使用權。換句話說,RTOS和任務在CPU的使用權上基本不是竟爭 關系。在圖2所示的普通軟件RTOS中,CPU既是任務執(zhí)行用電路,還是RTOS 執(zhí)行用電路。相反地,在本實施例的硬件RTOS中,CPU明確為任務執(zhí)行電路。 任務調(diào)度功能主要由后述的保存電路120和任務控制電路200來實現(xiàn)。
圖5是本實施例中的任務處理裝置100的電路圖。
除了 CPU 150之外,任務處理裝置100還包括保存電路120和任務控制電 路200。 CPU 150是任務的執(zhí)行主體。保存電路120和任務控制電路200 M 到圖4所示的RTOS的作用的電路。任務調(diào)度處理是由任務控制電路200來主 導的。
CPU 150包括執(zhí)行控制電路152、處理寄存器組154以及運算電路160。 CPU 150可以是參照圖3說明的普通CPU。但是,本實施例中的CPU 150的 信號線連接方式與圖3所示的CPU 84的信號線連接方式不同。對于具體的電 路結構,將參照下面的圖6進行詳述。
任務控制電路200包括任務切換電路210、信號量表212、事件表214、任 務選擇電路230以及狀態(tài)存儲單元220。對于信號量表212和事件表214,將 參照圖13及其后圖進行詳述。狀態(tài)存儲單元220是與每個任務相對應的單元。 以下將與任務A對應的狀態(tài)存儲單元220表示為"狀態(tài)存儲單元220_八"。各 狀態(tài)存儲單元220存儲對應任務的狀態(tài)數(shù)據(jù)。狀態(tài)數(shù)據(jù)是指上下文信息中的特 別是任務優(yōu)先級或任務狀態(tài)等表示任務屬性的信息。對于具體的數(shù)據(jù)內(nèi)容,將 在后面參照圖10進行說明。全部任務的全部狀態(tài)數(shù)據(jù)從各狀態(tài)存儲單元220路230中。任務選擇電路230是根據(jù)各任務的狀態(tài) 數(shù)據(jù)進行如RUN-任務選擇等的各種任務選擇的電路。對于任務選擇電路230, 將參照圖IO及其后圖進行詳述。當檢測出從執(zhí)行控制電路152接收的系統(tǒng)調(diào) 用信號(SC)或來自外部設備的中斷請求信號(INTR)時,任務切換電路210 執(zhí)行任務切換。
執(zhí)行控制電路152在執(zhí)行系統(tǒng)調(diào)用時,將系統(tǒng)調(diào)用信號(SC)發(fā)送到任務 切換電路210。另外,當任務切換電路210檢測出中斷請求信號(INTR)時, 任務切換電路210向執(zhí)行控制電路152申請停止請求信號(HR )。當CPU 150 的操作停止時,執(zhí)行控制電路152向任務切換電路210申請停止完成信號 (HC )。通過這三種信號,CPU 150和任務控制電路200將能夠進行配合操作。 保存電路120包括加載選擇電路112以及多個保存寄存器110。保存寄存 器IIO也是與每個任務相對應的單元,是用于保存處理寄存器組154中的處理 數(shù)據(jù)的寄存器組。因而,保存寄存器110具有與處理寄存器組154相等以上的 數(shù)據(jù)容量。以下將與任務A對應的保存寄存器IIO表示為"保存寄存器IIO一A"。 加載選擇電路112接受任務切換電路210的指示,將某個保存寄存器110中的 數(shù)據(jù)(以下將保存寄存器110所存儲的數(shù)據(jù)稱作"保存數(shù)據(jù)")加載到處理寄 存器組154中。
各保存寄存器110不斷地將各自的保存數(shù)據(jù)輸出到加載選擇電路112中。 當任務切換電路210向加載選擇電路112輸入用于指定任務ID的任務選擇信 號(TS)時,加載選擇電路112將與所指定任務對應的保存寄存器110中的保 存數(shù)據(jù)輸出到處理寄存器組154中。并且,當任務切換電路210向處理寄存器 組154輸入寫入信號(WT)時,該保存數(shù)據(jù)實際上被加載到處理寄存器組154 中。
另一方面,處理寄存器組154中的全部處理數(shù)據(jù)也不斷地;故輸出到全部的 保存寄存器110中。當任務切換電路210確認向期望的保存寄存器110發(fā)送了 寫入信號(WT)時,處理數(shù)據(jù)被保存到該保存寄存器110中。這里,連接處理寄存器組154和各保存寄存器110的總線能夠一次傳輸?shù)奈粩?shù)設定為能夠并 行傳輸處理數(shù)據(jù)。因此,任務切換電路210通過向保存寄存器110僅發(fā)送一次 寫入信號,就能夠?qū)⑻幚頂?shù)據(jù)一次寫入保存寄存器110中。另外,連接保存寄 存器IIO和加載選擇電路112的總線以及連接加載選擇電路112和CPU 150的 總線的位數(shù)也同樣地設定。
下面分別對系統(tǒng)調(diào)用和中斷請求信號引起的任務切換的執(zhí)行方法進行描
述。[l]系統(tǒng)調(diào)用的執(zhí)行
當CPU 150的執(zhí)行控制電路152執(zhí)行系統(tǒng)調(diào)用時,執(zhí)行控制電路152使 CPU 150的時鐘(以下稱作"CPU時鐘(CLK)")停止。對于具體的停止方法, 將參照圖7等在后面詳述。執(zhí)行控制電路152將表示系統(tǒng)調(diào)用的執(zhí)行的系統(tǒng)調(diào) 用信號(SC)發(fā)送給任務控制電路200的任務切換電^各210。另外,當CLK 的停止完成時,執(zhí)行控制電路152向任務切換電路210申請停止完成信號 (HC)。
在CPU 150和任務切換電路210之間,為了系統(tǒng)調(diào)用信號的傳輸而連接有 9根信號線。這9根信號線與前述9種系統(tǒng)調(diào)用相對應。執(zhí)行控制電路152根 據(jù)所執(zhí)行的系統(tǒng)調(diào)用種類,用對應的某根系統(tǒng)信號線傳輸數(shù)字脈沖。任務切換 電路210通過判斷是從9根系統(tǒng)信號線中的哪根信號線中檢測出數(shù)字脈沖,來 立即檢測出所執(zhí)行的系統(tǒng)調(diào)用種類。任務切換電路210根據(jù)系統(tǒng)調(diào)用種類,從 任務選擇電路230輸出的數(shù)據(jù)中選擇所需數(shù)據(jù),執(zhí)行由系統(tǒng)調(diào)用所指定的處理。 該處理是以申請HC為條件來執(zhí)行的。對于任務切換電路210和任務選擇電路 230之間的關系,將參照圖IO進行詳述。此外,該系統(tǒng)調(diào)用的參數(shù)和返回值寫 入處理寄存器組154中規(guī)定的通用寄存器158中。任務切換電路210能夠?qū)ν?用寄存器158執(zhí)行參數(shù)的讀出和返回值的寫入。這里,假設作為RUN-任務的 任務A執(zhí)行等待信號量系統(tǒng)調(diào)用。因而,首先需要將任務A的處理數(shù)據(jù)保存。
<任務A的上下文信息的保存>
16執(zhí)行控制電路152將表示等待信號量系統(tǒng)調(diào)用的SC信號輸入到任務切換 電路210中。執(zhí)行控制電路152使CLK停止,當停止完成時申請HC。任務切 換電路210在向內(nèi)置于任務選擇電路230的各種選擇電路中后述的信號量選擇 電路234輸出成為待機對象的信號量的信號量ID后,選擇下一個應執(zhí)行的任 務B。任務切換電路210向狀態(tài)存儲單元220_八寫入規(guī)定數(shù)據(jù)。例如,作為任 務A的狀態(tài),從"RUN"更新為"READY"或"WAIT"。更具體地說,任務 切換電路210在將表示任務狀態(tài)"WAIT"的狀態(tài)數(shù)據(jù)輸出到全部狀態(tài)存儲單 元220的基礎上,只向狀態(tài)存儲單元220—A輸入寫入信號(WT—A )。由此, 任務A的狀態(tài)被更新。
接著,任務切換電路210向保存寄存器110一A輸出寫入信號(WT)。由 于處理寄存器組154中的處理數(shù)據(jù)不斷地被輸出到各保存寄存器110中,因此 該寫入信號(WT )使得任務A的處理數(shù)據(jù)被保存到任務A的保存寄存器110_A 中。
<任務B的上下文信息的加載>
當任務A的狀態(tài)數(shù)據(jù)更新、處理數(shù)據(jù)保存完成時,任務切換電路210將指 定任務B的任務選擇信號(TS_B)輸出到加載選擇電路112中。由此,保存 寄存器110_B中的保存數(shù)據(jù)輸出到處理寄存器組154中。當任務切換電路210 向處理寄存器組154輸出寫入信號(WT)時,任務B的保存數(shù)據(jù)被加載到處 理寄存器組154中。另外,任務切換電路210還向任務B的狀態(tài)存儲單元220 中寫入規(guī)定數(shù)據(jù)。例如,任務B的狀態(tài)從"READY"更新為"RUN"。當以上 處理完成時,執(zhí)行控制電路152使CPU時鐘恢復。CPU 150根據(jù)所恢復的CPU 時鐘來開始執(zhí)行任務B。關于該處理方法的更具體細節(jié),將在后面參照圖8(b) 進行描述。
P]中斷請求信號的產(chǎn)生
任務切換電路210檢測來自外圍設備的中斷請求信號(INTR)。更具體地 說,中斷請求信號(INTR)從未示出的中斷控制器發(fā)送到任務切換電路210。表示中斷請求信號(INTR)等級的參數(shù)被記錄在內(nèi)置于該中斷控制器的寄存 器中。任務切換電路210向執(zhí)行控制電路152申請停止請求信號(HR)后, 執(zhí)行控制電路152使CPU時鐘停止。與系統(tǒng)調(diào)用執(zhí)行時相同,任務切換電路 210將RUN-任務的處理數(shù)據(jù)保存到保存寄存器110中。接著,任務切換電路 210啟動特殊任務。與中斷請求信號的參數(shù)無關而啟動的特殊任務只有1種。 該特殊任務從中斷控制器的內(nèi)置寄存器中讀出INTR的參數(shù),并執(zhí)行與該參數(shù) 相應的處理。該特殊任務所執(zhí)行的處理,可以是設定事件系統(tǒng)調(diào)用或設定信號 量系統(tǒng)調(diào)用的執(zhí)行,可以是常規(guī)任務的啟動。根據(jù)該參數(shù),該特殊任務可以不 執(zhí)行任何特別處理就結束。根據(jù)INTR的參數(shù)執(zhí)行何種處理,是由特殊任務的 實現(xiàn)方式來決定的。當該特殊任務的執(zhí)行結束時,從READY-任務中選擇出下 一個RUN-任務。
任務切換電路210將與該特殊任務對應的保存寄存器110中的處理數(shù)據(jù)加 載到CPU150中。這種從常規(guī)任務切換到特殊任務所需的時間,能夠根據(jù)任務 控制電路200的工作時鐘來預先估計。當向執(zhí)行控制電路152申請HR后,任 務切換電路210的工作時鐘經(jīng)過規(guī)定的時間時,任務切換電路210為了解除 CPU時鐘的停止而取消(negate) HR。當HR被取消時,執(zhí)行控制電路152使 CPU時鐘恢復。此時,任務切換電路210完成了從常規(guī)任務到特殊任務的任務 切換。關于該處理方法的具體細節(jié),將在后面參照圖8 (a)進行描述。
在任何情況下,任務切換的核心處理,即(A)處理數(shù)據(jù)的保存/加載,以 及(B)任務狀態(tài)轉(zhuǎn)換和RUN-任務的選擇,都是通過硬件來實現(xiàn)的。在(A) 和(B)中,無需訪問存儲器上的TCB,這對任務切換的高速化也有貢獻。任 務處理裝置100的CPU 150中所要求的只是追加使CPU時鐘停止和恢復的功 能。此外,這些功能全部由硬件來實現(xiàn),這并非是要限定本發(fā)明的范圍。例如, 本領域技術人員可以理解,(A)或者(B)的主要功能可以由硬件來實現(xiàn),而 為了輔助硬件功能,RTOS的一部分功能可以由軟件來實現(xiàn)。
圖6是圖5所示的CPU150的電路圖。與圖3所示的CPU 84不同,處理寄存器組154的特殊寄存器156和通用 寄存器158都是一面的結構。處理寄存器組154中分別引入了來自加載選擇電 路112的輸入總線、到保存寄存器110的輸出總線、以及來自任務切換電路210 的寫入信號(WT)用信號線。執(zhí)行控制電路152根據(jù)對輸出選擇器164的控 制信號(CTRL),將處理寄存器組92中所期望的寄存器中的數(shù)據(jù)輸入到運算 電路160中。運算結果成為輸入選擇器162的輸入。執(zhí)行控制電路152根據(jù)對 輸入選擇器162的控制信號(CTRL),向處理寄存器組154中所期望的寄存器 輸入運算結果。執(zhí)行控制電路152 —邊更新特殊寄存器156中的程序計數(shù)器, 一邊執(zhí)行任務。
處理數(shù)據(jù)保存到保存寄存器110中而不是存儲器上的TCB中。處理寄存 器組154不斷地向各保存寄存器110輸出處理數(shù)據(jù)。實際上,如前所述,何時 將處理數(shù)據(jù)保存到保存寄存器110中,是由任務切換電路210來控制的。
保存數(shù)據(jù)是從保存寄存器110而不是從存儲器上的TCB加載到處理寄存 器組154中的。實際上,如前所述,加載哪個保存寄存器110中的處理數(shù)據(jù)以 及何時加載,是由任務切換電路210來控制的。
連接處理寄存器組154和加載選擇電路112、以及處理寄存器組154和保 存寄存器110的總線能夠傳輸?shù)奈粩?shù),設定為能夠在一次處理中并行傳輸處理 數(shù)據(jù)。因此,根據(jù)任務切換電路210發(fā)送的寫入信號(WT),能夠?qū)崿F(xiàn)一次讀 出或?qū)懭霐?shù)據(jù)。普通軟件RTOS在任務切換時,需要暫時占用處理寄存器組 154。與此相反,本實施例中的硬件RTOS沒有必要將用于任務切換處理的特 殊處理數(shù)據(jù)加載到處理寄存器組154中。當從任務A切換到任務B時,只需 要將任務A的處理 居保存,然后加載任務B的處理數(shù)據(jù),因此,處理寄存 器組154無需配置系統(tǒng)用和用戶用兩面及通過堆棧執(zhí)行數(shù)據(jù)替換處理。
圖7是執(zhí)行控制電路152使CPU時鐘停止的構造的電路圖。
第二 AND門174的輸入是原始時鐘(CLKO )和第一 AND門172的輸出, 第一AND門172的輸出被反相。第一AND門172的輸出是停止完成信號(HC )。由于停止完成信號(HC)通常是0,因此第二AND門174直接輸出所輸入的 原始時鐘(CLK0)作為CPU時鐘(CLK)。 CPU150接收到第二AND門174 所輸出的CPU時鐘時進行操作。當?shù)谝籄ND門172的輸出是"1"時,換句 話說,當停止完成信號(HC) =1時,第二 AND門174的輸出固定為零,以 使CPU時鐘(CLK)停止。
第一AND門172的輸入是OR門176的輸出和CPU忙信號(CBUSY), 該CPU忙信號是負邏輯。CBUSY是從產(chǎn)生CPU 150內(nèi)部循環(huán)的已知狀態(tài)機中 輸出的信號。當CPU 150處于可停止狀態(tài)時,CBUSY變成"1"。例如,當運 算電路94完成執(zhí)行單一命令或者被鎖定的多個命令的最后命令從而CPU處于 可停止狀態(tài)時,或者當已經(jīng)停止提供CPU時鐘時,CBUSY變成"0"。
OR門176的輸入是命令解碼器170的輸出(SC—DETECT)和來自任務切 換電路210的停止請求信號(HR)。命令解碼器170內(nèi)置有保持SC—DETECT 的鎖存電路。命令解碼器170接收從CPU150提取(fetch)的數(shù)據(jù)(FD)。當 FD是系統(tǒng)調(diào)用命令時,命令解碼器170輸出SC—DETECT=1。通過內(nèi)置鎖存 電路,即使在這之后FD變化,命令解碼器170也繼續(xù)輸出SC—DETECT=1。 命令解碼器170中,還輸入任務切換電路210發(fā)送給處理寄存器組154的寫入 信號(WT)。如前所述,當WT從O變?yōu)?時,保存數(shù)據(jù)被加載到處理寄存器 組154中。該WT是在規(guī)定時間后從1返回到0的脈沖信號。當WT從1變?yōu)?0時,命令解碼器170的鎖存電路被復位,命令解碼器170取消SC_DETECT。 SC_DETECT和寫入信號(WT)之間的關系,將參照圖8 (b)進行詳述。本 實施例中的命令解碼器170,是為了判定執(zhí)行對象命令是否是系統(tǒng)調(diào)用而專門 設置在執(zhí)行控制電路152中的裝置。作為變型例,命令解碼器170可以與負責 CPU 150的解碼階IS:的CPU解碼器共用。這種情況下,可通過向CPU解碼器 追加當被解碼的數(shù)據(jù)是系統(tǒng)調(diào)用命令時輸出SC_DETECT=1的功能來實現(xiàn)命 令解碼器170。
當中斷請求信號(INTR)發(fā)生時,任務切換電路210向執(zhí)行控制電路152申請停止請求信號(HR),即當執(zhí)行系統(tǒng)調(diào)用、或當申請停止請求信號(HR) 時,OR門176的輸出變成'T'。
綜上所述,當執(zhí)行系統(tǒng)調(diào)用或發(fā)生中斷請求信號、且當CPU忙信號變成 "0"時,第一AND門172的輸出變成"1",且第二AND門174不輸出CPU 時鐘。
圖8 (a)是表示中斷請求信號發(fā)生時各種信號之間關系的時序圖。
在圖8(a)中,首先,在時刻t0,任務切換電路210檢測出來自外部的中 斷請求信號(INTR)。任務切換電路210為了執(zhí)行特殊任務,向執(zhí)行控制電路 152申請停止請求信號(HR)。輸入時刻tl與4企測時刻t0幾乎是同時的。在時 刻tl, CPU 150的狀態(tài)機處于"任務執(zhí)行中",CBUSY=1。由于HR4,所以 OR門176輸出"1"。但是由于CBUSY-l,因此CPU 150不停止。因此,即 使輸入服=1, CPU時鐘(CLK)也暫且與原始時鐘(CLKO)同步輸出。
經(jīng)過一定時間,在時刻t2處,CBUSY=0 由于已經(jīng)是HR-1,所以第一 AND門172輸出HC=1,從第二AND門174輸出的CPU時鐘維持為0。另一 方面,任務切換電路210以申請HC為契機,開始從常規(guī)任務到特殊任務的任 務切換。細節(jié)將在后面描述。任務切換所需時間是任務控制電路200的工作時 鐘的數(shù)倍。在申請HC后,任務控制電路200的工作時鐘變化了規(guī)定次數(shù)(時 刻t3)的條件下,任務控制電路200取消停止請求信號(HR)。由于HR-O, 因此執(zhí)行控制電路152恢復CPU時鐘(CLK )。當CPU 150恢復處理時,CPU 150使CBUSY從0變?yōu)? (時刻t4 )。由此,在CPU時鐘停止的時刻t2至時 刻t3期間,執(zhí)行從常規(guī)任務到特殊任務的任務切換。
作為另一種處理方法,代替以任務控制電路200的工作時鐘變化了規(guī)定次 數(shù)為條件,而以任務控制電路200已完成任務切換為條件來取消HR。而且, 執(zhí)行控制電路152可以以取消HR為條件來取消HC。當HC=0時,執(zhí)行控制 電路152恢復CPU時鐘(CLK )。由此,可以恢復任務的執(zhí)行。
圖8 (b)是表示執(zhí)行系統(tǒng)調(diào)用時各種信號之間關系的時序圖。在圖8(b)中,首先,在時刻t0,命令解碼器170檢測出系統(tǒng)調(diào)用,并使 SC—DETECT從O變?yōu)?。在時刻t0, CPU 150的狀態(tài)機處于"任務執(zhí)行中", CBUSY=1。由于SC—DETECT=1,所以OR門176輸出"1"。但是由于CBUSY=1, 因此CPU150不停止。因此,即使輸出SC_DETECT=1, CPU時鐘(CLK)也 暫且與原始時鐘(CLKO)同步輸出。
經(jīng)過一定時間,在時刻tl, CBUSY=0。由于SC—DETECT=1 、且CBUSY=1, 因此取消HC,并停止CPU時鐘。當輸入HOO時,任務切換電路210開始任 務切換處理,并將寫入信號(WT)輸出到CPU 150。在WT從O變?yōu)?的時 刻t2,保存數(shù)據(jù)被加載到處理寄存器組154中。由于寫入信號(WT)是脈沖 信號,因此在經(jīng)過規(guī)定時間后的時刻t3,變成WT=0。根據(jù)檢測出的WT: 1 —0的下降沿,鎖存在命令解碼器170中的SC—DETECT被復位(時刻t4 )。 此時,CBUSY從O變?yōu)?。由于CBUSY-1,因此HC-O,從而恢復CPU時鐘。 在CPU時鐘停止的時刻tl至時刻t4期間,執(zhí)行任務切換。
此外,作為其它處理方法,代替以檢測出WT: 1 —O的下降沿為條件,而 以任務控制電路200完成任務切換并取消HR為條件,執(zhí)行控制電路152取消 HC。而且,以HC-O為條件,復位SCUDETECT。執(zhí)行控制電路152恢復CPU 時鐘(CLK), CBUSY從O變?yōu)閘。
在任何情況下,CPU 150都無需知道在CPU時鐘停止期間進行RUN-任務 切換的情況。任務切換電路210在CPU時鐘停止而使CPU 150處于凍結期間 進行任務切換處理,因此CPU 150的處理和任務控制電路200的處理在事件序 列中是分離的。
圖9是用于說明流水線處理中CPU時鐘停止時刻的示意圖。 CPU 150通過從存儲器中順序讀出多個命令到處理寄存器組154中并執(zhí)行 這些命令,來執(zhí)行任務。作為任務執(zhí)行單位的命令,分解為如下四個階段 (phase )。
1. F (提取(fetch)):從存儲器中提取命令。2. D (解碼(decode)):解釋命令。
3. E (執(zhí)行(execution)):執(zhí)行命令。
4. WB(回寫(writeback)):將執(zhí)行結果寫入存儲器中。 當一個任務順次執(zhí)行命令1至命令5時,可以是命令1被執(zhí)行完從F到
WB階段后,才執(zhí)行命令2的F階段。但是,為了更高效地執(zhí)行,大多是在命 令l的執(zhí)行過程中就開始執(zhí)行命令2。這種處理方法被稱作流水線處理。例如, 當命令1到達D階段時,就開始命令2的F階段。當命令1到達E階段時, 就執(zhí)行命令2的D階段和命令3的F階段。由此,通過增加單位時間內(nèi)執(zhí)行的 命令數(shù),能夠減少每個任務的執(zhí)行時間。
并且,各階段可以進一步細分為兩個階段。例如,F(xiàn)階段可以分為Fl和 F2兩個階段。當命令1到達F2階段時,開始命令2的Fl階段。當命令1到 達D1階段時,執(zhí)行命令2的F2階段和命令3的F1階段。通過細分階段,能 夠進一步有效利用CPU 150的計算資源。在圖9中,說明了在將各階段細分為
兩個階^a來執(zhí)行的流水線處理中發(fā)生系統(tǒng)調(diào)用時的CPU時鐘停止時刻。
在圖9中,命令1在CPU時鐘為"0"的時刻開始處理。在CPU時鐘為 "4"的時刻,命令1的解碼完成。假設命令1為系統(tǒng)調(diào)用。命令解碼器170 使SC—DETECT從0變?yōu)?。接著,SC_DETECT從1返回到0的條件是從 任務切換電路210到處理寄存器組154的寫入信號(WT)從1變?yōu)?。即使輸 出的是SC—DETECT-1,由于命令2 5已經(jīng)在執(zhí)行中或者執(zhí)行啟動完,因此還 是CBUSY=1。因此,第二 AND門174繼續(xù)輸出CPU時鐘。但是,當 SC_DETECT=1時,執(zhí)行控制電路152暫時停止程序計數(shù)器的更新,使得新的 命令不被提取。因而,命令6及其后續(xù)命令不會從存儲器中被提取。
在CPU時鐘為"8"的時刻,命令1執(zhí)行完成,但是命令2~5正在執(zhí)行中, 因此CPU忙信號還是"1"。當?shù)竭_CPU時鐘為"12"的時刻時,命令5執(zhí)行 完成。此時,CPU忙信號變成"0"。之后,按照參照圖8 (b)所述的流程, 停止提供CPU時鐘。任務切換電路210將直到命令5的執(zhí)行結束為止產(chǎn)生的處理數(shù)據(jù)保存到保存寄存器110中。根據(jù)這種停止方法,任務切換能夠以不浪 費執(zhí)行系統(tǒng)調(diào)用后的命令執(zhí)行結果的方式實現(xiàn)。當任務切換完成時,CPU忙信 號再次設為"1",命令解碼器170的處理也得到恢復。由此,將再次提供CPU 時鐘。
作為另一種處理方法,也可以在系統(tǒng)調(diào)用命令執(zhí)行完成的時刻,將CPU 忙信號設為"0",以停止提供CPU時鐘。這種情況下,與系統(tǒng)調(diào)用命令同時
執(zhí)行的其它命令在執(zhí)行過程中停止。中途停止的命令的中間處理結果記錄在處
理寄存器組154中后,保存到保存寄存器110中。當下次該任務變成RUN-任 務時,接著執(zhí)行中途停止的命令。例如,當某個命令在讀取結束階段被中途停 止時,將從存儲器中讀出的命令和操作數(shù)保存到保存寄存器110中。當該任務 恢復時,保存寄存器110中的數(shù)據(jù)^i口載到處理寄存器組154中,以執(zhí)行解碼 階段及后續(xù)階段。
圖10是表示狀態(tài)存儲單元220和任務切換電路210之間關系的電路圖。 狀態(tài)存儲單元220包括狀態(tài)寄存器250和定時器252。狀態(tài)存儲單元220 存儲任務的狀態(tài)數(shù)據(jù)。另外,定時器252是在任務轉(zhuǎn)換到READY狀態(tài)或者 WAIT狀態(tài)時開始的定時器。任務轉(zhuǎn)換到READY狀態(tài)后所經(jīng)過的時間稱作 "READY經(jīng)過時間",任務轉(zhuǎn)換到WAIT狀態(tài)后所經(jīng)過的時間稱作"WAIT經(jīng) 過時間"。定時器252以TIM信號方式不斷地輸出經(jīng)過時間的值。在任務切換 時,當任務轉(zhuǎn)換到READY狀態(tài)或者WAIT狀態(tài)時,任務切換電路210驅(qū)動該 任務的定時器252來開始測量時間。
狀態(tài)存儲單元220是如下所述的寄存器組。
(A) 任務ID寄存器254:用于存儲任務ID。任務ID寄存器254不斷地 向任務選擇電路230輸出表示任務ID的ID信號。以下將任務A的任務ID寄 存器254向任務選擇電路230輸出的ID信號表示為"ID一A信號"。從狀態(tài)存 儲單元220輸出的所有其它信號也釆用同樣的表示方法。
(B) 任務優(yōu)先級寄存器256:用于存儲任務優(yōu)先級。任務優(yōu)先級寄存256不斷地輸出表示任務優(yōu)先級的PR信號。"0"表示最高優(yōu)先級,值越大表 示任務優(yōu)先級越低。
(C) 任務狀態(tài)寄存器258:用于存儲任務狀態(tài)。任務狀態(tài)寄存器258不 斷地輸出表示STOP、 READY、 RUN、 WAIT、 IDLE中的某一個的ST信號。 此外,IDLE是指任務初始化之前的狀態(tài)。
(D) 任務啟動地址寄存器260:用于存儲存儲器中的任務的TCB地址。 任務啟動地址寄存器輸出AD信號。
(E) 待機理由寄存器262:用于在任務處于WAIT狀態(tài)時,存儲構成WAIT 解除條件的待機理由。待機理由是"信號量等待"、"事件等待"和"互斥等待" 中的某一個。待機理由寄存器262輸出WR信號。
(F) 信號量ID寄存器264:用于在任務以信號量等待為理由處于WAIT 狀態(tài)時,存儲等待對象的信號量(以下筒稱為"待機信號量")的信號量ID。 信號量ID寄存器264輸出SID信號。
(G) 互斥ID寄存器265:用于在任務以互斥等待為理由處于WAIT狀態(tài) 時,存儲等待對象的互斥(以下筒稱為"待機互斥")的互斥ID?;コ釯D輸 出MID信號。
(H) 事件ID寄存器266:用于在任務以事件等待為理由處于WAIT狀態(tài) 時,存儲等待對象的事件(以下簡稱為"待機事件,,)的事件ID。事件ID寄 存器266輸出EID信號。
(I) 待機標記寄存器268:用于在任務以事件等待為理由處于WAIT狀態(tài) 時,存儲待機標記模式。待機標記寄存器268輸出FL信號。
(J)標記條件寄存器270:用于在任務以事件等待為理由處于WAIT狀態(tài) 時,存儲標記條件。標記條件寄存器270輸出FLC信號。待機標記模式和標 記條件將在后面詳述。
(K)標記初始化寄存器272:用于存儲表示是否有待機標記模式的數(shù)據(jù)。 標記初始化寄存器272輸出FLI信號。200680055671. 1
值是在WAIT系列系統(tǒng)調(diào)用中指定的變量。 超時計數(shù)器274存儲超時值。任務切換電路210定期對各超時計數(shù)器274的超 時值進行遞減。超時計數(shù)器274輸出TO信號。代替任務切換電路210對超時 值進行遞減,也可以是超時計數(shù)器274本身定期對其超時值自動地進行遞減。 任務選擇電路230根據(jù)各狀態(tài)存儲單元220輸出的各種信號來選擇任務。 任務選擇電路230包括以下電路。
(A) 執(zhí)行選擇電路232:用于在任務切換時,選擇下一個RUN-任務。執(zhí) 行選擇電路232通常根據(jù)狀態(tài)存儲單元220不斷輸出的狀態(tài)數(shù)據(jù),來選擇某一 個任務作為RUN-任務。執(zhí)行選擇電路232的輸入信號有ID、 ST、 PR和TIM 四種。執(zhí)行選擇電路232輸出下一個RUN-任務的任務ID。關于詳細的電路結 構,將參照圖12進行詳述。
(B) 信號量選擇電路234:用于通過釋放信號量系統(tǒng)調(diào)用的執(zhí)行,選擇 應該從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務。信號量選擇電路234的輸入為 來自任務切換電路210的釋放信號量系統(tǒng)調(diào)用釋放的信號量(以下簡稱為"釋 放信號量")的信號量ID。來自狀態(tài)存儲單元220的輸入信號有ID、 ST、 WR、 PR、 SID和TIM六種。信號量選擇電路234的輸出信號是從WAIT狀態(tài)轉(zhuǎn)換 到READY狀態(tài)的任務的任務ID。如果不存在該任務,則輸出如-1等的規(guī)定 值。關于更具體的電路結構,將參照圖13進行詳述。
(C )事件選擇電路236:用于通過設定事件系統(tǒng)調(diào)用的執(zhí)行,選擇從WAIT 狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務。事件選擇電路236的輸入為來自任務切換電 路210的由設定事件系統(tǒng)調(diào)用設定的事件(以下簡稱為"設定事件,,)的事件 ID。來自狀態(tài)存儲單元220的輸入信號有ID、 ST、 WR、 EID、 FL和FLC六 種。事件選擇電路236的輸出信號為從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務 的任務ID、以及該任務的FL、 FLC。
(D)超時檢測電路238:用于檢測出處于WAIT狀態(tài)的任務中超時計數(shù) 器274的超時值變成零的任務。每當更新超時值時,驅(qū)動超時檢測電路238。超時檢測電路238的輸入信號有ID、 ST和TO三種,輸出信號是該任務的任 務ID。如果不存在該任務,則輸出如-l等的規(guī)定值。
(E) 互斥電路240:用于通過釋放互斥系統(tǒng)調(diào)用的執(zhí)行,選擇從WAIT 狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務。互斥電路240的輸入信號為來自任務切換電 路210的由釋放互斥系統(tǒng)調(diào)用釋放的互斥(以下簡稱為"釋放互斥")的互斥 ID。來自狀態(tài)存儲單元220的輸入信號有ID、 ST、 WR、 PR、 SID和TIM六 種?;コ怆娐?40輸出從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務的任務ID。如 果不存在該任務,則輸出如-l等的規(guī)定值。
(F) 檢索電路242:當任務切換電路210輸入任務ID時,檢索電路242 輸出該任務的全部狀態(tài)數(shù)據(jù)。
下面通過關于任務切換的描述,對RUN-任務的選擇、信號量、事件、互 斥和超時,特別是任務選擇電路230的處理,與通用技術進行比較說明。 RUN-任務的選擇通過普通軟件RTOS進行RUN-任務的選擇
圖11是表示普通RTOS進行RUN-任務選擇時所采用的任務就緒表的圖。 任務就緒表形成在存儲器上,將各READY-任務的TCB用指針連接。優(yōu) 先級指針280設置在每個任務優(yōu)先級上,指出對應任務優(yōu)先級的任務的TCB 的開始地址。在圖ll的任務就緒表中,任務優(yōu)先級"0"的優(yōu)先級指針280指 向任務A的TCB的地址,任務優(yōu)先級"1"的優(yōu)先級指針280指向任務B的 TCB的地址。任務A的TCB指向任務D的TCB的地址。
普通軟件RTOS —邊掃描該任務就緒表一邊選擇出下一個RUN-任務。在 這個處理過程中,RTOS進行如下兩個階段的處理
A, 使RUN-任務從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
B. 選擇下一個RUN-任務,并使該選擇出的任務的任務狀態(tài)從READY 狀態(tài)轉(zhuǎn)換到RUN狀態(tài)。
將軟件RTOS進行的處理分解成如下各處理?!碦UN-任務的狀態(tài)轉(zhuǎn)換〉
這里,以任務J為RUN-任務來進行說明。
Al. RTOS將RUN-任務的任務ID存儲在存儲器中。RTOS根據(jù)該任務ID,
獲取任務J的TCB的地址。
A2.訪問該TCB,獲取任務J的任務優(yōu)先級。假設該任務優(yōu)先級為"0"。 A3.參考圖11所示的任務就緒表,獲取與任務J的任務優(yōu)先級對應的優(yōu)
先級指針280。
A4.檢測所獲取的優(yōu)先級指針280所指的TCB。這里檢測出任務A的 TCB。
A5.跟蹤任務A的TCB所具有的指針,以檢測出任務就緒表最末尾的 TCB。圖11中,任務就緒表的最末尾是任務F。
A6.配置任務F的TCB的指針指向任務J的TCB的地址。由此,任務J 的TCB被追加到任務就緒表中。
A7.在任務J的TCB中設定"READY"。另外,處理數(shù)據(jù)被復制到該TCB 的寄存器存儲區(qū)域。
〈READY-任務的狀態(tài)轉(zhuǎn)換〉
Bl.RTOS檢測任務優(yōu)先級"0"的優(yōu)先級指針280指向哪個TCB。如果沒 有指向任何TCB,則檢測任務優(yōu)先級"1"的優(yōu)先級指針280指向哪個TCB。 RTOS —邊以降低的任務優(yōu)先級順序檢測該任務就緒表, 一邊試圖確定任務直 到發(fā)現(xiàn)指向的TCB為止。該圖中,將指定任務A。
B2.將任務A從任務就緒表中移除。具體地說,重寫任務優(yōu)先級"0"的 優(yōu)先級指針280,以取代任務A來指向任務D的TCB的地址。另外,通過設 定NULL使得任務A的指針不指向任務D的地址。由此,任務A的TCB從任 務就緒表中移除。
B3.在任務A的TCB中設定"RUN"。另外,保存在任務A的TCB的寄 存器存儲區(qū)域中的處理數(shù)據(jù)被加載到處理寄存器組中。如上所述,普通軟件RTOS采用該任務就緒表進行任務切換,即RTOS根 據(jù)下述策略,從多個READY-任務中選擇RUN-任務。
1. 所選擇的任務為READY-任務(第一條件)。
2. 所選擇的任務為READY-任務中任務優(yōu)先級最高的任務(第二條件)。
3. 當存在多個任務優(yōu)先級最高的任務時,所選擇的任務是轉(zhuǎn)換為READY 狀態(tài)的時間最久的任務(第三條件)。
這三個條件統(tǒng)稱為"RUN任務選擇條件"。任務處理裝置100的執(zhí)行選擇 電路232通過硬件來實現(xiàn)這種RTOS的任務調(diào)度功能。通過本實施例的硬件RTOS所進行的RUN-任務的選擇 圖12是執(zhí)行選擇電路232的電路圖。
這里,假設從任務0 任務7共八個任務中選擇出RUN-任務。執(zhí)行選擇電 路232包括四個第一比較電路290(290a 290d)、兩個第二比較電路292( 292a、 292b)、以及一個第三比較電路294。另外,還包括八個判定電路296 (296a 296h)。
判定電路296的輸入信號為表示任務狀態(tài)的ST信號。當該ST信號表示 READY時,判定電路296輸出的CID信號為'T';當該ST信號表示READY 之外的任務狀態(tài)時,則輸出的CID信號為"0"。判定電路296根據(jù)上述RUN-任務選擇條件中的第一條件進行判定。第一比較電路290的輸入為兩個任務的 ID、 PR和TIM、以及來自判定電路296的CID信號。
以第一比較電路290a為例進行說明。第一比較電路290a比較任務0和任 務1 ,以根據(jù)上述的RUN任務選擇條件選擇出更適合的任務。
第一判定首先,比較分別從判定電路296a和判定電路296b輸出的CID 信號。如果某一個CID信號是"1",換句話說,如果只有一個任務處于READY 狀態(tài),則第一比較電路290a輸出該任務的ID、 PR和TIM。如果兩個CID信 號都是"0",即哪個任務都不處于READY狀態(tài),則第一比較電路290a輸出 ID=PR=TIM=NULL。這表示哪個任務都沒有被選擇。如果兩個CID信號都是"1",即兩個任務都處于READY狀態(tài),則執(zhí)行下面的第二判定。
第二判定比較任務0的PR信號和任務1的PR信號,以選擇出任務優(yōu) 先級較高的任務。例如,如果任務0的任務優(yōu)先級是'T,、任務l的任務優(yōu)先 級是"2",則第一比較電路290a輸出任務0的ID、 PR和TIM。通過第二判定, 能夠選擇出任務優(yōu)先級最高的任務作為RUN-任務的候選。如果任務0和任務 1的任務優(yōu)先IM目同,則執(zhí)行下面的第三判定。
第三判定比較任務O的TIM信號和任務1的TIM信號,以選擇出READY 經(jīng)過時間較長的任務。如果對應的READY經(jīng)過時間相同,則選擇任務O。由 于僅通過比較經(jīng)過時間的大小就能夠進行判定,因此將無需進行如任務就緒表 一樣的TCB順序管理。
由此,任務0和任務1、任務2和任務3、任務4和任務5、以及任務6 和任務7,分別根據(jù)RUN-任務選擇條件進行比較。第二比較電路292通過測 試來自兩個第一比較電路290的輸出,來進一步篩選RUN-任務的候選。第二 比較電路292a根據(jù)第一比較電路290a和第一比較電路290b的輸出來執(zhí)行任 務選擇。因此,第二比較電路292a輸出任務0一壬務3中最符合RUN-任務選 擇條件的任務的ID、 PR和TIM。第三比較電路294也以相同的方式進行操作, 第三比較電路294輸出任務O"壬務7中某一個任務的任務ID。
根據(jù)這種處理方法,能夠通過硬件來實現(xiàn)RUN-任務選擇條件。普通軟件 RTOS —邊訪問任務就緒表一邊選擇RUN-任務。但是本實施例中的執(zhí)行選擇 電路232根據(jù)從狀態(tài)存儲單元220不斷輸出的狀態(tài)數(shù)據(jù),選擇RUN-任務。由 執(zhí)行選擇電路232執(zhí)行的處理總結如下。
〈RUN-任務的狀態(tài)轉(zhuǎn)換〉
這里,假設任務J為該RUN-任務。
Al.任務切換電路210在任務J的任務狀態(tài)寄存器258中設定"READY"。 A2.任務切換電路210設置任務J的定時器252,以開始測量READY經(jīng) 過時間。由此,任務J/人RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。如前所述,處理數(shù)據(jù)保 存在任務J的保存寄存器110中。連接處理寄存器組154和保存寄存器110的 總線,能夠并行傳輸處理數(shù)據(jù),從而Al和A2的處理能夠在一個時鐘時間內(nèi) 執(zhí)行。
〈READY-任務的狀態(tài)轉(zhuǎn)換〉
Bl.當任務J的狀態(tài)轉(zhuǎn)換完成時,任務切換電路210根據(jù)執(zhí)行選擇電路232 所輸出的任務ID確定RUN-任務,并在該確定的任務的任務狀態(tài)寄存器258 中設定"RUN"。
由此,所確定的任務從READY狀態(tài)轉(zhuǎn)換到RUN狀態(tài)。所確定的任務的 處理數(shù)據(jù)從保存寄存器110加載到處理寄存器組154中。連接保存寄存器110 和處理寄存器組154的總線,也能夠并行傳輸處理數(shù)據(jù),從而Bl的處理能夠 在一個時鐘時間內(nèi)寺丸行。
軟件RTOS在任務切換時,由于例如訪問任務就緒表等原因會消耗CPU 的很多CPU時鐘時間。與此相反,本實施例中的任務控制電路200能夠在很 短的時間內(nèi)完成任務切換。由于狀態(tài)存儲單元220不斷地將狀態(tài)數(shù)據(jù)輸出給執(zhí) 行選擇電路232,因此執(zhí)行選擇電路232不斷地輸出某一個任務的任務ID。不 是在任務切換發(fā)生后才開始RUN-任務的選擇處理,而是根據(jù)任務切換發(fā)生時 的執(zhí)行選擇電路232的輸出來執(zhí)行RUN-任務的選擇,這對任務切換高速化也 有貢獻。以上說明假設有八個任務,但是通過增加比較電路的階段數(shù),能夠?qū)?更多的任務進行尋址。
圖13是表示由普通RTOS進行的信號量處理中所采用的等待信號量表的圖。
在說明等待信號量表之前,先筒單說明信號量。信號量表212中對應記錄 信號量ID和信號量計數(shù)器。在信號量計數(shù)器中將初始值設定為有限數(shù)。例如, 假設設定為信號量ID-4,信號量計數(shù)器=3。當某一個任務執(zhí)行將信號量ID-4的信號量作為待機信號量的等待信號量系統(tǒng)調(diào)用時,任務切換電路210使待機 信號量的信號量計數(shù)器遞減。每當通過等待信號量事件調(diào)用來請求獲取時,遞 減信號量計數(shù)器,當信號量計數(shù)器變成0時,無法再獲取信號量。執(zhí)行將信號 量計數(shù)器為O的信號量作為待機信號量的等待信號量系統(tǒng)調(diào)用的任務,狀態(tài)轉(zhuǎn) 換到WAIT狀態(tài)。
另一方面,當某一個任務執(zhí)行將信號量ID=4的信號量作為釋放信號量的 釋放信號量系統(tǒng)調(diào)用時,任務切換電路210使信號量表212的信號量計數(shù)器遞 增。綜上所述
當信號量計數(shù)器>0時執(zhí)行等待信號量系統(tǒng)調(diào)用的任務,從RUN轉(zhuǎn)換到 READY。此時遞減信號量計數(shù)器。
當信號量計數(shù)器=0時執(zhí)行等待信號量系統(tǒng)調(diào)用的任務,從RUN轉(zhuǎn)換到 WAIT。不遞減信號量計數(shù)器。
為了使執(zhí)行等待信號量系統(tǒng)調(diào)用的任務從WAIT狀態(tài)轉(zhuǎn)換到READY狀 態(tài),其它任務需要執(zhí)行釋放信號量系統(tǒng)調(diào)用。由普通軟件RTOS進行的信號量處理
普通軟件RTOS通過采用等待信號量表來管理以信號量等待為理由處于 WAIT狀態(tài)的任務(以下特別稱作"信號量等待任務,,)的TCB。等待信號量 表是具有與圖11所示的任務就緒表類似構造的列表,形成在存儲器上。各信 號量等待任務的TCB由指針連接。優(yōu)先級指針280指向?qū)蝿諆?yōu)先級的信 號量等待任務的TCB的開始地址。
當執(zhí)行釋放信號量系統(tǒng)調(diào)用時,普通軟件RTOS —邊掃描該等待信號量表 一邊選擇應從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的信號量等待任務。執(zhí)行等待信 號量系統(tǒng)調(diào)用以及執(zhí)行釋放信號量系統(tǒng)調(diào)用時,RTOS執(zhí)行的處理如下。
<等待信號量系統(tǒng)調(diào)用的執(zhí)行>
這里,假設任務J為RUN-任務。
Al.RTOS將RUN-任務的任務ID存儲在存儲器中。根據(jù)該任務ID,獲取任務J的TCB的地址。
A2.檢測在等待信號量系統(tǒng)調(diào)用中所指定的待機信號量的信號量計數(shù)器。以下根據(jù)信號量計數(shù)器的值,處理被分別說明。(當信號量計數(shù)器>0時)
A3. RTOS使待機信號量的信號量計數(shù)器遞減。
A4.在任務J的TCB中設定"READY"。這種情況下,任務J的TCB被追加到任務就緒表中。
(當信號量計數(shù)器=0時)
A3. RTOS訪問該TCB,以獲取任務J的任務優(yōu)先級。假設任務優(yōu)先級為"0"。
A4.根據(jù)等待信號量表,獲取與任務J的任務優(yōu)先級對應的優(yōu)先級指針。A5.檢測所獲取的優(yōu)先級指針所指的TCB。這里,檢測到任務A的TCB。A6.跟蹤任務A的TCB所具有的指針,以檢測出該等待信號量表中最末
尾的TCB。如圖13所示,任務F在該等待信號量表的最末尾。
A7.配置任務F的TCB的指針指向任務J的TCB的地址。由此,任務J
的TCB被追加到等待信號量表中。
A8.在任務J的TCB中設定"WAIT"。另外,還設定待機信號量的信號量ID。
<釋放信號量系統(tǒng)調(diào)用的執(zhí)行>
Bl.RTOS—邊按順序跟蹤任務優(yōu)先級為"0"的任務, 一邊搜索以釋放信號量為待機信號量的信號量等待任務。如果不存在這樣的任務,則將任務優(yōu)先級為'T,的任務設為搜索對象。根據(jù)是否搜索到以釋放信號量為待機信號量的信號量等待任務,分別執(zhí)行不同的處理。(搜索到時)
B2.以搜索到的任務是任務E來進行說明。RTOS在任務E的TCB中設定"READY"。另外,清除待機信號量的信號量IB3.將任務E的TCB從等待信號量表中移除。
B4.使釋放信號量的任務的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。該任務的TCB被追加到任務就緒表中。(未搜索到時)B2. RTOS使信號量計數(shù)器遞增。
B3.使釋放信號量的任務的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。該任務的TCB被追加到任務就緒表中。
普通軟件RTOS通過管理上述等待信號量表,進行與信號量相關的處理。在釋放信號量時,RTOS根據(jù)以下策略從多個WAIT-任務中選擇READY-任務。
1. 所選擇的任務應該為WAIT-任務(第一條件)。
2. 所選擇的任務應該為WAIT-任務中將釋放信號量作為待機信號量的任務(第二條件)。
3. 當存在多個這種任務時,所選擇的任務應該具有最高的任務優(yōu)先級(第三條件)。
4. 如果存在多個任務優(yōu)先級最高的任務,所選擇的任務應該是轉(zhuǎn)換為WAIT狀態(tài)的時間最久的任務(第四條件)。
這四個條件統(tǒng)稱為"信號量待機解除條件"。任務處理裝置100的信號量選擇電路234通過硬件來實現(xiàn)這種RTOS的任務調(diào)度功能。[2]由本實施例的硬件RTOS進行的信號量處理圖14是信號量選擇電路234的電路圖。
這里,也是以任務0—壬務7共八個任務為例進行說明。信號量選擇電路234包括四個第一比較電路300 (300a 300d)、兩個第二比較電路302 (302a、302b)、以及一個第三比較電路304。另外,還包括八個判定電路306(306a 306h)。
判定電路306的輸入信號為來自狀態(tài)存儲單元220的ST、 WR、 SID信號和來自任務切換電路210的表示信號量ID的信號。這里所輸入的信號量ID是釋放信號量的信號量ID。如果對應的任務是以釋放信號量為待機信號量的信號量等待任務,則判定電路306輸出的CID信號為"1",如果不是,則輸出的CID信號為"0"。判定電路306輸出基于上述信號量待機解除條件中的第一條件和第二條件的判定結果。第一比較電路300的輸入信號為兩個任務的ID、PR和TIM、以及來自判定電路306的CID信號。
第 一比較電路300是根據(jù)信號量待機解除條件中的第三條件和第四條件進行判定的電路。第二比較電路302和第三比較電路304也同樣。以上已經(jīng)說明,RUN-任務選擇條件的第二條件和第三條件,與信號量待機解除條件的第三條件和第四條件相同。執(zhí)行選擇電路232的各比較電路是比較任務的狀態(tài)數(shù)據(jù)(PR、 TIM)的電路。另一方面,信號量選擇電路234的各比較電路也是比較任務的狀態(tài)數(shù)據(jù)(PR、 TIM)的電路。因而,執(zhí)行選擇電路232的第一比較電路290和信號量選擇電路234的第一比較電路300是內(nèi)置有相同邏輯的電路,能夠共用。各任務在通過判定電路306基于第一條件和第二條件進行判定的基礎上,通過第一比較電路300進行判定處理。之后通過與執(zhí)行選擇電路232相同的判定處理,第三比較電路304輸出某一個任務ID。當執(zhí)行等待信號量系統(tǒng)調(diào)用以及當執(zhí)行釋》文信號量系統(tǒng)調(diào)用時進行如下處理。
<等待信號量系統(tǒng)調(diào)用的執(zhí)行>
這里,假設任務J為RUN-任務。
Al.任務切換電路210從信號量表212中檢測在等待信號量系統(tǒng)調(diào)用中所指定的信號量的信號量計數(shù)器。以下根據(jù)信號量計數(shù)器的值,處理被分別說明。(當信號量計數(shù)器>0時)A2.任務切換電路210使信號量表212的信號量計數(shù)器遞減。A3.在任務J的任務狀態(tài)寄存器258中設定"READY"。此時,任務切換電路210設置RUN-任務的定時器252,以開始測量READY經(jīng)過時間。(當信號量計數(shù)器-O時)
A2.任務切換電路210在任務J的任務狀態(tài)寄存器258中設定"WAIT",定"信號量等待",在信號量ID寄存器264中設定待機信號量的信號量ID,并設定定時器252以開始測量WAIT經(jīng)過時間。
由此,執(zhí)行等待信號量系統(tǒng)調(diào)用的任務,從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)或者WAIT狀態(tài)。
<釋放信號量系統(tǒng)調(diào)用的執(zhí)行>
Bl.任務切換電路210將釋放信號量的信號量ID輸入到各判定電路306中。各判定電路306根據(jù)該信號量ID,判定是否滿足信號量待機解除條件中的第一條件以及第二條件。因而,各個第一比較電路300根據(jù)第三條件以及第四條件選擇任務。
(當某一個判定電路306輸出"1",第三比較電路304輸出某一個任務ID
時)
B2.任務切換電路210在所檢測出的任務的任務狀態(tài)寄存器258中設定"READY",清除待機理由寄存器262和信號量ID寄存器264,并使定時器252開始測量READY經(jīng)過時間。
B3.在執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)寄存器258中設定"READY",并開始測量READY經(jīng)過時間。
(當沒有判定電路306輸出"1",第三比較電路304不輸出任何一個任務ID時)
B2.任務切換電路210使信號量表212的信號量計數(shù)器遞增。
B3.使執(zhí)行系統(tǒng)調(diào)用的任務的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
由于狀態(tài)存儲單元220不斷地將狀態(tài)數(shù)據(jù)輸出給信號量選擇電路234,因
此當任務切換電路210將信號量ID輸入給判定電路306時,信號量選擇電路
234能夠立即執(zhí)行選擇處理。[互斥處理]
互斥也與信號量相同,用于任務之間的同步處理?;コ夂托盘柫看嬖谝韵聨c不1. 信號量計數(shù)器可設定為1以上的整數(shù)。與此相對,互斥是信號量計數(shù)
器為1或者0的特殊信號量。當信號量計數(shù)器為2以上時,能夠有2個以上的任務獲得相同的信號量。但是,在互斥的情況下,能夠獲得某互斥的任務通常只有一個。
2. 能夠通過釋^:信號量系統(tǒng)調(diào)用釋放信號量的任務,不限于通過等待信號量系統(tǒng)調(diào)用來獲得信號量的任務。與此相對,能夠通過釋^t互斥系統(tǒng)調(diào)用釋放互斥的任務,只能是通過等待互斥系統(tǒng)調(diào)用來獲得互斥的任務。
在釋放互斥時,任務切換電路210從多個WAIT-任務中選擇READY-任務的策略如下。
1. 所選擇的任務應該是WAIT-任務(第一條件)。
2. 所選擇的任務應該是WAIT-任務中以釋放互斥為待機互斥的任務(第二條件)。
3. 當存在多個這種任務時,所選擇的任務應該是任務優(yōu)先級最高的任務(第三條件)。
4. 當存在多個任務優(yōu)先級最高的任務時,所選擇的任務應該是轉(zhuǎn)換為WAIT狀態(tài)時間最久的任務(第四條件)。
這四個條件統(tǒng)稱為"互斥待機解除條件"。
因而,當執(zhí)行等待互斥系統(tǒng)調(diào)用以及當執(zhí)行釋放互斥系統(tǒng)調(diào)用時,本實施例的硬件RTOS執(zhí)行如下處理。信號量表212中對應存儲互斥ID和表示該互斥是否被哪一個任務占用的占用狀態(tài)數(shù)據(jù)。當該互斥沒有被占用時,占用狀態(tài)數(shù)據(jù)為"0",當該互斥被占用時,占用狀態(tài)數(shù)據(jù)為占用該互斥的任務的任務ID。
<等待互斥系統(tǒng)調(diào)用的執(zhí)行>
這里,假設任務J為RUN-任務。
Al.任務切換電路210檢測在等待互斥系統(tǒng)調(diào)用中指定的互斥是否被占用。以下根據(jù)該互斥的占用狀態(tài),處理被分別說明。(當互斥沒有外皮占用時)A2.任務切換電路210將執(zhí)行系統(tǒng)調(diào)用的任務的任務ID作為互斥占用狀態(tài)數(shù)據(jù)記錄。
A3.在任務J的任務狀態(tài)寄存器258中設定"READY"。此時,任務切換電路210設置RUN-任務的定時器252,以開始測量READY經(jīng)過時間。(當互斥被占用時)
A2.任務切換電路210在任務J的任務狀態(tài)寄存器258中設置"WAIT",在待機理由寄存器262中設置"互斥等待",在互斥ID寄存器265中設定待機互斥的互斥ID,并"^殳定定時器252以開始測量WAIT經(jīng)過時間。
<釋放互斥系統(tǒng)調(diào)用的執(zhí)行>
Bl.任務切換電路210在執(zhí)行系統(tǒng)調(diào)用的任務占用釋放互斥的條件下,將釋放信號量ID輸入給互斥電路240。互斥電路240也包括如圖14所示的多階段連接的比較電路、以及判定是否滿足互斥待機解除條件中第一條件以及第二條件的判定電路。該判定電路以該互斥為對象,只有當互斥待機條件中的第一條件以及第二條件同時滿足時才輸出"1"。此外,當沒有占用釋放互斥的任務執(zhí)行釋放互斥系統(tǒng)調(diào)用時,使該任務的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。(當某一個判定電路輸出'T,,互斥電路240輸出某一個任務ID時)
B2.任務切換電路210在所檢測出的任務的任務狀態(tài)寄存器258中設定"READY",清除待機理由寄存器262和互斥ID寄存器265,并使定時器252開始測量READY經(jīng)過時間。
B3.在執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)寄存器258中設定"READY",并開始測量READY經(jīng)過時間。
(當沒有判定電路輸出'T,,互斥電路240不輸出任何一個任務ID時)
B2.任務切換電路210在信號量表212中將互斥設定為非占用狀態(tài)。
B3.使執(zhí)行系統(tǒng)調(diào)用的任務的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
下面筒單說明本實施例中的事件管理。事件表214對應記錄事件ID和標記模式(以下稱作"當前標記模式")。標記模式是8位的位模式。
設定事件系統(tǒng)調(diào)用是以事件ID和標記模式(以下稱作"設定標記模式,,)
為參數(shù)來更新當前標記模式的系統(tǒng)調(diào)用。當執(zhí)行設定事件系統(tǒng)調(diào)用時,對應該 事件的當前標記模式更新為與設定標記模式的邏輯或。例如,假如當前標記模
式為"00001100"、設定標記4莫式為"00000101",則當前標記才莫式變?yōu)?"00001101"。以下關于各標記模式,從左至右依次稱作第0位,第l位,..■, 和第7位。
等待事件系統(tǒng)調(diào)用是用于等待待機事件的當前標記模式滿足規(guī)定條件的 系統(tǒng)調(diào)用,以事件ID、標記模式(以下稱作"待機標記模式,,)、和標記條件作 為參數(shù)。當執(zhí)行等待事件系統(tǒng)調(diào)用時,判定當前標記模式和待機標記模式之間 是否滿足標記條件。標記條件是邏輯或(OR)或者邏輯與(AND)。在標記條 件是邏輯與(AND)的情況下,WAIT解除條件是指對在待機標記模式中為"1" 的全部位,當前標記模式中的對應位也全部是"l"。在標記條件是邏輯或(OR) 的情況下,WAIT解除條件是指對在待機標記模式中為"1"的至少一位,當前 標記模式的對應位也是"1"。例如,在當前標記模式為"00001101"、待機標 記模式為"00000011"、標記條件是"邏輯或(OR)"的情況下,待機標記模 式的第6位以及第7位是1,當前標記模式的第7位是1,因此這種情況下, 在等待事件系統(tǒng)調(diào)用中指定的WAIT解除條件滿足。另一方面,在標記條件是 "邏輯與(AND)"的情況下,由于當前標記模式的第6位是"0",因此WAIT 解除條件不滿足。由普通軟件RTOS所進行的事件處理
當執(zhí)行等待事件系統(tǒng)調(diào)用以及當執(zhí)行設定事件系統(tǒng)調(diào)用時,普通RTOS執(zhí) 行如下處理。在普通RTOS中,為了管理事件,在存儲器上保持著事件表。在 該事件表中,不僅存儲有事件ID、當前標記模式,通常還對應存儲有以該事件 為待機事件而處于WAIT狀態(tài)的任務(以下稱作"事件等待任務")的任務ID、 待機標記纟莫式、和標{己條件。<等待事件系統(tǒng)調(diào)用的執(zhí)行>
Al. RTOS從事件表中讀出由系統(tǒng)調(diào)用指定的事件的當前標記模式。 A2.按照標記條件比較當前標記才莫式和待機標記才莫式,以判定WAIT解除 條件是否滿足。
(當WAIT解除條件滿足時) A3.使執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
(當WAIT解除條件不滿足時) A3.在事件表中記錄執(zhí)行系統(tǒng)調(diào)用的任務的任務ID。 A4.在事件表中記錄待機標記模式。 A5.在事件表中記錄標記條件。
A6.使執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到WAIT狀態(tài)。 <設定事件系統(tǒng)調(diào)用的執(zhí)行>
B1. RTOS從事件表中讀出與系統(tǒng)調(diào)用中指定的事件對應的當前標記模式、 任務ID、待機標記模式、以及標記條件。
B2.將當前標記模式和設定標記模式的邏輯或作為新的當前標記模式進 行記錄。
(當不存在關于指定事件的事件等待任務時,或者當即使存在關于指定事 件的事件等待任務,而根據(jù)待機標記模式和標記條件,WAIT解除條件不滿足 時)
B3.使執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
(當存在關于指定事件的事件等待任務,且WAIT解除條件滿足時) B3.使事件等待任務的任務狀態(tài)從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)。 B4.清除事件表中的待機任務ID、待機標記模式和標記條件。 B5.使執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。 另外,進行RUN-任務的選擇。
當執(zhí)行設定事件系統(tǒng)調(diào)用時,RTOS從多個WAIT-任務中選擇READY-任務的策略如下。
1. 所選擇的任務應該是WAIT-任務(第一條件)。
2. 所選擇的任務應該是WAIT-任務中以指定事件為待機事件的任務(第 二條件)。
3. 所選擇的任務應該是對待機標記模式、當前標記才莫式和標記條件進行 比較,WAIT解除條件滿足的任務(第三條件)。
這三個條件統(tǒng)稱為"事件待機解除條件"。 [2]由本實施例的硬件RTOS所進行的事件處理
當任務處理裝置100執(zhí)行等待事件系統(tǒng)調(diào)用以及執(zhí)行設定事件系統(tǒng)調(diào)用 時,RTOS執(zhí)行如下處理。內(nèi)置于任務處理裝置100的信號量表212對應存儲 事件ID和當前標記模式。待機任務ID和待機標記模式等信息,存儲在狀態(tài)存 儲單元220中。
<等待事件系統(tǒng)調(diào)用的執(zhí)行>
Al.任務切換電路210從事件表214中讀出當前標記模式。 A2.任務切換電路210根據(jù)標記條件比較當前標記模式和待機標記模式, 以判定WAIT解除條件是否滿足。 (當WAIT解除條件滿足時)
A3.在執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)寄存器258中設定"READY"。 (當WAIT解除條件不滿足時)
A3.任務切換電路210在執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)寄存器258中設 定"WAIT",在待機理由寄存器262中設定"事件等待",在事件ID寄存器266 中設定待機事件的事件ID,在待機標記寄存器268中設定待機標記模式,以及 在標記條件寄存器270中設定標記條件。
<設定事件系統(tǒng)調(diào)用的執(zhí)行〉
Bl.任務切換電路210從事件表214中讀出當前標記模式,并且將系統(tǒng)調(diào) 用中指定的事件的事件ID輸入給事件選擇電路236B2.任務切換電路210對設定標記模式和來自事件表214的當前標記模式 進行邏輯或運算。
B3.事件選擇電路236根據(jù)所輸入的事件ID選擇滿足事件待機條件的任 務。此時,也可以不考慮任務優(yōu)先級和WAIT經(jīng)過時間來選擇多個任務。 (當存在滿足事件待機解除條件的任務時) B4.任務切換電路210在事件等待任務的任務狀態(tài)寄存器258中設定 "READY",清除事件ID寄存器266、待機標記寄存器268、和標記條件寄存 器270。
B5.使執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。 (當不存在滿足事件待機解除條件的任務時) B4.任務切換電路210使執(zhí)行系統(tǒng)調(diào)用的任務的任務狀態(tài)從RUN狀態(tài)轉(zhuǎn) 換到READY狀態(tài)。 [超時處理]
當WAIT解除條件滿足時,轉(zhuǎn)換到WAIT狀態(tài)的任務轉(zhuǎn)換到READY狀態(tài)。 但是,如果因為某種外因或應用程序故障而阻礙WAIT解除條件滿足時,該任 務將不能從WAIT狀態(tài)離開。因此,通常在任務轉(zhuǎn)換到WAIT狀態(tài)時設定超時 值。超時值定期遞減,當變成零時,即使WAIT解除條件不滿足,任務也從 WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài),即防止任務在WAIT狀態(tài)停留的時間超過超 時值。由普通軟件RTOS所進行的超時處理
對于普通軟件RTOS,在處于WAIT狀態(tài)的任務的TCB中設定超時值,該 超時值周期性地遞減。RTOS周期性地向CPU處理申請中斷,以;險查全部TCB, 以及檢測出超時值到達0的WAIT-任務。當4企測出這種任務時,RTOS4吏該任 務的任務狀態(tài)從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)。由本實施例的硬件RTOS所進行的超時處理
另一方面,在本實施例中,任務切換電路210周期性地遞減各超時計數(shù)器274的超時值。當執(zhí)行WAIT系列系統(tǒng)調(diào)用時,超時值設定為參數(shù)。任務切換 電路210在執(zhí)行該系統(tǒng)調(diào)用的任務的超時計數(shù)器274中i殳定超時值。
由于超時值的遞減處理不需要CPU150參與,因此任務切換電路210能夠 不依賴于任務執(zhí)行處理進行超時值的更新。因此,即使在CPU150執(zhí)行任務的 過程中,任務控制電路200也能夠自動地更新超時值。由于狀態(tài)數(shù)據(jù)不斷地被 輸入到超時檢測電路238中,因此超時檢測電路238能夠在更新超時值的同時, 檢測出超時值到達0的任務。超時檢測電路238輸出檢測出的這種任務的任務 ID。當從超時檢測電路238獲得該任務ID時,任務切換電路210便確定發(fā)生 了超時,隨后申請HC以停止提供CPU時鐘。任務控制電路200使發(fā)生超時 的WAIT-任務轉(zhuǎn)換到READY狀態(tài),并且使RUN-任務轉(zhuǎn)換到READY狀態(tài)。 任務切換電路210從READY-任務中選擇下一個應執(zhí)行的任務。另外,任務切 換電路210重啟已發(fā)生超時的任務的定時器252,以測量READY經(jīng)過時間。
根據(jù)這種處理方法,在任務執(zhí)行過程中,即CPU時鐘運行過程中發(fā)生超 時時,能夠通過立即向CPU150申請中斷,來執(zhí)行任務切換。另外,在任務執(zhí) 行過程中,任務切換電路210能夠不依賴CPU 150的處理能力獨立地執(zhí)行超時 值的更新處理。
圖15是任務切換電路210的狀態(tài)轉(zhuǎn)換圖。
在初始化處理(Al)之前,全部任務都處于IDLE狀態(tài)。當初始化處理完 成時(SIO),某一個任務成為RUN-任務,任務切換電路210處于任務執(zhí)行狀 態(tài)(A2)。當檢測出中斷請求信號時(S12),特殊任務成為RUN-任務,執(zhí)行 中斷處理(A3)。當中斷處理完成時(S14),任務切換電路210從常規(guī)任務中 選擇RUN-任務,并轉(zhuǎn)換到A2。
另外,在任務執(zhí)行過程中(A2),執(zhí)行系統(tǒng)調(diào)用時(S16),執(zhí)行系統(tǒng)調(diào)用 處理(A4)。在未發(fā)生任務切換即RUN-任務切換的情況下(S18),任務切換 電路210返回到A2。另一方面,在由于系統(tǒng)調(diào)用處理(A4)而發(fā)生任務切換的情況下(S20 ),任務切換電路210根據(jù)執(zhí)行選擇電路232的輸出來進行RUN-任務的選擇(A5)。當任務切換完成時(S22),處理狀態(tài)轉(zhuǎn)換到A2。
最后,附帶說明一下只安裝作為任務處理裝置100的主要部件的保存電路 120和任務控制電路200中的一個的情況。
圖16是圖5所示的任務處理裝置100中未配置任務控制電路200的任務 處理裝置IOO的電路圖。
代替配置任務控制電路200,追加有寄存器切換控制電路322和處理數(shù)據(jù) 存儲單元320。由于未配置任務控制電路200,因此任務調(diào)度功能由軟件RTOS 來實現(xiàn)。因而,RTOS在任務切換時,需要暫時取得CPU150的使用權。處理 數(shù)據(jù)存儲單元320通常存儲用于RTOS的處理數(shù)據(jù)。當RTOS取得CPU 150的 使用權時,處理數(shù)據(jù)存儲單元320調(diào)換存儲在處理數(shù)據(jù)存儲單元320中的RTOS 用處理數(shù)據(jù)和存儲在特殊寄存器156中的任務用處理數(shù)據(jù)。以下以從任務A向 任務B切換來說明該處理過程。
Al.當任務A執(zhí)行系統(tǒng)調(diào)用時,將系統(tǒng)調(diào)用中的變量以及系統(tǒng)調(diào)用ID記 錄在某些通用寄存器158內(nèi)。
A2.寄存器切換控制電路322將任務A的處理數(shù)據(jù)移動到處理數(shù)據(jù)存儲單 元320中,并將處理數(shù)據(jù)存儲單元320中的RTOS用處理數(shù)據(jù)加載到處理寄存 器組154中。在該階段,RTOS取得CPU 150的使用權。
A3.寄存器切換控制電路322向保存寄存器110a輸入寫入信號,以將處 理數(shù)據(jù)存儲單元320中存儲的任務A用處理數(shù)據(jù)保存到保存寄存器110中。
A4. RTOS根據(jù)記錄在通用寄存器158中的系統(tǒng)調(diào)用變量和ID,執(zhí)行與系 統(tǒng)調(diào)用相對應的處理。另外,將任務A的TCB中的任務狀態(tài)數(shù)據(jù)設定為 "READY",并向任務就緒表中追加任務A的TCB。
Bl.接著,RTOS按照前述的RUN-任務選擇條件,選擇RUN-任務,這里 是選擇任務B。B2. RTOS指示寄存器切換控制電路322將指定任務B的任務選擇信號輸 入到加載選擇電路112中。由此,處理數(shù)據(jù)從保存寄存器110b移動到處理數(shù) 據(jù)存儲單元320中。
B3.寄存器切換控制電路322調(diào)換處理數(shù)據(jù)存儲單元320中的任務B用處 理數(shù)據(jù)和處理寄存器組154中的RTOS用處理數(shù)據(jù)。由此,任務B取得CPU 150 的使用權。
根據(jù)這種處理方法,與配置任務控制電路200的圖5所示的任務處理裝置 IOO相比,能夠使任務處理裝置IOO整體電路小型化。RTOS是以軟件實現(xiàn)的, 但是處理數(shù)據(jù)的加載/保存是能夠由來自寄存器切換控制電路322的信號來硬 件控制的。如果將分別連接處理寄存器組154、處理數(shù)據(jù)存儲單元320、加載 選擇電路112、和保存寄存器110的總線設定為能夠并行傳輸處理數(shù)據(jù)的位數(shù), 則與將處理數(shù)據(jù)保存到TCB中和從TCB加載處理數(shù)據(jù)相比,能夠?qū)崿F(xiàn)更高速 的任務切換。
圖17是圖5所示的任務處理裝置100中未配置保存電路120的任務處理 裝置IOO的電路圖。
代替配置保存電路120,追加有中斷接口電路324。由于未配置保存電路 120,因此處理數(shù)據(jù)保存到存儲器的TCB中。處理數(shù)據(jù)的保存/加載由基于軟件 的RTOS來實現(xiàn)。因而,在任務切換時,RTOS需要暫時取得CPU150的使用 權。以下以從任務A向任務B切換來說明該處理過程。
當通過執(zhí)行系統(tǒng)調(diào)用來啟動任務切換時,首先軟件RTOS將任務A的處理 數(shù)據(jù)保存到任務A的TCB中。而且,將RTOS用處理數(shù)據(jù)加載到處理寄存器 組154中。此時的處理方法與參照圖3說明的內(nèi)容相似。
軟件RTOS向中斷接口電路324中寫入系統(tǒng)調(diào)用的參數(shù)。執(zhí)行控制電路152 使CPU 150的CPU時鐘停止。中斷接口電路324使任務控制電路200執(zhí)行任 務切換。任務切換電路210,首先將任務A的任務狀態(tài)寄存器258設定為READY,并根據(jù)來自任務選擇電路230的輸出選擇作為下一個RUN-任務的任 務B。任務切換電路210指示中斷接口電路324加載任務B的處理數(shù)據(jù)。這時, 中斷接口電路324使執(zhí)行控制電路152恢復CPU時鐘。另外,中斷接口電路 324通知軟件RTOS已經(jīng)選擇了任務B。軟件RTOS訪問任務B的TCB,以將 任務B的處理數(shù)據(jù)加載到處理寄存器組154中。
根據(jù)這種處理方法,與配置保存電路120的圖5所示任務處理裝置100相 比,能夠使任務處理裝置IOO整體電路小型化。RTOS功能的一部分是以軟件 實現(xiàn)的,但是任務選擇處理由任務控制電路200來實現(xiàn)。
與參照圖2以及圖3說明的軟件RTOS不同,圖16以及圖17所示的任務 處理裝置100,能夠任意地將RTOS功能的一部分硬件化。如參照圖16所述, 由于配置了保存電路120,而無需訪問用于處理數(shù)據(jù)保存/加載的TCB。因此, 能夠通過寄存器切換控制電路322來執(zhí)行處理數(shù)據(jù)的保存/加載處理。另夕卜,如 參照圖17所述,由于配置了任務控制電路200,因此軟件RTOS能夠?qū)⑷蝿者x 擇功能轉(zhuǎn)移給任務控制電路200。
如參照圖5所述,在配置了保存電路120和任務控制電路200的任務處理 裝置100的情況下,能夠?qū)TOS的任務調(diào)度功能完全^/f?;S捎谠谌蝿辙D(zhuǎn) 換時沒有必要訪問存儲器中的TCB,因此使任務切換處理的速度進一步提高。 本發(fā)明人等的實驗表明與參照圖3說明的普通軟件RTOS相比,本實施例中 的任務處理裝置100以約IOO倍的速度進行操作。
以上,參照實施例說明了本發(fā)明。這些實施例只是示例,本領域技術人員 能夠理解,能夠?qū)@些結構要素、處理流程的組合進行各種變型,而這些變型 也屬于本發(fā)明的范圍。
權利要求中所述的選擇電路的功能,由本實施例中的加載選擇電路112來 實現(xiàn)。
除此之外,本領域技術人員還能夠理解,由權利要求中所述的各結構要素 實現(xiàn)的其他功能,也能夠由本實施例中所述的各功能模塊單獨或者它們的結合來實現(xiàn)。
能夠通過以上實施例以及其變型例包括的本發(fā)明的各種方式,已經(jīng)以包括
權利要求范圍中所述內(nèi)容的形式,在下面列出。參照任務控制電路200的特征, 理解以下發(fā)明。
Cl. 一種任務處理裝置,該任務處理裝置包括
處理寄存器,用于暫時存儲用于執(zhí)行任務的數(shù)據(jù);執(zhí)行控制電路,用于將 命令(instruction)和操作數(shù)從存儲器加載到所述處理寄存器中,并按照所述處 理寄存器中的命令和操作數(shù)執(zhí)行任務;
多個狀態(tài)寄存器,用于存儲用于任務調(diào)度的每個任務的狀態(tài)數(shù)據(jù),分別與 多個任務相對應;
任務切換電路,用于執(zhí)行任務的切換;以及
任務選擇電路,用于以從多個所述狀態(tài)寄存器中并行輸出的狀態(tài)數(shù)據(jù)為輸 入,并根據(jù)規(guī)定的選擇條件來選擇任務;其中
當所述執(zhí)行控制電路執(zhí)行規(guī)定的系統(tǒng)調(diào)用命令時,將規(guī)定的系統(tǒng)調(diào)用信號 發(fā)送給所述任務切換電路;
所述任務選擇電路不依賴于是否有所述規(guī)定的系統(tǒng)調(diào)用命令,從表示能夠 執(zhí)行和等待執(zhí)行的處于READY (就緒)狀態(tài)的任務中,選擇成為執(zhí)行對象的 任務;
所述任務切換電路通過根據(jù)接收到所述系統(tǒng)調(diào)用信號時來自所述任務選 擇電路的輸出,選擇成為下一個執(zhí)行對象的任務,將所述處理寄存器中的數(shù)據(jù) 保存到規(guī)定的存儲區(qū)域,并將與執(zhí)行中的任務對應的所述狀態(tài)寄存器中的狀態(tài)
的任務對應的并保存在所述存儲區(qū)域中的數(shù)據(jù)加載到所述處理寄存器中,并將 與該選擇的任務對應的所述狀態(tài)寄存器中的狀態(tài)數(shù)據(jù)從READY狀態(tài)更新為 RUN狀態(tài),來切換成為執(zhí)行對象的任務。
C2.根據(jù)Cl所述的任務處理裝置,其中,所述任務選擇電路內(nèi)置有多階段連接的比較電路; 第l階
數(shù)據(jù),以將某一個任務的狀態(tài)數(shù)據(jù)輸出給第2階段的比較電路;
第n (n是2以上的自然數(shù))階段的比較電路根據(jù)所述規(guī)定的選擇條件來
比較第(n-l)階段的多個比較電路所輸出的狀態(tài)數(shù)據(jù),以輸出某一個任務的
狀態(tài)數(shù)據(jù),從而選擇最后階段的比較電路所指定的任務作為執(zhí)行對象。
C3.根據(jù)C2所述的任務處理裝置,其中,第k(k是自然數(shù))階段的比較
電路在所輸入的狀態(tài)數(shù)據(jù)都不滿足所述規(guī)定的選擇條件時,不輸出任何任務的
狀態(tài)數(shù)據(jù)。
C4.才艮據(jù)Cl所述的任務處理裝置,其中,所述狀態(tài)寄存器將任務優(yōu)先級 作為狀態(tài)數(shù)據(jù)的 一部分存儲;
當任務切換時有多個處于READY狀態(tài)的任務時,所述任務選擇電路選擇 這些任務中任務優(yōu)先級最高的任務作為執(zhí)行對象。
C5.根據(jù)C4所述的任務處理裝置,其中,當任務切換時存在多個處于 READY狀態(tài)的任務、且這些任務中任務優(yōu)先級最高的任務也存在多個時,任 務選擇電路選擇轉(zhuǎn)換為READY狀態(tài)后經(jīng)過時間最長的任務作為執(zhí)行對象。
C6.根據(jù)C5所述的任務處理裝置,該任務處理裝置還包括分別與多個任 務相對應的多個定時器;其中
當所述任務切換電路設定任務為READY狀態(tài)時,所述任務切換電路通過 設置與該任務對應的定時器,開始測量經(jīng)過時間。
C7.根據(jù)Cl所述的任務處理裝置,該任務處理裝置還包括用于對應存儲 信號量ID和信號量計數(shù)器的信號量信息存儲單元;其中
在所述執(zhí)行控制電路執(zhí)行指定信號量ID的作為用于請求信號量的系統(tǒng)調(diào) 用的等待信號量命令的情況下,
所述任務切換電路在所指定的信號量的信號量計數(shù)器是1以上時,使該信 號量計數(shù)器遞減,并將執(zhí)行所述等待信號量命令的任務的狀態(tài)數(shù)據(jù)更新為READY狀態(tài),以及,當該信號量計數(shù)器是0以下時,所述任務切換電路將執(zhí) 行所述等待信號量命令的任務的狀態(tài)數(shù)據(jù)設定為表示在滿足規(guī)定條件之前不 能執(zhí)行該任務的WAIT (等待)狀態(tài),并將所述所指定的信號量ID設定在對應 的所述狀態(tài)寄存器中,表示以該ID作為該任務的WAIT狀態(tài)解除條件;以及
在所述執(zhí)行控制電路執(zhí)行指定信號量ID的作為用于釋力丈信號量的系統(tǒng)調(diào) 用的釋放信號量命令的情況下,
所述任務選擇電路按照規(guī)定的選擇條件,從處于等待具有指定信號量ID 的信號量的WAIT狀態(tài)的任務中選擇某一個任務,并且
當所述任務選擇電路選擇出某一個任務時,所述任務切換電路更新該所選 任務的狀態(tài)數(shù)據(jù)為READY狀態(tài),而當沒有選擇出任何任務時,使所述所指定 的信號量的信號量計數(shù)器遞增。
C8.根據(jù)CI所述的任務處理裝置,該任務處理裝置還包括用于對應存儲 事件ID和第一標記模式的事件信息存儲單元;其中
在所迷執(zhí)行控制電路執(zhí)行指定事件ID和第二標記模式的作為用于等待事 件設定的系統(tǒng)調(diào)用的等待事件命令的情況下,
當通過對與所指定的事件對應的第 一標記模式和第二標記模式進行運算 操作,滿足規(guī)定的運算條件時,所述任務切換電路將執(zhí)行所述等待事件命令的 任務的狀態(tài)數(shù)據(jù)更新為READY狀態(tài),以及,當不滿足所述規(guī)定的運算條件時, 所述任務切換電路將執(zhí)行所述等待事件命令的任務設定為表示在滿足規(guī)定的 條件之前不能執(zhí)行該任務的狀態(tài)的WAIT狀態(tài),并且將所指定的事件ID和第 二標記模式設定在對應的所述狀態(tài)寄存器中,表示以該事件ID和該第二標記 模式作為該任務的WAIT狀態(tài)解除條件;以及
在所迷執(zhí)行控制電路執(zhí)行指定事件ID和第三標記模式的作為用于設定第 一標記模式的系統(tǒng)調(diào)用的設定事件命令的情況下,
所述任務切換電路對與所指定的事件對應的第三標記模式和第 一標記模 式進行邏輯或運算所述任務選擇電路選擇處于等待該指定的事件ID的事件的WAIT狀態(tài)的
任務;
當所述任務選擇電路選擇出某一個任務時,所述任務切換電路在存儲于所 選擇出的任務的所述狀態(tài)寄存器中的第二標記模式和第 一標記模式之間滿足
規(guī)定的運算條件的情況下,將所選擇的任務從WAIT狀態(tài)更新為READY狀態(tài)。 C9.根據(jù)C1所述的任務處理裝置,其中,所述狀態(tài)寄存器將超時計數(shù)器
作為狀態(tài)數(shù)據(jù)的 一部分存儲;
在所述執(zhí)行控制電路執(zhí)行附帶超時條件的系統(tǒng)調(diào)用命令的情況下, 所述任務切換電路將執(zhí)行所述附帶超時條件的系統(tǒng)調(diào)用命令的任務的狀
態(tài)數(shù)據(jù)更新為WAIT狀態(tài),并且開始更新超時計數(shù)器;
所述任務選擇電路檢測處于WAIT狀態(tài)中已超時的任務; 所述任務切換電路將所述已超時的任務的狀態(tài)數(shù)據(jù)從WAIT狀態(tài)更新為
READY狀態(tài)。
CIO.根據(jù)C1所述的任務處理裝置,該任務處理裝置還包括用于對應存儲 互斥ID和互斥獲取狀態(tài)的互斥信息存儲單元;其中
在所述執(zhí)行控制電路執(zhí)行指定互斥ID的作為用于請求互斥的系統(tǒng)調(diào)用命 令的等待互斥命令的情況下,
所述任務切換電^各在所指定的互斥原來是非占用狀態(tài)時,設定該所指定的 互斥為占用狀態(tài),并將執(zhí)行所述等待互斥命令的任務的狀態(tài)數(shù)據(jù)更新為 READY狀態(tài),以及,在該所指定的互斥是占用狀態(tài)時,將執(zhí)行所述等待互斥 命令的任務設定為表示在滿足規(guī)定條件之前不能執(zhí)行該任務的狀態(tài)的WAIT狀 態(tài),并且將所述所指定的互斥ID設定在對應的所述狀態(tài)寄存器中,表示以所 述互斥ID作為該任務的WAIT狀態(tài)解除條件;以及
當所述執(zhí)行控制電路執(zhí)行指示互斥ID的作為用于釋放互斥的系統(tǒng)調(diào)用命 令的釋放互斥命令的情況下,
所述任務選擇電路按照規(guī)定的選擇條件,選擇處于等待所指定的互斥ID的互斥的WAIT狀態(tài)的任務中的某一個任務;
所述任務切換電路將所指定的互斥設定為非占用狀態(tài),當所述任務選擇電 路選擇出某一個任務時,將所選擇的任務的狀態(tài)數(shù)據(jù)更新為READY狀態(tài)。
Cll.根據(jù)C1所述的任務處理裝置,該任務處理裝置還包括多個保存寄存 器,用于在所述處理寄存器中保存數(shù)據(jù),分別與多個任務相對應;其中,
當所述任務切換電路接收到所述規(guī)定的系統(tǒng)調(diào)用信號時,將所述處理寄存 器中的數(shù)據(jù)保存到與執(zhí)行中的任務對應的所述保存寄存器中,并將與通過所述 任務選擇電路所選擇的任務對應的所述保存寄存器中的數(shù)據(jù)加載到所述處理 寄存器中。
工業(yè)實用性
根據(jù)本發(fā)明,能夠在多任務處理中實現(xiàn)更高效的任務執(zhí)行控制。
權利要求
1.一種任務處理裝置,包括處理寄存器,用于暫時存儲用于執(zhí)行任務的數(shù)據(jù);執(zhí)行控制電路,用于將命令和操作數(shù)從存儲器加載到所述處理寄存器中,并按照所述處理寄存器中的命令和操作數(shù)執(zhí)行任務;多個保存寄存器,用于保存所述處理寄存器中的數(shù)據(jù),并分別與多個任務相對應;以及任務控制電路,用于控制任務的切換;其中當所述執(zhí)行控制電路執(zhí)行規(guī)定的系統(tǒng)調(diào)用命令時,將規(guī)定的系統(tǒng)調(diào)用信號發(fā)送給所述任務控制電路;所述任務控制電路接收到所述規(guī)定的系統(tǒng)調(diào)用信號時,將所述處理寄存器中的數(shù)據(jù)保存到與執(zhí)行中的任務相對應的所述保存寄存器中,按照規(guī)定規(guī)則選擇下一個應執(zhí)行的任務,并將與所選擇的任務相對應的所述保存寄存器中的數(shù)據(jù)加載到所述處理寄存器中,由此來切換成為執(zhí)行對象的任務。
2. 根據(jù)權利要求1所述的任務處理裝置,其特征在于,當所述執(zhí)行控制 電路執(zhí)行所述規(guī)定的系統(tǒng)調(diào)用命令時,停止提供用于進行任務執(zhí)行流程的執(zhí)行 用時鐘,并在將所述保存寄存器中的數(shù)據(jù)加載到所述處理寄存器中后,恢復所 述執(zhí)行用時鐘。
3. 根據(jù)權利要求2所述的任務處理裝置,其特征在于,在對多個命令進行流水線處理的情況下,所述執(zhí)行控制電路在執(zhí)行所述規(guī) 定的系統(tǒng)調(diào)用命令時,以執(zhí)行中的其它命令執(zhí)行到規(guī)定的可中斷階段為條件, 來使所述執(zhí)行用時鐘停止。
4. 根據(jù)權利要求1所述的任務處理裝置,其特征在于, 所述處理寄存器中的數(shù)據(jù)被不斷地輸出到多個所述保存寄存器中;號,以將所述處理寄存器中的數(shù)據(jù)保存到對應的所述保存寄存器中。
5. 根據(jù)權利要求1所述的任務處理裝置,其特征在于,該任務處理裝置 還包括選擇電路,用于當要從所述保存寄存器向所述處理寄存器中加載數(shù)據(jù) 時,選擇成為數(shù)據(jù)發(fā)送源的所述保存寄存器;其中,多個所述保存寄存器中的數(shù)據(jù)被不斷地輸出到所述選擇電路中; 所述任務控制電路將指定了與選為執(zhí)行對象的任務相對應的所述保存寄存器的輸出信號發(fā)送給所述選擇電路,從而將該保存寄存器中的數(shù)據(jù)加載到所述處理寄存器中。
6. 根據(jù)權利要求1所述的任務處理裝置,其特征在于,所述處理寄存器 和多個所述保存寄存器通過具有能夠并行傳輸所述處理寄存器中數(shù)據(jù)的位數(shù) 的總線連接。
7. 根據(jù)權利要求2所述的任務處理裝置,其特征在于,當所述任務控制電路從外部接收到規(guī)定的中斷請求信號時,向所述執(zhí)行控 制電路發(fā)送停止請求信號;所述執(zhí)行控制電路接收到所述停止請求信號時,停止提供所述執(zhí)行用時 鐘,并在將用于執(zhí)行中斷任務的數(shù)據(jù)加載到所述處理寄存器中后,恢復^是供所 述執(zhí)行用時鐘,由此執(zhí)行與所述中斷請求信號對應的中斷任務。
全文摘要
本發(fā)明實現(xiàn)了多任務OS的任務調(diào)度高速化。任務處理裝置(100)包括CPU(150)、保存電路(120)以及任務控制電路(200)。CPU(150)配置有處理寄存器、和將數(shù)據(jù)從存儲器加載到處理寄存器中并按照處理寄存器中的數(shù)據(jù)來執(zhí)行任務的執(zhí)行控制電路(152)。保存電路(120)配置有分別對應多個任務的多個保存寄存器(110)。當執(zhí)行規(guī)定的系統(tǒng)調(diào)用命令時,執(zhí)行控制電路(152)將通知任務控制電路(200)。當收到系統(tǒng)調(diào)用命令執(zhí)行通知時,任務控制電路(200)將處理寄存器中的數(shù)據(jù)保存到與執(zhí)行中的任務相對應的保存寄存器(110)中,接著選擇下一個應被執(zhí)行的任務,并將與所選擇任務相對應的保存寄存器(110)中的數(shù)據(jù)加載到處理寄存器(154)中,從而切換執(zhí)行對象的任務。
文檔編號G06F9/48GK101529383SQ20068005567
公開日2009年9月9日 申請日期2006年8月24日 優(yōu)先權日2006年8月24日
發(fā)明者丸山修孝 申請人:內(nèi)特可力亞斯系統(tǒng)股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
桃园县| 沭阳县| 汤阴县| 阳泉市| 康平县| 临高县| 陵水| 庆城县| 天峻县| 永安市| 长春市| 独山县| 林口县| 赤峰市| 紫金县| 乌什县| 塔城市| 天祝| 棋牌| 万源市| 紫金县| 贡山| 汽车| 乐山市| 鄢陵县| 团风县| 鄂托克旗| 彭州市| 河北省| 乌拉特前旗| 乐安县| 天镇县| 格尔木市| 瑞安市| 汝州市| 黄梅县| 镶黄旗| 武穴市| 万宁市| 五峰| 宜州市|