国产精品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>

      任務(wù)處理裝置制造方法

      文檔序號(hào):6498538閱讀:409來(lái)源:國(guó)知局
      任務(wù)處理裝置制造方法
      【專(zhuān)利摘要】能在多個(gè)CPU中同時(shí)執(zhí)行多個(gè)任務(wù)。在多個(gè)CPU上連接有任務(wù)控制電路,各CPU執(zhí)行系統(tǒng)調(diào)用命令時(shí),向任務(wù)控制電路發(fā)送系統(tǒng)調(diào)用信號(hào)。接到來(lái)自CPU0的系統(tǒng)調(diào)用信號(hào)時(shí),任務(wù)控制電路(200)參照處理器管理寄存器,確定CPU0的RUN-任務(wù),接著選擇作為執(zhí)行對(duì)象的READY-任務(wù),替換RUN-任務(wù)的處理數(shù)據(jù)與READY-任務(wù)的處理數(shù)據(jù),以更新處理器管理信息。
      【專(zhuān)利說(shuō)明】
      任務(wù)處理裝置

      【技術(shù)領(lǐng)域】
      [0001]本發(fā)明涉及一種OS (Operating System,操作系統(tǒng))的功能,尤其是涉及一種對(duì)應(yīng)于多處理器的0S。

      【背景技術(shù)】
      [0002]不僅是用于如個(gè)人計(jì)算機(jī)等通用設(shè)備的0S,就連如用于移動(dòng)電話(huà)等的專(zhuān)用設(shè)備的0S中也逐漸需要高級(jí)功能。特別是能夠用一個(gè)中央處理器(CPU)執(zhí)行多個(gè)任務(wù)的OS (以下也將這種類(lèi)型的0S稱(chēng)作“多任務(wù)0S”)正被配置在很多的電子設(shè)備中。
      [0003]多任務(wù)0S將CPU的處理時(shí)間分割為單位時(shí)間(時(shí)間段),并為多個(gè)任務(wù)順序分配時(shí)間段。每個(gè)任務(wù)只有當(dāng)從0S獲得時(shí)間段時(shí)才能夠使用CPU。在一個(gè)時(shí)間段中執(zhí)行一個(gè)任務(wù)。由于對(duì)于用戶(hù)而言時(shí)間段是非常短的時(shí)間,因此多個(gè)任務(wù)看似是同時(shí)執(zhí)行的。根據(jù)這種處理方法,通過(guò)在任務(wù)A呈等待輸入的狀態(tài)因而暫時(shí)不需要用到CPU的處理能力時(shí),通過(guò)將執(zhí)行權(quán)交給其它任務(wù)B,能夠有效利用CPU的處理能力。這里所說(shuō)的執(zhí)行權(quán)等同于CPU的使用權(quán)。
      [0004]多任務(wù)0S進(jìn)行的執(zhí)行權(quán)切換被稱(chēng)作“任務(wù)轉(zhuǎn)換”。任務(wù)轉(zhuǎn)換是在時(shí)間段已經(jīng)屆滿(mǎn)或任務(wù)執(zhí)行了規(guī)定命令時(shí)發(fā)生。當(dāng)?shù)竭_(dá)任務(wù)轉(zhuǎn)換的執(zhí)行時(shí)刻時(shí),多任務(wù)0S將執(zhí)行中的任務(wù)的上下文信息保存到TCB (Task Control Block:任務(wù)控制塊)中。上下文信息是指任務(wù)執(zhí)行時(shí)存儲(chǔ)在CPU的寄存器中的數(shù)據(jù)或與任務(wù)執(zhí)行狀態(tài)有關(guān)的數(shù)據(jù)。TCB是指用于存儲(chǔ)任務(wù)固有的信息而在存儲(chǔ)器中預(yù)留的區(qū)域。多任務(wù)0S將執(zhí)行中的任務(wù)的上下文信息保存到TCB中后,選擇下一個(gè)分配執(zhí)行權(quán)的任務(wù),從TCB中讀出上下文信息,并將該信息加載到CPU寄存器中。由此,各任務(wù)以時(shí)間段為單位逐步執(zhí)行自身的處理。
      [0005]多任務(wù)0S具有能夠高效地執(zhí)行多個(gè)任務(wù)的優(yōu)點(diǎn),但是也具有新產(chǎn)生與上下文信息的保存/加載相對(duì)應(yīng)的耗時(shí)的缺點(diǎn)。通常多任務(wù)0S的優(yōu)點(diǎn)遠(yuǎn)遠(yuǎn)大于伴隨任務(wù)轉(zhuǎn)換的耗時(shí)。
      [0006]近年來(lái),以嵌入式系統(tǒng)(Embedded System)為中心,正在普及嚴(yán)格要求在規(guī)定時(shí)間內(nèi)結(jié)束處理的實(shí)時(shí)0S (以下稱(chēng)作“RT0S (Real-Time Operating System)”)。在這種時(shí)間要求嚴(yán)格的RT0S中,存在任務(wù)轉(zhuǎn)換時(shí)的耗時(shí)大大影響系統(tǒng)整體性能的情況。
      [0007]本發(fā)明人開(kāi)發(fā)出一種利用硬件邏輯來(lái)實(shí)現(xiàn)任務(wù)轉(zhuǎn)換的任務(wù)控制裝置(參照專(zhuān)利文獻(xiàn)4、5)。另外,本發(fā)明人還成功實(shí)現(xiàn)了利用硬件邏輯來(lái)實(shí)現(xiàn)隊(duì)列的管理與中斷處理(參照專(zhuān)利文獻(xiàn)6、7)。根據(jù)這些發(fā)明組,大大減少了伴隨任務(wù)轉(zhuǎn)換的耗時(shí)。
      [0008][專(zhuān)利文獻(xiàn)1]:日本特開(kāi)平11-234302號(hào)公報(bào)
      [0009][專(zhuān)利文獻(xiàn)2]:日本特開(kāi)平11-272480號(hào)公報(bào)
      [0010][專(zhuān)利文獻(xiàn)3]:日本特開(kāi)2001-75820號(hào)公報(bào)
      [0011][專(zhuān)利文獻(xiàn)4]:日本特許4119945號(hào)公報(bào)
      [0012][專(zhuān)利文獻(xiàn)5]:日本特許4127848號(hào)公報(bào)
      [0013][專(zhuān)利文獻(xiàn)6]:日本特許4088335號(hào)公報(bào)
      [0014][專(zhuān)利文獻(xiàn)7]:日本特開(kāi)2010-049700號(hào)公報(bào)
      [0015][非專(zhuān)利文獻(xiàn)I]森久直,坂卷佳壽美,重松宏志,“用于嵌入式控制系統(tǒng)的實(shí)時(shí)操作系統(tǒng)(OS)的硬件實(shí)現(xiàn)“組込辦制御'> 7 f A向汁'J 夕4 Λ OS CO /、一卜''々工7*化(Hardware implementat1n of a read-time operating system for embedded controlsystem) ”),東京都立產(chǎn)業(yè)技術(shù)研究所研究報(bào)告,日本,2005年8月4日(收稿),8,第55-58頁(yè)。


      【發(fā)明內(nèi)容】

      [0016]本發(fā)明要解決的技術(shù)問(wèn)題
      [0017]但是,即使是多任務(wù)OS,只要CPU的數(shù)量為單個(gè),也只是模擬同時(shí)執(zhí)行多個(gè)任務(wù)。下面,將由單個(gè)CPU動(dòng)作的系統(tǒng)稱(chēng)為“SP系統(tǒng)(Single-Proccessor System:單核處理系統(tǒng))”,將對(duì)應(yīng)于SP系統(tǒng)的RTOS稱(chēng)為“SPRT0S”。
      [0018]另外,正在推廣真正通過(guò)多個(gè)CPU同時(shí)執(zhí)行多個(gè)任務(wù)的方法。下面,將使多個(gè)CPU同時(shí)動(dòng)作的系統(tǒng)稱(chēng)為“MP系統(tǒng)(Mult1-Processors System:多核處理系統(tǒng))”。另外,將對(duì)應(yīng)于MP系統(tǒng)的RTOS稱(chēng)為“MPRT0S”。
      [0019]在MP系統(tǒng)中,需要有多個(gè)CPU安全地共有數(shù)據(jù)的排他控制。根據(jù)請(qǐng)求,由于伴隨排他控制的耗時(shí)(執(zhí)行成本)變得過(guò)大,因此,處理能力沒(méi)有提高至所期待的程度,甚至處理能力降至SP系統(tǒng)以下。本發(fā)明人考慮到如果也能將上述的任務(wù)控制電路的設(shè)計(jì)思想應(yīng)用于MP系統(tǒng),是否也能降低伴隨排他控制的耗時(shí)。
      [0020]本發(fā)明是根據(jù)本發(fā)明人的上述著眼點(diǎn)而完成的,其目的在于提供一種用于更高效地在MP系統(tǒng)中執(zhí)行和控制任務(wù)的技術(shù),尤其是提供一種能降低伴隨排他控制的耗時(shí)的技術(shù)。
      [0021]為解決技術(shù)問(wèn)題的方法
      [0022]本發(fā)明的一個(gè)方面涉及一種任務(wù)處理裝置。
      [0023]該任務(wù)處理裝置與多個(gè)處理器連接,統(tǒng)一管理多個(gè)處理器執(zhí)行的多個(gè)任務(wù)的執(zhí)行狀態(tài)。處理器在執(zhí)行系統(tǒng)調(diào)用命令時(shí),向任務(wù)控制電路發(fā)送系統(tǒng)調(diào)用信號(hào)。
      [0024]任務(wù)控制電路在從某個(gè)處理器A接收到系統(tǒng)調(diào)用信號(hào)時(shí),通過(guò)參照處理器A的處理器ID與注冊(cè)有該處理器A執(zhí)行中的任務(wù)的任務(wù)ID的處理器管理信息,確定處理器A執(zhí)行中的任務(wù)Tl,在READY (預(yù)備)狀態(tài)下主動(dòng)地從待機(jī)中的任務(wù)選擇作為下一個(gè)執(zhí)行對(duì)象的任務(wù)T2,使任務(wù)Tl的處理數(shù)據(jù)從處理器A的處理寄存器保存至規(guī)定的存儲(chǔ)區(qū)域,使任務(wù)T2的處理數(shù)據(jù)加載至處理器A的處理寄存器而更新處理器管理信息,由此來(lái)執(zhí)行處理器A的任務(wù)轉(zhuǎn)換。
      [0025]采用本實(shí)施方式,將與作為任務(wù)執(zhí)行主體的CPU等處理器不同硬件的任務(wù)控制電路作為MPRTOS來(lái)發(fā)揮功能。任務(wù)處理裝置不是根據(jù)來(lái)自處理器或軟件的指示來(lái)選擇任務(wù),而是通過(guò)自身內(nèi)置的硬件邏輯來(lái)主動(dòng)地選擇任務(wù)。由于在處理器管理信息中注冊(cè)有各處理器的任務(wù)的執(zhí)行情況,因此任務(wù)控制電路能實(shí)時(shí)地監(jiān)視各處理器的狀態(tài)。
      [0026]此外,以上結(jié)構(gòu)要素的任意組合以及通過(guò)方法、系統(tǒng)來(lái)表現(xiàn)本發(fā)明的實(shí)現(xiàn)方式,也可以作為本發(fā)明的有效方式
      [0027]發(fā)明效果
      [0028]采用本發(fā)明,能實(shí)現(xiàn)更高效地在MP系統(tǒng)中執(zhí)行和控制任務(wù)。

      【專(zhuān)利附圖】

      【附圖說(shuō)明】
      [0029]圖1是任務(wù)的狀態(tài)轉(zhuǎn)移圖。
      [0030]圖2是普通RTOS的概念圖。
      [0031 ]圖3是執(zhí)行軟件RTOS的普通CPU的電路圖。
      [0032]圖4是本發(fā)明實(shí)施方式中的RTOS的概念圖。
      [0033]圖5是基本實(shí)施方式中的任務(wù)處理裝置的電路圖。
      [0034]圖6是圖5的CPU的電路圖。
      [0035]圖7是表示執(zhí)行控制電路152使CPU時(shí)鐘停止的構(gòu)造的電路圖。
      [0036]圖8(a)是表示中斷請(qǐng)求信號(hào)發(fā)生時(shí)各種信號(hào)之間的關(guān)系的時(shí)序圖。
      [0037]圖8 (b)是表不執(zhí)行系統(tǒng)調(diào)用時(shí)各種彳目號(hào)之間的關(guān)系的時(shí)序圖。
      [0038]圖9是用于說(shuō)明流水線(xiàn)(pipeline)處理中CPU時(shí)鐘停止時(shí)刻的示意圖。
      [0039]圖10是表示狀態(tài)存儲(chǔ)單元和任務(wù)切換電路之間的關(guān)系的電路圖。
      [0040]圖11是表示普通RTOS進(jìn)行RUN-任務(wù)選擇時(shí)所采用的任務(wù)就緒表的圖。
      [0041 ]圖12是執(zhí)行選擇電路的電路圖。
      [0042]圖13是表示普通RTOS進(jìn)行信號(hào)量處理時(shí)所采用的等待信號(hào)量表(waitsemaphore list)的圖。
      [0043]圖14是信號(hào)量選擇電路的電路圖。
      [0044]圖15是任務(wù)切換電路的狀態(tài)轉(zhuǎn)移圖。
      [0045]圖16是圖5的任務(wù)處理裝置中未配置任務(wù)控制電路時(shí)的任務(wù)處理裝置的電路圖。
      [0046]圖17是圖5的任務(wù)處理裝置中未配置保存電路時(shí)的任務(wù)處理裝置的電路圖。
      [0047]圖18是虛擬隊(duì)列實(shí)施方式中的任務(wù)處理裝置的電路圖。
      [0048]圖19是虛擬隊(duì)列實(shí)施方式中的任務(wù)控制電路的部分電路圖。
      [0049]圖20是隊(duì)列控制電路的電路圖。
      [0050]圖21是表示虛擬隊(duì)列和任務(wù)之間的關(guān)系的概念圖。
      [0051]圖22是與圖21對(duì)應(yīng)的狀態(tài)寄存器的數(shù)據(jù)結(jié)構(gòu)圖。
      [0052]圖23是向圖21的虛擬隊(duì)列順序輸入任務(wù)(E4)時(shí)的概念圖。
      [0053]圖24是與圖23對(duì)應(yīng)的狀態(tài)寄存器的數(shù)據(jù)結(jié)構(gòu)圖。
      [0054]圖25是向圖23的虛擬隊(duì)列順序輸入任務(wù)(E5)時(shí)的概念圖。
      [0055]圖26是與圖25對(duì)應(yīng)的狀態(tài)寄存器的數(shù)據(jù)結(jié)構(gòu)圖。
      [0056]圖27是表示順序輸入的處理過(guò)程的流程圖。
      [0057]圖28是最大值選擇電路的部分電路圖。
      [0058]圖29是向圖25的虛擬隊(duì)列中逆序輸入任務(wù)(E6)的概念圖。
      [0059]圖30是與圖29對(duì)應(yīng)的狀態(tài)寄存器的數(shù)據(jù)結(jié)構(gòu)圖。
      [0060]圖31是表示逆序輸入的處理過(guò)程的流程圖。
      [0061]圖32是任務(wù)選擇電路的部分電路圖。
      [0062]圖33是從圖29的虛擬隊(duì)列中抽取任務(wù)(E3)的概念圖。
      [0063]圖34是與圖33對(duì)應(yīng)的狀態(tài)寄存器的數(shù)據(jù)結(jié)構(gòu)圖。
      [0064]圖35是表示抽取處理過(guò)程的流程圖。
      [0065]圖36是表示再執(zhí)行優(yōu)先型任務(wù)調(diào)度中的虛擬隊(duì)列和任務(wù)之間的關(guān)系的第一概念圖。
      [0066]圖37是表示再執(zhí)行優(yōu)先型任務(wù)調(diào)度中的虛擬隊(duì)列和任務(wù)之間的關(guān)系的第二概念圖。
      [0067]圖38是通過(guò)普通軟件0S進(jìn)行中斷處理的時(shí)序圖。
      [0068]圖39是HW中斷實(shí)施方式的任務(wù)處理裝置的電路圖。
      [0069]圖40是中斷電路的電路圖。
      [0070]圖41是存儲(chǔ)部的數(shù)據(jù)結(jié)構(gòu)圖。
      [0071]圖42是中斷操作命令的數(shù)據(jù)結(jié)構(gòu)。
      [0072]圖43是表示高速中斷處理的過(guò)程的順序圖。
      [0073]圖44是HW中斷實(shí)施方式的任務(wù)切換電路的狀態(tài)轉(zhuǎn)移圖。
      [0074]圖45是表示HW中斷實(shí)施方式的任務(wù)處理裝置進(jìn)行高速中斷處理的處理過(guò)程的時(shí)序圖。
      [0075]圖46是普通MP系統(tǒng)的硬件結(jié)構(gòu)圖。
      [0076]圖47是示意性地表示存儲(chǔ)器的數(shù)據(jù)結(jié)構(gòu)的圖。
      [0077]圖48是MP實(shí)施方式的任務(wù)處理裝置的電路圖。
      [0078]圖49是MP任務(wù)ID的數(shù)據(jù)結(jié)構(gòu)圖。
      [0079]圖50是處理器管理信息的數(shù)據(jù)結(jié)構(gòu)圖。
      [0080]圖51是MP實(shí)施方式的READY隊(duì)列的概念圖。
      [0081]圖52是MP實(shí)施方式的WAIT隊(duì)列的概念圖。
      [0082]圖53是與圖51、圖52對(duì)應(yīng)的狀態(tài)寄存器的數(shù)據(jù)結(jié)構(gòu)圖。
      [0083]圖54是表示分派時(shí)虛擬隊(duì)列與任務(wù)之間的關(guān)系的概念圖。
      [0084]圖55是在任務(wù)切換電路中組入處理器切換電路的功能時(shí)的任務(wù)處理裝置的電路圖。

      【具體實(shí)施方式】
      [0085]本發(fā)明實(shí)施方式的任務(wù)處理裝置100是由電子電路來(lái)實(shí)現(xiàn)MP系統(tǒng)的任務(wù)調(diào)度與排他控制,并且提高其處理效率。
      [0086]首先,作為“基本實(shí)施方式”對(duì)通過(guò)電子電路來(lái)實(shí)現(xiàn)SP系統(tǒng)的任務(wù)調(diào)度的任務(wù)處理裝置100進(jìn)行說(shuō)明。接著,作為“虛擬隊(duì)列實(shí)施方式”對(duì)虛擬隊(duì)列算法的實(shí)施方法進(jìn)行說(shuō)明,作為“HW中斷實(shí)施方式”對(duì)由硬件主導(dǎo)的中斷處理的實(shí)施方法進(jìn)行說(shuō)明。說(shuō)明了以上三個(gè)例子之后,作為“MP實(shí)施方式”對(duì)以MP系統(tǒng)為對(duì)象的任務(wù)處理裝置100進(jìn)行說(shuō)明。
      [0087]下面,提及“本實(shí)施方式”時(shí),原則上是表示整個(gè)“基本實(shí)施方式”、“虛擬隊(duì)列實(shí)施方式”、“HW中斷實(shí)施方式”以及“HW中斷實(shí)施方式”。
      [0088][基本實(shí)施方式(SP系統(tǒng))]
      [0089]本實(shí)施方式所示的任務(wù)處理裝置100由電子電路來(lái)實(shí)現(xiàn)多任務(wù)0S的任務(wù)調(diào)度功能。在詳細(xì)說(shuō)明任務(wù)處理裝置100之前,首先參照?qǐng)D1說(shuō)明任務(wù)的狀態(tài)轉(zhuǎn)移。這里雖然是對(duì)普通多任務(wù)0S中的任務(wù)狀態(tài)轉(zhuǎn)移進(jìn)行說(shuō)明,但是這些說(shuō)明對(duì)于任務(wù)處理裝置100中的任務(wù)狀態(tài)轉(zhuǎn)移同樣適用。另外,還對(duì)在任務(wù)處理裝置100中執(zhí)行的系統(tǒng)調(diào)用進(jìn)行概述。在參照?qǐng)D2和圖3描述普通多任務(wù)OS的設(shè)計(jì)思想的基礎(chǔ)上,參照?qǐng)D4至圖10詳細(xì)描述本發(fā)明實(shí)施方式中的任務(wù)處理裝置100的處理方法。并且,對(duì)于與信號(hào)量(Semaphore)或互斥量(Mutex)、事件等有關(guān)的處理,也適當(dāng)通過(guò)與一般技術(shù)進(jìn)行比較來(lái)說(shuō)明任務(wù)處理裝置100的特征。
      [0090][任務(wù)的狀態(tài)轉(zhuǎn)移]
      [0091]圖1是任務(wù)的狀態(tài)轉(zhuǎn)移圖。
      [0092]在多任務(wù)處理中,各任務(wù)都具有“狀態(tài)(State) ”。各任務(wù)在多個(gè)狀態(tài)之間轉(zhuǎn)換,通常是處于某一個(gè)狀態(tài)。狀態(tài)轉(zhuǎn)移由“系統(tǒng)調(diào)用的執(zhí)行”和“檢測(cè)出中斷請(qǐng)求信號(hào)”來(lái)觸發(fā)。系統(tǒng)調(diào)用是各任務(wù)執(zhí)行的命令中的特殊命令。中斷請(qǐng)求信號(hào)是在按下鍵盤(pán)或點(diǎn)擊鼠標(biāo)、接收通信數(shù)據(jù)等從外圍設(shè)備接收規(guī)定數(shù)據(jù)時(shí)發(fā)生的信號(hào)。當(dāng)然,當(dāng)分配給各任務(wù)的時(shí)間段耗盡時(shí)也發(fā)生狀態(tài)轉(zhuǎn)移。
      [0093]任務(wù)大致分為“普通任務(wù)”和“特殊任務(wù)”兩大類(lèi)。普通任務(wù)是響應(yīng)系統(tǒng)調(diào)用而執(zhí)行的非特殊任務(wù)。特殊任務(wù)是響應(yīng)檢測(cè)出中斷請(qǐng)求信號(hào)而執(zhí)行的任務(wù),即所謂的中斷處理程序。首先描述各個(gè)任務(wù)狀態(tài),然后說(shuō)明各種系統(tǒng)調(diào)用命令。
      [0094](I) STOP狀態(tài)(休眠狀態(tài))
      [0095]表示任務(wù)處于休眠狀態(tài)。普通任務(wù)和特殊任務(wù)都能夠處于STOP狀態(tài)。以下將處于STOP狀態(tài)的任務(wù)稱(chēng)作“STOP-任務(wù)”。
      [0096]1-1.普通任務(wù)
      [0097]當(dāng)其它任務(wù)執(zhí)行指示啟動(dòng)另一項(xiàng)任務(wù)的系統(tǒng)調(diào)用(下面稱(chēng)作“啟動(dòng)系統(tǒng)調(diào)用”)時(shí),處于STOP狀態(tài)的普通任務(wù)轉(zhuǎn)換到后述的READY狀態(tài)。
      [0098]1-2.特殊任務(wù)
      [0099]特殊任務(wù)通常處于STOP狀態(tài)。當(dāng)通過(guò)后述的任務(wù)切換電路210檢測(cè)出中斷請(qǐng)求信號(hào)時(shí),特殊任務(wù)從STOP狀態(tài)轉(zhuǎn)換到后述的RUN狀態(tài)。此時(shí)原來(lái)處于RUN狀態(tài)的任務(wù)轉(zhuǎn)換到READY狀態(tài)。
      [0100]⑵RUN狀態(tài)(執(zhí)行狀態(tài))
      [0101]表示任務(wù)正在執(zhí)行中,即任務(wù)被分配了時(shí)間段,獲得了 CPU的使用權(quán)的狀態(tài)。普通任務(wù)和特殊任務(wù)都能夠處于RUN狀態(tài)。下面將處于RUN狀態(tài)的任務(wù)稱(chēng)作“RUN-任務(wù)”。多個(gè)任務(wù)中處于RUN狀態(tài)的任務(wù)始終只能有一個(gè),而不能有兩個(gè)任務(wù)同時(shí)處于RUN狀態(tài)。
      [0102]2-1.普通任務(wù)
      [0103]當(dāng)執(zhí)行規(guī)定的系統(tǒng)調(diào)用時(shí),處于RUN狀態(tài)的普通任務(wù)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)或者后述的WAIT狀態(tài)。處于RUN狀態(tài)的普通任務(wù)在耗盡時(shí)間段時(shí),也轉(zhuǎn)換到READY狀態(tài)。在任意一種情況下,原來(lái)處于READY狀態(tài)的普通任務(wù)轉(zhuǎn)換到RUN狀態(tài),來(lái)替代原來(lái)處于RUN狀態(tài)的普通任務(wù)。當(dāng)檢測(cè)出中斷請(qǐng)求信號(hào)時(shí),RUN-任務(wù)轉(zhuǎn)換到READY狀態(tài)。此時(shí),原先處于STOP狀態(tài)的特殊任務(wù)轉(zhuǎn)換到RUN狀態(tài)。
      [0104]當(dāng)RUN-任務(wù)執(zhí)行使自身結(jié)束的系統(tǒng)調(diào)用(下面稱(chēng)作“結(jié)束系統(tǒng)調(diào)用”)時(shí),該RUN-任務(wù)轉(zhuǎn)換到STOP狀態(tài)。
      [0105]2-2.特殊任務(wù)
      [0106]當(dāng)根據(jù)中斷請(qǐng)求信號(hào)從STOP狀態(tài)轉(zhuǎn)換到RUN狀態(tài)的特殊任務(wù)結(jié)束自身處理時(shí),返回到STOP狀態(tài)。特殊任務(wù)只能夠處于STOP狀態(tài)和RUN狀態(tài)。
      [0107](3) READY狀態(tài)(可執(zhí)行狀態(tài))
      [0108]表示任務(wù)處于可被執(zhí)行的狀態(tài)。如果處于READY狀態(tài)的任務(wù)從0S得到執(zhí)行權(quán),則隨時(shí)都能夠轉(zhuǎn)換到RUN狀態(tài)。只有普通任務(wù)可以處于READY狀態(tài)。以下將處于READY狀態(tài)的任務(wù)稱(chēng)作“READY-任務(wù)”。
      [0109]當(dāng)原先處于RUN狀態(tài)的普通任務(wù)由于系統(tǒng)調(diào)用的執(zhí)行而轉(zhuǎn)換到RUN狀態(tài)以外的狀態(tài)時(shí),或者當(dāng)處于RUN狀態(tài)的特殊任務(wù)結(jié)束自身處理而轉(zhuǎn)換到STOP狀態(tài)時(shí),READY-任務(wù)進(jìn)而轉(zhuǎn)換到RUN狀態(tài)。普通任務(wù)只能從READY狀態(tài)來(lái)轉(zhuǎn)換到RUN狀態(tài)。當(dāng)有多個(gè)處于READY狀態(tài)的任務(wù)時(shí),根據(jù)作為上下文信息的一部分的任務(wù)優(yōu)先級(jí),使某一個(gè)READY-任務(wù)轉(zhuǎn)換到RUN狀態(tài)。當(dāng)有多個(gè)任務(wù)優(yōu)先級(jí)相同的READY-任務(wù)時(shí),最先轉(zhuǎn)換到READY狀態(tài)的任務(wù)轉(zhuǎn)換到RUN狀態(tài)。
      [0110]⑷WAIT狀態(tài)(待機(jī)狀態(tài))
      [0111]表示等待規(guī)定的WAIT解除條件滿(mǎn)足的狀態(tài)。當(dāng)WAIT解除條件滿(mǎn)足時(shí),處于WAIT狀態(tài)的任務(wù)轉(zhuǎn)換到READY狀態(tài)。只有普通任務(wù)能夠處于WAIT狀態(tài)。以下將處于WAIT狀態(tài)的任務(wù)稱(chēng)作“WAIT-任務(wù)”。關(guān)于WAIT解除條件將在后面詳述。
      [0112]綜上所述,只有當(dāng)任務(wù)處于RUN狀態(tài)時(shí),才能夠使用CPU來(lái)執(zhí)行其處理。RT0S—邊管理多個(gè)任務(wù)的狀態(tài)一邊適當(dāng)切換RUN-任務(wù)。由此,實(shí)現(xiàn)CPU總是執(zhí)行某個(gè)任務(wù)的處理方式。
      [0113][系統(tǒng)調(diào)用]
      [0114]下面附帶說(shuō)明一下系統(tǒng)調(diào)用。系統(tǒng)調(diào)用大致分為“啟動(dòng)系列”、“WAIT系列”和“SET系列”三種。
      [0115](1)啟動(dòng)系列系統(tǒng)調(diào)用
      [0116]啟動(dòng)系列系統(tǒng)調(diào)用是與在STOP狀態(tài)和READY狀態(tài)之間進(jìn)行的轉(zhuǎn)換相關(guān)聯(lián)的系統(tǒng)調(diào)用。
      [0117]1-1.啟動(dòng)系統(tǒng)調(diào)用
      [0118]啟動(dòng)系統(tǒng)調(diào)用是作為RUN-任務(wù)的任務(wù)A使另一項(xiàng)普通任務(wù)B啟動(dòng)的系統(tǒng)調(diào)用。此時(shí),處于STOP狀態(tài)的普通任務(wù)B轉(zhuǎn)換到READY狀態(tài)。
      [0119]1-2.結(jié)束系統(tǒng)調(diào)用
      [0120]執(zhí)行該系統(tǒng)調(diào)用的任務(wù)結(jié)束自身處理,并從RUN狀態(tài)轉(zhuǎn)換到STOP狀態(tài)。結(jié)束系統(tǒng)調(diào)用也可以是某項(xiàng)任務(wù)使另一項(xiàng)任務(wù)結(jié)束的命令。
      [0121](2) WAIT系列系統(tǒng)調(diào)用
      [0122]WAIT系列系統(tǒng)調(diào)用是與在RUN狀態(tài)和WAIT狀態(tài)之間進(jìn)行的轉(zhuǎn)換相關(guān)聯(lián)的系統(tǒng)調(diào)用。
      [0123]2-1.等待信號(hào)量系統(tǒng)調(diào)用
      [0124]等待信號(hào)量系統(tǒng)調(diào)用是請(qǐng)求獲得信號(hào)量(后述)的系統(tǒng)調(diào)用。
      [0125]2-2.等待互斥量系統(tǒng)調(diào)用
      [0126]等待互斥量系統(tǒng)調(diào)用是請(qǐng)求獲得互斥量(后述)的系統(tǒng)調(diào)用。
      [0127]2-3.等待事件系統(tǒng)調(diào)用
      [0128]等待事件系統(tǒng)調(diào)用是等待建立事件(后述)的系統(tǒng)調(diào)用。為了執(zhí)行,等待事件系統(tǒng)調(diào)用接收事件ID、等待標(biāo)記模式(后述)和標(biāo)記條件(后述)作為參數(shù)。
      [0129]在任何一種情況下,WAIT系列系統(tǒng)調(diào)用都設(shè)定各種WAIT解除條件。如果在執(zhí)行WAIT系列系統(tǒng)調(diào)用時(shí)已經(jīng)滿(mǎn)足WAIT解除條件,已執(zhí)行所述系統(tǒng)調(diào)用的RUN-任務(wù)轉(zhuǎn)換到READY狀態(tài)。同時(shí),當(dāng)不滿(mǎn)足WAIT解除條件時(shí),RUN-任務(wù)轉(zhuǎn)換到等待滿(mǎn)足WAIT解除條件的WAIT狀態(tài)。
      [0130](3) SET系列系統(tǒng)調(diào)用
      [0131 ] SET系列系統(tǒng)調(diào)用是與在WAIT狀態(tài)和READY狀態(tài)之間進(jìn)行的轉(zhuǎn)換相關(guān)聯(lián)的系統(tǒng)調(diào)用。SET系列系統(tǒng)調(diào)用的執(zhí)行觸發(fā)WAIT解除條件的建立。
      [0132]3-1.釋放(release)信號(hào)量系統(tǒng)調(diào)用
      [0133]其是釋放信號(hào)量的系統(tǒng)調(diào)用。
      [0134]3-2.釋放互斥量系統(tǒng)調(diào)用
      [0135]其是釋放互斥量的系統(tǒng)調(diào)用。
      [0136]3-3.設(shè)定事件(Set Event)系統(tǒng)調(diào)用
      [0137]其是建立事件的當(dāng)前標(biāo)記模式(后述)的系統(tǒng)調(diào)用。
      [0138]3-4.清除標(biāo)記系統(tǒng)調(diào)用
      [0139]其是用于將當(dāng)前標(biāo)記模式清零的系統(tǒng)調(diào)用。
      [0140]在對(duì)本發(fā)明實(shí)施方式進(jìn)行說(shuō)明時(shí),假設(shè)采用了以上9種系統(tǒng)調(diào)用。除此之外,當(dāng)然還能夠?qū)崿F(xiàn)其他的各種系統(tǒng)調(diào)用。
      [0141 ][普通RTOS的設(shè)計(jì)思想]
      [0142]圖2是普通RTOS的概念圖。
      [0143]圖示的RTOS是多任務(wù)OS。普通RTOS是以軟件實(shí)現(xiàn)的。下面以從任務(wù)A向任務(wù)B切換RUN-任務(wù)的情況為例進(jìn)行說(shuō)明。由于任務(wù)A占用著CPU,因此RTOS向CPU申請(qǐng)中斷,以從任務(wù)A取得CPU的使用權(quán)。在此基礎(chǔ)上,RTOS將任務(wù)A的上下文信息保存到TCB中。RTOS選擇任務(wù)B作為下一個(gè)RUN-任務(wù),并將上下文信息從任務(wù)B的TCB加載到CPU的寄存器中。當(dāng)加載結(jié)束時(shí),RTOS將CPU的使用權(quán)移交給任務(wù)B。由此,通過(guò)暫時(shí)獲取CPU的使用權(quán),RTOS執(zhí)行從任務(wù)A向任務(wù)B的任務(wù)轉(zhuǎn)換。對(duì)于特殊任務(wù)的執(zhí)行也是相同的,這種情況下,也是通過(guò)將RUN-任務(wù)的上下文信息保存到TCB中后,將CPU的使用權(quán)移交給特殊任務(wù)來(lái)實(shí)現(xiàn)任務(wù)轉(zhuǎn)換。
      [0144]因?yàn)镽TOS是以軟件實(shí)現(xiàn)的,因此為了執(zhí)行自身處理,RTOS需要CPU的使用權(quán)。換句話(huà)說(shuō),RTOS和任務(wù)在CPU的使用權(quán)上是競(jìng)爭(zhēng)關(guān)系。下面將這樣通過(guò)軟件實(shí)現(xiàn)的RTOS稱(chēng)作“軟件RTOS ”。
      [0145]圖3是執(zhí)行軟件RTOS的普通CPU的電路圖。
      [0146]CPU 84包括:執(zhí)行控制電路90,用于總體地控制存儲(chǔ)器訪(fǎng)問(wèn)、命令執(zhí)行等;處理寄存器92,用于存儲(chǔ)如任務(wù)的上下文信息等的各種數(shù)據(jù);以及運(yùn)算電路94,用于執(zhí)行運(yùn)算。處理寄存器92是多種寄存器的組合,大致分為特殊寄存器88和普通寄存器86。特殊寄存器88是存儲(chǔ)程序計(jì)數(shù)器、堆棧指針以及標(biāo)記等的寄存器。普通寄存器86是存儲(chǔ)作業(yè)用數(shù)據(jù)的寄存器,包括RO?R15共16個(gè)寄存器。特殊寄存器88存在用戶(hù)用和系統(tǒng)用兩面,但是普通寄存器86只有一面。以下將存儲(chǔ)在處理寄存器92中的數(shù)據(jù)稱(chēng)作“處理數(shù)據(jù)”。
      [0147]執(zhí)行控制電路90利用指示輸出選擇器98的控制信號(hào)(CTRL),將處理寄存器92中所期望的寄存器的處理數(shù)據(jù)輸出到運(yùn)算電路94中。運(yùn)算電路94按照該處理數(shù)據(jù),即命令和變量,來(lái)執(zhí)行運(yùn)算。運(yùn)算結(jié)果向輸入選擇器96輸出。執(zhí)行控制電路90利用指示輸入選擇器96的控制信號(hào)(CTRL),向處理寄存器92中所期望的寄存器輸入運(yùn)算結(jié)果。
      [0148]另外,執(zhí)行控制電路90通過(guò)CPU數(shù)據(jù)總線(xiàn)從存儲(chǔ)器中讀出數(shù)據(jù),并通過(guò)輸入選擇器96將該數(shù)據(jù)適時(shí)加載到處理寄存器92中。執(zhí)行控制電路90同樣通過(guò)該CPU數(shù)據(jù)總線(xiàn)將處理數(shù)據(jù)適時(shí)記錄到存儲(chǔ)器中。執(zhí)行控制電路90—邊更新特殊寄存器88中的程序計(jì)數(shù)器,一邊執(zhí)行任務(wù)。
      [0149]當(dāng)發(fā)生任務(wù)轉(zhuǎn)換時(shí),執(zhí)行控制電路90將處理數(shù)據(jù)保存到存儲(chǔ)器中預(yù)留的區(qū)域即TCB中。如果任務(wù)A執(zhí)行系統(tǒng)調(diào)用,則認(rèn)為發(fā)生了從任務(wù)A到任務(wù)B的任務(wù)轉(zhuǎn)換。系統(tǒng)調(diào)用的執(zhí)行觸發(fā)RT0S獲取CPU的使用權(quán),因此CPU 84將暫時(shí)按照RT0S的程序來(lái)運(yùn)行,其處理過(guò)程如下:
      [0150]<任務(wù)A的上下文信息的保存>
      [0151]1.執(zhí)行控制電路90將特殊寄存器88從用戶(hù)用切換到系統(tǒng)用。向系統(tǒng)用特殊寄存器88中加載RT0S處理用的處理數(shù)據(jù)。
      [0152]2.執(zhí)行控制電路90將普通寄存器86中的數(shù)據(jù)保存到堆棧(未示出)中。
      [0153]3.執(zhí)行控制電路90將用于RT0S的處理數(shù)據(jù)從記錄介質(zhì)(未示出)中,例如其它寄存器中,加載到普通寄存器86中。在該階段,處理寄存器92中的處理數(shù)據(jù)被完全替換為RT0S用的處理數(shù)據(jù)。
      [0154]4.RT0S從存儲(chǔ)器中識(shí)別出任務(wù)A的TCB,并將保存在堆棧中的處理數(shù)據(jù)寫(xiě)入該TCB中。另外,用戶(hù)用特殊寄存器88中的處理數(shù)據(jù)也作為上下文信息的一部分寫(xiě)入該TCB中。由此,任務(wù)A的處理數(shù)據(jù)被保存到該TCB中。RT0S將任務(wù)A已從“RUN”狀態(tài)轉(zhuǎn)換到“READY (或者WAIT) ”狀態(tài)的情況記錄在任務(wù)A的TCB中。
      [0155]<任務(wù)B的上下文信息的加載>
      [0156]1.RT0S從存儲(chǔ)器中識(shí)別出任務(wù)B的TCB,并將該TCB中的上下文信息寫(xiě)入堆棧和用戶(hù)用特殊寄存器88中。RT0S將任務(wù)B已從“READY”狀態(tài)轉(zhuǎn)換到“RUN”狀態(tài)的情況記錄在任務(wù)B的TCB中。
      [0157]2.RT0S將RT0S處理用數(shù)據(jù)從普通寄存器86保存到記錄介質(zhì)(未示出)中。
      [0158]3.執(zhí)行控制電路90將堆棧中的上下文信息加載到普通寄存器86中。執(zhí)行控制電路90將特殊寄存器88從系統(tǒng)用切換到用戶(hù)用。由此,任務(wù)B的處理數(shù)據(jù)被加載到處理寄存器92中。
      [0159]經(jīng)過(guò)如上所述的處理過(guò)程,實(shí)現(xiàn)了任務(wù)轉(zhuǎn)換。普通寄存器86是一面結(jié)構(gòu),因此為了切換任務(wù)用的處理數(shù)據(jù)和RT0S用的處理數(shù)據(jù)而使用堆棧。如果普通寄存器86也是兩面,則將無(wú)需通過(guò)堆棧來(lái)保存/加載數(shù)據(jù),因此能夠?qū)崿F(xiàn)更高速的任務(wù)轉(zhuǎn)換。
      [0160]在本發(fā)明實(shí)施方式中,還通過(guò)為每個(gè)任務(wù)設(shè)置保存寄存器110,來(lái)實(shí)現(xiàn)更高速的任務(wù)轉(zhuǎn)換。使用保存寄存器110的任務(wù)轉(zhuǎn)換,將參照?qǐng)D5進(jìn)行詳述。在參照?qǐng)D3說(shuō)明的CPU84和普通軟件RT0S中,在進(jìn)行任務(wù)轉(zhuǎn)換時(shí)頻繁地訪(fǎng)問(wèn)TCB。在上述例子中,是以從任務(wù)A向任務(wù)B進(jìn)行任務(wù)轉(zhuǎn)換為例進(jìn)行的說(shuō)明,但是實(shí)際上,RT0S為了選擇下面應(yīng)執(zhí)行的任務(wù)B也需要執(zhí)行很多命令。此時(shí),RT0S將頻繁地訪(fǎng)問(wèn)存儲(chǔ)器。通過(guò)采用后述的專(zhuān)門(mén)用于任務(wù)選擇的任務(wù)控制電路200,本發(fā)明實(shí)施方式中的任務(wù)處理裝置100實(shí)現(xiàn)了更高速的任務(wù)轉(zhuǎn)換。
      [0161][根據(jù)任務(wù)處理裝置100的RTOS硬件實(shí)現(xiàn)]
      [0162]圖4是本發(fā)明實(shí)施方式中的RTOS的概念圖。
      [0163]與普通軟件RTOS不同,本發(fā)明實(shí)施方式中的RTOS主要是以與CPU分離的硬件來(lái)實(shí)現(xiàn)的。以下將由硬件實(shí)現(xiàn)的RTOS稱(chēng)作“硬件RT0S”。由于本發(fā)明實(shí)施方式的RTOS主要是與CPU分離的硬件,因此為了執(zhí)行自身處理,則實(shí)質(zhì)上基本不需要CPU的使用權(quán)。換句話(huà)說(shuō),RTOS和任務(wù)在CPU的使用權(quán)上基本不是競(jìng)爭(zhēng)關(guān)系。在圖2所示的普通軟件RTOS中,CPU既是任務(wù)執(zhí)行用電路,還是RTOS執(zhí)行用電路。相反地,在本發(fā)明實(shí)施方式的硬件RTOS中,CPU明確為任務(wù)執(zhí)行電路。任務(wù)調(diào)度功能主要由后述的保存電路120和任務(wù)控制電路200來(lái)實(shí)現(xiàn)。
      [0164]圖5是本發(fā)明實(shí)施方式中的任務(wù)處理裝置100的電路圖。
      [0165]除了 CPU 150之外,任務(wù)處理裝置100還包括保存電路120和任務(wù)控制電路200。CPU 150是任務(wù)的執(zhí)行主體。保存電路120和任務(wù)控制電路200是起到圖4所示的RTOS的作用的電路。任務(wù)調(diào)度處理是由任務(wù)控制電路200來(lái)主導(dǎo)的。
      [0166]CPU 150包括執(zhí)行控制電路152、處理寄存器154以及運(yùn)算電路160。CPU150可以是參照?qǐng)D3說(shuō)明的普通CPU。但是,本發(fā)明實(shí)施方式中的CPU 150的信號(hào)線(xiàn)連接方式與圖3所示的CPU 84的信號(hào)線(xiàn)連接方式不同。對(duì)于具體的電路結(jié)構(gòu),將參照下面的圖6進(jìn)行詳述。
      [0167]任務(wù)控制電路200包括任務(wù)切換電路210、信號(hào)量表212、事件表214、任務(wù)選擇電路230以及狀態(tài)存儲(chǔ)單元220。對(duì)于信號(hào)量表212和事件表214,將參照?qǐng)D13及其后圖進(jìn)行詳述。狀態(tài)存儲(chǔ)單元220是與每個(gè)任務(wù)相對(duì)應(yīng)的單元。以下將與任務(wù)A對(duì)應(yīng)的狀態(tài)存儲(chǔ)單元220表示為“狀態(tài)存儲(chǔ)單元220_A”。各狀態(tài)存儲(chǔ)單元220存儲(chǔ)對(duì)應(yīng)任務(wù)的狀態(tài)數(shù)據(jù)。狀態(tài)數(shù)據(jù)是指上下文信息中的特別是任務(wù)優(yōu)先級(jí)或任務(wù)狀態(tài)等表示任務(wù)屬性的信息。對(duì)于具體的數(shù)據(jù)內(nèi)容,將在后面參照?qǐng)D10進(jìn)行說(shuō)明。全部任務(wù)的全部狀態(tài)數(shù)據(jù)從各狀態(tài)存儲(chǔ)單元220中不斷地輸出到任務(wù)選擇電路230中。任務(wù)選擇電路230是根據(jù)各任務(wù)的狀態(tài)數(shù)據(jù)進(jìn)行如RUN-任務(wù)選擇等的各種任務(wù)選擇的電路。對(duì)于任務(wù)選擇電路230,將參照?qǐng)D10及其后圖進(jìn)行詳述。當(dāng)檢測(cè)出從執(zhí)行控制電路152接收的系統(tǒng)調(diào)用信號(hào)(SC)或來(lái)自外部設(shè)備的中斷請(qǐng)求信號(hào)(INTR)時(shí),任務(wù)切換電路210執(zhí)行任務(wù)轉(zhuǎn)換。
      [0168]執(zhí)行控制電路152在執(zhí)行系統(tǒng)調(diào)用時(shí),將系統(tǒng)調(diào)用信號(hào)(SC)發(fā)送到任務(wù)切換電路210。另外,當(dāng)任務(wù)切換電路210檢測(cè)出中斷請(qǐng)求信號(hào)(INTR)時(shí),任務(wù)切換電路210向執(zhí)行控制電路152申請(qǐng)停止請(qǐng)求信號(hào)(HR)。當(dāng)CPU 150的操作停止時(shí),執(zhí)行控制電路152向任務(wù)切換電路210申請(qǐng)停止結(jié)束信號(hào)(HC)。通過(guò)這三種信號(hào),CPU 150和任務(wù)控制電路200將能夠進(jìn)行配合操作。
      [0169]保存電路120包括加載選擇電路112以及多個(gè)保存寄存器110。保存寄存器110也是與每個(gè)任務(wù)相對(duì)應(yīng)的單元,是用于保存處理寄存器154中的處理數(shù)據(jù)的寄存器組。因而,保存寄存器110具有與處理寄存器154相等以上的數(shù)據(jù)容量。以下將與任務(wù)A對(duì)應(yīng)的保存寄存器110表示為“保存寄存器110_A”。加載選擇電路112接受任務(wù)切換電路210的指示,將某個(gè)保存寄存器HO中的數(shù)據(jù)(以下將保存寄存器110所存儲(chǔ)的數(shù)據(jù)稱(chēng)作“保存數(shù)據(jù)”)加載到處理寄存器154中。
      [0170]各保存寄存器110不斷地將各自的保存數(shù)據(jù)輸出到加載選擇電路112中。當(dāng)任務(wù)切換電路210向加載選擇電路112輸入用于指定任務(wù)ID的任務(wù)選擇信號(hào)(TS)時(shí),加載選擇電路112將與所指定任務(wù)對(duì)應(yīng)的保存寄存器110中的保存數(shù)據(jù)輸出到處理寄存器154中。并且,當(dāng)任務(wù)切換電路210向處理寄存器154輸入寫(xiě)入信號(hào)(WT)時(shí),該保存數(shù)據(jù)實(shí)際上被加載到處理寄存器154中。
      [0171]另一方面,處理寄存器154中的全部處理數(shù)據(jù)也不斷地被輸出到全部的保存寄存器110中。當(dāng)任務(wù)切換電路210確認(rèn)向期望的保存寄存器110發(fā)送了寫(xiě)入信號(hào)(WT)時(shí),處理數(shù)據(jù)被保存到該保存寄存器I1中。這里,連接處理寄存器154和各保存寄存器110的總線(xiàn)能夠一次發(fā)送的位數(shù)設(shè)定為能夠并行發(fā)送處理數(shù)據(jù)。因此,任務(wù)切換電路210通過(guò)向保存寄存器110僅發(fā)送一次寫(xiě)入信號(hào),就能夠?qū)⑻幚頂?shù)據(jù)一次寫(xiě)入保存寄存器110中。另夕卜,連接保存寄存器110和加載選擇電路112的總線(xiàn)以及連接加載選擇電路112和CPU 150的總線(xiàn)的位數(shù)也同樣地設(shè)定。
      [0172]下面分別對(duì)系統(tǒng)調(diào)用和中斷請(qǐng)求信號(hào)引起的任務(wù)轉(zhuǎn)換的執(zhí)行方法進(jìn)行描述。
      [0173][I]系統(tǒng)調(diào)用的執(zhí)行
      [0174]當(dāng)CPU 150的執(zhí)行控制電路152執(zhí)行系統(tǒng)調(diào)用時(shí),執(zhí)行控制電路152使CPU150的時(shí)鐘(以下稱(chēng)作“CPU時(shí)鐘(CLK) ”)停止。對(duì)于具體的停止方法,將參照?qǐng)D7等在后面詳述。執(zhí)行控制電路152將表示系統(tǒng)調(diào)用的執(zhí)行的系統(tǒng)調(diào)用信號(hào)(SC)發(fā)送給任務(wù)控制電路200的任務(wù)切換電路210。另外,當(dāng)CLK的停止結(jié)束時(shí),執(zhí)行控制電路152向任務(wù)切換電路210申請(qǐng)停止結(jié)束信號(hào)(HC)。
      [0175]在CPU 150和任務(wù)切換電路210之間,為了系統(tǒng)調(diào)用信號(hào)的發(fā)送而連接有9根信號(hào)線(xiàn)。這9根信號(hào)線(xiàn)與所述9種系統(tǒng)調(diào)用相對(duì)應(yīng)。執(zhí)行控制電路152根據(jù)所執(zhí)行的系統(tǒng)調(diào)用種類(lèi),用對(duì)應(yīng)的某根系統(tǒng)信號(hào)線(xiàn)發(fā)送數(shù)字脈沖。任務(wù)切換電路210通過(guò)判斷是從9根系統(tǒng)信號(hào)線(xiàn)中的哪根信號(hào)線(xiàn)中檢測(cè)出數(shù)字脈沖,來(lái)立即檢測(cè)出所執(zhí)行的系統(tǒng)調(diào)用種類(lèi)。任務(wù)切換電路210根據(jù)系統(tǒng)調(diào)用種類(lèi),從任務(wù)選擇電路230輸出的數(shù)據(jù)中選擇所需數(shù)據(jù),執(zhí)行由系統(tǒng)調(diào)用所指定的處理。該處理是以申請(qǐng)HC為條件來(lái)執(zhí)行的。對(duì)于任務(wù)切換電路210和任務(wù)選擇電路230之間的關(guān)系,將參照?qǐng)D10進(jìn)行詳述。此外,該系統(tǒng)調(diào)用的參數(shù)和返回值寫(xiě)入處理寄存器154中規(guī)定的普通寄存器158中。任務(wù)切換電路210能夠?qū)ζ胀拇嫫?58執(zhí)行參數(shù)的讀出和返回值的寫(xiě)入。這里,假設(shè)作為RUN-任務(wù)的任務(wù)A執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用。因而,首先需要將任務(wù)A的處理數(shù)據(jù)保存。
      [0176]<任務(wù)A的上下文信息的保存>
      [0177]執(zhí)行控制電路152將表示等待信號(hào)量系統(tǒng)調(diào)用的SC信號(hào)輸入到任務(wù)切換電路210中。執(zhí)行控制電路152使CLK停止,當(dāng)停止結(jié)束時(shí)申請(qǐng)HC。任務(wù)切換電路210在向內(nèi)置于任務(wù)選擇電路230的各種選擇電路中后述的信號(hào)量選擇電路234輸出成為待機(jī)對(duì)象的信號(hào)量的信號(hào)量ID后,選擇下一個(gè)應(yīng)執(zhí)行的任務(wù)B。任務(wù)切換電路210向狀態(tài)存儲(chǔ)單元220_A寫(xiě)入規(guī)定數(shù)據(jù)。例如,作為任務(wù)A的狀態(tài),從“RUN”更新為“READY”或“WAIT”。更具體地說(shuō),任務(wù)切換電路210在將表示任務(wù)狀態(tài)“WAIT”的狀態(tài)數(shù)據(jù)輸出到全部狀態(tài)存儲(chǔ)單元220的基礎(chǔ)上,只向狀態(tài)存儲(chǔ)單元220_A輸入寫(xiě)入信號(hào)(WT_A)。由此,任務(wù)A的狀態(tài)被更新。
      [0178]接著,任務(wù)切換電路210向保存寄存器110_A輸出寫(xiě)入信號(hào)(WT)。由于處理寄存器154中的處理數(shù)據(jù)不斷地被輸出到各保存寄存器110中,因此該寫(xiě)入信號(hào)(WT)使得任務(wù)A的處理數(shù)據(jù)被保存到任務(wù)A的保存寄存器110_A中?!慈蝿?wù)B的上下文信息的加載>
      [0179]當(dāng)任務(wù)A的狀態(tài)數(shù)據(jù)更新、處理數(shù)據(jù)保存結(jié)束時(shí),任務(wù)切換電路210將指定任務(wù)B的任務(wù)選擇信號(hào)(TS_B)輸出到加載選擇電路112中。由此,保存寄存器110_B中保存的數(shù)據(jù)被輸出到處理寄存器154中。當(dāng)任務(wù)切換電路210向處理寄存器154輸出寫(xiě)入信號(hào)(WT)時(shí),任務(wù)B的保存數(shù)據(jù)被加載到處理寄存器154中。另外,任務(wù)切換電路210還向任務(wù)B的狀態(tài)存儲(chǔ)單元220中寫(xiě)入規(guī)定數(shù)據(jù)。例如,任務(wù)B的狀態(tài)從“READY”更新為“RUN”。當(dāng)以上處理結(jié)束時(shí),執(zhí)行控制電路152使CPU時(shí)鐘重啟。CPU 150根據(jù)所重啟的CPU時(shí)鐘來(lái)開(kāi)始執(zhí)行任務(wù)B。關(guān)于該處理方法的更具體細(xì)節(jié),將在后面參照?qǐng)D8(b)進(jìn)行描述。
      [0180][2]中斷請(qǐng)求信號(hào)的產(chǎn)生
      [0181]任務(wù)切換電路210檢測(cè)來(lái)自外圍設(shè)備的中斷請(qǐng)求信號(hào)(INTR)。更具體地說(shuō),中斷請(qǐng)求信號(hào)(INTR)從中斷控制器(未示出)發(fā)送到任務(wù)切換電路210。表示中斷請(qǐng)求信號(hào)(INTR)等級(jí)的參數(shù)被記錄在內(nèi)置于該中斷控制器的寄存器中。任務(wù)切換電路210向執(zhí)行控制電路152申請(qǐng)停止請(qǐng)求信號(hào)(HR)后,執(zhí)行控制電路152使CPU時(shí)鐘停止。與系統(tǒng)調(diào)用執(zhí)行時(shí)相同,任務(wù)切換電路210將RUN-任務(wù)的處理數(shù)據(jù)保存到保存寄存器110中。接著,任務(wù)切換電路210啟動(dòng)特殊任務(wù)。與中斷請(qǐng)求信號(hào)的參數(shù)無(wú)關(guān)而啟動(dòng)的特殊任務(wù)只有1種。該特殊任務(wù)從中斷控制器的內(nèi)置寄存器中讀出INTR的參數(shù),并執(zhí)行與該參數(shù)相應(yīng)的處理。該特殊任務(wù)所執(zhí)行的處理,可以是設(shè)定事件系統(tǒng)調(diào)用或設(shè)定信號(hào)量系統(tǒng)調(diào)用的執(zhí)行,可以是普通任務(wù)的啟動(dòng)。根據(jù)該參數(shù),該特殊任務(wù)可以不執(zhí)行任何特別處理就結(jié)束。根據(jù)INTR的參數(shù)執(zhí)行何種處理,是由特殊任務(wù)的實(shí)現(xiàn)方式來(lái)決定的。當(dāng)該特殊任務(wù)的執(zhí)行結(jié)束時(shí),從READY-任務(wù)中選擇出下一個(gè)RUN-任務(wù)。
      [0182]任務(wù)切換電路210將與該特殊任務(wù)對(duì)應(yīng)的保存寄存器110中的處理數(shù)據(jù)加載到CPU 150中。這種從普通任務(wù)轉(zhuǎn)換到特殊任務(wù)所需的時(shí)間,能夠根據(jù)任務(wù)控制電路200的工作時(shí)鐘來(lái)預(yù)先估計(jì)。當(dāng)向執(zhí)行控制電路152申請(qǐng)HR后,任務(wù)切換電路210的工作時(shí)鐘經(jīng)過(guò)規(guī)定的時(shí)間時(shí),任務(wù)切換電路210為了解除CPU時(shí)鐘的停止而取消(negate) HR。當(dāng)HR被取消時(shí),執(zhí)行控制電路152使CPU時(shí)鐘重啟。此時(shí),任務(wù)切換電路210結(jié)束了從普通任務(wù)到特殊任務(wù)的任務(wù)轉(zhuǎn)換。關(guān)于該處理方法的具體細(xì)節(jié),將在后面參照?qǐng)D8(a)進(jìn)行描述。
      [0183]在任何情況下,任務(wù)轉(zhuǎn)換的核心處理,即(A)處理數(shù)據(jù)的保存/加載,以及(B)任務(wù)狀態(tài)轉(zhuǎn)移和RUN-任務(wù)的選擇,都是通過(guò)硬件來(lái)實(shí)現(xiàn)的。在(A)和(B)中,無(wú)需訪(fǎng)問(wèn)存儲(chǔ)器上的TCB,這對(duì)任務(wù)轉(zhuǎn)換的高速化也有利。任務(wù)處理裝置100的CPU 150中所要求的只是追加使CPU時(shí)鐘停止和重啟的功能。此外,這些功能全部由硬件來(lái)實(shí)現(xiàn),這并非是要限定本發(fā)明的范圍。例如,本領(lǐng)域技術(shù)人員可以理解,(A)或者(B)的主要功能可以由硬件來(lái)實(shí)現(xiàn),而為了輔助硬件功能,RT0S的一部分功能可以由軟件來(lái)實(shí)現(xiàn)。
      [0184]圖6是圖5所示的CPU 150的電路圖。
      [0185]與圖3所示的CPU 84不同,處理寄存器154的特殊寄存器156和普通寄存器158都是一面的結(jié)構(gòu)。處理寄存器154中分別引入了來(lái)自加載選擇電路112的輸入總線(xiàn)、到保存寄存器110的輸出總線(xiàn)、以及來(lái)自任務(wù)切換電路210的寫(xiě)入信號(hào)(WT)用信號(hào)線(xiàn)。執(zhí)行控制電路152根據(jù)對(duì)輸出選擇器164的控制信號(hào)(CTRL),將處理寄存器92中所期望的寄存器中的數(shù)據(jù)輸入到運(yùn)算電路160中。運(yùn)算結(jié)果成為輸入選擇器162的輸入。執(zhí)行控制電路152根據(jù)對(duì)輸入選擇器162的控制信號(hào)(CTRL),向處理寄存器154中所期望的寄存器輸入運(yùn)算結(jié)果。執(zhí)行控制電路152 —邊更新特殊寄存器156中的程序計(jì)數(shù)器,一邊執(zhí)行任務(wù)。
      [0186]處理數(shù)據(jù)保存到保存寄存器110中而不是存儲(chǔ)器上的TCB中。處理寄存器154不斷地向各保存寄存器110輸出處理數(shù)據(jù)。實(shí)際上,如前所述,何時(shí)將處理數(shù)據(jù)保存到保存寄存器110中,是由任務(wù)切換電路210來(lái)控制的。
      [0187]保存數(shù)據(jù)是從保存寄存器110而不是從存儲(chǔ)器上的TCB加載到處理寄存器154中的。實(shí)際上,如前所述,加載哪個(gè)保存寄存器110中的處理數(shù)據(jù)以及何時(shí)加載,是由任務(wù)切換電路210來(lái)控制的。
      [0188]連接處理寄存器154和加載選擇電路112、以及處理寄存器154和保存寄存器110的總線(xiàn)能夠發(fā)送的位數(shù),設(shè)定為能夠在一次處理中并行發(fā)送處理數(shù)據(jù)。因此,根據(jù)任務(wù)切換電路210發(fā)送的寫(xiě)入信號(hào)(WT),能夠?qū)崿F(xiàn)一次讀出或?qū)懭霐?shù)據(jù)。普通軟件RTOS在任務(wù)轉(zhuǎn)換時(shí),需要暫時(shí)占用處理寄存器154。與此相反,本實(shí)施方式中的硬件RTOS沒(méi)有必要將用于任務(wù)轉(zhuǎn)換處理的特殊處理數(shù)據(jù)加載到處理寄存器154中。當(dāng)從任務(wù)A切換到任務(wù)B時(shí),只需要將任務(wù)A的處理數(shù)據(jù)保存,然后加載任務(wù)B的處理數(shù)據(jù),因此,處理寄存器154無(wú)需配置系統(tǒng)用和用戶(hù)用兩面及通過(guò)堆棧執(zhí)行數(shù)據(jù)替換處理。
      [0189]圖7是執(zhí)行控制電路152使CPU時(shí)鐘停止的構(gòu)造的電路圖。
      [0190]第二 AND門(mén)174的輸入是原始時(shí)鐘(CLKO)和第一 AND門(mén)172的輸出,第一 AND門(mén)172的輸出被反相。第一 AND門(mén)172的輸出是停止結(jié)束信號(hào)(HC)。由于停止結(jié)束信號(hào)(HC)通常是0,因此第二 AND門(mén)174直接輸出所輸入的原始時(shí)鐘(CLKO)作為CPU時(shí)鐘(CLK)。CPU 150接收到第二 AND門(mén)174所輸出的CPU時(shí)鐘時(shí)進(jìn)行操作。當(dāng)?shù)谝?AND門(mén)172的輸出是“I”時(shí),換句話(huà)說(shuō),當(dāng)停止結(jié)束信號(hào)(HC) = I時(shí),第二 AND門(mén)174的輸出固定為零,以使CPU時(shí)鐘(CLK)停止。
      [0191 ] 第一 AND門(mén)172的輸入是OR門(mén)176的輸出和CPU忙信號(hào)(CBUSY),該CPU忙信號(hào)是負(fù)邏輯。CBUSY是從產(chǎn)生CPU 150內(nèi)部循環(huán)的已知狀態(tài)機(jī)中輸出的信號(hào)。當(dāng)CPU 150處于可停止?fàn)顟B(tài)時(shí),CBUSY變成“I”。例如,當(dāng)運(yùn)算電路94執(zhí)行了單個(gè)命令或者被鎖定的多個(gè)命令的最后命令從而CPU處于可停止?fàn)顟B(tài)時(shí),或者當(dāng)已經(jīng)停止提供CPU時(shí)鐘時(shí),CBUSY變成“O”。
      [0192]OR門(mén)176的輸入是命令解碼器170的輸出(SC_DETECT)和來(lái)自任務(wù)切換電路210的停止請(qǐng)求信號(hào)(HR)。命令解碼器170內(nèi)置有保持SC_DETECT的鎖存電路。命令解碼器170接收從CPU 150提取(fetch)的數(shù)據(jù)(FD)。當(dāng)FD是系統(tǒng)調(diào)用命令時(shí),命令解碼器170輸出SC_DETECT = I。通過(guò)內(nèi)置鎖存電路,即使在這之后FD變化,命令解碼器170也繼續(xù)輸出SC_DETECT = I。命令解碼器170中,還輸入任務(wù)切換電路210發(fā)送給處理寄存器154的寫(xiě)入信號(hào)(WT)。如前所述,當(dāng)WT從O變?yōu)镮時(shí),保存數(shù)據(jù)被加載到處理寄存器154中。該WT是在規(guī)定時(shí)間后從I返回到O的脈沖信號(hào)。當(dāng)WT從I變?yōu)镺時(shí),命令解碼器170的鎖存電路被復(fù)位,命令解碼器170取消SC_DETECT。SC_DETECT和寫(xiě)入信號(hào)(WT)之間的關(guān)系,將參照?qǐng)D8(b)進(jìn)行詳述。本實(shí)施方式中的命令解碼器170,是為了判定執(zhí)行對(duì)象命令是否是系統(tǒng)調(diào)用而專(zhuān)門(mén)設(shè)置在執(zhí)行控制電路152中的裝置。作為變型例,命令解碼器170可以與負(fù)責(zé)CPU150的解碼階段的CPU解碼器共用。這種情況下,可通過(guò)向CPU解碼器追加當(dāng)被解碼的數(shù)據(jù)是系統(tǒng)調(diào)用命令時(shí)輸出SC_DETECT = I的功能來(lái)實(shí)現(xiàn)命令解碼器170。
      [0193]當(dāng)中斷請(qǐng)求信號(hào)(INTR)發(fā)生時(shí),任務(wù)切換電路210向執(zhí)行控制電路152申請(qǐng)停止請(qǐng)求信號(hào)(HR),即當(dāng)執(zhí)行系統(tǒng)調(diào)用、或當(dāng)申請(qǐng)停止請(qǐng)求信號(hào)(HR)時(shí),OR門(mén)176的輸出變成
      “1”。
      [0194]綜上所述,當(dāng)執(zhí)行系統(tǒng)調(diào)用或發(fā)生中斷請(qǐng)求信號(hào)、且當(dāng)CPU忙信號(hào)變成“0”時(shí),第一 AND門(mén)172的輸出變成“1”,且第二 AND門(mén)174不輸出CPU時(shí)鐘。
      [0195]圖8(a)是表示中斷請(qǐng)求信號(hào)發(fā)生時(shí)各種信號(hào)之間的關(guān)系的時(shí)序圖。
      [0196]在圖8(a)中,首先,在時(shí)刻t0,任務(wù)切換電路210檢測(cè)出來(lái)自外部的中斷請(qǐng)求信號(hào)(INTR)。任務(wù)切換電路210為了執(zhí)行特殊任務(wù),向執(zhí)行控制電路152申請(qǐng)停止請(qǐng)求信號(hào)(HR)。輸入時(shí)刻tl與檢測(cè)時(shí)刻t0幾乎是同時(shí)的。在時(shí)刻tl,CPU 150的狀態(tài)機(jī)處于“任務(wù)執(zhí)行中”,CBUSY = 1。由于HR = 1,所以0R門(mén)176輸出“1”。但是由于CBUSY = 1,因此CPU 150不停止。因此,即使輸入HR = 1,CPU時(shí)鐘(CLK)也暫且與原始時(shí)鐘(CLK0)同步輸出。
      [0197]經(jīng)過(guò)一定時(shí)間,在時(shí)刻t2處,CBUSY = 0。由于已經(jīng)是HR = 1,所以第一 AND門(mén)172輸出HC= 1,從第二 AND門(mén)174輸出的CPU時(shí)鐘維持為0。另一方面,任務(wù)切換電路210以申請(qǐng)HC為契機(jī),開(kāi)始從普通任務(wù)到特殊任務(wù)的任務(wù)轉(zhuǎn)換。細(xì)節(jié)將在后面描述。任務(wù)轉(zhuǎn)換所需時(shí)間是任務(wù)控制電路200的工作時(shí)鐘的數(shù)倍。在申請(qǐng)HC后,任務(wù)控制電路200的工作時(shí)鐘變化了規(guī)定次數(shù)(時(shí)刻t3)的條件下,任務(wù)控制電路200取消停止請(qǐng)求信號(hào)(HR)。由于HR = 0,因此執(zhí)行控制電路152重啟CPU時(shí)鐘(CLK)。當(dāng)CPU 150重啟處理時(shí),CPU 150使CBUSY從0變?yōu)? (時(shí)刻t4)。由此,在CPU時(shí)鐘停止的時(shí)刻t2至?xí)r刻t3期間,執(zhí)行從普通任務(wù)到特殊任務(wù)的任務(wù)轉(zhuǎn)換。
      [0198]作為另一種處理方法,代替以任務(wù)控制電路200的工作時(shí)鐘變化了規(guī)定次數(shù)為條件,而以任務(wù)控制電路200已結(jié)束任務(wù)轉(zhuǎn)換為條件來(lái)取消HR。而且,執(zhí)行控制電路152可以以取消HR為條件來(lái)取消HC。當(dāng)HC = 0時(shí),執(zhí)行控制電路152重啟CPU時(shí)鐘(CLK)。由此,可以重啟任務(wù)的執(zhí)行。
      [0199]圖8 (b)是表不執(zhí)行系統(tǒng)調(diào)用時(shí)各種彳目號(hào)之間的關(guān)系的時(shí)序圖。
      [0200]在圖8(b)中,首先,在時(shí)刻t0,命令解碼器170檢測(cè)出系統(tǒng)調(diào)用,并使SC_DETECT從0變?yōu)?。在時(shí)刻to,CPU 150的狀態(tài)機(jī)處于“任務(wù)執(zhí)行中”,CBUSY = 1。由于SC_DETECT=1,所以O(shè)R門(mén)176輸出“1”。但是由于CBUSY = 1,因此CPU 150不停止。因此,即使輸出SC_DETECT = 1,CPU時(shí)鐘(CLK)也暫且與原始時(shí)鐘(CLK0)同步輸出。
      [0201]經(jīng)過(guò)一定時(shí)間,在時(shí)刻tl,CBUSY = 0。由于SC_DETECT = 1、且CBUSY = 1,因此取消HC,并停止CPU時(shí)鐘。當(dāng)輸入HC = 0時(shí),任務(wù)切換電路210開(kāi)始任務(wù)轉(zhuǎn)換處理,并將寫(xiě)入信號(hào)(WT)輸出到CPU 150。在WT從0變?yōu)?的時(shí)刻t2,保存數(shù)據(jù)被加載到處理寄存器154中。由于寫(xiě)入信號(hào)(WT)是脈沖信號(hào),因此在經(jīng)過(guò)規(guī)定時(shí)間后的時(shí)刻t3,變成WT = 0。根據(jù)檢測(cè)出的WT:1 — 0的下降沿,鎖存在命令解碼器170中的SC_DETECT被復(fù)位(時(shí)刻t4)。此時(shí),CBUSY從0變?yōu)?。由于CBUSY = 1,因此HC = 0,從而重啟CPU時(shí)鐘。在CPU時(shí)鐘停止的時(shí)刻tl至?xí)r刻t4期間,執(zhí)行任務(wù)轉(zhuǎn)換。
      [0202]此外,作為其它處理方法,代替以檢測(cè)出WT:1 — 0的下降沿為條件,而以任務(wù)控制電路200結(jié)束任務(wù)轉(zhuǎn)換并取消HR為條件,執(zhí)行控制電路152取消HC。而且,以HC = 0為條件,復(fù)位SC_DETECT。執(zhí)行控制電路152重啟CPU時(shí)鐘(CLK),CBUSY從0變?yōu)?。
      [0203]在任何情況下,CPU 150都無(wú)需知曉在CPU時(shí)鐘停止期間進(jìn)行RUN-任務(wù)轉(zhuǎn)換的情況。任務(wù)切換電路210在CPU時(shí)鐘停止而使CPU 150處于凍結(jié)期間進(jìn)行任務(wù)轉(zhuǎn)換處理,因此CPU 150的處理和任務(wù)控制電路200的處理在事件序列中是分離的。
      [0204]圖9是用于說(shuō)明流水線(xiàn)處理中CPU時(shí)鐘停止時(shí)刻的示意圖。
      [0205]CPU 150通過(guò)從存儲(chǔ)器中順序讀出多個(gè)命令到處理寄存器154中并執(zhí)行這些命令,來(lái)執(zhí)行任務(wù)。作為任務(wù)執(zhí)行單位的命令,分解為如下四個(gè)階段(phase)。
      [0206]1.F(提取(fetch)):從存儲(chǔ)器中提取命令。
      [0207]2.D (解碼(decode)):解釋命令。
      [0208]3.E(執(zhí)行(execut1n)):執(zhí)行命令。
      [0209]4.WB(回寫(xiě)(write back)):將執(zhí)行結(jié)果寫(xiě)入存儲(chǔ)器中。
      [0210]當(dāng)一個(gè)任務(wù)順次執(zhí)行命令1至命令5時(shí),可以是命令1被執(zhí)行完從F到WB階段后,才執(zhí)行命令2的F階段。但是,為了更高效地執(zhí)行,大多是在命令1的執(zhí)行過(guò)程中就開(kāi)始執(zhí)行命令2。這種處理方法被稱(chēng)作流水線(xiàn)處理。例如,當(dāng)命令1呈D階段時(shí),就開(kāi)始命令2的F階段。當(dāng)命令1呈E階段時(shí),就執(zhí)行命令2的D階段和命令3的F階段。由此,通過(guò)增加單位時(shí)間內(nèi)執(zhí)行的命令數(shù),能夠減少每個(gè)任務(wù)的執(zhí)行時(shí)間。
      [0211]并且,各階段可以進(jìn)一步細(xì)分為兩個(gè)階段。例如,F(xiàn)階段可以分為F1和F2兩個(gè)階段。當(dāng)命令1呈F2階段時(shí),開(kāi)始命令2的F1階段。當(dāng)命令1呈D1階段時(shí),執(zhí)行命令2的F2階段和命令3的F1階段。通過(guò)細(xì)分階段,能夠進(jìn)一步有效利用CPU 150的計(jì)算資源。在圖9中,說(shuō)明了在將各階段細(xì)分為兩個(gè)階段來(lái)執(zhí)行的流水線(xiàn)處理中發(fā)生系統(tǒng)調(diào)用時(shí)的CPU時(shí)鐘停止時(shí)刻。
      [0212]在圖9中,命令1在CPU時(shí)鐘為“0”的時(shí)刻開(kāi)始處理。在CPU時(shí)鐘為“4”的時(shí)刻,命令1的解碼結(jié)束。假設(shè)命令1為系統(tǒng)調(diào)用。命令解碼器170使SC_DETECT從0變?yōu)?。接著,SC_DETECT從1返回到0的條件是:從任務(wù)切換電路210到處理寄存器154的寫(xiě)入信號(hào)(WT)從1變?yōu)?。即使輸出的是SC_DETECT = 1,由于命令2?5已經(jīng)在執(zhí)行中或者執(zhí)行啟動(dòng)完,因此還是CBUSY = 1。因此,第二 AND門(mén)174繼續(xù)輸出CPU時(shí)鐘。但是,當(dāng)SC_DETECT=1時(shí),執(zhí)行控制電路152暫時(shí)停止程序計(jì)數(shù)器的更新,使得新的命令不被提取。因而,命令6及其后續(xù)命令不會(huì)從存儲(chǔ)器中被提取。
      [0213]在CPU時(shí)鐘為“8”的時(shí)刻,命令1執(zhí)行結(jié)束,但是命令2?5正在執(zhí)行中,因此CPU忙信號(hào)還是“1”。當(dāng)呈CPU時(shí)鐘為“12”的時(shí)刻時(shí),命令5執(zhí)行結(jié)束。此時(shí),CPU忙信號(hào)變成“0”。之后,按照參照?qǐng)D8(b)所述的流程,停止提供CPU時(shí)鐘。任務(wù)切換電路210將直到命令5的執(zhí)行結(jié)束為止產(chǎn)生的處理數(shù)據(jù)保存到保存寄存器110中。根據(jù)這種停止方法,任務(wù)轉(zhuǎn)換能夠以不浪費(fèi)執(zhí)行系統(tǒng)調(diào)用后的命令執(zhí)行結(jié)果的方式實(shí)現(xiàn)。當(dāng)任務(wù)轉(zhuǎn)換結(jié)束時(shí),CPU忙信號(hào)再次設(shè)為“1”,命令解碼器170的處理也得到重啟。由此,將再次提供CPU時(shí)鐘。
      [0214]作為另一種處理方法,也可以在系統(tǒng)調(diào)用命令執(zhí)行結(jié)束的時(shí)刻,將CPU忙信號(hào)設(shè)為“0”,以停止提供CPU時(shí)鐘。這種情況下,與系統(tǒng)調(diào)用命令同時(shí)執(zhí)行的其它命令在執(zhí)行過(guò)程中停止。中途停止的命令的中間處理結(jié)果記錄在處理寄存器154中后,保存到保存寄存器110中。當(dāng)下次該任務(wù)變成RUN-任務(wù)時(shí),接著執(zhí)行中途停止的命令。例如,當(dāng)某個(gè)命令在讀取結(jié)束階段被中途停止時(shí),將從存儲(chǔ)器中讀出的命令和操作數(shù)保存到保存寄存器110中。當(dāng)該任務(wù)重啟時(shí),保存寄存器110中的數(shù)據(jù)被加載到處理寄存器154中,以執(zhí)行解碼階段及后續(xù)階段。
      [0215]圖10是表示狀態(tài)存儲(chǔ)單元220和任務(wù)切換電路210之間的關(guān)系的電路圖。
      [0216]狀態(tài)存儲(chǔ)單元220包括狀態(tài)寄存器250和定時(shí)器252。狀態(tài)存儲(chǔ)單元220存儲(chǔ)任務(wù)的狀態(tài)數(shù)據(jù)。另外,定時(shí)器252是在任務(wù)轉(zhuǎn)換到READY狀態(tài)或者WAIT狀態(tài)時(shí)開(kāi)始的定時(shí)器。任務(wù)轉(zhuǎn)換到READY狀態(tài)后所經(jīng)過(guò)的時(shí)間稱(chēng)作“READY占用時(shí)間”,任務(wù)轉(zhuǎn)換到WAIT狀態(tài)后所經(jīng)過(guò)的時(shí)間稱(chēng)作“WAIT占用時(shí)間”。定時(shí)器252以TIM信號(hào)方式不斷地輸出占用時(shí)間的值。在任務(wù)轉(zhuǎn)換時(shí),當(dāng)任務(wù)轉(zhuǎn)換到READY狀態(tài)或者WAIT狀態(tài)時(shí),任務(wù)切換電路210驅(qū)動(dòng)該任務(wù)的定時(shí)器252來(lái)開(kāi)始測(cè)量時(shí)間。
      [0217]狀態(tài)存儲(chǔ)單元220是如下所述的寄存器組。
      [0218](A)任務(wù)ID寄存器254:用于存儲(chǔ)任務(wù)ID。任務(wù)ID寄存器254不斷地向任務(wù)選擇電路230輸出表示任務(wù)ID的ID信號(hào)。以下將任務(wù)A的任務(wù)ID寄存器254向任務(wù)選擇電路230輸出的ID信號(hào)表示為“10_八信號(hào)”。從狀態(tài)存儲(chǔ)單元220輸出的所有其它信號(hào)也米用同樣的表不方法。
      [0219](B)任務(wù)優(yōu)先級(jí)寄存器256:用于存儲(chǔ)任務(wù)優(yōu)先級(jí)。任務(wù)優(yōu)先級(jí)寄存器256不斷地輸出表示任務(wù)優(yōu)先級(jí)的PR信號(hào)?!癘”表示最高優(yōu)先級(jí),值越大表示任務(wù)優(yōu)先級(jí)越低。
      [0220](C)任務(wù)狀態(tài)寄存器258:用于存儲(chǔ)任務(wù)狀態(tài)。任務(wù)狀態(tài)寄存器258不斷地輸出表示STOP、READY、RUN、WAIT、IDLE中的某一個(gè)的ST信號(hào)。此外,IDLE是指任務(wù)初始化之前的狀態(tài)。
      [0221](D)任務(wù)啟動(dòng)地址寄存器260:用于存儲(chǔ)存儲(chǔ)器中的任務(wù)的TCB地址。任務(wù)啟動(dòng)地址寄存器輸出AD信號(hào)。
      [0222](E)待機(jī)理由寄存器262:用于在任務(wù)處于WAIT狀態(tài)時(shí),存儲(chǔ)構(gòu)成WAIT解除條件的待機(jī)理由。待機(jī)理由是“信號(hào)量等待”、“事件等待”和“互斥量等待”中的某一個(gè)。待機(jī)理由寄存器262輸出WR信號(hào)。
      [0223](F)信號(hào)量ID寄存器264:用于在任務(wù)以信號(hào)量等待為理由處于WAIT狀態(tài)時(shí),存儲(chǔ)等待對(duì)象的信號(hào)量(以下簡(jiǎn)稱(chēng)為“待機(jī)信號(hào)量”)的信號(hào)量ID。信號(hào)量ID寄存器264輸出SID信號(hào)。
      [0224](G)互斥量ID寄存器265:用于在任務(wù)以互斥量等待為理由處于WAIT狀態(tài)時(shí),存儲(chǔ)等待對(duì)象的互斥量(以下簡(jiǎn)稱(chēng)為“待機(jī)互斥量”)的互斥量ID?;コ饬縄D輸出MID信號(hào)。
      [0225](H)事件ID寄存器266:用于在任務(wù)以事件等待為理由處于WAIT狀態(tài)時(shí),存儲(chǔ)等待對(duì)象的事件(以下簡(jiǎn)稱(chēng)為“待機(jī)事件”)的事件ID。事件ID寄存器266輸出EID信號(hào)。
      [0226](I)待機(jī)標(biāo)記寄存器268:用于在任務(wù)以事件等待為理由處于WAIT狀態(tài)時(shí),存儲(chǔ)待機(jī)標(biāo)記模式。待機(jī)標(biāo)記寄存器268輸出FL信號(hào)。
      [0227](J)標(biāo)記條件寄存器270:用于在任務(wù)以事件等待為理由處于WAIT狀態(tài)時(shí),存儲(chǔ)標(biāo)記條件。標(biāo)記條件寄存器270輸出FLC信號(hào)。待機(jī)標(biāo)記模式和標(biāo)記條件將在后面詳述。
      [0228](K)標(biāo)記初始化寄存器272:用于存儲(chǔ)表示是否有待機(jī)標(biāo)記模式的數(shù)據(jù)。標(biāo)記初始化寄存器272輸出FLI信號(hào)。
      [0229](L)超時(shí)計(jì)數(shù)器274:超時(shí)值是在WAIT系列系統(tǒng)調(diào)用中指定的變量。超時(shí)計(jì)數(shù)器274存儲(chǔ)超時(shí)值。任務(wù)切換電路210定期對(duì)各超時(shí)計(jì)數(shù)器274的超時(shí)值進(jìn)行遞減。超時(shí)計(jì)數(shù)器274輸出TO信號(hào)。代替任務(wù)切換電路210對(duì)超時(shí)值進(jìn)行遞減,也可以是超時(shí)計(jì)數(shù)器274本身定期對(duì)其超時(shí)值主動(dòng)地進(jìn)行遞減。
      [0230]任務(wù)選擇電路230根據(jù)各狀態(tài)存儲(chǔ)單元220輸出的各種信號(hào)來(lái)選擇任務(wù)。任務(wù)選擇電路230包括以下電路。
      [0231](A)執(zhí)行選擇電路232:用于在任務(wù)轉(zhuǎn)換時(shí),選擇下一個(gè)RUN-任務(wù)。執(zhí)行選擇電路232通常根據(jù)狀態(tài)存儲(chǔ)單元220不斷輸出的狀態(tài)數(shù)據(jù),來(lái)選擇某一個(gè)任務(wù)作為RUN-任務(wù)。執(zhí)行選擇電路232的輸入信號(hào)有ID、ST、PR和TIM四種。執(zhí)行選擇電路232輸出下一個(gè)RUN-任務(wù)的任務(wù)ID。關(guān)于詳細(xì)的電路結(jié)構(gòu),將參照?qǐng)D12進(jìn)行詳述。
      [0232](B)信號(hào)量選擇電路234:用于通過(guò)釋放信號(hào)量系統(tǒng)調(diào)用的執(zhí)行,選擇應(yīng)該從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務(wù)。信號(hào)量選擇電路234的輸入為來(lái)自任務(wù)切換電路210的釋放信號(hào)量系統(tǒng)調(diào)用釋放的信號(hào)量(以下簡(jiǎn)稱(chēng)為“釋放信號(hào)量”)的信號(hào)量ID。來(lái)自狀態(tài)存儲(chǔ)單元220的輸入信號(hào)有ID、ST、WR、PR、SID和--Μ六種。信號(hào)量選擇電路234的輸出信號(hào)是從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務(wù)的任務(wù)ID。如果不存在該任務(wù),則輸出如_1等的規(guī)定值。關(guān)于更具體的電路結(jié)構(gòu),將參照?qǐng)D13進(jìn)行詳述。
      [0233](C)事件選擇電路236:用于通過(guò)設(shè)定事件系統(tǒng)調(diào)用的執(zhí)行,選擇從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務(wù)。事件選擇電路236的輸入為來(lái)自任務(wù)切換電路210的由設(shè)定事件系統(tǒng)調(diào)用設(shè)定的事件(以下簡(jiǎn)稱(chēng)為“設(shè)定事件”)的事件ID。來(lái)自狀態(tài)存儲(chǔ)單元220的輸入信號(hào)有ID、ST、WR、EID、FL和FLC六種。事件選擇電路236的輸出信號(hào)為從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務(wù)的任務(wù)ID、以及該任務(wù)的FL、FLC0
      [0234](D)超時(shí)檢測(cè)電路238:用于檢測(cè)出處于WAIT狀態(tài)的任務(wù)中超時(shí)計(jì)數(shù)器274的超時(shí)值變成零的任務(wù)。每當(dāng)更新超時(shí)值時(shí),驅(qū)動(dòng)超時(shí)檢測(cè)電路238。超時(shí)檢測(cè)電路238的輸入信號(hào)有ID、ST和TO三種,輸出信號(hào)是該任務(wù)的任務(wù)ID。如果不存在該任務(wù),則輸出如-1等的規(guī)定值。
      [0235](E)互斥量電路240:用于通過(guò)釋放互斥量系統(tǒng)調(diào)用的執(zhí)行,選擇從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務(wù)。互斥量電路240的輸入信號(hào)為來(lái)自任務(wù)切換電路210的由釋放互斥量系統(tǒng)調(diào)用釋放的互斥量(以下簡(jiǎn)稱(chēng)為“釋放互斥量”)的互斥量ID。來(lái)自狀態(tài)存儲(chǔ)單元220的輸入信號(hào)有互斥量電路240輸出從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的任務(wù)的任務(wù)ID。如果不存在該任務(wù),則輸出如-1等的規(guī)定值。
      [0236](F)檢索電路242:當(dāng)任務(wù)切換電路210輸入任務(wù)ID時(shí),檢索電路242輸出該任務(wù)的全部狀態(tài)數(shù)據(jù)。
      [0237]下面通過(guò)關(guān)于任務(wù)轉(zhuǎn)換的描述,對(duì)RUN-任務(wù)的選擇、信號(hào)量、事件、互斥和超時(shí),特別是任務(wù)選擇電路230的處理,與普通技術(shù)進(jìn)行比較說(shuō)明。
      [0238][RUN-任務(wù)的選擇]
      [0239][I]通過(guò)普通軟件RTOS進(jìn)行RUN-任務(wù)的選擇
      [0240]圖11是表示普通RTOS進(jìn)行RUN-任務(wù)選擇時(shí)所采用的任務(wù)就緒表的圖。
      [0241]任務(wù)就緒表形成在存儲(chǔ)器上,將各READY-任務(wù)的TCB用指針連接。優(yōu)先級(jí)指針280設(shè)置在每個(gè)任務(wù)優(yōu)先級(jí)上,指出對(duì)應(yīng)任務(wù)優(yōu)先級(jí)的任務(wù)的TCB的開(kāi)始地址。在圖11的任務(wù)就緒表中,任務(wù)優(yōu)先級(jí)“O”的優(yōu)先級(jí)指針280指向任務(wù)A的TCB的地址,任務(wù)優(yōu)先級(jí)“I”的優(yōu)先級(jí)指針280指向任務(wù)B的TCB的地址。任務(wù)A的TCB指向任務(wù)D的TCB的地址。
      [0242]普通軟件RTOS—邊掃描該任務(wù)就緒表一邊選擇出下一個(gè)RUN-任務(wù)。在這個(gè)處理過(guò)程中,RTOS進(jìn)行如下兩個(gè)階段的處理:
      [0243]A.使RUN-任務(wù)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0244]B.選擇下一個(gè)RUN-任務(wù),并使該選擇出的任務(wù)的任務(wù)狀態(tài)從READY狀態(tài)轉(zhuǎn)換到RUN狀態(tài)。
      [0245]將軟件RT0S進(jìn)行的處理分解成如下各處理。
      [0246]〈RUN-任務(wù)的狀態(tài)轉(zhuǎn)移>
      [0247]這里,以任務(wù)J為RUN-任務(wù)來(lái)進(jìn)行說(shuō)明。
      [0248]A1.RT0S將RUN-任務(wù)的任務(wù)ID存儲(chǔ)在存儲(chǔ)器中。RT0S根據(jù)該任務(wù)ID,獲取任務(wù)J的TCB的地址。
      [0249]A2.訪(fǎng)問(wèn)該TCB,獲取任務(wù)J的任務(wù)優(yōu)先級(jí)。假設(shè)該任務(wù)優(yōu)先級(jí)為“0”。
      [0250]A3.參考圖11所示的任務(wù)就緒表,獲取與任務(wù)J的任務(wù)優(yōu)先級(jí)對(duì)應(yīng)的優(yōu)先級(jí)指針280。
      [0251]A4.檢測(cè)所獲取的優(yōu)先級(jí)指針280所指的TCB。這里檢測(cè)出任務(wù)A的TCB。
      [0252]A5.跟蹤任務(wù)A的TCB所具有的指針,以檢測(cè)出任務(wù)就緒表最末尾的TCB。圖11中,任務(wù)就緒表的最末尾是任務(wù)F。
      [0253]A6.配置任務(wù)F的TCB的指針指向任務(wù)J的TCB的地址。由此,任務(wù)J的TCB被追加到任務(wù)就緒表中。
      [0254]A7.在任務(wù)J的TCB中設(shè)定“READY”。另外,處理數(shù)據(jù)被復(fù)制到該TCB的寄存器存儲(chǔ)區(qū)域。
      [0255]〈READY-任務(wù)的狀態(tài)轉(zhuǎn)移>
      [0256]B1.RT0S檢測(cè)任務(wù)優(yōu)先級(jí)“0”的優(yōu)先級(jí)指針280指向哪個(gè)TCB。如果沒(méi)有指向任何TCB,則檢測(cè)任務(wù)優(yōu)先級(jí)“1”的優(yōu)先級(jí)指針280指向哪個(gè)TCB。RT0S —邊以降低的任務(wù)優(yōu)先級(jí)順序檢測(cè)該任務(wù)就緒表,一邊試圖確定任務(wù),直到發(fā)現(xiàn)指向的TCB為止。該圖中,指定任務(wù)A。
      [0257]B2.將任務(wù)A從任務(wù)就緒表中移除。具體地說(shuō),重寫(xiě)任務(wù)優(yōu)先級(jí)“0”的優(yōu)先級(jí)指針280,以取代任務(wù)A來(lái)指向任務(wù)D的TCB的地址。另外,通過(guò)設(shè)定NULL使得任務(wù)A的指針不指向任務(wù)D的地址。由此,任務(wù)A的TCB從任務(wù)就緒表中移除。
      [0258]B3.在任務(wù)A的TCB中設(shè)定“RUN”。另外,保存在任務(wù)A的TCB的寄存器存儲(chǔ)區(qū)域中的處理數(shù)據(jù)被加載到處理寄存器中。
      [0259]如上所述,普通軟件RT0S采用該任務(wù)就緒表進(jìn)行任務(wù)轉(zhuǎn)換,即RT0S根據(jù)下述策略,從多個(gè)READY-任務(wù)中選擇RUN-任務(wù)。
      [0260]1.所選擇的任務(wù)為READY-任務(wù)(第一條件)。
      [0261]2.所選擇的任務(wù)為READY-任務(wù)中任務(wù)優(yōu)先級(jí)最高的任務(wù)(第二條件)。
      [0262]3.當(dāng)存在多個(gè)任務(wù)優(yōu)先級(jí)最高的任務(wù)時(shí),所選擇的任務(wù)是轉(zhuǎn)換為READY狀態(tài)的時(shí)間最久的任務(wù)(第二條件)。
      [0263]這三個(gè)條件統(tǒng)稱(chēng)為“RUN任務(wù)選擇條件”。任務(wù)處理裝置100的執(zhí)行選擇電路232通過(guò)硬件來(lái)實(shí)現(xiàn)這種RT0S的任務(wù)調(diào)度功能。
      [0264][2]通過(guò)根據(jù)基本實(shí)施方式的硬件RT0S所進(jìn)行的RUN-任務(wù)的選擇
      [0265]圖12是執(zhí)行選擇電路232的電路圖。
      [0266]這里,假設(shè)從任務(wù)0?任務(wù)7共八個(gè)任務(wù)中選擇出RUN-任務(wù)。執(zhí)行選擇電路232包括四個(gè)第一比較電路290 (290a?290d)、兩個(gè)第二比較電路292 (292a、292b)、以及一個(gè)第三比較電路294。另外,還包括八個(gè)判定電路296 (296a?296h)。
      [0267]判定電路296的輸入信號(hào)為表示任務(wù)狀態(tài)的ST信號(hào)。當(dāng)該ST信號(hào)表示READY時(shí),判定電路296輸出的CID信號(hào)為“I” ;當(dāng)該ST信號(hào)表示READY之外的任務(wù)狀態(tài)時(shí),則輸出的CID信號(hào)為“O”。判定電路296根據(jù)上述RUN-任務(wù)選擇條件中的第一條件進(jìn)行判定。第一比較電路290的輸入為兩個(gè)任務(wù)的ID、PR和--Μ、以及來(lái)自判定電路296的CID信號(hào)。
      [0268]以第一比較電路290a為例進(jìn)行說(shuō)明。第一比較電路290a比較任務(wù)O和任務(wù)1,以根據(jù)上述的RUN任務(wù)選擇條件選擇出更適合的任務(wù)。
      [0269]第一判定:首先,比較分別從判定電路296a和判定電路296b輸出的CID信號(hào)。如果某一個(gè)CID信號(hào)是“1”,換句話(huà)說(shuō),如果只有一個(gè)任務(wù)處于READY狀態(tài),則第一比較電路290a輸出該任務(wù)的ID、PR和--Μ。如果兩個(gè)CID信號(hào)都是“0”,即哪個(gè)任務(wù)都不處于READY狀態(tài),則第一比較電路290a輸出ID = PR = TIM = NULL。這表示哪個(gè)任務(wù)都沒(méi)有被選擇。如果兩個(gè)CID信號(hào)都是“1”,即兩個(gè)任務(wù)都處于READY狀態(tài),則執(zhí)行下面的第二判定。
      [0270]第二判定:比較任務(wù)O的PR信號(hào)和任務(wù)I的PR信號(hào),以選擇出任務(wù)優(yōu)先級(jí)較高的任務(wù)。例如,如果任務(wù)O的任務(wù)優(yōu)先級(jí)是“I”、任務(wù)I的任務(wù)優(yōu)先級(jí)是“2”,則第一比較電路290a輸出任務(wù)O的ID、PR和--Μ。通過(guò)第二判定,能夠選擇出任務(wù)優(yōu)先級(jí)最高的任務(wù)作為RUN-任務(wù)的候選。如果任務(wù)O和任務(wù)I的任務(wù)優(yōu)先級(jí)相同,則執(zhí)行下面的第三判定。
      [0271]第三判定:比較任務(wù)O的--Μ信號(hào)和任務(wù)I的--Μ信號(hào),以選擇出READY占用時(shí)間較長(zhǎng)的任務(wù)。如果對(duì)應(yīng)的READY占用時(shí)間相同,則選擇任務(wù)O。由于僅通過(guò)比較占用時(shí)間的大小就能夠進(jìn)行判定,因此將無(wú)需進(jìn)行如任務(wù)就緒表一樣的TCB順序管理。
      [0272]由此,任務(wù)O和任務(wù)1、任務(wù)2和任務(wù)3、任務(wù)4和任務(wù)5、以及任務(wù)6和任務(wù)7,分別根據(jù)RUN-任務(wù)選擇條件進(jìn)行比較。第二比較電路292通過(guò)測(cè)試來(lái)自?xún)蓚€(gè)第一比較電路290的輸出,來(lái)進(jìn)一步篩選RUN-任務(wù)的候選。第二比較電路292a根據(jù)第一比較電路290a和第一比較電路290b的輸出來(lái)執(zhí)行任務(wù)選擇。因此,第二比較電路292a輸出任務(wù)O?任務(wù)3中最符合RUN-任務(wù)選擇條件的任務(wù)的ID、PR和--Μ。第三比較電路294也以相同的方式進(jìn)行操作,第三比較電路294輸出任務(wù)O?任務(wù)7中某一個(gè)任務(wù)的任務(wù)ID。
      [0273]根據(jù)這種處理方法,能夠通過(guò)硬件來(lái)實(shí)現(xiàn)RUN-任務(wù)選擇條件。普通軟件RTOS —邊訪(fǎng)問(wèn)任務(wù)就緒表一邊選擇RUN-任務(wù)。但是本實(shí)施方式中的執(zhí)行選擇電路232根據(jù)從狀態(tài)存儲(chǔ)單元220不斷輸出的狀態(tài)數(shù)據(jù),選擇RUN-任務(wù)。由執(zhí)行選擇電路232執(zhí)行的處理總結(jié)如下。
      [0274]〈RUN-任務(wù)的狀態(tài)轉(zhuǎn)移>
      [0275]這里,假設(shè)任務(wù)J為該RUN-任務(wù)。
      [0276]Al.任務(wù)切換電路210在任務(wù)J的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”。
      [0277]A2.任務(wù)切換電路210設(shè)置任務(wù)J的定時(shí)器252,以開(kāi)始測(cè)量READY占用時(shí)間。
      [0278]由此,任務(wù)J從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。如前所述,處理數(shù)據(jù)保存在任務(wù)J的保存寄存器I1中。連接處理寄存器154和保存寄存器110的總線(xiàn),能夠并行發(fā)送處理數(shù)據(jù),從而Al和A2的處理能夠在一個(gè)時(shí)鐘時(shí)間內(nèi)執(zhí)行。
      [0279]〈READY-任務(wù)的狀態(tài)轉(zhuǎn)移>
      [0280]B1.當(dāng)任務(wù)J的狀態(tài)轉(zhuǎn)移結(jié)束時(shí),任務(wù)切換電路210根據(jù)執(zhí)行選擇電路232所輸出的任務(wù)ID確定RUN-任務(wù),并在該確定的任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“RUN”。
      [0281]由此,所確定的任務(wù)從READY狀態(tài)轉(zhuǎn)換到RUN狀態(tài)。所確定的任務(wù)的處理數(shù)據(jù)從保存寄存器110加載到處理寄存器154中。連接保存寄存器110和處理寄存器154的總線(xiàn),也能夠并行發(fā)送處理數(shù)據(jù),從而B(niǎo)1的處理能夠在一個(gè)時(shí)鐘時(shí)間內(nèi)執(zhí)行。
      [0282]軟件RT0S在任務(wù)轉(zhuǎn)換時(shí),由于例如訪(fǎng)問(wèn)任務(wù)就緒表等原因會(huì)消耗CPU的很多CPU時(shí)鐘時(shí)間。與此相反,本實(shí)施方式中的任務(wù)控制電路200能夠在很短的時(shí)間內(nèi)結(jié)束任務(wù)轉(zhuǎn)換。由于狀態(tài)存儲(chǔ)單元220不斷地將狀態(tài)數(shù)據(jù)輸出給執(zhí)行選擇電路232,因此執(zhí)行選擇電路232不斷地輸出某一個(gè)任務(wù)的任務(wù)ID。不是在任務(wù)轉(zhuǎn)換發(fā)生后才開(kāi)始RUN-任務(wù)的選擇處理,而是根據(jù)任務(wù)轉(zhuǎn)換發(fā)生時(shí)的執(zhí)行選擇電路232的輸出來(lái)執(zhí)行RUN-任務(wù)的選擇,這對(duì)任務(wù)轉(zhuǎn)換高速化也有貢獻(xiàn)。以上說(shuō)明假設(shè)有八個(gè)任務(wù),但是通過(guò)增加比較電路的階段數(shù),能夠?qū)Ω嗟娜蝿?wù)進(jìn)行尋址。
      [0283][信號(hào)量處理]
      [0284]圖13是表示由普通RT0S進(jìn)行的信號(hào)量處理中所采用的等待信號(hào)量表的圖。
      [0285]在說(shuō)明等待信號(hào)量表之前,先簡(jiǎn)單說(shuō)明信號(hào)量。信號(hào)量表212中對(duì)應(yīng)記錄信號(hào)量ID和信號(hào)量計(jì)數(shù)器。在信號(hào)量計(jì)數(shù)器中將初始值設(shè)定為有限數(shù)。例如,假設(shè)設(shè)定為信號(hào)量ID = 4,信號(hào)量計(jì)數(shù)器=3。當(dāng)某一個(gè)任務(wù)執(zhí)行將信號(hào)量ID = 4的信號(hào)量作為待機(jī)信號(hào)量的等待信號(hào)量系統(tǒng)調(diào)用時(shí),任務(wù)切換電路210使待機(jī)信號(hào)量的信號(hào)量計(jì)數(shù)器遞減。每當(dāng)通過(guò)等待信號(hào)量事件調(diào)用來(lái)請(qǐng)求獲取時(shí),遞減信號(hào)量計(jì)數(shù)器,當(dāng)信號(hào)量計(jì)數(shù)器變成0時(shí),無(wú)法再獲取信號(hào)量。執(zhí)行將信號(hào)量計(jì)數(shù)器為0的信號(hào)量作為待機(jī)信號(hào)量的等待信號(hào)量系統(tǒng)調(diào)用的任務(wù),狀態(tài)轉(zhuǎn)換到WAIT狀態(tài)。
      [0286]另一方面,當(dāng)某一個(gè)任務(wù)執(zhí)行將信號(hào)量ID = 4的信號(hào)量作為釋放信號(hào)量的釋放信號(hào)量系統(tǒng)調(diào)用時(shí),任務(wù)切換電路210使信號(hào)量表212的信號(hào)量計(jì)數(shù)器遞增。綜上所述:
      [0287]當(dāng)信號(hào)量計(jì)數(shù)器>0時(shí):執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用的任務(wù),從RUN轉(zhuǎn)換到READY。此時(shí)遞減信號(hào)量計(jì)數(shù)器。
      [0288]當(dāng)信號(hào)量計(jì)數(shù)器=0時(shí):執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用的任務(wù),從RUN轉(zhuǎn)換到WAIT。不遞減信號(hào)量計(jì)數(shù)器。
      [0289]為了使執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用的任務(wù)從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài),其它任務(wù)需要執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用。
      [0290][1]由普通軟件RT0S進(jìn)行的信號(hào)量處理
      [0291]普通軟件RT0S通過(guò)采用等待信號(hào)量表來(lái)管理以信號(hào)量等待為理由處于WAIT狀態(tài)的任務(wù)(以下特別稱(chēng)作“信號(hào)量等待任務(wù)”)的TCB。等待信號(hào)量表是具有與圖11所示的任務(wù)就緒表類(lèi)似構(gòu)造的列表,形成在存儲(chǔ)器上。各信號(hào)量等待任務(wù)的TCB由指針連接。優(yōu)先級(jí)指針280指向?qū)?yīng)任務(wù)優(yōu)先級(jí)的信號(hào)量等待任務(wù)的TCB的開(kāi)始地址。
      [0292]當(dāng)執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用時(shí),普通軟件RT0S —邊掃描該等待信號(hào)量表一邊選擇應(yīng)從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)的信號(hào)量等待任務(wù)。執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用以及執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用時(shí),RT0S執(zhí)行的處理如下。
      [0293]<等待信號(hào)量系統(tǒng)調(diào)用的執(zhí)行>
      [0294]這里,假設(shè)任務(wù)J為RUN-任務(wù)。
      [0295]A1.RT0S將RUN-任務(wù)的任務(wù)ID存儲(chǔ)在存儲(chǔ)器中。根據(jù)該任務(wù)ID,獲取任務(wù)J的TCB的地址。
      [0296]A2.檢測(cè)在等待信號(hào)量系統(tǒng)調(diào)用中所指定的待機(jī)信號(hào)量的信號(hào)量計(jì)數(shù)器。以下根據(jù)信號(hào)量計(jì)數(shù)器的值,處理被分別說(shuō)明。
      [0297](當(dāng)信號(hào)量計(jì)數(shù)器>0時(shí))
      [0298]A3.RTOS使待機(jī)信號(hào)量的信號(hào)量計(jì)數(shù)器遞減。
      [0299]A4.在任務(wù)J的TCB中設(shè)定“READY”。這種情況下,任務(wù)J的TCB被追加到任務(wù)就緒表中。
      [0300](當(dāng)信號(hào)量計(jì)數(shù)器=O時(shí))
      [0301]A3.RTOS訪(fǎng)問(wèn)該TCB,以獲取任務(wù)J的任務(wù)優(yōu)先級(jí)。假設(shè)任務(wù)優(yōu)先級(jí)為“O”。
      [0302]A4.根據(jù)等待信號(hào)量表,獲取與任務(wù)J的任務(wù)優(yōu)先級(jí)對(duì)應(yīng)的優(yōu)先級(jí)指針。
      [0303]A5.檢測(cè)所獲取的優(yōu)先級(jí)指針?biāo)傅腡CB。這里,檢測(cè)到任務(wù)A的TCB。
      [0304]A6.跟蹤任務(wù)A的TCB所具有的指針,以檢測(cè)出該等待信號(hào)量表中最末尾的TCB。如圖13所示,任務(wù)F在該等待信號(hào)量表的最末尾。
      [0305]A7.配置任務(wù)F的TCB的指針指向任務(wù)J的TCB的地址。由此,任務(wù)J的TCB被追加到等待信號(hào)量表中。
      [0306]A8.在任務(wù)J的TCB中設(shè)定“WAIT”。另外,還設(shè)定待機(jī)信號(hào)量的信號(hào)量ID?!瘁尫判盘?hào)量系統(tǒng)調(diào)用的執(zhí)行〉
      [0307]B1.RTOS 一邊按順序跟蹤任務(wù)優(yōu)先級(jí)為“O”的任務(wù),一邊搜索以釋放信號(hào)量為待機(jī)信號(hào)量的信號(hào)量等待任務(wù)。如果不存在這樣的任務(wù),則將任務(wù)優(yōu)先級(jí)為“I”的任務(wù)設(shè)為搜索對(duì)象。根據(jù)是否搜索到以釋放信號(hào)量為待機(jī)信號(hào)量的信號(hào)量等待任務(wù),分別執(zhí)行不同的處理。
      [0308](搜索到時(shí))
      [0309]B2.以搜索到的任務(wù)是任務(wù)E來(lái)進(jìn)行說(shuō)明。RTOS在任務(wù)E的TCB中設(shè)定“READY”。另外,清除待機(jī)信號(hào)量的信號(hào)量ID。
      [0310]B3.將任務(wù)E的TCB從等待信號(hào)量表中移除。
      [0311 ] B4.使釋放信號(hào)量的任務(wù)的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。該任務(wù)的TCB被追加到任務(wù)就緒表中。
      [0312](未搜索到時(shí))
      [0313]B2.RTOS使信號(hào)量計(jì)數(shù)器遞增。
      [0314]B3.使釋放信號(hào)量的任務(wù)的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。該任務(wù)的TCB被追加到任務(wù)就緒表中。
      [0315]普通軟件RTOS通過(guò)管理上述等待信號(hào)量表,進(jìn)行與信號(hào)量相關(guān)的處理。在釋放信號(hào)量時(shí),RTOS根據(jù)以下策略從多個(gè)WAIT-任務(wù)中選擇READY-任務(wù)。
      [0316]1.所選擇的任務(wù)應(yīng)該為WAIT-任務(wù)(第一條件)。
      [0317]2.所選擇的任務(wù)應(yīng)該為WAIT-任務(wù)中將釋放信號(hào)量作為待機(jī)信號(hào)量的任務(wù)(第二條件)。
      [0318]3.當(dāng)存在多個(gè)這種任務(wù)時(shí),所選擇的任務(wù)應(yīng)該具有最高的任務(wù)優(yōu)先級(jí)(第三條件)。
      [0319]4.如果存在多個(gè)任務(wù)優(yōu)先級(jí)最高的任務(wù),所選擇的任務(wù)應(yīng)該是轉(zhuǎn)換為WAIT狀態(tài)的時(shí)間最久的任務(wù)(第四條件)。
      [0320]這四個(gè)條件統(tǒng)稱(chēng)為“信號(hào)量待機(jī)解除條件”。任務(wù)處理裝置100的信號(hào)量選擇電路234通過(guò)硬件來(lái)實(shí)現(xiàn)這種RT0S的任務(wù)調(diào)度功能。
      [0321][2]由根據(jù)基本實(shí)施方式的硬件RT0S進(jìn)行的信號(hào)量處理
      [0322]圖14是信號(hào)量選擇電路234的電路圖。
      [0323]這里,也是以任務(wù)0?任務(wù)7共八個(gè)任務(wù)為例進(jìn)行說(shuō)明。信號(hào)量選擇電路234包括四個(gè)第一比較電路300 (300a?300d)、兩個(gè)第二比較電路302 (302a、302b)、以及一個(gè)第三比較電路304。另外,還包括八個(gè)判定電路306 (306a?306h)。
      [0324]判定電路306的輸入信號(hào)為來(lái)自狀態(tài)存儲(chǔ)單元220的ST、WR、SID信號(hào)和來(lái)自任務(wù)切換電路210的表示信號(hào)量ID的信號(hào)。這里所輸入的信號(hào)量ID是釋放信號(hào)量的信號(hào)量ID。如果對(duì)應(yīng)的任務(wù)是以釋放信號(hào)量為待機(jī)信號(hào)量的信號(hào)量等待任務(wù),則判定電路306輸出的CID信號(hào)為“ 1 ”,如果不是,則輸出的CID信號(hào)為“0”。判定電路306輸出基于上述信號(hào)量待機(jī)解除條件中的第一條件和第二條件的判定結(jié)果。第一比較電路300的輸入信號(hào)為兩個(gè)任務(wù)的ID、PR和--Μ、以及來(lái)自判定電路306的CID信號(hào)。
      [0325]第一比較電路300是根據(jù)信號(hào)量待機(jī)解除條件中的第三條件和第四條件進(jìn)行判定的電路。第二比較電路302和第三比較電路304也同樣。以上已經(jīng)說(shuō)明,RUN-任務(wù)選擇條件的第二條件和第三條件,與信號(hào)量待機(jī)解除條件的第三條件和第四條件相同。執(zhí)行選擇電路232的各比較電路是比較任務(wù)的狀態(tài)數(shù)據(jù)(PR、HM)的電路。另一方面,信號(hào)量選擇電路234的各比較電路也是比較任務(wù)的狀態(tài)數(shù)據(jù)(PR、HM)的電路。因而,執(zhí)行選擇電路232的第一比較電路290和信號(hào)量選擇電路234的第一比較電路300是內(nèi)置有相同邏輯的電路,能夠共用。各任務(wù)在通過(guò)判定電路306基于第一條件和第二條件進(jìn)行判定的基礎(chǔ)上,通過(guò)第一比較電路300進(jìn)行判定處理。之后通過(guò)與執(zhí)行選擇電路232相同的判定處理,第三比較電路304輸出某一個(gè)任務(wù)ID。當(dāng)執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用以及當(dāng)執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用時(shí)進(jìn)行如下處理。
      [0326]<等待信號(hào)量系統(tǒng)調(diào)用的執(zhí)行>
      [0327]這里,假設(shè)任務(wù)J為RUN-任務(wù)。
      [0328]A1.任務(wù)切換電路210從信號(hào)量表212中檢測(cè)在等待信號(hào)量系統(tǒng)調(diào)用中所指定的信號(hào)量的信號(hào)量計(jì)數(shù)器。以下根據(jù)信號(hào)量計(jì)數(shù)器的值,處理被分別說(shuō)明。
      [0329](當(dāng)信號(hào)量計(jì)數(shù)器>0時(shí))
      [0330]A2.任務(wù)切換電路210使信號(hào)量表212的信號(hào)量計(jì)數(shù)器遞減。
      [0331]A3.在任務(wù)J的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”。此時(shí),任務(wù)切換電路210設(shè)置RUN-任務(wù)的定時(shí)器252,以開(kāi)始測(cè)量READY占用時(shí)間。
      [0332](當(dāng)信號(hào)量計(jì)數(shù)器=0時(shí))
      [0333]A2.任務(wù)切換電路210在任務(wù)J的任務(wù)狀態(tài)寄存器258中設(shè)定“WAIT”,在待機(jī)理由寄存器262中設(shè)定“信號(hào)量等待”,在信號(hào)量ID寄存器264中設(shè)定待機(jī)信號(hào)量的信號(hào)量ID,并設(shè)定定時(shí)器252以開(kāi)始測(cè)量WAIT占用時(shí)間。
      [0334]由此,執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用的任務(wù),從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)或者WAIT狀態(tài)。
      [0335]<釋放信號(hào)量系統(tǒng)調(diào)用的執(zhí)行>
      [0336]B1.任務(wù)切換電路210將釋放信號(hào)量的信號(hào)量ID輸入到各判定電路306中。各判定電路306根據(jù)該信號(hào)量ID,判定是否滿(mǎn)足信號(hào)量待機(jī)解除條件中的第一條件以及第二條件。因而,各個(gè)第一比較電路300根據(jù)第三條件以及第四條件選擇任務(wù)。
      [0337](當(dāng)某一個(gè)判定電路306輸出“1”,第三比較電路304輸出某一個(gè)任務(wù)ID時(shí))
      [0338]B2.任務(wù)切換電路210在所檢測(cè)出的任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”,清除待機(jī)理由寄存器262和信號(hào)量ID寄存器264,并使定時(shí)器252開(kāi)始測(cè)量READY占用時(shí)間。
      [0339]B3.在執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”,并開(kāi)始測(cè)量READY占用時(shí)間。
      [0340](當(dāng)沒(méi)有判定電路306輸出“1”,第三比較電路304不輸出任何一個(gè)任務(wù)ID時(shí))
      [0341]B2.任務(wù)切換電路210使信號(hào)量表212的信號(hào)量計(jì)數(shù)器遞增。
      [0342]B3.使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0343]由于狀態(tài)存儲(chǔ)單元220不斷地將狀態(tài)數(shù)據(jù)輸出給信號(hào)量選擇電路234,因此當(dāng)任務(wù)切換電路210將信號(hào)量ID輸入給判定電路306時(shí),信號(hào)量選擇電路234能夠立即執(zhí)行選擇處理。
      [0344][互斥量處理]
      [0345]與信號(hào)量類(lèi)似,互斥量也用于任務(wù)之間的同步處理?;コ饬亢托盘?hào)量存在以下幾點(diǎn)不同。
      [0346]1.信號(hào)量計(jì)數(shù)器可設(shè)定為I以上的整數(shù)。與此相對(duì),互斥量是信號(hào)量計(jì)數(shù)器為I或者O的特殊信號(hào)量。當(dāng)信號(hào)量計(jì)數(shù)器為2以上時(shí),能夠有2個(gè)以上的任務(wù)獲得相同的信號(hào)量。但是,對(duì)于互斥量,能夠獲得某互斥量的任務(wù)通常只有一個(gè)。
      [0347]2.能夠通過(guò)釋放信號(hào)量系統(tǒng)調(diào)用釋放信號(hào)量的任務(wù),不限于通過(guò)等待信號(hào)量系統(tǒng)調(diào)用來(lái)獲得信號(hào)量的任務(wù)。與此相對(duì),能夠通過(guò)釋放互斥量系統(tǒng)調(diào)用釋放互斥量的任務(wù),只能是通過(guò)等待互斥量系統(tǒng)調(diào)用來(lái)獲得互斥量的任務(wù)。
      [0348]在釋放互斥量時(shí),任務(wù)切換電路210從多個(gè)WAIT-任務(wù)中選擇READY-任務(wù)的策略如下。
      [0349]1.所選擇的任務(wù)應(yīng)該是WAIT-任務(wù)(第一條件)。
      [0350]2.所選擇的任務(wù)應(yīng)該是WAIT-任務(wù)中以釋放互斥量為待機(jī)互斥量的任務(wù)(第二條件)。
      [0351]3.當(dāng)存在多個(gè)這種任務(wù)時(shí),所選擇的任務(wù)應(yīng)該是任務(wù)優(yōu)先級(jí)最高的任務(wù)(第三條件)。
      [0352]4.當(dāng)存在多個(gè)任務(wù)優(yōu)先級(jí)最高的任務(wù)時(shí),所選擇的任務(wù)應(yīng)該是轉(zhuǎn)換為WAIT狀態(tài)時(shí)間最久的任務(wù)(第四條件)。
      [0353]這四個(gè)條件統(tǒng)稱(chēng)為“互斥量待機(jī)解除條件”。
      [0354]因而,當(dāng)執(zhí)行等待互斥量系統(tǒng)調(diào)用以及當(dāng)執(zhí)行釋放互斥量系統(tǒng)調(diào)用時(shí),根據(jù)基本實(shí)施方式的硬件RTOS執(zhí)行如下處理。信號(hào)量表212中對(duì)應(yīng)地存儲(chǔ)互斥量ID和表示該互斥量是否被哪一個(gè)任務(wù)占用的占用狀態(tài)數(shù)據(jù)。當(dāng)該互斥量沒(méi)有被占用時(shí),占用狀態(tài)數(shù)據(jù)為“0”,當(dāng)該互斥量被占用時(shí),占用狀態(tài)數(shù)據(jù)為占用該互斥量的任務(wù)的任務(wù)ID。
      [0355]<等待互斥量系統(tǒng)調(diào)用的執(zhí)行>
      [0356]這里,假設(shè)任務(wù)J為RUN-任務(wù)。
      [0357]A1.任務(wù)切換電路210檢測(cè)在等待互斥量系統(tǒng)調(diào)用中指定的互斥量是否被占用。以下根據(jù)該互斥量的占用狀態(tài),處理被分別說(shuō)明。
      [0358](當(dāng)互斥量沒(méi)有被占用時(shí))
      [0359]A2.任務(wù)切換電路210將執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)ID作為互斥量占用狀態(tài)數(shù)據(jù)記錄。
      [0360]A3.在任務(wù)J的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”。此時(shí),任務(wù)切換電路210設(shè)置RUN-任務(wù)的定時(shí)器252,以開(kāi)始測(cè)量READY占用時(shí)間。
      [0361](當(dāng)互斥量被占用時(shí))
      [0362]A2.任務(wù)切換電路210在任務(wù)J的任務(wù)狀態(tài)寄存器258中設(shè)置“WAIT”,在待機(jī)理由寄存器262中設(shè)置“互斥量等待”,在互斥量ID寄存器265中設(shè)定待機(jī)互斥量的互斥量ID,并設(shè)定定時(shí)器252以開(kāi)始測(cè)量WAIT占用時(shí)間。
      [0363]<釋放互斥量系統(tǒng)調(diào)用的執(zhí)行>
      [0364]B1.任務(wù)切換電路210在執(zhí)行系統(tǒng)調(diào)用的任務(wù)占用釋放互斥量的條件下,將釋放信號(hào)量ID輸入給互斥量電路240?;コ饬侩娐?40也包括如圖14所示的多階段連接的比較電路、以及判定是否滿(mǎn)足互斥量待機(jī)解除條件中第一條件以及第二條件的判定電路。該判定電路以該互斥量為對(duì)象,只有當(dāng)互斥量待機(jī)條件中的第一條件以及第二條件同時(shí)滿(mǎn)足時(shí)才輸出“1”。此外,當(dāng)沒(méi)有占用釋放互斥量的任務(wù)執(zhí)行釋放互斥量系統(tǒng)調(diào)用時(shí),使該任務(wù)的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0365](當(dāng)某一個(gè)判定電路輸出“1”,互斥量電路240輸出某一個(gè)任務(wù)ID時(shí))
      [0366]B2.任務(wù)切換電路210在所檢測(cè)出的任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”,清除待機(jī)理由寄存器262和互斥量ID寄存器265,并使定時(shí)器252開(kāi)始測(cè)量READY占用時(shí)間。
      [0367]B3.在執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”,并開(kāi)始測(cè)量READY占用時(shí)間。
      [0368](當(dāng)沒(méi)有判定電路輸出“1”,互斥量電路240不輸出任何一個(gè)任務(wù)ID時(shí))
      [0369]B2.任務(wù)切換電路210在信號(hào)量表212中將互斥量設(shè)定為非占用狀態(tài)。
      [0370]B3.使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0371][事件處理]
      [0372]下面簡(jiǎn)單說(shuō)明基本實(shí)施方式中的事件管理。事件表214對(duì)應(yīng)地記錄事件ID和標(biāo)記模式(以下稱(chēng)作“當(dāng)前標(biāo)記模式”)。標(biāo)記模式是8位的比特模式。
      [0373]設(shè)定事件系統(tǒng)調(diào)用是以事件ID和標(biāo)記模式(以下稱(chēng)作“設(shè)定標(biāo)記模式”)為參數(shù)來(lái)更新當(dāng)前標(biāo)記模式的系統(tǒng)調(diào)用。當(dāng)執(zhí)行設(shè)定事件系統(tǒng)調(diào)用時(shí),對(duì)應(yīng)該事件的當(dāng)前標(biāo)記模式更新為與設(shè)定標(biāo)記模式的邏輯或。例如,假如當(dāng)前標(biāo)記模式為“00001100”、設(shè)定標(biāo)記模式為“00000101”,則當(dāng)前標(biāo)記模式變?yōu)椤?0001101”。以下關(guān)于各標(biāo)記模式,從左至右依次稱(chēng)作第0比特,第1比特,...,以及第7比特。
      [0374]等待事件系統(tǒng)調(diào)用是用于等待待機(jī)事件的當(dāng)前標(biāo)記模式滿(mǎn)足規(guī)定條件的系統(tǒng)調(diào)用,以事件ID、標(biāo)記模式(以下稱(chēng)作“待機(jī)標(biāo)記模式”)以及標(biāo)記條件作為參數(shù)。當(dāng)執(zhí)行等待事件系統(tǒng)調(diào)用時(shí),判定當(dāng)前標(biāo)記模式和待機(jī)標(biāo)記模式之間是否滿(mǎn)足標(biāo)記條件。標(biāo)記條件是邏輯或(0R)或者邏輯與(AND)。在標(biāo)記條件是邏輯與(AND)的情況下,WAIT解除條件是指:對(duì)于待機(jī)標(biāo)記模式中為“I”的全部比特,當(dāng)前標(biāo)記模式中的對(duì)應(yīng)比特也全部是“I”。在標(biāo)記條件是邏輯或(OR)的情況下,WAIT解除條件是指:對(duì)與待機(jī)標(biāo)記模式中為“I”的至少一比特,當(dāng)前標(biāo)記模式的對(duì)應(yīng)比特也是“ I ”。例如,在當(dāng)前標(biāo)記模式為“00001101”、待機(jī)標(biāo)記模式為“00000011”、標(biāo)記條件是“邏輯或(OR) ”的情況下,待機(jī)標(biāo)記模式的第6比特以及第7比特是1,當(dāng)前標(biāo)記模式的第7比特是1,因此這種情況下,在等待事件系統(tǒng)調(diào)用中指定的WAIT解除條件滿(mǎn)足。另一方面,在標(biāo)記條件是“邏輯與(AND)”的情況下,由于當(dāng)前標(biāo)記模式的第6比特是“0”,因此WAIT解除條件不滿(mǎn)足。
      [0375][I]由普通軟件RTOS所進(jìn)行的事件處理
      [0376]當(dāng)執(zhí)行等待事件系統(tǒng)調(diào)用以及當(dāng)執(zhí)行設(shè)定事件系統(tǒng)調(diào)用時(shí),普通RTOS執(zhí)行如下處理。在普通RTOS中,為了管理事件,在存儲(chǔ)器上保持有事件表。在該事件表中,不僅存儲(chǔ)有事件ID、當(dāng)前標(biāo)記模式,通常還對(duì)應(yīng)地存儲(chǔ)有以該事件為待機(jī)事件而處于WAIT狀態(tài)的任務(wù)(以下稱(chēng)作“事件等待任務(wù)”)的任務(wù)ID、待機(jī)標(biāo)記模式、和標(biāo)記條件。
      [0377]<等待事件系統(tǒng)調(diào)用的執(zhí)行>
      [0378]Al.RTOS從事件表中讀出由系統(tǒng)調(diào)用指定的事件的當(dāng)前標(biāo)記模式。
      [0379]A2.按照標(biāo)記條件比較當(dāng)前標(biāo)記模式和待機(jī)標(biāo)記模式,以判定WAIT解除條件是否滿(mǎn)足。
      [0380](當(dāng)WAIT解除條件滿(mǎn)足時(shí))
      [0381 ] A3.使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0382](當(dāng)WAIT解除條件不滿(mǎn)足時(shí))
      [0383]A3.在事件表中記錄執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)ID。
      [0384]A4.在事件表中記錄待機(jī)標(biāo)記模式。
      [0385]A5.在事件表中記錄標(biāo)記條件。
      [0386]A6.使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到WAIT狀態(tài)。
      [0387]<設(shè)定事件系統(tǒng)調(diào)用的執(zhí)行>
      [0388]B1.RTOS從事件表中讀出與系統(tǒng)調(diào)用中指定的事件對(duì)應(yīng)的當(dāng)前標(biāo)記模式、任務(wù)ID、待機(jī)標(biāo)記模式、以及標(biāo)記條件。
      [0389]B2.將當(dāng)前標(biāo)記模式和設(shè)定標(biāo)記模式的邏輯或作為新的當(dāng)前標(biāo)記模式進(jìn)行記錄。
      [0390](當(dāng)不存在關(guān)于指定事件的事件等待任務(wù)時(shí),或者當(dāng)即使存在關(guān)于指定事件的事件等待任務(wù),而根據(jù)待機(jī)標(biāo)記模式和標(biāo)記條件,WAIT解除條件不滿(mǎn)足時(shí))
      [0391 ] B3.使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0392](當(dāng)存在關(guān)于指定事件的事件等待任務(wù),且WAIT解除條件滿(mǎn)足時(shí))
      [0393]B3.使事件等待任務(wù)的任務(wù)狀態(tài)從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0394]B4.清除事件表中的待機(jī)任務(wù)ID、待機(jī)標(biāo)記模式和標(biāo)記條件。
      [0395]B5.使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。另外,進(jìn)行RUN-任務(wù)的選擇。
      [0396]當(dāng)執(zhí)行設(shè)定事件系統(tǒng)調(diào)用時(shí),RTOS從多個(gè)WAIT-任務(wù)中選擇READY-任務(wù)的策略如下。
      [0397]1.所選擇的任務(wù)應(yīng)該是WAIT-任務(wù)(第一條件)。
      [0398]2.所選擇的任務(wù)應(yīng)該是WAIT-任務(wù)中以指定事件為待機(jī)事件的任務(wù)(第二條件)。
      [0399]3.所選擇的任務(wù)應(yīng)該是對(duì)待機(jī)標(biāo)記模式、當(dāng)前標(biāo)記模式和標(biāo)記條件進(jìn)行比較,WAIT解除條件滿(mǎn)足的任務(wù)(第三條件)。
      [0400]這三個(gè)條件統(tǒng)稱(chēng)為“事件待機(jī)解除條件”。
      [0401][2]由根據(jù)基本實(shí)施方式的硬件RT0S所進(jìn)行的事件處理
      [0402]當(dāng)任務(wù)處理裝置100執(zhí)行等待事件系統(tǒng)調(diào)用以及執(zhí)行設(shè)定事件系統(tǒng)調(diào)用時(shí),RT0S執(zhí)行如下處理。內(nèi)置于任務(wù)處理裝置100的信號(hào)量表212對(duì)應(yīng)存儲(chǔ)事件ID和當(dāng)前標(biāo)記模式。待機(jī)任務(wù)ID和待機(jī)標(biāo)記模式等信息,存儲(chǔ)在狀態(tài)存儲(chǔ)單元220中。
      [0403]<等待事件系統(tǒng)調(diào)用的執(zhí)行>
      [0404]A1.任務(wù)切換電路210從事件表214中讀出當(dāng)前標(biāo)記模式。
      [0405]A2.任務(wù)切換電路210根據(jù)標(biāo)記條件比較當(dāng)前標(biāo)記模式和待機(jī)標(biāo)記模式,以判定WAIT解除條件是否滿(mǎn)足。
      [0406](當(dāng)WAIT解除條件滿(mǎn)足時(shí))
      [0407]A3.在執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”。
      [0408](當(dāng)WAIT解除條件不滿(mǎn)足時(shí))
      [0409]A3.任務(wù)切換電路210在執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“WAIT”,在待機(jī)理由寄存器262中設(shè)定“事件等待”,在事件ID寄存器266中設(shè)定待機(jī)事件的事件ID,在待機(jī)標(biāo)記寄存器268中設(shè)定待機(jī)標(biāo)記模式,以及在標(biāo)記條件寄存器270中設(shè)定標(biāo)記條件。
      [0410]<設(shè)定事件系統(tǒng)調(diào)用的執(zhí)行>
      [0411]B1.任務(wù)切換電路210從事件表214中讀出當(dāng)前標(biāo)記模式,并且將系統(tǒng)調(diào)用中指定的事件的事件ID輸入給事件選擇電路236。
      [0412]B2.任務(wù)切換電路210對(duì)設(shè)定標(biāo)記模式和來(lái)自事件表214的當(dāng)前標(biāo)記模式進(jìn)行邏輯或運(yùn)算。
      [0413]B3.事件選擇電路236根據(jù)所輸入的事件ID選擇滿(mǎn)足事件待機(jī)條件的任務(wù)。此時(shí),也可以不考慮任務(wù)優(yōu)先級(jí)和WAIT占用時(shí)間來(lái)選擇多個(gè)任務(wù)。
      [0414](當(dāng)存在滿(mǎn)足事件待機(jī)解除條件的任務(wù)時(shí))
      [0415]B4.任務(wù)切換電路210在事件等待任務(wù)的任務(wù)狀態(tài)寄存器258中設(shè)定“READY”,清除事件ID寄存器266、待機(jī)標(biāo)記寄存器268、和標(biāo)記條件寄存器270。
      [0416]B5.使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0417](當(dāng)不存在滿(mǎn)足事件待機(jī)解除條件的任務(wù)時(shí))
      [0418]B4.任務(wù)切換電路210使執(zhí)行系統(tǒng)調(diào)用的任務(wù)的任務(wù)狀態(tài)從RUN狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0419][超時(shí)處理]
      [0420]當(dāng)WAIT解除條件滿(mǎn)足時(shí),轉(zhuǎn)換到WAIT狀態(tài)的任務(wù)轉(zhuǎn)換到READY狀態(tài)。但是,如果因?yàn)槟撤N外因或應(yīng)用程序故障而阻礙WAIT解除條件滿(mǎn)足時(shí),該任務(wù)將不能從WAIT狀態(tài)離開(kāi)。因此,通常在任務(wù)轉(zhuǎn)換到WAIT狀態(tài)時(shí)設(shè)定超時(shí)值。超時(shí)值定期遞減,當(dāng)變成零時(shí),即使WAIT解除條件不滿(mǎn)足,任務(wù)也從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài),即防止任務(wù)在WAIT狀態(tài)停留的時(shí)間超過(guò)超時(shí)值。
      [0421][I]由普通軟件RTOS所進(jìn)行的超時(shí)處理
      [0422]對(duì)于普通軟件RT0S,在處于WAIT狀態(tài)的任務(wù)的TCB中設(shè)定超時(shí)值,該超時(shí)值周期性地遞減。RTOS周期性地向CPU處理申請(qǐng)中斷,以檢查全部TCB,以及檢測(cè)出超時(shí)值呈O的WAIT-任務(wù)。當(dāng)檢測(cè)出這種任務(wù)時(shí),RTOS使該任務(wù)的任務(wù)狀態(tài)從WAIT狀態(tài)轉(zhuǎn)換到READY狀態(tài)。
      [0423][2]由根據(jù)基本實(shí)施方式的硬件RTOS所進(jìn)行的超時(shí)處理
      [0424]另一方面,在基本實(shí)施方式中,任務(wù)切換電路210周期性地遞減各超時(shí)計(jì)數(shù)器274的超時(shí)值。當(dāng)執(zhí)行WAIT系列系統(tǒng)調(diào)用時(shí),超時(shí)值設(shè)定為參數(shù)。任務(wù)切換電路210在執(zhí)行該系統(tǒng)調(diào)用的任務(wù)的超時(shí)計(jì)數(shù)器274中設(shè)定超時(shí)值。
      [0425]由于超時(shí)值的遞減處理不需要CPU 150參與,因此任務(wù)切換電路210能夠不依賴(lài)于任務(wù)執(zhí)行處理進(jìn)行超時(shí)值的更新。因此,即使在CPU 150執(zhí)行任務(wù)的過(guò)程中,任務(wù)控制電路200也能夠主動(dòng)地更新超時(shí)值。由于狀態(tài)數(shù)據(jù)不斷地被輸入到超時(shí)檢測(cè)電路238中,因此超時(shí)檢測(cè)電路238能夠在更新超時(shí)值的同時(shí),檢測(cè)出超時(shí)值呈O的任務(wù)。超時(shí)檢測(cè)電路238輸出檢測(cè)出的這種任務(wù)的任務(wù)ID。當(dāng)從超時(shí)檢測(cè)電路238獲得該任務(wù)ID時(shí),任務(wù)切換電路210便確定發(fā)生了超時(shí),隨后申請(qǐng)HC以停止提供CPU時(shí)鐘。任務(wù)控制電路200使發(fā)生超時(shí)的WAIT-任務(wù)轉(zhuǎn)換到READY狀態(tài),并且使RUN-任務(wù)轉(zhuǎn)換到READY狀態(tài)。任務(wù)切換電路210從READY-任務(wù)中選擇下一個(gè)應(yīng)執(zhí)行的任務(wù)。另外,任務(wù)切換電路210重啟已發(fā)生超時(shí)的任務(wù)的定時(shí)器252,以測(cè)量READY占用時(shí)間。
      [0426]根據(jù)這種處理方法,在任務(wù)執(zhí)行過(guò)程中,即CPU時(shí)鐘運(yùn)行過(guò)程中發(fā)生超時(shí)時(shí),能夠通過(guò)立即向CPU 150申請(qǐng)中斷,來(lái)執(zhí)行任務(wù)轉(zhuǎn)換。另外,在任務(wù)執(zhí)行過(guò)程中,任務(wù)切換電路210能夠不依賴(lài)CPU 150的處理能力獨(dú)立地執(zhí)行超時(shí)值的更新處理。
      [0427][作為有限狀態(tài)機(jī)的任務(wù)切換電路210]
      [0428]圖15是任務(wù)切換電路210的狀態(tài)轉(zhuǎn)移圖。
      [0429]在初始化處理(Al)之前,全部任務(wù)都處于IDLE狀態(tài)。當(dāng)初始化處理結(jié)束時(shí)(SlO),某一個(gè)任務(wù)成為RUN-任務(wù),任務(wù)切換電路210處于任務(wù)執(zhí)行狀態(tài)(A2)。當(dāng)檢測(cè)出中斷請(qǐng)求信號(hào)時(shí)(S12),特殊任務(wù)成為RUN-任務(wù),執(zhí)行中斷處理(A3)。當(dāng)中斷處理結(jié)束時(shí)(S14),任務(wù)切換電路210從普通任務(wù)中選擇RUN-任務(wù),并轉(zhuǎn)換到A2。
      [0430]另外,在任務(wù)執(zhí)行過(guò)程中(A2),執(zhí)行系統(tǒng)調(diào)用時(shí)(S16),執(zhí)行系統(tǒng)調(diào)用處理(A4)。在未發(fā)生任務(wù)轉(zhuǎn)換即RUN-任務(wù)轉(zhuǎn)換的情況下(S18),任務(wù)切換電路210返回到A2。另一方面,在由于系統(tǒng)調(diào)用處理(A4)而發(fā)生任務(wù)轉(zhuǎn)換的情況下(S20),任務(wù)切換電路210根據(jù)執(zhí)行選擇電路232的輸出來(lái)進(jìn)行RUN-任務(wù)的選擇(A5)。當(dāng)任務(wù)轉(zhuǎn)換結(jié)束時(shí)(S22),處理狀態(tài)轉(zhuǎn)換到A2。
      [0431]最后,結(jié)合基本實(shí)施方式,還附帶說(shuō)明一下只安裝作為任務(wù)處理裝置100的主要部件的保存電路120和任務(wù)控制電路200中的一個(gè)的情況。
      [0432][未配置任務(wù)控制電路200的類(lèi)型的任務(wù)處理裝置100]
      [0433]圖16是圖5所示的任務(wù)處理裝置100中未配置任務(wù)控制電路200的任務(wù)處理裝置100的電路圖。
      [0434]代替配置任務(wù)控制電路200,追加有寄存器切換控制電路322和處理數(shù)據(jù)存儲(chǔ)單元320。由于未配置任務(wù)控制電路200,因此任務(wù)調(diào)度功能由軟件RTOS來(lái)實(shí)現(xiàn)。因而,RTOS在任務(wù)轉(zhuǎn)換時(shí),需要暫時(shí)取得CPU 150的使用權(quán)。處理數(shù)據(jù)存儲(chǔ)單元320通常存儲(chǔ)用于RTOS的處理數(shù)據(jù)。當(dāng)RTOS取得CPU 150的使用權(quán)時(shí),處理數(shù)據(jù)存儲(chǔ)單元320調(diào)換存儲(chǔ)在處理數(shù)據(jù)存儲(chǔ)單元320中的RTOS用處理數(shù)據(jù)和存儲(chǔ)在特殊寄存器156中的任務(wù)用處理數(shù)據(jù)。以下以從任務(wù)A向任務(wù)B切換來(lái)說(shuō)明該處理過(guò)程。
      [0435]A1.當(dāng)任務(wù)A執(zhí)行系統(tǒng)調(diào)用時(shí),將系統(tǒng)調(diào)用中的變量以及系統(tǒng)調(diào)用ID記錄在某些普通寄存器158內(nèi)。
      [0436]A2.寄存器切換控制電路322將任務(wù)A的處理數(shù)據(jù)移動(dòng)到處理數(shù)據(jù)存儲(chǔ)單元320中,并將處理數(shù)據(jù)存儲(chǔ)單元320中的RT0S用處理數(shù)據(jù)加載到處理寄存器154中。在該階段,RT0S取得CPU 150的使用權(quán)。
      [0437]A3.寄存器切換控制電路322向保存寄存器110a輸入寫(xiě)入信號(hào),以將處理數(shù)據(jù)存儲(chǔ)單元320中存儲(chǔ)的任務(wù)A用處理數(shù)據(jù)保存到保存寄存器110中。
      [0438]A4.RT0S根據(jù)記錄在普通寄存器158中的系統(tǒng)調(diào)用變量和ID,執(zhí)行與系統(tǒng)調(diào)用相對(duì)應(yīng)的處理。另外,將任務(wù)A的TCB中的任務(wù)狀態(tài)數(shù)據(jù)設(shè)定為“READY”,并向任務(wù)就緒表中追加任務(wù)A的TCB。
      [0439]B1.接著,RT0S按照所述的RUN-任務(wù)選擇條件,選擇RUN-任務(wù),這里是選擇任務(wù)B0
      [0440]B2.RTOS指示寄存器切換控制電路322將指定任務(wù)B的任務(wù)選擇信號(hào)輸入到加載選擇電路112中。由此,處理數(shù)據(jù)從保存寄存器110b移動(dòng)到處理數(shù)據(jù)存儲(chǔ)單元320中。
      [0441]B3.寄存器切換控制電路322調(diào)換處理數(shù)據(jù)存儲(chǔ)單元320中的任務(wù)B用處理數(shù)據(jù)和處理寄存器154中的RT0S用處理數(shù)據(jù)。由此,任務(wù)B取得CPU 150的使用權(quán)。
      [0442]根據(jù)這種處理方法,與配置任務(wù)控制電路200的圖5所示的任務(wù)處理裝置100相t匕,能夠使任務(wù)處理裝置100整體電路小型化。RT0S是以軟件實(shí)現(xiàn)的,但是處理數(shù)據(jù)的加載/保存是能夠由來(lái)自寄存器切換控制電路322的信號(hào)來(lái)硬件控制的。如果將分別連接處理寄存器154、處理數(shù)據(jù)存儲(chǔ)單元320、加載選擇電路112、和保存寄存器110的總線(xiàn)設(shè)定為能夠并行發(fā)送處理數(shù)據(jù)的位數(shù),則與將處理數(shù)據(jù)保存到TCB中和從TCB加載處理數(shù)據(jù)相比,能夠?qū)崿F(xiàn)更高速的任務(wù)轉(zhuǎn)換。
      [0443][未配置保存電路120的類(lèi)型的任務(wù)處理裝置100]
      [0444]圖17是圖5所示的任務(wù)處理裝置100中未配置保存電路120的任務(wù)處理裝置100的電路圖。
      [0445]代替配置保存電路120,追加有中斷接口電路324。由于未配置保存電路120,因此處理數(shù)據(jù)保存到存儲(chǔ)器的TCB中。處理數(shù)據(jù)的保存/加載由基于軟件的RT0S來(lái)實(shí)現(xiàn)。因而,在任務(wù)轉(zhuǎn)換時(shí),RT0S需要暫時(shí)取得CPU 150的使用權(quán)。以下以從任務(wù)A向任務(wù)B切換來(lái)說(shuō)明該處理過(guò)程。
      [0446]當(dāng)通過(guò)執(zhí)行系統(tǒng)調(diào)用來(lái)啟動(dòng)任務(wù)轉(zhuǎn)換時(shí),首先軟件RT0S將任務(wù)A的處理數(shù)據(jù)保存到任務(wù)A的TCB中。而且,將RT0S用處理數(shù)據(jù)加載到處理寄存器154中。此時(shí)的處理方法與參照?qǐng)D3說(shuō)明的內(nèi)容相似。
      [0447]軟件RT0S向中斷接口電路324中寫(xiě)入系統(tǒng)調(diào)用的參數(shù)。執(zhí)行控制電路152使CPU150的CPU時(shí)鐘停止。中斷接口電路324使任務(wù)控制電路200執(zhí)行任務(wù)轉(zhuǎn)換。任務(wù)切換電路210,首先將任務(wù)A的任務(wù)狀態(tài)寄存器258設(shè)定為READY,并根據(jù)來(lái)自任務(wù)選擇電路230的輸出選擇作為下一個(gè)RUN-任務(wù)的任務(wù)B。任務(wù)切換電路210指示中斷接口電路324加載任務(wù)B的處理數(shù)據(jù)。這時(shí),中斷接口電路324使執(zhí)行控制電路152重啟CPU時(shí)鐘。另外,中斷接口電路324通知軟件RTOS已經(jīng)選擇了任務(wù)B。軟件RTOS訪(fǎng)問(wèn)任務(wù)B的TCB,以將任務(wù)B的處理數(shù)據(jù)加載到處理寄存器154中。
      [0448]根據(jù)這種處理方法,與配置保存電路120的圖5所示任務(wù)處理裝置100相比,能夠使任務(wù)處理裝置100整體電路小型化。RTOS功能的一部分是以軟件實(shí)現(xiàn)的,但是任務(wù)選擇處理由任務(wù)控制電路200來(lái)實(shí)現(xiàn)。
      [0449]與參照?qǐng)D2以及圖3說(shuō)明的軟件RTOS不同,圖16以及圖17所示的任務(wù)處理裝置100,能夠任意地將RTOS功能的一部分硬件化。如參照?qǐng)D16所述,由于配置了保存電路120,而無(wú)需訪(fǎng)問(wèn)用于處理數(shù)據(jù)保存/加載的TCB。因此,能夠通過(guò)寄存器切換控制電路322來(lái)執(zhí)行處理數(shù)據(jù)的保存/加載處理。另外,如參照?qǐng)D17所述,由于配置了任務(wù)控制電路200,因此軟件RTOS能夠?qū)⑷蝿?wù)選擇功能轉(zhuǎn)移給任務(wù)控制電路200。
      [0450]如參照?qǐng)D5所述,在配置了保存電路120和任務(wù)控制電路200的任務(wù)處理裝置100的情況下,能夠?qū)TOS的任務(wù)調(diào)度功能完全硬件化。由于在任務(wù)轉(zhuǎn)換時(shí)沒(méi)有必要訪(fǎng)問(wèn)存儲(chǔ)器中的TCB,因此使任務(wù)轉(zhuǎn)換處理的速度進(jìn)一步提高。本發(fā)明人等人的實(shí)驗(yàn)表明:與參照?qǐng)D3說(shuō)明的普通軟件RTOS相比,基本實(shí)施方式中的任務(wù)處理裝置100以約100倍的速度進(jìn)行工作。
      [0451][虛擬隊(duì)列實(shí)施方式(SP系統(tǒng))]
      [0452]下面說(shuō)明通過(guò)硬件來(lái)實(shí)現(xiàn)雙輸入型隊(duì)列算法的虛擬隊(duì)列實(shí)施方式中的任務(wù)處理裝置100。基本實(shí)施方式中的任務(wù)處理裝置100配置了基于定時(shí)器管理的任務(wù)調(diào)度功能?;緦?shí)施方式中的任務(wù)調(diào)度是“當(dāng)任務(wù)優(yōu)先級(jí)相同時(shí),優(yōu)先向等待時(shí)間最長(zhǎng)的任務(wù)分配執(zhí)行權(quán)”的算法。以下將這種任務(wù)調(diào)度稱(chēng)作“公平型任務(wù)調(diào)度”。
      [0453]參照?qǐng)D11說(shuō)明根據(jù)公平型任務(wù)調(diào)度的構(gòu)思管理任務(wù)就緒表的方法。當(dāng)為RUN-任務(wù)的任務(wù)J返回到READY狀態(tài)時(shí),任務(wù)J被安排在該表最末尾的任務(wù)F的后面。在任務(wù)J之后,任務(wù)A轉(zhuǎn)換為RUN-任務(wù)。因此在任務(wù)優(yōu)先級(jí)“O”的優(yōu)先級(jí)指針280中,以任務(wù)D、...、任務(wù)F、任務(wù)J的順序連接有各任務(wù)的TCB。直到任務(wù)F的執(zhí)行結(jié)束之前,不向任務(wù)J提供執(zhí)行權(quán)。公平型任務(wù)調(diào)度中的處理方法類(lèi)似于FIFO的算法,即隊(duì)列算法。因?yàn)樵撍惴ㄟm用于基于定時(shí)器的管理,因此能夠采用定時(shí)器通過(guò)硬件來(lái)實(shí)現(xiàn)公平型任務(wù)調(diào)度。
      [0454]另一方面,某些軟件OS采用“當(dāng)任務(wù)優(yōu)先級(jí)相同時(shí),優(yōu)先向曾經(jīng)轉(zhuǎn)換為RUN-任務(wù)的任務(wù)分配執(zhí)行權(quán)”的任務(wù)調(diào)度。以下將這種任務(wù)調(diào)度稱(chēng)作“再執(zhí)行優(yōu)先型任務(wù)調(diào)度”。在再執(zhí)行優(yōu)先型任務(wù)調(diào)度中,返回到READY狀態(tài)的任務(wù)J (其為RUN-任務(wù))被放入表的起始處而不是最末尾。在任務(wù)J之后,任務(wù)A轉(zhuǎn)換為RUN-任務(wù)。因此在任務(wù)優(yōu)先級(jí)“O”的優(yōu)先級(jí)指針280中,以任務(wù)J、任務(wù)D、...、任務(wù)F的順序連接有各任務(wù)的TCB。當(dāng)任務(wù)A結(jié)束時(shí),優(yōu)先于任務(wù)D、任務(wù)F再次向任務(wù)J提供執(zhí)行權(quán)。當(dāng)盡可能想總體執(zhí)行曾經(jīng)得到過(guò)執(zhí)行權(quán)的任務(wù)時(shí),再執(zhí)行優(yōu)先型任務(wù)調(diào)度是有效的。可以說(shuō)再執(zhí)行優(yōu)先型任務(wù)調(diào)度包括LIFO算法,即堆棧算法。在虛擬隊(duì)列實(shí)施方式中,通過(guò)硬件實(shí)現(xiàn)基本上為FIFO設(shè)計(jì)但也能夠與LIFO相容的雙輸入型隊(duì)列算法,從而實(shí)現(xiàn)再執(zhí)行優(yōu)先型任務(wù)調(diào)度。
      [0455]此外,雙輸入型隊(duì)列算法不僅在再執(zhí)行優(yōu)先型任務(wù)調(diào)度中還在普通應(yīng)用程序中有用。因此,通過(guò)硬件實(shí)現(xiàn)雙輸入型隊(duì)列算法有效提高了各種計(jì)算機(jī)程序的處理速度。
      [0456]圖18是虛擬隊(duì)列實(shí)施方式中的任務(wù)處理裝置100的電路圖。
      [0457]除了 CPU 150之外,虛擬隊(duì)列實(shí)施方式中的任務(wù)處理裝置100還包括保存電路120和任務(wù)控制電路200。但是,虛擬隊(duì)列實(shí)施方式中的任務(wù)切換電路210包括主電路400、寫(xiě)入電路402、隊(duì)列控制電路404以及最大值選擇電路406。主電路400是具備與基本實(shí)施方式中的任務(wù)切換電路210大體相同的功能的電路。因此,虛擬隊(duì)列實(shí)施方式中的任務(wù)切換電路210被配置成除了與基本實(shí)施方式中的任務(wù)切換電路210—致的主電路400,還包括寫(xiě)入電路402、隊(duì)列控制電路404以及最大值選擇電路406。狀態(tài)存儲(chǔ)單元220不僅向任務(wù)選擇電路230而且還向最大值選擇電路406、隊(duì)列控制電路404不斷地輸出全部任務(wù)的全部狀態(tài)數(shù)據(jù)。
      [0458]圖19是虛擬隊(duì)列實(shí)施方式中的任務(wù)控制電路200的部分電路圖。
      [0459]任務(wù)控制電路200的基本結(jié)構(gòu)與圖10所示的電路結(jié)構(gòu)大體相同。分別與各任務(wù)相對(duì)應(yīng)的各狀態(tài)寄存器250包括任務(wù)ID寄存器410、任務(wù)優(yōu)先級(jí)寄存器412、隊(duì)列順序寄存器414、以及隊(duì)列標(biāo)識(shí)寄存器416。狀態(tài)寄存器250也可以包括其它的寄存器,但是這里重點(diǎn)說(shuō)明與雙輸入型隊(duì)列算法相關(guān)的那些寄存器。
      [0460](A)任務(wù)ID寄存器410:用于存儲(chǔ)任務(wù)ID,與基本實(shí)施方式所示的任務(wù)ID寄存器254相同。任務(wù)ID寄存器410不斷地輸出表示任務(wù)ID的EID_S信號(hào)。
      [0461](B)任務(wù)優(yōu)先級(jí)寄存器412:用于存儲(chǔ)任務(wù)優(yōu)先級(jí)(PR),與基本實(shí)施方式所示的任務(wù)優(yōu)先級(jí)寄存器256相同。PR_S信號(hào)被不斷地輸出。
      [0462](C)隊(duì)列順序寄存器414:用于存儲(chǔ)表示后述的虛擬隊(duì)列中的輸入順序的“順序值(0DR)”。順序值越大,表示任務(wù)置于虛擬隊(duì)列的更深處。詳細(xì)情況將在后面描述。順序值作為0DR_S信號(hào)被不斷地輸出。
      [0463](D)隊(duì)列標(biāo)識(shí)寄存器416:用于存儲(chǔ)表示虛擬隊(duì)列的“隊(duì)列ID(QID) ”。QID_S信號(hào)被不斷地輸出。
      [0464]任務(wù)優(yōu)先級(jí)寄存器412、隊(duì)列順序寄存器414以及隊(duì)列標(biāo)識(shí)寄存器416特別是作為用于管理虛擬隊(duì)列的隊(duì)列寄存器而工作。
      [0465]虛擬隊(duì)列是與任務(wù)狀態(tài)相對(duì)應(yīng)的隊(duì)列。例如,QID = 0的虛擬隊(duì)列(以下表述為“虛擬隊(duì)列(0)”)可以與READY狀態(tài)相對(duì)應(yīng),虛擬隊(duì)列⑴可以與等待信號(hào)量狀態(tài)相對(duì)應(yīng),虛擬隊(duì)列(2)可以與等待互斥量狀態(tài)相對(duì)應(yīng)。或者,虛擬隊(duì)列(1)可以與信號(hào)量ID = 0的等待信號(hào)量狀態(tài)相對(duì)應(yīng),虛擬隊(duì)列(2)可以與信號(hào)量ID = 1的等待信號(hào)量狀態(tài)相對(duì)應(yīng)。QID與任務(wù)狀態(tài)之間的對(duì)應(yīng)可以通過(guò)軟件任意設(shè)定。
      [0466]當(dāng)任務(wù)A處于READY狀態(tài)時(shí),在隊(duì)列標(biāo)識(shí)寄存器416_A中設(shè)定與READY狀態(tài)相對(duì)應(yīng)的虛擬隊(duì)列的QID。任務(wù)選擇電路230或隊(duì)列控制電路404能夠通過(guò)參照各隊(duì)列標(biāo)識(shí)寄存器416來(lái)判別各任務(wù)的任務(wù)狀態(tài)。因此,隊(duì)列標(biāo)識(shí)寄存器416能夠?qū)崿F(xiàn)與基本實(shí)施方式中的任務(wù)狀態(tài)寄存器258、待機(jī)理由寄存器262、信號(hào)量ID寄存器264、互斥量ID寄存器265以及事件ID寄存器266等相同的功能。
      [0467]虛擬隊(duì)列不是物理上存在的,而是根據(jù)隊(duì)列順序寄存器414和隊(duì)列標(biāo)識(shí)寄存器416的配置而假設(shè)的概念性隊(duì)列,這點(diǎn)很重要。例如,當(dāng)各隊(duì)列標(biāo)識(shí)寄存器416和隊(duì)列順序寄存器414被配置為:
      [0468]任務(wù)A:QID = 0,0DR = 0
      [0469]任務(wù)B:QID = 0,ODR = I
      [0470]任務(wù)C:QID = 0,ODR = 2
      [0471]任務(wù)D:QID = 1,ODR = O
      [0472]時(shí),表示在虛擬隊(duì)列(O)中按照順序依次輸入任務(wù)C、B、A,而在虛擬隊(duì)列⑴中只輸入任務(wù)D。通過(guò)定義QID和ODR的數(shù)值范圍能夠靈活地變更虛擬隊(duì)列的數(shù)量和大小。
      [0473]任務(wù)選擇電路230根據(jù)狀態(tài)寄存器250輸出的狀態(tài)數(shù)據(jù)來(lái)選擇應(yīng)該轉(zhuǎn)換狀態(tài)的任務(wù)。主電路400向任務(wù)選擇電路230輸入CND信號(hào)。CND是表示任務(wù)選擇條件的信號(hào),包括表示隊(duì)列ID的QID_C和表示任務(wù)優(yōu)先級(jí)的PR_C。例如,在希望從虛擬隊(duì)列(O)中抽取任務(wù)的情況下,主電路400在CND中設(shè)定QID_C = O。任務(wù)選擇電路230輸出表示在被指定的虛擬隊(duì)列(O)中成為抽取對(duì)象的任務(wù)(以下簡(jiǎn)稱(chēng)為“抽取任務(wù)”)的任務(wù)ID的EID_A1,申請(qǐng)EID_A1_EN。另外,PR_A1和0DR_A1分別表示抽取任務(wù)的任務(wù)優(yōu)先級(jí)和順序值。由此,主電路400能夠通過(guò)指定QID_C = Qn來(lái)查詢(xún)?nèi)蝿?wù)選擇電路230,從而識(shí)別虛擬隊(duì)列(Qn)的抽取任務(wù)。任務(wù)選擇電路230實(shí)現(xiàn)用于選擇抽取任務(wù)的抽取候選電路的功能。更詳細(xì)的情況將在后面參照?qǐng)D32進(jìn)行描述。
      [0474]向最大值選擇電路406中輸入來(lái)自主電路400的CND信號(hào)。當(dāng)CND表明QID_C =Qn時(shí),最大值選擇電路406輸出表示虛擬隊(duì)列(Qn)中的最大順序值的0DR_A2,并申請(qǐng)EID_A2_EN。更詳細(xì)的情況將在后面參照?qǐng)D28進(jìn)行描述。
      [0475]隊(duì)列控制電路404通過(guò)設(shè)定各狀態(tài)寄存器250中的狀態(tài)數(shù)據(jù)來(lái)控制各任務(wù)的狀態(tài)轉(zhuǎn)移。隊(duì)列控制電路404接收來(lái)自主電路400的CMD和EID_C。除此之外,還接收CND (QID_C、PR_C)、0DR_A1、0DR_A2、0DR_A2_EN和各狀態(tài)寄存器250中的狀態(tài)數(shù)據(jù)。
      [0476]CMD表示用于操作虛擬隊(duì)列的命令。成為CMD對(duì)象的虛擬隊(duì)列的隊(duì)列ID、任務(wù)的任務(wù)ID和任務(wù)優(yōu)先級(jí)分別由QID_C、EID_C和PR_C來(lái)指定。命令是ENQ_TL、ENQ_TP和DEQ三個(gè)中的任意一個(gè)。
      [0477]當(dāng)輸入順序輸入命令ENQ_TL時(shí),由EID_C信號(hào)指定的任務(wù)被輸入虛擬隊(duì)列的最末尾。以下將在隊(duì)列的最末尾進(jìn)行的輸入稱(chēng)作“順序輸入”。當(dāng)輸入抽取命令DEQ時(shí),在虛擬隊(duì)列的起始處抽取任務(wù)。ENQ_TL和DEQ以FIFO模式控制隊(duì)列。當(dāng)輸入逆序輸入命令ENQ_TP時(shí),由EID_C信號(hào)指定的任務(wù)被輸入虛擬隊(duì)列的起始處。以下將這種在隊(duì)列的起始處進(jìn)行的輸入稱(chēng)作“逆序輸入”。逆序輸入不是FIFO模式的輸入,因此逆序輸入是特殊的輸入方式。
      [0478]當(dāng)從主電路400輸入CMD時(shí),寫(xiě)入電路402申請(qǐng)WT,從而將從隊(duì)列控制電路404輸出的數(shù)據(jù)寫(xiě)入到各狀態(tài)寄存器250中。隊(duì)列控制電路404、寫(xiě)入電路402、任務(wù)選擇電路230和最大值選擇電路406等實(shí)現(xiàn)用于控制虛擬隊(duì)列的虛擬隊(duì)列處理電路的功能。
      [0479]隊(duì)列控制電路404的電路結(jié)構(gòu)將參照下面的圖20進(jìn)行詳述。
      [0480]圖20是隊(duì)列控制電路404的電路圖。
      [0481]隊(duì)列控制電路404是多個(gè)寄存器值生成電路420的集合。各寄存器值生成電路420是相同的電路。寄存器值生成電路420與每個(gè)任務(wù)相對(duì)應(yīng),也可以說(shuō)與每個(gè)狀態(tài)寄存器250相對(duì)應(yīng)。寄存器值生成電路420_En與任務(wù)ID = En的任務(wù)(以下稱(chēng)為“任務(wù)(En) ”)相對(duì)應(yīng)。對(duì)應(yīng)任務(wù)的任務(wù)ID作為ELM_ID信號(hào)被固定地輸入到寄存器值生成電路420中。
      [0482](?1^、010_3和PR_S是從狀態(tài)寄存器250輸出的狀態(tài)數(shù)據(jù),分別表示順序值、隊(duì)列ID和任務(wù)優(yōu)先級(jí)。向與任務(wù)(En)相對(duì)應(yīng)的寄存器值生成電路420_En輸入表示任務(wù)(En)的順序值、隊(duì)列ID和任務(wù)優(yōu)先級(jí)的ODR_S_En、QID_S_En和PR_S_En。CMD和EID_C是從主電路400輸入的。ODR_A2_EN和ODR_A2是從最大值選擇電路406輸入的。當(dāng)申請(qǐng)ODR_A2_EN時(shí),表示最大順序值的ODR_A2是有效的。0DR_A1是從任務(wù)選擇電路230輸入的。ODR_Al表示抽取任務(wù)的任務(wù)ID。QID_C和PR_C是從主電路400輸入的CND信號(hào),分別表示作為任務(wù)選擇條件的QID和PR。
      [0483]寄存器值生成電路420_En將任務(wù)(En)的順序值、隊(duì)列ID、任務(wù)優(yōu)先級(jí)分別作為QID_N_En、0DR_N_En、PR_N_En 輸出,當(dāng)通過(guò)寫(xiě)入電路 402 申請(qǐng) WT 時(shí),將 QID_N_En、0DR_N_En、PR_N_En寫(xiě)入到狀態(tài)寄存器250_En。
      [0484]當(dāng)寫(xiě)入電路402申請(qǐng)WT時(shí),來(lái)自全部的寄存器值生成電路420的QID_N_En、0DR_N_En、PR_N_En被寫(xiě)入到全部的狀態(tài)寄存器250中。受到CMD影響的與任務(wù)相對(duì)應(yīng)的寄存器值生成電路420將根據(jù)后述的算法指定的新數(shù)據(jù)寫(xiě)入到狀態(tài)寄存器250中。另一方面,不受CMD影響的與任務(wù)相對(duì)應(yīng)的寄存器值生成電路420也通過(guò)重新輸出與寫(xiě)入狀態(tài)寄存器250中的數(shù)據(jù)相同的數(shù)據(jù)來(lái)進(jìn)行寫(xiě)入操作。
      [0485]此外,允許來(lái)自寄存器值生成電路420的數(shù)據(jù)被寫(xiě)入的WT也可以不是輸入到各狀態(tài)寄存器250,而是直接輸入到隊(duì)列控制電路404中。在這種情況下,只有內(nèi)置在隊(duì)列控制電路404中的寄存器值生成電路420中的與應(yīng)該通過(guò)CMD變更狀態(tài)的任務(wù)相對(duì)應(yīng)的寄存器值生成電路420,可以將新數(shù)據(jù)寫(xiě)入狀態(tài)寄存器250中。
      [0486]寄存器值生成電路420進(jìn)行的具體處理細(xì)節(jié)將在后面描述。
      [0487]圖21是表示虛擬隊(duì)列與任務(wù)之間的關(guān)系的概念圖。
      [0488]這里,假設(shè)虛擬隊(duì)列(QO)和虛擬隊(duì)列(Ql)兩個(gè)虛擬隊(duì)列。虛擬隊(duì)列(QO)是輸入任務(wù)優(yōu)先級(jí)PR = O的任務(wù)的優(yōu)先隊(duì)列(以下表述為“優(yōu)先隊(duì)列(Q0:0) ”)和輸入任務(wù)優(yōu)先級(jí)PR = I的任務(wù)的優(yōu)先隊(duì)列(Q0:1)的集合。虛擬隊(duì)列(Ql)也同理。實(shí)際上是假設(shè)四個(gè)優(yōu)先隊(duì)列。例如,虛擬隊(duì)列(QO)可以對(duì)應(yīng)于READY狀態(tài),而虛擬隊(duì)列(Ql)可以對(duì)應(yīng)于WAIT狀態(tài)。
      [0489]在各虛擬隊(duì)列中,左側(cè)所示為輸入口,右側(cè)所示為抽取口。在順序輸入中,從左側(cè)輸入任務(wù);在逆序輸入中,從右側(cè)輸入任務(wù)。任務(wù)抽取通常是從右側(cè)進(jìn)行的。
      [0490]在圖21中,任務(wù)ID = E0、El、E2、E3的四個(gè)任務(wù)被輸入虛擬隊(duì)列中。任務(wù)(EO)、任務(wù)(E2)和任務(wù)(E3)被輸入虛擬隊(duì)列(QO)中。其中,任務(wù)(EO)和任務(wù)(E3)是任務(wù)優(yōu)先級(jí)PR = O的任務(wù),因此被輸入優(yōu)先隊(duì)列(Q0:0)中。任務(wù)(E2)是PR = I的任務(wù),因此被輸入優(yōu)先隊(duì)列(Q0:1)中。輸入虛擬隊(duì)列(QO)中的任務(wù)(E3)、任務(wù)(E2)和任務(wù)(EO)的順序值ODR分別為2、I和O。任務(wù)優(yōu)先級(jí)PR = O的任務(wù)(El)被輸入虛擬隊(duì)列(Ql)中。該任務(wù)的 ODR 是“O”。
      [0491]圖22是與圖21的狀態(tài)相對(duì)應(yīng)的狀態(tài)寄存器250的數(shù)據(jù)結(jié)構(gòu)圖。
      [0492]圖21所示的各任務(wù)在虛擬隊(duì)列中的輸入狀態(tài)通過(guò)狀態(tài)寄存器250的設(shè)定來(lái)表現(xiàn)。在圖21所示的狀態(tài)中,任務(wù)(EO)至任務(wù)(E7)中被輸入虛擬隊(duì)列中的是任務(wù)(EO)至任務(wù)(E3)。因此,在其他任務(wù)的隊(duì)列標(biāo)識(shí)寄存器416中設(shè)定表示該任務(wù)未被輸入任何隊(duì)列的“Non”。在輸入虛擬隊(duì)列(QO)中的任務(wù)(EO)、任務(wù)(E3)和任務(wù)(E2)的隊(duì)列標(biāo)識(shí)寄存器416中設(shè)定“Q0”。另外,在輸入虛擬隊(duì)列⑴中的任務(wù)(El)的隊(duì)列標(biāo)識(shí)寄存器416中設(shè)定“Q1”。通過(guò)隊(duì)列標(biāo)識(shí)寄存器416的設(shè)定來(lái)表現(xiàn)哪個(gè)任務(wù)被輸入哪個(gè)虛擬隊(duì)列中。
      [0493]在輸入虛擬隊(duì)列(Q0)中的包括任務(wù)(E0)、任務(wù)(E3)和任務(wù)(E2)的三個(gè)任務(wù)的隊(duì)列順序寄存器414中,分別將0DR設(shè)定為0、2和1。因?yàn)檩斎胩摂M隊(duì)列(Q1)中的任務(wù)只有任務(wù)(E1),因此順序值被設(shè)定為最小的“0”。通過(guò)隊(duì)列順序寄存器414的設(shè)定來(lái)表現(xiàn)各任務(wù)在虛擬隊(duì)列中的位置。
      [0494]任務(wù)(E0)、任務(wù)(E1)和任務(wù)(E3)的任務(wù)優(yōu)先級(jí)PR是“0”。因此,在這些任務(wù)的任務(wù)優(yōu)先級(jí)寄存器412中設(shè)定“0”。由于任務(wù)(E2)的任務(wù)優(yōu)先級(jí)PR是“1”,因此在任務(wù)優(yōu)先級(jí)寄存器412_E2中設(shè)定“1”。通過(guò)任務(wù)優(yōu)先級(jí)寄存器412的設(shè)定來(lái)表現(xiàn)各任務(wù)被輸入哪個(gè)優(yōu)先隊(duì)列中。
      [0495]根據(jù)以上的設(shè)定,將詳述順序輸入、逆序輸入和抽取中的處理細(xì)節(jié)。
      [0496][順序輸入]
      [0497]圖23是向圖21所示的虛擬隊(duì)列順序輸入任務(wù)(E4)的概念圖。
      [0498]這里假定向虛擬隊(duì)列(Q1)順序輸入任務(wù)優(yōu)先級(jí)PR = 0的任務(wù)(E4)。主電路400配置CMD = ENQ_TL(順序輸入命令),以使EID_C = E4、QID_C = Q1,以及PR_C = 0。當(dāng)內(nèi)置在隊(duì)列控制電路404中的寄存器值生成電路420_E4檢測(cè)出EID_C = ELM_ID = E4時(shí),輸出 QID_N_E4 = QID_C = Q1、0DR_N_E4 = 0 以及 PR_N_E4 = PR_C = 0。QID_N_E4 表示輸入任務(wù)(E4)的虛擬隊(duì)列的QID,0DR_N_E4表示輸入的順序值,PR_N_E4表示任務(wù)(E4)的任務(wù)優(yōu)先級(jí)。順序輸入的任務(wù)的0DR_N通常設(shè)定為“0”。“0”是表示隊(duì)列中最新輸入的順序值。
      [0499]寄存器值生成電路420_E4以及輸入QID_S_En = QID_C = Q1的寄存器值生成電路420_En都對(duì)該命令作出響應(yīng)。這樣作出響應(yīng)的寄存器值生成電路420_En輸出0DR_N_En=0DR_S_En+l。在這種情況下,寄存器值生成電路420_E1檢測(cè)QID_S_E1 = QID_C = Ql,并輸出0DR_N_E1 = 0+1 = 1。0DR_N_E1表示輸入任務(wù)(El)后的順序值。已經(jīng)輸入順序輸入任務(wù)(E4)的虛擬隊(duì)列(Q1)中的任務(wù)的順序值將受影響。經(jīng)過(guò)這種處理過(guò)程,形成虛擬隊(duì)列(Q1)的任務(wù)(E4)和任務(wù)(E1)的狀態(tài)數(shù)據(jù)得到調(diào)整。
      [0500]圖24是與圖23的狀態(tài)相對(duì)應(yīng)的狀態(tài)寄存器250的數(shù)據(jù)結(jié)構(gòu)圖。
      [0501]在圖24中,添加下劃線(xiàn)的部分表示相對(duì)于圖22所示的狀態(tài)寄存器250的設(shè)定有變化的地方。QID_N_E4在與任務(wù)(E4)順序輸入虛擬隊(duì)列(Q1)中相對(duì)應(yīng)的隊(duì)列標(biāo)識(shí)寄存器416_E4中設(shè)定“Q1”。任務(wù)(E4)的0DR是“0”,PR是“0”。由于順序輸入任務(wù)(E4),已經(jīng)輸入虛擬隊(duì)列(Q1)中的任務(wù)(E1)的0DR從“0”遞增到“1”。修改后的狀態(tài)寄存器250的設(shè)定表現(xiàn)圖23所示的虛擬隊(duì)列(Q1)的狀態(tài)。
      [0502]圖25是向圖23所示的虛擬隊(duì)列中順序輸入任務(wù)(E5)的概念圖。
      [0503]這里假定向虛擬隊(duì)列(Q0)順序輸入任務(wù)優(yōu)先級(jí)PR = 1的任務(wù)(E5)。主電路400配置CMD = ENQ_TL(順序輸入命令),以使EID_C = E5、QID_C = Q0以及PR_C = 1。寄存器值生成電路 420_E5 輸出 QID_N_E5 = QID_C = Q0、0DR_N_E5 = 0 以及 PR_N_E5 = PR_C=1。
      [0504]寄存器值生成電路420_E5以及輸入QID_C = QID_S_En = Q0的寄存器值生成電路420_En都在檢測(cè)出QID_C = QID_S_En時(shí)輸出0DR_N_En = 0DR_S_En+l。在該例子中,與任務(wù)(E0)、任務(wù)(E2)和任務(wù)(E3)相對(duì)應(yīng)的寄存器值生成電路420就是這樣的寄存器。經(jīng)過(guò)這種處理過(guò)程,形成虛擬隊(duì)列(Q0)的任務(wù)(E5)、任務(wù)(E0)、任務(wù)(E2)和任務(wù)(E3)的狀態(tài)數(shù)據(jù)得到調(diào)整。
      [0505]圖26是與圖25的狀態(tài)相對(duì)應(yīng)的狀態(tài)寄存器250的數(shù)據(jù)結(jié)構(gòu)圖。
      [0506]在圖26中添加下劃線(xiàn)的部分表示相對(duì)于圖24所示的狀態(tài)寄存器250的設(shè)定有變化的地方。首先,在與任務(wù)(E5)順序輸入虛擬隊(duì)列(QO)中相對(duì)應(yīng)的隊(duì)列標(biāo)識(shí)寄存器416_E5中設(shè)定“Q0”。任務(wù)(E5)的ODR是“0”,PR是“I”。由于順序輸入任務(wù)(E5),因此原先輸入虛擬隊(duì)列(QO)中的任務(wù)(EO)、任務(wù)(El)和任務(wù)(E3)的ODR分別遞增。
      [0507]圖27是表示順序輸入的處理過(guò)程的流程圖。
      [0508]主電路400設(shè)定被順序輸入的任務(wù)(以下稱(chēng)作“順序輸入任務(wù)”)的輸入條件(SlO)。具體地說(shuō),以CMD = ENQ_TL設(shè)定EID_C、QID_C和PR_C。隊(duì)列控制電路404中與順序輸入任務(wù)相對(duì)應(yīng)的寄存器值生成電路420分別在順序輸入任務(wù)的任務(wù)優(yōu)先級(jí)寄存器412、隊(duì)列順序寄存器414和隊(duì)列標(biāo)識(shí)寄存器416中設(shè)定PR_C、0和QID_C(S12)。
      [0509]在已經(jīng)向虛擬隊(duì)列(QID_C)輸入了其它任務(wù)的情況下(S14中的Y),已經(jīng)輸入的各任務(wù)的ODR相應(yīng)遞增(S16)。在圖25所示的例子中,任務(wù)(EO)、任務(wù)(E2)和任務(wù)(E3)的ODR遞增。步驟S12、S14和S16在時(shí)間上是大體并行執(zhí)行的。
      [0510][逆序輸入]
      [0511]圖28是最大值選擇電路406的部分電路圖。
      [0512]最大值選擇電路406是由主電路400驅(qū)動(dòng)用于逆序輸入的電路。當(dāng)接收到表示QID_C = Qn的CND信號(hào)時(shí),最大值選擇電路406輸出表示虛擬隊(duì)列(Qn)中的最大順序值的0DR_A2,并申請(qǐng)0DR_A2_EN。與基本實(shí)施方式所示的執(zhí)行選擇電路232和信號(hào)量選擇電路234相似,最大值選擇電路406由多段的比較電路構(gòu)成。最大值選擇電路406包括四個(gè)第一比較電路422 (422a、422b等)、兩個(gè)第二比較電路424 (424a等)和一個(gè)第三比較電路(圖中未示出)。另外,最大值選擇電路406還包括八個(gè)判定電路426 (426a、426b、426c、426d
      坐^
      寸/ ο
      [0513]以第一比較電路422a為例進(jìn)行說(shuō)明。第一比較電路422a比較任務(wù)O和任務(wù)1,如果兩者都被輸入虛擬隊(duì)列(Qn)中,則選擇順序值較大的任務(wù)。第一比較電路422a接收分別表示任務(wù)O和任務(wù)I的任務(wù)ID和順序值的EID_S、0DR_S。
      [0514]第一判定:如果任務(wù)O已經(jīng)被輸入虛擬隊(duì)列(Qn)中,則判定電路426a申請(qǐng)EID_11A_EN。如果任務(wù)I已經(jīng)被輸入虛擬隊(duì)列(Qn)中,則判定電路426b申請(qǐng)EID_11B_EN。第一比較電路422a首先參照分別從判定電路426a和判定電路426b輸出的EID_11_EN信號(hào)。如果兩個(gè)信號(hào)中的一個(gè)是“1”,則只有一個(gè)任務(wù)被輸入虛擬隊(duì)列(Qn)中。此時(shí),第一比較電路422a將輸入虛擬隊(duì)列(Qn)中的任務(wù)的任務(wù)ID (EID_S)和順序值(0DR_S)分別作為EID_21A 和 0DR_21A 輸出,并申請(qǐng) EID_21A_EN。
      [0515]當(dāng)判定電路426a和判定電路426b都輸出“O”時(shí),哪個(gè)任務(wù)都沒(méi)有被輸入虛擬隊(duì)列(Qn)中。此時(shí),取消EID_21A_EN,此后在第二比較電路424a中任務(wù)O和任務(wù)I都不會(huì)成為比較對(duì)象。
      [0516]當(dāng)判定電路426a和判定電路426b都輸出“I”時(shí),意味著兩個(gè)任務(wù)都已經(jīng)被輸入虛擬隊(duì)列(Qn)中,此時(shí)執(zhí)行下面的第二判定。
      [0517]第二判定:比較任務(wù)O的0DR_S_0和任務(wù)I的0DR_S_1,選擇順序值較大的任務(wù)。第一比較電路422a將分別表示順序值較大的任務(wù)的任務(wù)ID (EID_S)和順序值(0DR_S)的EID_21A 和 0DR_21A 輸出,并申請(qǐng) EID_21A_EN。
      [0518]其它第一比較電路422的處理也同理,分別比較任務(wù)0和任務(wù)1、任務(wù)2和任務(wù)3、任務(wù)4和任務(wù)5、任務(wù)6和任務(wù)7。第二比較電路424通過(guò)比較來(lái)自?xún)蓚€(gè)第一比較電路422的輸出來(lái)進(jìn)一步選擇順序值較大的任務(wù)。以第二比較電路424a為例進(jìn)行說(shuō)明。第二比較電路424a比較第一比較電路422a的輸出信號(hào)和第一比較電路422b的輸出信號(hào),以選擇順序值較大的任務(wù)。分別從第一比較電路422a和第一比較電路422b向第二比較電路424a輸入EID_21、0DR_21和EID_EN。第二比較電路424從任務(wù)0至任務(wù)3中選擇虛擬隊(duì)列(Qn)中順序值最大的任務(wù)。其它第二比較電路424也同理,虛擬隊(duì)列(Qn)中的最大順序值最終作為0DR_A2信號(hào)輸出。當(dāng)選擇某一個(gè)任務(wù)時(shí),申請(qǐng)0DR_A2_EN;當(dāng)虛擬隊(duì)列(Qn)中不存在任何任務(wù)時(shí),取消0DR_A2_EN。
      [0519]此外,也可以向第一比較電路422、第二比較電路424和第三比較電路輸入用于使優(yōu)先級(jí)判定無(wú)效的PR無(wú)效信號(hào)。當(dāng)PR無(wú)效信號(hào)有效時(shí),各比較電路從判定條件中排除優(yōu)先級(jí)后選擇任務(wù)。圖32所示的各比較電路也同理。
      [0520]圖29是向圖25所示的虛擬隊(duì)列中逆序輸入任務(wù)(E6)的概念圖。
      [0521]這里假定向虛擬隊(duì)列(Q0)中逆序輸入任務(wù)優(yōu)先級(jí)PR = 1的任務(wù)(E6)。首先,主電路400將表示輸入目標(biāo)QID = Q0的QID_C信號(hào)輸入到最大值選擇電路406。最大值選擇電路406將表示虛擬隊(duì)列(Q0)的最大順序值的0DR_A2輸出到隊(duì)列控制電路404,并申請(qǐng)0DR_A2_EN。參照?qǐng)D25,虛擬隊(duì)列(Q0)的最大順序值是任務(wù)(E3)的“3”,因此,0DR_A2 =3。
      [0522]接著,主電路400設(shè)定CMD = ENQ_TP (逆序輸入命令),以使EID_C = E6、QID_C =Q0以及PR_C = 1。此時(shí),當(dāng)檢測(cè)出EID_C = ELM_ID = E6時(shí),內(nèi)置在隊(duì)列控制電路404中的寄存器值生成電路 420_E6 輸出 QID_N_E6 = QID_C = Q0、0DR_N_E6 = 0DR_A2+1 = 3+1=4 以及 PR_N_E6 = PR_C = 1。
      [0523]當(dāng)發(fā)出CMD = ENQ_TP (逆序輸入命令)時(shí),只有與由EID_C指定的任務(wù)相對(duì)應(yīng)的寄存器值生成電路420工作。因此,只有被逆序輸入的任務(wù)(E6)的狀態(tài)數(shù)據(jù)被變更。
      [0524]圖30是與圖29的狀態(tài)相對(duì)應(yīng)的狀態(tài)寄存器250的數(shù)據(jù)結(jié)構(gòu)圖。
      [0525]在圖30中添加下劃線(xiàn)的部分是相對(duì)于圖26所示的狀態(tài)寄存器250的設(shè)定有變化的地方。首先,在與任務(wù)(E6)逆序輸入虛擬隊(duì)列(Q0)中相對(duì)應(yīng)的隊(duì)列標(biāo)識(shí)寄存器416_E6中新設(shè)定“Q0”。任務(wù)(E6)的0DR是“4”,PR是“1”。通過(guò)逆序輸入任務(wù)(E6),其它任務(wù)的狀態(tài)數(shù)據(jù)不受影響。
      [0526]圖31是表示逆序輸入的處理過(guò)程的流程圖。
      [0527]主電路400首先將逆序輸入目標(biāo)的虛擬隊(duì)列的QID = Qn輸入到最大值選擇電路406中(S20)。主電路400將虛擬隊(duì)列(Qn)的最大順序值輸出到隊(duì)列控制電路404中(S22)。主電路400設(shè)定被逆序輸入的任務(wù)(以下稱(chēng)作“逆序輸入任務(wù)”)的輸入條件(S24)。具體地說(shuō),在CMD = ENQ_TP (逆序輸入命令)中設(shè)定EID_C、QID_C和PR_C。隊(duì)列控制電路404中與逆序輸入任務(wù)相對(duì)應(yīng)的寄存器值生成電路420分別在逆序輸入任務(wù)的任務(wù)優(yōu)先級(jí)寄存器412、隊(duì)列順序寄存器414和隊(duì)列標(biāo)識(shí)寄存器416中設(shè)定PR_C、最大順序值+1、以及QID_C(S26)。但是,當(dāng)最大順序值=0而取消0DR_A2_EN時(shí),即未向虛擬隊(duì)列(Qn)輸入任務(wù)時(shí),在隊(duì)列順序寄存器414中設(shè)定表示初始輸入的順序值“0”。
      [0528]如上所述,在順序輸入時(shí)存在調(diào)整其它任務(wù)的順序值的可能性,但是在逆序輸入時(shí)不需要這種調(diào)整。當(dāng)虛擬隊(duì)列為FIFO模式時(shí),越是以前輸入的任務(wù),設(shè)定越大的順序值。換句話(huà)說(shuō),越是輸入到虛擬隊(duì)列深處的任務(wù),順序值越大。相反地,也可以是越是輸入到虛擬隊(duì)列深處的任務(wù),順序值越小。在這種情況下,在順序輸入時(shí)不需要調(diào)整其它任務(wù)的順序值,但是在逆序輸入時(shí)存在調(diào)整其它任務(wù)的順序值的可能性。
      [0529][抽取]
      [0530]圖32是任務(wù)選擇電路230的部分電路圖。
      [0531]任務(wù)選擇電路230的基本結(jié)構(gòu)與作為基本實(shí)施方式而參照?qǐng)D12所說(shuō)明的相同。虛擬隊(duì)列實(shí)施方式中的任務(wù)選擇電路230,當(dāng)接收到來(lái)自主電路400的詢(xún)問(wèn)時(shí)確定抽取任務(wù)。這里,說(shuō)明與確定該抽取任務(wù)相關(guān)的電路結(jié)構(gòu)。當(dāng)接收到表示QID_C = Qn的CND信號(hào)時(shí),任務(wù)選擇電路230從虛擬隊(duì)列(Qn)中任務(wù)優(yōu)先級(jí)最高的優(yōu)先隊(duì)列中選擇抽取任務(wù),輸出表示抽取任務(wù)的任務(wù)ID、任務(wù)優(yōu)先級(jí)和順序值的EID_A1、PR_A1和0DR_A1,并申請(qǐng)EID_Al_ENo與基本實(shí)施方式所不的執(zhí)行選擇電路232和信號(hào)量選擇電路234相似,任務(wù)選擇電路230由多段的比較電路構(gòu)成。任務(wù)選擇電路230包括四個(gè)第一比較電路430(430a、430b等)、兩個(gè)第二比較電路432(432等)和一個(gè)第三比較電路(未示出)。另外,任務(wù)選擇電路230還包括八個(gè)判定電路434(434a、434b、434c、434d等)。
      [0532]以第一比較電路430a為例進(jìn)行說(shuō)明。第一比較電路422a比較任務(wù)O和任務(wù)1,如果兩者都被輸入虛擬隊(duì)列(Qn)中,則選擇任務(wù)優(yōu)先級(jí)較高的任務(wù)。如果任務(wù)優(yōu)先級(jí)相同,則選擇順序值較大的任務(wù)。第一比較電路430a接收表示任務(wù)O和任務(wù)I的任務(wù)ID、任務(wù)優(yōu)先級(jí)和順序值的EID_S、PR_S和0DR_S。
      [0533]第一判定:如果任務(wù)O已經(jīng)被輸入虛擬隊(duì)列(Qn)中,則判定電路434a申請(qǐng)EID_11A_EN。如果任務(wù)I已經(jīng)被輸入虛擬隊(duì)列(Qn)中,則判定電路434b申請(qǐng)EID_11B_EN。第一比較電路430a首先參照分別從判定電路434a和判定電路434b輸出的EID_11_EN信號(hào)。如果兩個(gè)信號(hào)中的一個(gè)是“1”,則只有一個(gè)任務(wù)輸入到虛擬隊(duì)列(Qn)中。此時(shí),第一比較電路430a輸出表示輸入虛擬隊(duì)列(Qn)中的任務(wù)的任務(wù)ID(EID_S)、任務(wù)優(yōu)先級(jí)(PR_S)以及順序值(0DR_S)的 EID_21A、PR_11A 以及 0DR_21A,并申請(qǐng) EID_21A_EN。
      [0534]當(dāng)判定電路434a和判定電路434b都輸出“O”時(shí),哪個(gè)任務(wù)都沒(méi)有被輸入到虛擬隊(duì)列(Qn)中。此時(shí),取消EID_21A_EN,此后在第二比較電路432a中任務(wù)O和任務(wù)I都不會(huì)成為比較對(duì)象。
      [0535]當(dāng)判定電路434a和判定電路434b都輸出“I”時(shí),意味著兩個(gè)任務(wù)都已經(jīng)被輸入到虛擬隊(duì)列(Qn)中,此時(shí)執(zhí)行下面的第二判定。
      [0536]第二判定:比較任務(wù)O的PR_S_0和任務(wù)I的PR_S_1,選擇任務(wù)優(yōu)先級(jí)較高的任務(wù),即PR_S較小的任務(wù)。第一比較電路430a輸出分別表示任務(wù)優(yōu)先級(jí)較高的任務(wù)的任務(wù)ID(EID_S)、任務(wù)優(yōu)先級(jí)(PR_S)以及順序值(0DR_S)的 EID_21A、PR_21A 以及 0DR_21A,并申請(qǐng)EID_21A_EN。如果兩個(gè)任務(wù)的任務(wù)優(yōu)先級(jí)相同,則執(zhí)行下面的第三判定。
      [0537]第三判定:比較任務(wù)O的0DR_S_0和任務(wù)I的0DR_S_1,選擇順序值較大的任務(wù)。第一比較電路430a輸出分別表示順序值較大的任務(wù)的任務(wù)ID(EID_S)、任務(wù)優(yōu)先級(jí)(PR_S)以及順序值(0DR_S)的 EID_21A、PR_21A 以及 0DR_21A,并申請(qǐng) EID_21A_EN。
      [0538]其它第一比較電路430的處理也同理,分別比較任務(wù)O和任務(wù)1、任務(wù)2和任務(wù)3、任務(wù)4和任務(wù)5、任務(wù)6和任務(wù)7。第二比較電路432通過(guò)比較來(lái)自?xún)蓚€(gè)第一比較電路430的輸出來(lái)進(jìn)一步圈定抽取任務(wù)的候選。最終,從虛擬隊(duì)列(Qn)中任務(wù)優(yōu)先級(jí)最高的優(yōu)先隊(duì)列中選擇抽取任務(wù)。當(dāng)選擇某一個(gè)任務(wù)時(shí),申請(qǐng)EID_A1_EN;當(dāng)虛擬隊(duì)列(Qn)中不存在任何任務(wù)時(shí),取消EID_A1_EN。
      [0539]圖33是從圖29所示的虛擬隊(duì)列中抽取任務(wù)(E3)的概念圖。
      [0540]這里假定從虛擬隊(duì)列(Q0)中抽取一個(gè)任務(wù)。主電路400將QID_C = Q0輸入到任務(wù)選擇電路230。參照?qǐng)D29,在與虛擬隊(duì)列(Q0)中最高的任務(wù)優(yōu)先級(jí)相對(duì)應(yīng)的優(yōu)先隊(duì)列(Q0:0)中,輸入順序值“1”的任務(wù)(E0)和順序值“3”的任務(wù)(E3)。任務(wù)選擇電路230選擇順序值較大的任務(wù)(E3)作為抽取任務(wù)。任務(wù)選擇電路230設(shè)定EID_A1 = E3、PR_A1 =0 以及 0DR_A1 = 3,并申請(qǐng) EID_A1_EN。
      [0541]接著,主電路400設(shè)定CMD = DEQ(抽取命令),以使EID_C = EID_A1 = E3以及QID_C = Q0。寄存器值生成電路 420_E3 輸出 QID_N_E3 = Non、0DR_N_E3 = 0 (復(fù)位)、PR_N_E3 = 0(復(fù)位)。由此,在狀態(tài)寄存器250中任務(wù)(E3)和虛擬隊(duì)列(Q0)之間的關(guān)系被解除。
      [0542]當(dāng)檢測(cè)出QID_C = QID_S_En時(shí),寄存器值生成電路420_E3以及輸入QID_S_En =QID_C = Q0的寄存器值生成電路420_En都判定是否為0DR_S_En>0DR_Al。這里,0DR_A1是抽取任務(wù)(E3)被抽取前的順序值。如果0DR_S_En>0DR_Al,即順序值比抽取任務(wù)的順序值還大的任務(wù)(En)的寄存器值生成電路420_En輸出0DR_N_En = 0DR_S_En_l。在圖29所示的例子中,相當(dāng)于與任務(wù)(E6)相對(duì)應(yīng)的寄存器值生成電路420_E6。寄存器值生成電路420_E6輸出0DR_N_E6 = 0DR_S_E6_1 = 4-1 = 3。由此,形成虛擬隊(duì)列(Q0)的任務(wù)(E6)的狀態(tài)數(shù)據(jù)得到調(diào)整。
      [0543]圖34是與圖33的狀態(tài)相對(duì)應(yīng)的狀態(tài)寄存器250的數(shù)據(jù)結(jié)構(gòu)圖。
      [0544]在圖34中添加下劃線(xiàn)的部分是相對(duì)于圖30所示的狀態(tài)寄存器250的設(shè)定有變化的地方。首先,對(duì)應(yīng)于從虛擬隊(duì)列(Q0)抽取任務(wù)(E3),在隊(duì)列標(biāo)識(shí)寄存器416_E3中新設(shè)定“Non”。另外,在隊(duì)列順序寄存器414和任務(wù)優(yōu)先級(jí)寄存器412中分別設(shè)定“0”作為復(fù)位值。由于抽取任務(wù)(E3),原先輸入虛擬隊(duì)列(Q0)中的任務(wù)(E0)、任務(wù)(E2)、任務(wù)(E5)、任務(wù)(E6)中順序值比抽取任務(wù)(E3)更大的任務(wù)(E6)的0DR遞減。
      [0545]圖35是表示抽取處理過(guò)程的流程圖。
      [0546]主電路400首先向任務(wù)選擇電路230輸入成為抽取目標(biāo)的虛擬隊(duì)列的QID =Qn(S30)。任務(wù)選擇電路230從虛擬隊(duì)列(Qn)中選擇抽取任務(wù)(S32)。當(dāng)主電路400向隊(duì)列控制電路404輸入抽取任務(wù)的任務(wù)ID = En時(shí),隊(duì)列控制電路404從抽取任務(wù)(En)的狀態(tài)數(shù)據(jù)中清除QID = Qn(S34)。此時(shí),將PR和0DR復(fù)位為“0”,或者,也可以不進(jìn)行復(fù)位。
      [0547]當(dāng)向虛擬隊(duì)列(Qn)中輸入其它任務(wù)(S36中的Y),且存在0DR_S_En>0DR_Al的任務(wù)(S38中的Y)時(shí),相應(yīng)任務(wù)的順序值遞減(S40)。此外,步驟S30至S40并非必須順次執(zhí)行,也可以在時(shí)間上并行執(zhí)行。
      [0548]在另一種實(shí)現(xiàn)方式中,也可以從虛擬隊(duì)列的中間抽取任務(wù)。例如,在圖33中,需要從虛擬隊(duì)列(Q0)的正中央抽取任務(wù)(E2)。任務(wù)(E2)可在某個(gè)標(biāo)志A被設(shè)定為打開(kāi)的條件下執(zhí)行。當(dāng)該標(biāo)志A處于關(guān)閉時(shí),需要從虛擬隊(duì)列(Q0)的中間取出任務(wù)(E2)。或者,當(dāng)任務(wù)(E2)的預(yù)先設(shè)定的等待時(shí)間已經(jīng)超時(shí)時(shí),需要從虛擬隊(duì)列(Q0)的中間取出任務(wù)(E2)。在這種情況下,通過(guò)清除任務(wù)(E2)的QID,使順序值比任務(wù)(E2)的順序值“2”大的任務(wù)的ODR遞減,從而能夠從虛擬隊(duì)列(QO)的中間取出任務(wù)(E2)。在圖33所示的情況下,任務(wù)(E6)的ODR變?yōu)?。由于虛擬隊(duì)列是以不受物理限制的形式由硬件形成,因此在隊(duì)列的中間也能夠?qū)崿F(xiàn)輸入或抽取處理。
      [0549]根據(jù)以上所述的虛擬隊(duì)列控制,能夠通過(guò)硬件邏輯來(lái)實(shí)現(xiàn)特殊的隊(duì)列,該特殊的隊(duì)列不僅能夠以FIFO模式工作而且能夠以L(fǎng)IFO模式工作。如果用軟件來(lái)實(shí)現(xiàn)雙輸入型隊(duì)列算法,則通常是根據(jù)連接表來(lái)實(shí)現(xiàn)的。但是,當(dāng)基于軟件進(jìn)行處理時(shí),必然產(chǎn)生伴隨訪(fǎng)問(wèn)存儲(chǔ)器和地址管理的耗時(shí)。相反地,改進(jìn)實(shí)施方式所示的虛擬隊(duì)列控制是由硬件邏輯來(lái)實(shí)現(xiàn)的,因此能夠?qū)崿F(xiàn)簡(jiǎn)單且高速的控制。特別是在時(shí)間要求嚴(yán)格的RTOS中,通過(guò)硬件實(shí)現(xiàn)雙輸入型隊(duì)列算法的意義很大。下面說(shuō)明通過(guò)上述虛擬隊(duì)列控制方法來(lái)實(shí)現(xiàn)再執(zhí)行優(yōu)先型任務(wù)調(diào)度的方式。
      [0550]圖36是表示再執(zhí)行優(yōu)先型任務(wù)調(diào)度中的虛擬隊(duì)列和任務(wù)之間的關(guān)系的第一概念圖。
      [0551]這里,假設(shè)與READY狀態(tài)相對(duì)應(yīng)的虛擬隊(duì)列(QO)和與WAIT信號(hào)量狀態(tài)相對(duì)應(yīng)的虛擬隊(duì)列(Ql)兩個(gè)虛擬隊(duì)列。虛擬隊(duì)列(QO)是用于輸入任務(wù)優(yōu)先級(jí)PR = O的任務(wù)的優(yōu)先隊(duì)列(以下表述為“優(yōu)先隊(duì)列(Q0:0))和用于輸入任務(wù)優(yōu)先級(jí)PR= I的任務(wù)的優(yōu)先隊(duì)列(Q0:1)兩個(gè)優(yōu)先隊(duì)列的集合。虛擬隊(duì)列(Ql)也同理,實(shí)際上是假設(shè)四個(gè)優(yōu)先隊(duì)列。
      [0552]在圖36中,PR = I的任務(wù)(El)處于RUN狀態(tài),也是PR = I的任務(wù)(EO)和任務(wù)(E2)在優(yōu)先隊(duì)列(Q0:1)中處于READY狀態(tài)。另外,PR = O的任務(wù)(E3)在優(yōu)先隊(duì)列(Ql: O)中處于WAIT信號(hào)量狀態(tài)。這里,任務(wù)(El)是希望在得到執(zhí)行權(quán)時(shí)集中或優(yōu)先執(zhí)行的任務(wù)。
      [0553]首先,處于RUN狀態(tài)的任務(wù)(El)執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用并返回到READY狀態(tài)
      (SI)。由于任務(wù)(El)是希望在盡可能早的階段中再執(zhí)行的任務(wù),因此被“逆序輸入”到優(yōu)先隊(duì)列(Q0:1)中。另一方面,釋放信號(hào)量系統(tǒng)調(diào)用的執(zhí)行使得任務(wù)(E3)的WAIT解除條件被滿(mǎn)足。任務(wù)(E3)是從優(yōu)先隊(duì)列(Ql:O)中抽取的,并向優(yōu)先隊(duì)列(Q0:0)中順序輸入(S2)。接著,任務(wù)選擇電路230選擇新的RUN-任務(wù)。任務(wù)選擇電路230選擇處于READY狀態(tài)的任務(wù)中任務(wù)優(yōu)先級(jí)最高的任務(wù)(E3)作為抽取任務(wù)。由此,剛從WAIT狀態(tài)跳轉(zhuǎn)到READY狀態(tài)的任務(wù)(E3)變成從優(yōu)先隊(duì)列(Q0:0)抽取的新的RUN-任務(wù)。根據(jù)這種任務(wù)調(diào)度,如果WAIT解除條件滿(mǎn)足,則任務(wù)優(yōu)先級(jí)高的任務(wù)能夠在較早的階段中獲得執(zhí)行權(quán)。
      [0554]圖37是表示再執(zhí)行優(yōu)先型任務(wù)調(diào)度中的虛擬隊(duì)列和任務(wù)之間的關(guān)系的第二概念圖。
      [0555]當(dāng)任務(wù)(E3)執(zhí)行等待信號(hào)量系統(tǒng)調(diào)用時(shí),任務(wù)(E3)被順序輸入到優(yōu)先隊(duì)列(Ql: O)中。接著,任務(wù)選擇電路230選擇新的RUN-任務(wù)。任務(wù)選擇電路230選擇處于READY狀態(tài)的任務(wù)中任務(wù)優(yōu)先級(jí)最高的任務(wù),但是在這里,任務(wù)(EO)、任務(wù)(E2)和任務(wù)(El)的任務(wù)優(yōu)先級(jí)相同。在這種情況下,從優(yōu)先隊(duì)列(Q0:1)中抽取任務(wù)(El) (S5)。任務(wù)(El)成為新的RUN-任務(wù)。根據(jù)這種處理方法,關(guān)于任務(wù)(El)的、不需要設(shè)定任務(wù)優(yōu)先級(jí)PR = O但需要一旦開(kāi)始執(zhí)行則希望盡可能連續(xù)地執(zhí)行該任務(wù)的規(guī)定能夠得到適當(dāng)?shù)慕鉀Q。
      [0556]在再執(zhí)行優(yōu)先型任務(wù)調(diào)度中,根據(jù)執(zhí)行情況或任務(wù)的種類(lèi)區(qū)分使用順序輸入和逆序輸入,從而能夠控制任務(wù)的執(zhí)行順序。因此,不僅保持基本實(shí)施方式所示的任務(wù)處理裝置100的高速處理性能,而且還能夠?qū)崿F(xiàn)更精細(xì)的任務(wù)調(diào)度。[HW中斷實(shí)施方式(SP系統(tǒng))]
      [0557]下面,作為HW中斷實(shí)施方式,說(shuō)明通過(guò)硬件邏輯來(lái)實(shí)現(xiàn)中斷處理的任務(wù)處理裝置100。
      [0558]圖38是通過(guò)普通軟件0S進(jìn)行中斷處理的時(shí)序圖。
      [0559]當(dāng)軟件0S從中斷控制器(未圖示)接收中斷請(qǐng)求信號(hào)時(shí),將啟動(dòng)中斷處理程序,即在基本實(shí)施方式中的特殊任務(wù)。按下鍵盤(pán)、接收通信包、結(jié)束DMA發(fā)送、或僅僅經(jīng)過(guò)規(guī)定時(shí)間等各種各種的現(xiàn)象,都可能成為中斷請(qǐng)求信號(hào)的發(fā)生起因。特殊任務(wù)是通過(guò)軟件實(shí)施的任務(wù),對(duì)應(yīng)中斷原因來(lái)執(zhí)行各種中斷處理。
      [0560]在該圖中,首先,在執(zhí)行普通任務(wù)中檢測(cè)出中斷請(qǐng)求信號(hào)INTR。當(dāng)為應(yīng)該立即對(duì)應(yīng)的中斷請(qǐng)求信號(hào)時(shí),中斷執(zhí)行當(dāng)中的普通任務(wù),將執(zhí)行權(quán)轉(zhuǎn)移至OS(S10)。0S將普通任務(wù)的上下文信息保存至TCB(S102),啟動(dòng)特殊任務(wù)(S104)。
      [0561]特殊任務(wù)對(duì)中斷原因進(jìn)行解析(S106)。由于根據(jù)中斷請(qǐng)求信號(hào)執(zhí)行向中斷原因寄存器(未圖示)的各種各樣的寫(xiě)入,因此通過(guò)調(diào)查中斷原因寄存器能確定中斷原因。在特殊任務(wù)中,對(duì)應(yīng)中斷原因來(lái)判定應(yīng)執(zhí)行的中斷處理而開(kāi)始中斷處理。在中斷處理的過(guò)程中,執(zhí)行各種各樣的系統(tǒng)調(diào)用命令。當(dāng)執(zhí)行系統(tǒng)調(diào)用命令時(shí),再次將執(zhí)行權(quán)轉(zhuǎn)移至os (S108)。0S執(zhí)行指定的系統(tǒng)調(diào)用命令(S110)。執(zhí)行系統(tǒng)調(diào)用命令之后,將執(zhí)行權(quán)再轉(zhuǎn)移至特殊任務(wù)(S112)。由于中斷處理是優(yōu)先級(jí)較高的處理,因此通常如果特殊任務(wù)的處理未結(jié)束,執(zhí)行權(quán)不會(huì)轉(zhuǎn)移至普通任務(wù)。
      [0562]當(dāng)特殊任務(wù)繼續(xù)中斷處理(S114),再次執(zhí)行系統(tǒng)調(diào)用命令時(shí),將執(zhí)行權(quán)轉(zhuǎn)移至OS (S116)。這樣,一邊特殊任務(wù)與0S交替獲得執(zhí)行權(quán),一邊將最后的執(zhí)行權(quán)轉(zhuǎn)移至特殊任務(wù)(S118),特殊任務(wù)結(jié)束中斷處理(S120)。當(dāng)結(jié)束中斷處理時(shí),執(zhí)行權(quán)轉(zhuǎn)移至OS (S122),執(zhí)行從特殊任務(wù)向普通任務(wù)的任務(wù)轉(zhuǎn)換(S124)。這樣,重啟由普通任務(wù)進(jìn)行的通常處理(S126)。
      [0563]基本實(shí)施方式和虛擬隊(duì)列實(shí)施方式所示的任務(wù)處理裝置100,與軟件0S的不同點(diǎn)是通過(guò)硬件邏輯來(lái)實(shí)現(xiàn)RT0S的功能,但是在中斷處理中的基本流程與軟件0S基本相同。但是,如關(guān)聯(lián)基本實(shí)施方式進(jìn)行說(shuō)明的那樣,與軟件0S相比,S102和S124的任務(wù)轉(zhuǎn)換或S110等系統(tǒng)調(diào)用執(zhí)行更為高速。
      [0564]在基本實(shí)施方式的任務(wù)處理裝置100中,用S100、S108、S116、S122使CPU時(shí)鐘(CLK)停止之后,再執(zhí)行RT0S的處理。另外,通過(guò)S104、S112、S118、S126而使CPU時(shí)鐘(CLK)重啟之后,執(zhí)行特務(wù)任務(wù)或普通任務(wù)的處理。特殊任務(wù)是任務(wù)優(yōu)先級(jí)特高的任務(wù),但在作為按照CPU時(shí)鐘(CLK)進(jìn)行動(dòng)作的基于上下文的任務(wù)這一點(diǎn)與普通任務(wù)相同。
      [0565]在HW中斷實(shí)施方式中,這樣的中斷處理中,具體而言通過(guò)硬件邏輯來(lái)實(shí)現(xiàn)特殊任務(wù)的功能的一部分,由此使中斷處理更為高速。
      [0566]中斷處理的內(nèi)容是各種各樣的,但根據(jù)中斷請(qǐng)求信號(hào),簡(jiǎn)單且定型的處理內(nèi)容較多。例如,假設(shè)一個(gè)普通任務(wù)A開(kāi)始進(jìn)行DMA發(fā)送,等待結(jié)束DMA的發(fā)送的情況。在普通任務(wù)A開(kāi)始DMA發(fā)送時(shí),執(zhí)行等待事件系統(tǒng)調(diào)用,轉(zhuǎn)移至WAIT狀態(tài)。當(dāng)結(jié)束DMA發(fā)送時(shí),向(基本實(shí)施方式的)任務(wù)切換電路210輸入規(guī)定的中斷請(qǐng)求信號(hào)。此時(shí)起動(dòng)的特殊任務(wù)中執(zhí)行設(shè)定事件系統(tǒng)調(diào)用,在事件表214設(shè)定表示結(jié)束DMA發(fā)送的內(nèi)容的標(biāo)記模式。通過(guò)改變事件表214的當(dāng)前標(biāo)記模式,滿(mǎn)足普通任務(wù)A的WAIT解除條件,將普通任務(wù)A轉(zhuǎn)換到READY狀態(tài)。這樣,隨著結(jié)束DMA發(fā)送而執(zhí)行的中斷處理的內(nèi)容是比較簡(jiǎn)單的。
      [0567]對(duì)此,在HW中斷實(shí)施方式的任務(wù)處理裝置100中,中斷處理的內(nèi)容比較簡(jiǎn)單,優(yōu)選預(yù)先注冊(cè)作為“高速中斷請(qǐng)求信號(hào)INTR(H) ”的產(chǎn)生頻率較高的中斷請(qǐng)求信號(hào)。HW中斷實(shí)施方式的中斷請(qǐng)求信號(hào)大體分為高速中斷請(qǐng)求信號(hào)INTR(H)與“普通中斷請(qǐng)求信號(hào)INTR(N) ”兩類(lèi)。
      [0568]圖39是HW中斷實(shí)施方式的任務(wù)處理裝置100的電路圖。
      [0569]HW中斷實(shí)施方式的任務(wù)處理裝置100中,也是除了 CPU150外還包含保存電路120和任務(wù)控制電路200。HW中斷實(shí)施方式的任務(wù)處理裝置100還追加有中斷電路450。
      [0570]高速中斷請(qǐng)求信號(hào)INTR(H)輸出至中斷電路450。對(duì)中斷電路450的結(jié)構(gòu)和中斷電路400的高速中斷請(qǐng)求信號(hào)的處理方法在后面進(jìn)行敘述。與基本實(shí)施方式相同,普通中斷請(qǐng)求信號(hào)INTR(N)直接輸入至任務(wù)切換電路210,通過(guò)特殊任務(wù)進(jìn)行中斷處理。關(guān)于高速中斷請(qǐng)求信號(hào)進(jìn)行的中斷處理(下面,稱(chēng)為“高速中斷處理”)比關(guān)于普通中斷請(qǐng)求信號(hào)進(jìn)行的中斷處理(下面,稱(chēng)為“通常中斷處理”)高速。另外,當(dāng)進(jìn)行通常中斷處理時(shí),作為軟件的特殊任務(wù),具有能靈活地定義詳細(xì)的處理內(nèi)容的優(yōu)點(diǎn)。HW中斷實(shí)施方式的任務(wù)處理裝置100通過(guò)并用高速中斷請(qǐng)求信號(hào)和普通中斷請(qǐng)求信號(hào),能維持作為RTOS的通用性且實(shí)現(xiàn)高速化。
      [0571]圖40是中斷電路450的電路圖。
      [0572]中斷電路450包含信號(hào)選擇電路452、操作電路454和存儲(chǔ)部456。不定期地向信號(hào)選擇電路452輸入INTR(H) — O?INTR(H) — i_l的i個(gè)高速中斷請(qǐng)求信號(hào)。有時(shí)在較短期間內(nèi)輸入多個(gè)高速中斷請(qǐng)求信號(hào)INTR (H),也有時(shí)同時(shí)輸入多個(gè)高速中斷請(qǐng)求信號(hào)INTR(H)。信號(hào)選擇電路452能暫時(shí)存儲(chǔ)所接收的高速中斷請(qǐng)求信號(hào)INTR(H)。
      [0573]信號(hào)選擇電路452基于規(guī)定的選擇規(guī)則,從正在緩沖的高速中斷請(qǐng)求信號(hào)INTR(H)中選擇一個(gè)高速中斷請(qǐng)求信號(hào)INTR(H)。此時(shí)的選擇規(guī)則根據(jù)設(shè)計(jì)要求做任意確定即可。例如可以這樣做:預(yù)先設(shè)定各高速中斷請(qǐng)求信號(hào)INTR(H)的優(yōu)先級(jí),當(dāng)緩沖有多個(gè)高速中斷請(qǐng)求信號(hào)INTR(H)時(shí),從中選擇優(yōu)先級(jí)最高的高速中斷請(qǐng)求信號(hào)INTR(H)。或可以選擇向信號(hào)選擇電路452的輸入時(shí)刻最遲的高速中斷請(qǐng)求信號(hào)INTR (H),還也可以隨機(jī)選擇。當(dāng)選擇了高速中斷請(qǐng)求信號(hào)INTR(H) —n(n是O?i_l的整數(shù))時(shí),信號(hào)選擇電路452申請(qǐng)對(duì)應(yīng)的信號(hào)QINT —η。
      [0574]當(dāng)申請(qǐng)了 QINT —η時(shí),操作電路454申請(qǐng)ISROP信號(hào)。通過(guò)申請(qǐng)ISROP信號(hào),將向信號(hào)選擇電路452傳遞正處于高速中斷處理中的情況。當(dāng)申請(qǐng)了 ISROP信號(hào)時(shí),信號(hào)選擇電路452不再申請(qǐng)下一個(gè)QINT,直至ISROP信號(hào)被取消。當(dāng)取消ISROP信號(hào)時(shí),信號(hào)選擇電路452能選擇作為下一個(gè)處理對(duì)象的高速中斷請(qǐng)求信號(hào)INTR(H)。
      [0575]當(dāng)申請(qǐng)了 QINT —η時(shí),為了向任務(wù)切換電路210請(qǐng)求執(zhí)行高速中斷處理,操作電路454也申請(qǐng)ISR —RQ。當(dāng)申請(qǐng)了 ISR —RQ時(shí),任務(wù)切換電路210使CPU時(shí)鐘(CLK)供給停止。這樣,停止執(zhí)行普通任務(wù)。
      [0576]操作電路454根據(jù)QINT — n,換言之,根據(jù)所選擇的高速中斷請(qǐng)求信號(hào)INTR(H) _η,對(duì) DSC — ADD“k-l: O”設(shè)定規(guī)定的地址 ADD“n”。通過(guò)輸入 DSC — ADD“k_l: 0”= ADD“n”,向任務(wù)切換電路210發(fā)送作為ISR —DT “31:0”而保持在存儲(chǔ)部456的地址ADD “η”的中斷操作命令PO。任務(wù)切換電路210按照所接收的中斷操作命令ρ0來(lái)執(zhí)行高速中斷處理。
      [0577]如參照?qǐng)D42在后面敘述的那樣,本實(shí)施方式的中斷操作命令被標(biāo)準(zhǔn)化為32位大小,通過(guò)其最高位ISR —DT “31”表示是否存在后續(xù)的中斷操作命令。此外,除了 32位以夕卜,中斷操作命令也可以被標(biāo)準(zhǔn)化為64位、128位等任意大小。當(dāng)最高位ISR —DT“31”=I時(shí),任務(wù)切換電路210申請(qǐng)ISR — NX,向操作電路454請(qǐng)求后續(xù)的中斷操作命令pi。操作電路454將之前的地址ADD “η”再加上I字節(jié)(本實(shí)施方式是32位)的地址ADD “η” +1設(shè)定為DSC_ADD “k-l:0”。向任務(wù)切換電路210發(fā)送作為ISR_DT “31:0”而保持在地址ADD “n”+l的中斷操作命令pi。任務(wù)切換電路210按照所接收的中斷操作命令pi繼續(xù)執(zhí)行高速中斷處理。
      [0578]當(dāng)最高位ISR —DT “31” = O時(shí),任務(wù)切換電路210申請(qǐng)ISR — END,向操作電路454通知已結(jié)束高速中斷處理。操作電路454取消ISR0P。當(dāng)ISROP被取消時(shí),信號(hào)選擇電路452能選擇其他的高速中斷請(qǐng)求信號(hào)INTR(H)而重新申請(qǐng)QINT。
      [0579]此外,在HW中斷實(shí)施方式中,向操作電路454輸入ISR — END信號(hào),操作電路454通過(guò)取消ISROP來(lái)控制信號(hào)選擇電路452。在變形實(shí)施方式中,當(dāng)結(jié)束高速中斷處理時(shí),任務(wù)切換電路210也可以直接地向信號(hào)選擇電路452發(fā)送ISR —END信號(hào)來(lái)控制信號(hào)選擇電路 452。
      [0580]圖41是存儲(chǔ)部456的數(shù)據(jù)結(jié)構(gòu)圖。
      [0581]HW中斷實(shí)施方式的存儲(chǔ)部456是存儲(chǔ)器。高速中斷請(qǐng)求信號(hào)INTR(H) —O所對(duì)應(yīng)的中斷操作命令組被保持在地址“OX000?0X0FF”。同樣地,高速中斷請(qǐng)求信號(hào)INTR(H)—I所對(duì)應(yīng)的中斷操作命令組被保持在地址“0X 100?OX IFF”。HW中斷實(shí)施方式的中斷操作命令是系統(tǒng)調(diào)用命令。例如,當(dāng)信號(hào)選擇電路452選擇了高速中斷請(qǐng)求信號(hào)INTR(H)— O時(shí),操作電路454指定DSC —ADD “k_l:0”為高速中斷請(qǐng)求信號(hào)INTR(H) — O的最初地址“0X000”。從存儲(chǔ)部456向任務(wù)切換電路210發(fā)送該中斷操作命令“systemcall _00”。由于在中斷操作命令“systemcall — 00”中存在后續(xù)的中斷操作命令“systemcall —01”,因此中斷操作命令“systemcall —00”的最高位被設(shè)定為“I”。任務(wù)切換電路210執(zhí)行中斷操作命令“ systemcalI — 00”之后,為請(qǐng)求后續(xù)的中斷操作命令而申請(qǐng)ISR — NX。
      [0582]操作電路454重新指定DSC — ADD “k_l:0”為“O X 000”加上I字節(jié)的地址“0X001”。從存儲(chǔ)部456向任務(wù)切換電路210發(fā)送后續(xù)的中斷操作命令“systemcall _01”?!皊yscall —01”的最高位被清為“0”,作為關(guān)于高速中斷請(qǐng)求信號(hào)INTR(H) — O的高速中斷處理,任務(wù)切換電路210能知曉“syscall—01”是最后的中斷操作命令。當(dāng)結(jié)束中斷操作命令“syscall —01”的執(zhí)行時(shí),任務(wù)切換電路210申請(qǐng)ISR — END,通知結(jié)束高速中斷處理。
      [0583]圖42是表示中斷操作命令的數(shù)據(jù)結(jié)構(gòu)。
      [0584]如上所述,ISR _ DT “31 ”表示有無(wú)后續(xù)的中斷操作命令。由ISR —DT “30:24”表示系統(tǒng)調(diào)用的種類(lèi)。ISR —DT “30:24” = 0000001表示“設(shè)定事件系統(tǒng)調(diào)用”。因此,中斷操作命令460a是設(shè)定事件系統(tǒng)調(diào)用的執(zhí)行命令。ISR —DT “23:8”表示設(shè)定標(biāo)記模式,ISR_ DT “7:0”表示事件ID。當(dāng)任務(wù)切換電路210接收中斷操作命令460a時(shí),使用與基本實(shí)施方式同樣的處理方法來(lái)設(shè)定事件表214。
      [0585]ISR _ DT “30:24” = 0000010表示“釋放信號(hào)量系統(tǒng)調(diào)用”。因此,中斷操作命令460b是釋放信號(hào)量系統(tǒng)調(diào)用的執(zhí)行命令。ISR —DT “7:0”表示釋放信號(hào)量的信號(hào)量ID。ISR_DT “30:24” = 0000011表示“釋放等待系統(tǒng)調(diào)用”。因此,中斷操作命令460c是釋放等待系統(tǒng)調(diào)用的執(zhí)行命令。ISR —DT “4:0”表示從WAIT狀態(tài)應(yīng)釋放的任務(wù)的任務(wù)ID。ISR_ DT “30:24” = 0000100表示“叫醒任務(wù)系統(tǒng)調(diào)用”。因此,中斷操作命令460d是叫醒任務(wù)系統(tǒng)調(diào)用的執(zhí)行命令。ISR —DT “4:0”表示從WAIT狀態(tài)應(yīng)釋放的任務(wù)的任務(wù)ID。ISR_ DT “30:24” = 0000101表示“啟動(dòng)系統(tǒng)調(diào)用”。因此,中斷操作命令460e是啟動(dòng)系統(tǒng)調(diào)用的執(zhí)行命令。ISR —DT “4:0”表示應(yīng)啟動(dòng)的任務(wù)的任務(wù)ID。也可以在存儲(chǔ)部406注冊(cè)作為中斷操作命令的其他的各種各樣的系統(tǒng)調(diào)用。
      [0586]存儲(chǔ)部456可以被提供為ROM (Read Only Memory:只讀存儲(chǔ)器),還可以被提供為可讀寫(xiě)的RAM (Random Access Memory:隨機(jī)存儲(chǔ)器)。只要能用應(yīng)用程序改寫(xiě)存儲(chǔ)部456的內(nèi)容,就能用軟件設(shè)定或改變高速中斷處理的內(nèi)容。
      [0587]圖43是表示高速中斷處理的過(guò)程的順序圖。
      [0588]首先,信號(hào)選擇電路452選擇作為處理對(duì)象的高速中斷請(qǐng)求信號(hào)INTR(H) _n(S130),申請(qǐng)QINT —n(S132)。操作電路454申請(qǐng)ISR0P,向信號(hào)選擇電路452通知正處于高速中斷處理當(dāng)中的信息(S134)。當(dāng)信號(hào)選擇電路452申請(qǐng)了 ISROP時(shí),即使接收新的高速中斷請(qǐng)求信號(hào),也會(huì)預(yù)先緩沖,不會(huì)申請(qǐng)QINT。
      [0589]另外,當(dāng)操作電路454申請(qǐng)了 QINT — n時(shí),申請(qǐng)ISR —RQ,向任務(wù)切換電路210請(qǐng)求開(kāi)始高速中斷處理(S136)。此時(shí),任務(wù)切換電路210使CPU時(shí)鐘(CLK)停止,準(zhǔn)備開(kāi)始高速中斷處理。操作電路454指定DSC _ ADD為對(duì)應(yīng)QINT _ η的地址ADD “η”,從存儲(chǔ)部456讀出中斷操作命令pO (S138)。向任務(wù)切換電路210發(fā)送作為ISR — DT “31:0”的中斷操作命令p0(S140)。
      [0590]任務(wù)切換電路210按照所接收的中斷操作命令PO,改變信號(hào)量表212、事件表214和狀態(tài)存儲(chǔ)單元220的設(shè)定內(nèi)容。更具體地說(shuō),任務(wù)切換電路210通過(guò)執(zhí)行與普通任務(wù)發(fā)行釋放信號(hào)量系統(tǒng)調(diào)用(發(fā)信信號(hào)量系統(tǒng)調(diào)用)或設(shè)定事件系統(tǒng)調(diào)用(設(shè)定標(biāo)記系統(tǒng)調(diào)用)時(shí)同等的處理流程,來(lái)改變信號(hào)量表212、事件表214和狀態(tài)存儲(chǔ)單元220的設(shè)定內(nèi)容。關(guān)于中斷操作命令的處理內(nèi)容與基本實(shí)施方式所示的系統(tǒng)調(diào)用命令的處理內(nèi)容相同。只要將中斷操作命令的最高位設(shè)定為“1”,任務(wù)切換電路210就申請(qǐng)ISR —NX,向操作電路454請(qǐng)求下一個(gè)中斷操作命令Pl (S144)。操作電路454加載下一個(gè)中斷操作命令pi (S146),向任務(wù)切換電路210發(fā)送中斷操作命令pi (S148)。
      [0591]當(dāng)任務(wù)切換電路210執(zhí)行了最終的中斷操作命令px時(shí),即,當(dāng)執(zhí)行了最高位被設(shè)定為“O”的中斷操作命令px時(shí),任務(wù)切換電路210申請(qǐng)ISR —END(S152)。操作電路454知曉結(jié)束高速中斷處理,取消ISR0P(S154)。這樣,信號(hào)選擇電路452能選擇下一個(gè)高速中斷請(qǐng)求信號(hào)。
      [0592]圖44是HW中斷實(shí)施方式的任務(wù)切換電路210的狀態(tài)轉(zhuǎn)移圖。
      [0593]在HW中斷實(shí)施方式中,除了圖15所示的狀態(tài)轉(zhuǎn)移圖以外,還增加有高速中斷處理(A6)。另外,通常中斷處理(A3)與圖15所示的中斷處理(A3)相同。除此之外,標(biāo)注與基本實(shí)施方式同一的附圖標(biāo)記的結(jié)構(gòu)表不同一處理內(nèi)容。
      [0594]在執(zhí)行任務(wù)當(dāng)中(A2),當(dāng)檢測(cè)出高速中斷請(qǐng)求信號(hào)INTR(H)時(shí)(S24),申請(qǐng)ISR —RQ,執(zhí)行高速中斷處理(A6)。當(dāng)中斷電路400向任務(wù)切換電路210發(fā)送中斷操作命令時(shí)(S26),任務(wù)切換電路210執(zhí)行所對(duì)應(yīng)的系統(tǒng)調(diào)用處理(A4)。當(dāng)結(jié)束執(zhí)行系統(tǒng)調(diào)用命令時(shí),狀態(tài)轉(zhuǎn)移至高速中斷處理(A6)(S28)。另外,如果沒(méi)有剩余應(yīng)處理的中斷操作命令時(shí),結(jié)束高速中斷處理(S30),選擇下一個(gè)應(yīng)執(zhí)行的普通任務(wù)(A5)。
      [0595]圖45是表示HW中斷實(shí)施方式的任務(wù)處理裝置100進(jìn)行高速中斷處理的處理過(guò)程的時(shí)序圖。
      [0596]在該圖中,首先,在執(zhí)行普通任務(wù)中檢測(cè)出中斷請(qǐng)求信號(hào)INTR。如果是應(yīng)立即對(duì)應(yīng)的中斷請(qǐng)求信號(hào)時(shí),通過(guò)停止CPU時(shí)鐘(CLK)而中斷執(zhí)行當(dāng)中的普通任務(wù),開(kāi)始進(jìn)行通過(guò)中斷電路450與任務(wù)切換電路210的高速中斷處理(S160)。
      [0597]中斷電路450適當(dāng)?shù)刈x出中斷操作命令,任務(wù)切換電路210執(zhí)行作為中斷操作命令的指定的系統(tǒng)調(diào)用命令。當(dāng)結(jié)束通過(guò)這樣一系列的系統(tǒng)調(diào)用實(shí)現(xiàn)的高速中斷處理時(shí)(S162),任務(wù)切換電路210選擇下一個(gè)RUN-任務(wù)(S164)。選擇之后,重啟CPU時(shí)鐘(CLK)而重啟基于普通任務(wù)的通常處理(S166)。
      [0598]采用HW中斷實(shí)施方式所示的任務(wù)處理裝置100,通過(guò)中斷電路450與任務(wù)切換電路210的配合而由硬件等級(jí)實(shí)現(xiàn)高速中斷處理。根據(jù)本發(fā)明人的實(shí)驗(yàn),確認(rèn)相比基本實(shí)施方式的任務(wù)處理裝置100,HW中斷實(shí)施方式的任務(wù)處理裝置100能在大致4倍的速度下進(jìn)行動(dòng)作。存儲(chǔ)部456形成為可寫(xiě)入的存儲(chǔ)器,即使是高速中斷處理,也能在一定程度下靈活地設(shè)定其處理內(nèi)容。
      [0599]{MP實(shí)施方式}
      [0600]圖46是普通MP系統(tǒng)500的硬件結(jié)構(gòu)圖。
      [0601 ] 首先,參照?qǐng)D46、圖47說(shuō)明普通MP系統(tǒng)500的結(jié)構(gòu)與其問(wèn)題點(diǎn),之后,說(shuō)明本MP實(shí)施方式的任務(wù)處理裝置100。
      [0602]在普通MP系統(tǒng)500中,經(jīng)由總線(xiàn)504相互地連接多個(gè)CPU150a?150c、存儲(chǔ)器502、中斷電路506。在存儲(chǔ)器502中保存軟件MPRTOS的程序。CPU150內(nèi)置有內(nèi)存或本地存儲(chǔ)器。所有的CPU150均根據(jù)需要將軟件MPRTOS加載至內(nèi)置內(nèi)存或者內(nèi)置本地存儲(chǔ)器中并執(zhí)行。在圖46、圖47中,各CPU150中準(zhǔn)備多個(gè)任務(wù)就緒表(參照?qǐng)D11),對(duì)于所有CPU150僅準(zhǔn)備一個(gè)等待信號(hào)量表這樣等待類(lèi)的表(參照?qǐng)D13)。另外,任務(wù)是被固定分派至任意的CPU150中。例如,一個(gè)任務(wù)Tn僅在CPU150a中執(zhí)行而不在其他的CPU中執(zhí)行。
      [0603]圖47是示意性地表示存儲(chǔ)器502的數(shù)據(jù)結(jié)構(gòu)的圖。
      [0604]程序508和數(shù)據(jù)510被存儲(chǔ)在存儲(chǔ)器502中。程序508中包含軟件RTOS本身的程序(執(zhí)行代碼)512與任務(wù)本身的程序(執(zhí)行代碼)514。均為目標(biāo)代碼。數(shù)據(jù)510中包含在軟件RTOS管理下的RTOS數(shù)據(jù)516、任務(wù)中固有的任務(wù)數(shù)據(jù)518以及所有任務(wù)中共通的通用數(shù)據(jù)522。TCB是RTOS數(shù)據(jù)516的一種,任務(wù)就緒表和等待類(lèi)表等各種表也是RTOS數(shù)據(jù)516的一種。能在所有任務(wù)中被訪(fǎng)問(wèn)的通用變量均作為通用數(shù)據(jù)522被存儲(chǔ)。各任務(wù)中固有的數(shù)據(jù),例如任務(wù)(應(yīng)用程序)的本地變量等作為任務(wù)數(shù)據(jù)518被存儲(chǔ)。
      [0605]軟件MPRTOS需要進(jìn)行CPU訪(fǎng)問(wèn)存儲(chǔ)器502的排他控制。例如,當(dāng)CPUl訪(fǎng)問(wèn)等待類(lèi)表時(shí),可能發(fā)生CPU2也訪(fǎng)問(wèn)同一等待類(lèi)表的情況。軟件MPRTOS使用被稱(chēng)為原子操作命令的特別命令進(jìn)行訪(fǎng)問(wèn)等待類(lèi)表的排他控制。
      [0606]具體而言,當(dāng)CPUl訪(fǎng)問(wèn)等待類(lèi)表時(shí),首先CPUl的軟件MPRTOS禁止中斷CPU1。由此,CPUl在訪(fǎng)問(wèn)中禁止任務(wù)轉(zhuǎn)換。接著,CPUl的軟件MPRTOS獲取對(duì)等待類(lèi)表的訪(fǎng)問(wèn)權(quán)(鎖定)。如果沒(méi)得到訪(fǎng)問(wèn)權(quán),CPUl維持禁止中斷而繼續(xù)等待。當(dāng)結(jié)束訪(fǎng)問(wèn)時(shí),解鎖對(duì)等待類(lèi)表的訪(fǎng)問(wèn)權(quán),最后解除禁止中斷。這樣,在原子操作命令中將產(chǎn)生中斷禁止與其解除、資源鎖定與解鎖等附加的執(zhí)行成本(耗時(shí))。當(dāng)CPUl執(zhí)行原子操作命令時(shí),CPU2將等待直至CPUl的訪(fǎng)問(wèn)結(jié)束。當(dāng)CPUl的訪(fǎng)問(wèn)結(jié)束時(shí),CPU2將根據(jù)同樣的原子操作命令訪(fǎng)問(wèn)等待類(lèi)表。為了提高M(jìn)P系統(tǒng)500的處理能力,需要降低伴隨原子操作命令的耗時(shí)。
      [0607]當(dāng)訪(fǎng)問(wèn)在每個(gè)CPU中準(zhǔn)備的任務(wù)就緒表時(shí),也需要排他控制。例如,設(shè)為CPUl執(zhí)行任務(wù)Tl,CPU2執(zhí)行任務(wù)T2a而任務(wù)T2b為WAIT狀態(tài)。在此,設(shè)為作為任務(wù)Tl執(zhí)行了釋放信號(hào)量系統(tǒng)調(diào)用等SET類(lèi)系統(tǒng)調(diào)用命令的結(jié)果而任務(wù)T2b的WAIT解除條件成立。
      [0608]當(dāng)執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用命令時(shí),在CPUl中加載軟件MPRT0S。另外,CPUl的軟件MPRTOS確認(rèn)作為共有資源的等待信號(hào)量表,使WAIT中的任務(wù)T2b從WAIT狀態(tài)變?yōu)镽EADY狀態(tài)。為了改變狀態(tài),CPUl的軟件MPRTOS還需要訪(fǎng)問(wèn)CPU2用的任務(wù)就緒表。只要從WAIT狀態(tài)釋放的任務(wù)T2b的任務(wù)優(yōu)先級(jí)高于現(xiàn)在CPU2中正執(zhí)行的任務(wù)T2a的任務(wù)優(yōu)先級(jí),在CPU2中也需要任務(wù)轉(zhuǎn)換。此時(shí),CPUl的軟件MPRTOS對(duì)CPU2實(shí)施中斷。由于來(lái)自CPUl的中斷,CPU2中也加載軟件MPRTOS,并執(zhí)行從任務(wù)T2a向任務(wù)T2b的任務(wù)轉(zhuǎn)換。
      [0609]下面,將由一個(gè)CPU執(zhí)行系統(tǒng)調(diào)用等而在同一或者另外的CPU上發(fā)生任務(wù)轉(zhuǎn)換的現(xiàn)象稱(chēng)為“分派”。由于當(dāng)CPUl執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用而在CPU2發(fā)生了任務(wù)轉(zhuǎn)換,因此上述處理相當(dāng)于分派。
      [0610]在上述的例中,至少需要伴隨如下訪(fǎng)問(wèn)進(jìn)行排他控制:(Al)MPRTOS(CPUl)訪(fǎng)問(wèn)等待信號(hào)量表,(A2)MPRTOS (CPUl)訪(fǎng)問(wèn)CPU2的任務(wù)就緒表,(A3)MPRTOS (CPU2)訪(fǎng)問(wèn)CPU2的任務(wù)就緒表。若為軟件MPRT0S,由于有時(shí)多個(gè)CPU同時(shí)執(zhí)行多個(gè)軟件MPRT0S,因此容易增大排他控制的執(zhí)行成本。
      [0611 ] 相比普通軟件RT0S,采用基本實(shí)施方式等所示的任務(wù)處理裝置100 (硬件RT0S)能大幅減少任務(wù)轉(zhuǎn)換的執(zhí)行成本。另外,在MP實(shí)施方式中,通過(guò)導(dǎo)入下面所示的硬件邏輯來(lái)減少排他控制的執(zhí)行成本。
      [0612]圖48是MP實(shí)施方式的任務(wù)處理裝置100的電路圖。
      [0613]在MP實(shí)施方式中,任務(wù)控制電路200與多個(gè)CPUO、CPUl…CPUm連接。在任務(wù)控制電路200中追加有處理器切換電路530與處理器管理寄存器524。CPU不與保存電路120直接連接,而是經(jīng)由處理器切換電路530連接。
      [0614]從處理器切換電路530向CPUO發(fā)送停止請(qǐng)求信號(hào)(HRO)、寫(xiě)入信號(hào)(WTO)與保存數(shù)據(jù),從CPUO向處理器切換電路530發(fā)送停止結(jié)束信號(hào)(HCO)、系統(tǒng)調(diào)用信號(hào)(SCO)和處理數(shù)據(jù)。與基本實(shí)施方式同樣地,當(dāng)CPUO執(zhí)行系統(tǒng)調(diào)用命令時(shí),申請(qǐng)系統(tǒng)調(diào)用信號(hào)(SCO)。當(dāng)CPUO執(zhí)行系統(tǒng)調(diào)用命令時(shí),CPUO自動(dòng)停止??梢酝耆V?Stop)CPU時(shí)鐘,也可以對(duì)CPU時(shí)鐘進(jìn)行無(wú)效等處理而暫時(shí)停止(Suspend)。無(wú)論怎樣,“CPU的停止”只要是使CPU呈不再繼續(xù)執(zhí)行任務(wù)的狀態(tài)即可。當(dāng)申請(qǐng)系統(tǒng)調(diào)用信號(hào)(SCO)時(shí),任務(wù)控制電路200則申請(qǐng)停止請(qǐng)求信號(hào)(HRO)。當(dāng)申請(qǐng)寫(xiě)入信號(hào)(WTO)時(shí),則在CPUO的處理寄存器中加載從保存電路120發(fā)出的保存數(shù)據(jù)。另外,始終向處理器切換電路530輸出CPUO的處理數(shù)據(jù)。其他的CPUl?CPUm也是同樣。CPU與處理器切換電路530之間的信號(hào)與基本實(shí)施方式中CPU與任務(wù)切換電路210之間的信號(hào)基本相同。
      [0615]從處理器切換電路530向任務(wù)切換電路210發(fā)送系統(tǒng)調(diào)用信號(hào)(SC)、處理器通知信號(hào)(SCP)和停止結(jié)束信號(hào)(HC),從任務(wù)切換電路210向處理器切換電路530發(fā)送系統(tǒng)調(diào)用確認(rèn)信號(hào)(SCACK)、處理器指定信號(hào)(HRP)和寫(xiě)入信號(hào)(WT)。
      [0616]當(dāng)CPUO申請(qǐng)系統(tǒng)調(diào)用信號(hào)(SCO)時(shí),處理器切換電路530則申請(qǐng)系統(tǒng)調(diào)用信號(hào)(SC)與HRO信號(hào),由處理器通知信號(hào)(SCP)發(fā)送作為CPU的ID的處理器ID。當(dāng)處理器切換電路530申請(qǐng)系統(tǒng)調(diào)用信號(hào)(SC)時(shí),任務(wù)切換電路210則申請(qǐng)系統(tǒng)調(diào)用確認(rèn)信號(hào)(SCACK)。在MP實(shí)施方式中,任務(wù)切換電路210判斷為從發(fā)送系統(tǒng)調(diào)用信號(hào)(SC)開(kāi)始直至經(jīng)過(guò)規(guī)定時(shí)間之后,能執(zhí)行系統(tǒng)調(diào)用處理等。當(dāng)結(jié)束系統(tǒng)調(diào)用處理時(shí),則取消SCACK信號(hào)以及取消HRO信號(hào)。CPUO因HRO信號(hào)的取消而重啟。在基本實(shí)施方式中,CPU時(shí)鐘因執(zhí)行系統(tǒng)調(diào)用命令時(shí)寫(xiě)入信號(hào)(WT)的下降而重啟(有效),但在圖48所示的結(jié)構(gòu)中,CPU時(shí)鐘因SCACK信號(hào)和HRO信號(hào)的取消而重啟(有效)。
      [0617]有時(shí)任務(wù)控制電路200也使CPUO停止。此時(shí),任務(wù)切換電路210申請(qǐng)停止請(qǐng)求信號(hào)(HR),通過(guò)處理器通知信號(hào)(HRP)發(fā)送作為停止對(duì)象的CPUO的處理器ID(O)。處理器切換電路530申請(qǐng)HRO信號(hào),使CPUO停止。當(dāng)CPUO停止時(shí),則申請(qǐng)HCO信號(hào)以及申請(qǐng)停止結(jié)束信號(hào)(HC)。通過(guò)申請(qǐng)HC信號(hào),任務(wù)切換電路210知曉CPUO已停止并判斷為能執(zhí)行任務(wù)轉(zhuǎn)換等。在MP實(shí)施方式中的HC信號(hào)是專(zhuān)用于對(duì)HR信號(hào)的應(yīng)答。
      [0618]處理器管理寄存器524用于存儲(chǔ)各CPU中的RUN任務(wù)與表示這些任務(wù)的優(yōu)先級(jí)等的處理器管理信息。參照?qǐng)D50在后面詳細(xì)敘述處理器管理信息。
      [0619]此外,在本實(shí)施方式的說(shuō)明中,任務(wù)分別固定地對(duì)應(yīng)于某一 CPU,對(duì)各CPU分別準(zhǔn)備READY隊(duì)列(后面敘述),全部CPU共用WAIT隊(duì)列(后面敘述)。
      [0620]圖49是MP任務(wù)ID的數(shù)據(jù)結(jié)構(gòu)圖。
      [0621]將MP實(shí)施方式中的任務(wù)ID稱(chēng)為MP任務(wù)ID(MEID)。本實(shí)施方式的MP任務(wù)ID為7位,前三位是處理器ID(PID),后四位是任務(wù)本身的任務(wù)ID(EID)。S卩,可實(shí)施的CPU是最大8個(gè),任務(wù)是最大16個(gè)。可以根據(jù)PID和EID的大小來(lái)確定可實(shí)施的CPU數(shù)量和任務(wù)數(shù)量。
      [0622]圖50是處理器管理信息的數(shù)據(jù)結(jié)構(gòu)圖。
      [0623]處理器管理寄存器524包含處理器管理信息。在處理器管理信息中注冊(cè)由各CPU執(zhí)行的任務(wù)(RUN-任務(wù))、任務(wù)優(yōu)先級(jí)和種類(lèi)。根據(jù)圖50,在處理器ID = O的CPUO中,任務(wù)(E4)是在執(zhí)行當(dāng)中、任務(wù)優(yōu)先級(jí)PR為O、種類(lèi)是普通任務(wù)(N)。在CPU2中,作為特殊任務(wù)(S)的任務(wù)(E15)在被執(zhí)行當(dāng)中。任務(wù)切換電路210通過(guò)訪(fǎng)問(wèn)處理器管理寄存器524,能實(shí)時(shí)地監(jiān)視在全部CPU中正在執(zhí)行的任務(wù)。換言之,不是通過(guò)軟件而是通過(guò)硬件等級(jí)就能知曉全部RUN-任務(wù)。此外,也可以將一部分或全部處理器管理信息不存儲(chǔ)在處理器管理寄存器524而是存儲(chǔ)在狀態(tài)存儲(chǔ)單元220中。
      [0624]圖51是MP實(shí)施方式的READY隊(duì)列的概念圖。
      [0625]對(duì)每個(gè)CPU準(zhǔn)備對(duì)應(yīng)于READY狀態(tài)的虛擬隊(duì)列(下面稱(chēng)為“READY隊(duì)列”)。虛擬隊(duì)列(QRO)是CPUO的READY隊(duì)列。如圖50所示,在CPUO、CPUUCPUm中分別正在執(zhí)行任務(wù)(E4)、任務(wù)(E9)、任務(wù)(E2)。另外,向CPUO的READY隊(duì)列(QR0:0)中輸入任務(wù)(El)。
      [0626]圖52是MP實(shí)施方式的WAIT隊(duì)列的概念圖。
      [0627]對(duì)全部CPU準(zhǔn)備共用的對(duì)應(yīng)于WAIT狀態(tài)的虛擬隊(duì)列(下面稱(chēng)為“WAIT隊(duì)列”)。虛擬隊(duì)列(QWa)是以信號(hào)量a作為對(duì)象的WAIT隊(duì)列,虛擬隊(duì)列(QWb)是以信號(hào)量b作為對(duì)象的WAIT隊(duì)列。在圖52中,向WAIT隊(duì)列(QWa:0)輸入任務(wù)(E3),向WAIT隊(duì)列(QWb:0)與WAIT隊(duì)列(QWb:1)分別輸入任務(wù)(E8)與任務(wù)(E7)。圖53是與圖51、圖52對(duì)應(yīng)的狀態(tài)寄存器的數(shù)據(jù)結(jié)構(gòu)圖。由于RUN-任務(wù)(E2)不在虛擬隊(duì)列中而設(shè)定“Non”。在MP實(shí)施方式中,與虛擬隊(duì)列實(shí)施方式同樣地對(duì)每個(gè)虛擬隊(duì)列設(shè)定順序值。作為變形例,也可以對(duì)全部的虛擬隊(duì)列設(shè)定連號(hào)的唯一的順序值。在圖51的例中,向虛擬隊(duì)列(QRO)輸入任務(wù)(El)、向虛擬隊(duì)列(QRl)輸入任務(wù)(EO)、向虛擬隊(duì)列(QRm)輸入任務(wù)(E5)、任務(wù)(E6)。只要輸入的順序是任務(wù)(El)、任務(wù)(E5)、任務(wù)(EO)、任務(wù)(E6),在連號(hào)的情況下,順序值分別設(shè)為3、2、1、0即可。
      [0628]在MP實(shí)施方式中,MP任務(wù)ID(MEID)中包含任務(wù)ID(EID)和處理器ID(PID)。因此,圖32所示的任務(wù)選擇電路230的結(jié)構(gòu)發(fā)生局部變化。當(dāng)接收到來(lái)自主電路400的詢(xún)問(wèn)時(shí)由任務(wù)選擇電路230確定抽取任務(wù)(例如,下一個(gè)RUN-任務(wù))。虛擬隊(duì)列實(shí)施方式中,在選擇RUN-任務(wù)之時(shí)的第一條件是“READY-任務(wù)”,而在MP實(shí)施方式中還加上“具有指定的處理器ID (PID) ”這一條件。在MP實(shí)施方式中,任務(wù)被固定地分配至CPU中。因此,當(dāng)CPUl執(zhí)行任務(wù)轉(zhuǎn)換時(shí),僅包含CPUl的PID的任務(wù)作為RUN-任務(wù)的候選,因此只要在判定電路434中追加用于確認(rèn)PID的邏輯即可。具體地說(shuō),只要從狀態(tài)存儲(chǔ)單元220提供的PID與由從主電路400提供的QID指定的PID不一致,判定電路434判定為不申請(qǐng)EID — XX —EN信號(hào)即可。關(guān)于圖28所示的最大值選擇電路406等也同樣地,由于僅追加了 PID,因此實(shí)質(zhì)上基本不產(chǎn)生電路變化。
      [0629]接著,說(shuō)明對(duì)應(yīng)于MP系統(tǒng)500的任務(wù)處理裝置100的系統(tǒng)調(diào)用處理與截取處理。
      [0630][執(zhí)行系統(tǒng)調(diào)用]
      [0631]參照?qǐng)D51等,說(shuō)明CPUO的任務(wù)(E4)執(zhí)行系統(tǒng)調(diào)用命令,發(fā)生從任務(wù)(E4)向任務(wù)(El)的任務(wù)轉(zhuǎn)換。
      [0632]S1.任務(wù)(E4)執(zhí)行系統(tǒng)調(diào)用命令,并申請(qǐng)SCO信號(hào)。CPUO自動(dòng)停止。
      [0633]S2.處理器切換電路530申請(qǐng)HRO信號(hào)。但是,由于CPUO已經(jīng)停止,因此CPUO的狀態(tài)不會(huì)因申請(qǐng)HRO信號(hào)而改變。之所以申請(qǐng)HRO信號(hào),是用于之后使CPUO知曉HRO信號(hào)的取消時(shí)刻(后面敘述)。
      [0634]S3.處理器切換電路530還申請(qǐng)SC信號(hào),并且在SCP信號(hào)中指定處理器ID = O。
      [0635]S4.任務(wù)切換電路210申請(qǐng)SCACK信號(hào)。當(dāng)申請(qǐng)了 SCACK信號(hào)時(shí),處理器切換電路530則知曉開(kāi)始進(jìn)行了系統(tǒng)調(diào)用處理,等待直至SCACK被取消。處理器切換電路530用于連接保存電路120和CPUO。
      [0636]S5.按照同于基本實(shí)施方式的流程,任務(wù)控制電路200執(zhí)行系統(tǒng)調(diào)用處理。當(dāng)在CPUO中發(fā)生任務(wù)轉(zhuǎn)換時(shí),則申請(qǐng)WT信號(hào),替換任務(wù)(E4)的處理數(shù)據(jù)與任務(wù)(El)的保存數(shù)據(jù)。當(dāng)結(jié)束系統(tǒng)調(diào)用處理時(shí),任務(wù)切換電路210取消SCACK信號(hào)。任務(wù)切換電路210將任務(wù)(El)作為CPUO的新RUN-任務(wù)注冊(cè)在處理器管理寄存器524中。
      [0637]S6.處理器切換電路530對(duì)取消SCACK信號(hào)做出反應(yīng)而取消HRO信號(hào)。CPUO因HRO信號(hào)的取消而重啟,并執(zhí)行任務(wù)(El)。
      [0638][截取處理]
      [0639]任務(wù)控制電路200主動(dòng)中斷CPU的處理而發(fā)生任務(wù)轉(zhuǎn)換一事被稱(chēng)為“截取”。因超時(shí)、中斷、執(zhí)行系統(tǒng)調(diào)用等而發(fā)生截取。例如,當(dāng)WAIT-任務(wù)T3超時(shí)而立刻變?yōu)镽UN-任務(wù)時(shí),任務(wù)控制電路200檢測(cè)出超時(shí)而停止CPU,執(zhí)行任務(wù)轉(zhuǎn)換。
      [0640]首先,說(shuō)明呈WAIT狀態(tài)的任務(wù)(E3)超時(shí)的情況。將任務(wù)(E3)作為由CPU2執(zhí)行的任務(wù)(PID = 2)。
      [0641]S1.任務(wù)選擇電路230檢測(cè)出任務(wù)(E3)超時(shí)。
      [0642]S2.任務(wù)控制電路200按照與基本實(shí)施方式同樣的流程執(zhí)行超時(shí)處理。當(dāng)任務(wù)(E3)未變?yōu)镽UN-任務(wù)時(shí),即不需要任務(wù)轉(zhuǎn)換時(shí),向CPU2的READY隊(duì)列輸入任務(wù)(E3),結(jié)束超時(shí)處理。如果需要任務(wù)轉(zhuǎn)換,則進(jìn)入S3之后。
      [0643]S3.任務(wù)切換電路210申請(qǐng)HR信號(hào),根據(jù)HRP信號(hào)指定CPU2。
      [0644]S4.處理器切換電路530申請(qǐng)HR2信號(hào),使CPU2停止。
      [0645]S5.CPU2 申請(qǐng) HC2 信號(hào)。
      [0646]S6.處理器切換電路530申請(qǐng)HC信號(hào)。處理器切換電路530使處理數(shù)據(jù)保存在保存寄存器110中,在處理寄存器154中加載保存數(shù)據(jù)并進(jìn)行任務(wù)轉(zhuǎn)換。
      [0647]S7.當(dāng)CPU2的任務(wù)轉(zhuǎn)換結(jié)束之后,任務(wù)切換電路210取消HR信號(hào)。
      [0648]S8.處理器切換電路530取消HR2信號(hào)。重啟CPU2的CPU時(shí)鐘,執(zhí)行任務(wù)(E3)。
      [0649]中斷處理的處理過(guò)程也與超時(shí)處理的處理過(guò)程基本相同。
      [0650]高速中斷請(qǐng)求信號(hào)INTR(H)的處理過(guò)程與HW中斷實(shí)施方式中所示的處理相同。在普通中斷請(qǐng)求信號(hào)INTR(N)時(shí)需要啟動(dòng)特殊任務(wù)。即,通常中斷處理一定伴隨有截取(任務(wù)轉(zhuǎn)換)。任務(wù)控制電路200使中斷目標(biāo)的CPU停止,執(zhí)行針對(duì)特殊任務(wù)的任務(wù)轉(zhuǎn)換。執(zhí)行特殊任務(wù)的CPU可以固定,也可以按照規(guī)定的規(guī)則進(jìn)行選擇。
      [0651]在高速中斷處理中有時(shí)也會(huì)發(fā)生截取。當(dāng)伴隨高速中斷處理發(fā)生任務(wù)轉(zhuǎn)換時(shí),同樣地,任務(wù)控制電路200使中斷目標(biāo)的CPU停止,執(zhí)行任務(wù)轉(zhuǎn)換。在HW中斷實(shí)施方式(SP系統(tǒng))中,在進(jìn)行高速中斷處理時(shí)申請(qǐng)ISR —RQ信號(hào)而停止CPU。但是,在無(wú)截取(任務(wù)轉(zhuǎn)換)伴隨的高速中斷處理中,由于不需要使CPU停止,因此不停止CPU而能執(zhí)行高速中斷處理。采用該處理方法,由于能完全并列執(zhí)行由CPU實(shí)現(xiàn)的任務(wù)執(zhí)行與由任務(wù)控制電路200實(shí)現(xiàn)的高速中斷處理,因此能進(jìn)一步提高效率。具體地說(shuō),即使檢測(cè)出高速中斷請(qǐng)求信號(hào)INTR(H),任務(wù)切換電路210也判斷為不需要進(jìn)行任務(wù)轉(zhuǎn)換時(shí),只要不申請(qǐng)HR信號(hào)即可。對(duì)于頻發(fā)高速中斷請(qǐng)求信號(hào)INTR(H)類(lèi)型的應(yīng)用程序/軟件有不停止CPU而能同時(shí)執(zhí)行高速中斷處理優(yōu)點(diǎn)更多。
      [0652][系統(tǒng)調(diào)用的競(jìng)爭(zhēng)]
      [0653]設(shè)為由CPUO的任務(wù)(E4)來(lái)執(zhí)行系統(tǒng)調(diào)用命令,此后立即由CPUl的任務(wù)(E9)來(lái)也執(zhí)行系統(tǒng)調(diào)用命令。停止CPUO和CPU1。另外,發(fā)送SCO信號(hào)和SCl信號(hào)。處理器切換電路530首先對(duì)應(yīng)于S⑶信號(hào),用SCP信號(hào)指定了 CPUO后申請(qǐng)SC信號(hào)。任務(wù)切換電路210執(zhí)行CPUO的系統(tǒng)調(diào)用處理。另外,處理器切換電路530雖然申請(qǐng)HRO信號(hào)與HRl信號(hào)這雙方,但由處理器切換電路530保留CPUl的系統(tǒng)調(diào)用信號(hào)(SCl)。當(dāng)結(jié)束CPUO的系統(tǒng)調(diào)用處理時(shí),取消SCACK信號(hào)以及HRO信號(hào)而重啟CPU0。接著,處理器切換電路530對(duì)應(yīng)于SCl信號(hào),用SCP信號(hào)指定了 CPUl后再次申請(qǐng)SC信號(hào)。被保留的CPUl的系統(tǒng)調(diào)用處理在CPUO的系統(tǒng)調(diào)用處理之后執(zhí)行。
      [0654]這樣,由處理器切換電路530連續(xù)執(zhí)行多個(gè)系統(tǒng)調(diào)用命令。即使任務(wù)(E4)與任務(wù)(E9)完全同時(shí)地發(fā)送來(lái)系統(tǒng)調(diào)用信號(hào),處理器切換電路530根據(jù)隨機(jī)、循環(huán)等任意的規(guī)則來(lái)確定執(zhí)行系統(tǒng)調(diào)用處理的順序即可。由于處理器切換電路530統(tǒng)一地連續(xù)接收來(lái)自多個(gè)(PU的系統(tǒng)調(diào)用命令,因此理論上不會(huì)發(fā)生同時(shí)訪(fǎng)問(wèn)信號(hào)量表212和狀態(tài)存儲(chǔ)單元220等共有資源的情況。因此在由任務(wù)處理裝置100構(gòu)成的硬件MPRTOS中,在訪(fǎng)問(wèn)READY隊(duì)列等共有資源時(shí),不需要中斷禁止與解除、資源鎖定與解鎖。
      [0655][系統(tǒng)調(diào)用與截取的競(jìng)爭(zhēng)]
      [0656]設(shè)為由CPUO的任務(wù)(E4)來(lái)執(zhí)行系統(tǒng)調(diào)用命令,此后立即或同時(shí)地發(fā)生以其他CPUl作為對(duì)象的截取。此時(shí),優(yōu)先進(jìn)行截取。處理器切換電路530使CPUO停止,保留系統(tǒng)調(diào)用信號(hào)(SCO)。當(dāng)結(jié)束截取處理時(shí),處理器切換電路530執(zhí)行被保留的CPUO的系統(tǒng)調(diào)用處理。即使是正在保留CPUO的系統(tǒng)調(diào)用信號(hào)時(shí)發(fā)生對(duì)其他CPU的截取時(shí),也優(yōu)先進(jìn)行截取處理。
      [0657]另外,由CPUO的任務(wù)(E4)來(lái)執(zhí)行系統(tǒng)調(diào)用命令,此后立即或同時(shí)地發(fā)生以相同的CPUO作為對(duì)象的截取時(shí),優(yōu)先進(jìn)行系統(tǒng)調(diào)用處理而保留截取。首先,伴隨執(zhí)行系統(tǒng)調(diào)用命令,停止CPUO而申請(qǐng)HR信號(hào)、HRO信號(hào)。當(dāng)結(jié)束系統(tǒng)調(diào)用處理而取消SCACK信號(hào)時(shí),處理器切換電路530暫且取消HR信號(hào)、HRO信號(hào)等。由此,重啟CPU0。接著,對(duì)應(yīng)于截取,再次申請(qǐng)HR信號(hào)、HRO信號(hào)而再次停止CPUO。這樣執(zhí)行截取處理。
      [0658]圖54是表示分派時(shí)虛擬隊(duì)列與任務(wù)之間的關(guān)系的概念圖。
      [0659]在此,說(shuō)明由CPUO的任務(wù)(E4)來(lái)執(zhí)行系統(tǒng)調(diào)用命令的結(jié)果是在CPUl發(fā)生任務(wù)轉(zhuǎn)換的情況。設(shè)為WAIT隊(duì)列(QWb:0)的任務(wù)(E8)是應(yīng)由CPUl執(zhí)行的任務(wù)。
      [0660]S1.設(shè)為由CPUO的RUN-任務(wù)(E4)來(lái)執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用。如圖50所示,RUN-任務(wù)(E4)的任務(wù)優(yōu)先級(jí)PR為O。由于READY-任務(wù)(El)的任務(wù)優(yōu)先級(jí)PR也為0,因此執(zhí)行系統(tǒng)調(diào)用之后,任務(wù)(E4)仍為RUN-任務(wù)。即,不發(fā)生任務(wù)轉(zhuǎn)換,處理器管理寄存器524未被更新。
      [0661]S2.通過(guò)執(zhí)行釋放信號(hào)量系統(tǒng)調(diào)用,抽取WAIT隊(duì)列(QWb:0)中的WAIT-任務(wù)(E8)。此時(shí),任務(wù)切換電路210參照處理器管理寄存器524來(lái)比較CPUl的RUN-任務(wù)(E9)與WAIT-任務(wù)(E8)的任務(wù)優(yōu)先級(jí)。由于WAIT-任務(wù)(E8)的任務(wù)優(yōu)先級(jí)高于RUN-任務(wù)(E9)的任務(wù)優(yōu)先級(jí),因此任務(wù)切換電路210執(zhí)行以CPUl作為對(duì)象的任務(wù)轉(zhuǎn)換。具體地說(shuō),指定CPUl來(lái)申請(qǐng)HR信號(hào)而使CPUl停止。
      [0662]當(dāng)WAIT-任務(wù)(ES)的任務(wù)優(yōu)先級(jí)為RUN-任務(wù)(E9)的任務(wù)優(yōu)先級(jí)以下時(shí),由于向CPUl的READY隊(duì)列(QRl: O)僅輸入WAIT-任務(wù)(E8),因此不需要任務(wù)轉(zhuǎn)換(分派)。
      [0663]S3.在停止CPUl之后,向READY隊(duì)列(QRl: 2)輸入RUN-任務(wù)(E9)。READY-任務(wù)(E9)的處理數(shù)據(jù)從處理寄存器92保存至保存寄存器110。
      [0664]S4.WAIT-任務(wù)(E8)成為新的RUN-任務(wù)。處理器管理寄存器524也被更新。從保存寄存器110向處理寄存器92加載任務(wù)(E8)的處理數(shù)據(jù)。
      [0665]分派例如發(fā)生在,通過(guò)釋放信號(hào)量系統(tǒng)調(diào)用或設(shè)定標(biāo)記系統(tǒng)調(diào)用等SET類(lèi)系統(tǒng)調(diào)用,將某一 CPU的任務(wù)從WAIT狀態(tài)轉(zhuǎn)移至RUN狀態(tài)時(shí)。另外,分派也發(fā)生在,通過(guò)啟動(dòng)系統(tǒng)調(diào)用或結(jié)束系統(tǒng)調(diào)用而強(qiáng)制地使別的CPU的任務(wù)RUN或者STOP時(shí)。
      [0666]圖55是向任務(wù)切換電路532中組入處理器切換電路530的功能時(shí)任務(wù)處理裝置100的電路圖。
      [0667]也可以向任務(wù)切換電路532組入處理器切換電路530的功能。保存電路120中包含的第一加載選擇電路526與圖48的加載選擇電路112相同。在圖55中還具有新的第二加載選擇電路528。
      [0668]當(dāng)申請(qǐng)SCO?SCm信號(hào)中任一者、INTR信號(hào)或者超時(shí)信號(hào)時(shí),圖55所示的任務(wù)控制電路200進(jìn)行動(dòng)作。任務(wù)切換電路532向第二加載選擇電路528發(fā)送PID信號(hào)。根據(jù)PID信號(hào)指定作為控制對(duì)象的CPU。第二加載選擇電路528用于連接由PID信號(hào)指定的CPU與保存電路120。通過(guò)第二加載選擇電路528來(lái)實(shí)現(xiàn)處理器切換電路530的功能中用于連接多個(gè)CPU中的任一方與保存電路120的功能,通過(guò)任務(wù)切換電路532來(lái)實(shí)現(xiàn)其他功能。
      [0669]在本MP實(shí)施方式中,說(shuō)明了任務(wù)與CPU之間的關(guān)系是被固定的,但也可以分別處理任務(wù)ID(EID)與處理器ID(PID)。例如,當(dāng)執(zhí)行啟動(dòng)系統(tǒng)調(diào)用時(shí),通過(guò)指定任務(wù)ID與處理器ID,也可以設(shè)定MEID為任意的PID。另外,也可以輸入使任務(wù)從一個(gè)CPU移動(dòng)至另一個(gè)CPU的移動(dòng)系統(tǒng)調(diào)用命令。當(dāng)執(zhí)行該移動(dòng)系統(tǒng)調(diào)用命令時(shí),通過(guò)指定任務(wù)ID與移動(dòng)目標(biāo)CPU的處理器ID,也可以改變MEID的處理器ID。由于全部任務(wù)的執(zhí)行狀態(tài)通過(guò)狀態(tài)存儲(chǔ)單元220與處理器管理寄存器524進(jìn)行管理,因此僅通過(guò)改寫(xiě)狀態(tài)存儲(chǔ)單元220或處理器管理寄存器524的數(shù)據(jù)就能實(shí)現(xiàn)任務(wù)的移動(dòng)。
      [0670]例如,在圖51中,將CPUO的READY-任務(wù)(El)變?yōu)镃PUl的READY-任務(wù)時(shí),可以對(duì)任務(wù)(El)的MEID設(shè)定CPUl的處理器ID后順序輸入至虛擬隊(duì)列(QRl: O)。能夠這樣設(shè)定虛擬隊(duì)列,換言之僅通過(guò)改寫(xiě)狀態(tài)存儲(chǔ)單元220就能實(shí)現(xiàn)移動(dòng),因此基本上不發(fā)生移動(dòng)系統(tǒng)調(diào)用命令的執(zhí)行成本。
      [0671]以上,說(shuō)明了能對(duì)應(yīng)于MP系統(tǒng)500的任務(wù)處理裝置100。
      [0672]任務(wù)處理裝置100不僅能大幅減少任務(wù)轉(zhuǎn)換的執(zhí)行成本而且能大幅減少伴隨排他任務(wù)的執(zhí)行成本。在一般實(shí)施方式中,在各CPU中適當(dāng)?shù)丶虞d軟件MPRT0S。為了使在CPUl中加載的軟件MPRTOS知曉另一個(gè)CPU2的執(zhí)行狀態(tài),必須用原子操作命令來(lái)訪(fǎng)問(wèn)存儲(chǔ)器502。由于存儲(chǔ)器502的資源始終被競(jìng)爭(zhēng)利用,因此用于進(jìn)行調(diào)整的執(zhí)行成本容易增多。具體地說(shuō),中斷禁止與解除、資源鎖定與解鎖這樣的耗時(shí),容易變大至不容忽視的程度。
      [0673]在MP實(shí)施方式中,任務(wù)控制電路200將READY隊(duì)列或WAIT隊(duì)列等眾多共有資源置于管理之下。另外,任務(wù)控制電路200通過(guò)處理器管理信息能實(shí)時(shí)地且以硬件等級(jí)知曉全部RUN-任務(wù)的執(zhí)行情況。其結(jié)果,任務(wù)控制電路200能總體地管理全部CPU與全部任務(wù)的狀態(tài)數(shù)據(jù)。訪(fǎng)問(wèn)由任務(wù)控制電路200管理的資源時(shí),不需要進(jìn)行由處理器切換電路530進(jìn)行的用于連續(xù)的中斷禁止與解除、資源鎖定與解鎖等排他控制用追加處理。雖然任務(wù)控制電路200使各種截取主動(dòng)地發(fā)生,但與系統(tǒng)調(diào)用同樣地,也連續(xù)地進(jìn)行截取。
      [0674]另外,不僅能通過(guò)多個(gè)CPU同時(shí)執(zhí)行任務(wù),而且能在不停止CPU的情況下執(zhí)行不伴隨截取的高速中斷處理。即,由于高速中斷處理時(shí)不中斷任務(wù)執(zhí)行,因此能進(jìn)一步實(shí)現(xiàn)高速化。
      [0675]由于任務(wù)控制電路200通過(guò)硬件邏輯實(shí)現(xiàn)READY隊(duì)列或WAIT隊(duì)列等狀態(tài)管理,因此系統(tǒng)調(diào)用處理或截取處理的執(zhí)行成本本身少于軟件RT0S。分派也是同樣的。相比軟件RTOS進(jìn)行的多處理器控制,減少伴隨任務(wù)轉(zhuǎn)換以及排他控制的執(zhí)行成本的結(jié)果還能減少耗電。
      [0676]此外,在本實(shí)施方式中,以CPU作為控制對(duì)象進(jìn)行了說(shuō)明,但也能應(yīng)用DSP(Digital Signal Processor:數(shù)字信號(hào)處理器)等其他的處理器。
      [0677]在本實(shí)施方式中,任務(wù)控制電路200通過(guò)WT信號(hào)或HRP信號(hào)等加載以及保存處理數(shù)據(jù)。在基本實(shí)施方式(SP系統(tǒng))中,任務(wù)控制電路200通過(guò)申請(qǐng)WT信號(hào)或TS信號(hào)等來(lái)執(zhí)行處理數(shù)據(jù)的加載與保存。在MP實(shí)施方式中,通過(guò)任務(wù)切換電路210申請(qǐng)WT信號(hào)并用HRP信號(hào)指定作為對(duì)象的CPU,處理器切換電路530執(zhí)行處理數(shù)據(jù)的加載以及保存。
      [0678]但是,“基于任務(wù)控制電路200的處理數(shù)據(jù)的保存和加載”不限于任務(wù)控制電路200直接操作處理數(shù)據(jù)的情況。例如,任務(wù)控制電路200也可以向外部的寄存器等寫(xiě)入任務(wù)轉(zhuǎn)換指示命令,通過(guò)在CPU150上執(zhí)行的監(jiān)視軟件檢測(cè)出該寄存器的寫(xiě)入來(lái)執(zhí)行處理數(shù)據(jù)的加載以及保存。采用這樣的結(jié)構(gòu)時(shí),由于需要在CPU150上執(zhí)行任務(wù)轉(zhuǎn)換執(zhí)行用的軟件,因此不是完全的硬件RT0S。盡管如此,相比普通軟件RT0S,能顯著減少執(zhí)行成本。
      [0679]以上基于實(shí)施方式說(shuō)明了本發(fā)明。這些實(shí)施方式只是示例,本領(lǐng)域的技術(shù)人員能夠理解,可以對(duì)這些各結(jié)構(gòu)要素和處理流程的組合進(jìn)行各種變型,而這些變型也屬于本發(fā)明的范圍。
      [0680][工業(yè)實(shí)用性]
      [0681]根據(jù)本發(fā)明,能夠通過(guò)硬件邏輯來(lái)實(shí)現(xiàn)可與MP系統(tǒng)對(duì)應(yīng)的RT0S。
      【權(quán)利要求】
      1.一種任務(wù)處理裝置,其特征在于, 具有任務(wù)控制電路,其管理多個(gè)處理器執(zhí)行的多個(gè)任務(wù)的執(zhí)行狀態(tài), 所述處理器在執(zhí)行系統(tǒng)調(diào)用命令時(shí),向所述任務(wù)控制電路發(fā)送系統(tǒng)調(diào)用信號(hào), 所述任務(wù)控制電路接收到來(lái)自第一處理器的第一系統(tǒng)調(diào)用信號(hào)時(shí),通過(guò)參照處理器的處理器ID與注冊(cè)有該處理器正在執(zhí)行中的任務(wù)的任務(wù)ID的處理器管理信息,確定所述第一處理器正在執(zhí)行中的第一任務(wù),主動(dòng)選擇作為下一個(gè)執(zhí)行對(duì)象的第二任務(wù),將所述第一任務(wù)的處理數(shù)據(jù)從所述第一處理器的處理寄存器保存至規(guī)定的存儲(chǔ)區(qū)域,將所述第二任務(wù)的處理數(shù)據(jù)加載至所述第一處理器的所述處理寄存器以更新所述處理器管理信息,由此來(lái)執(zhí)行所述第一處理器的任務(wù)轉(zhuǎn)換。
      2.根據(jù)權(quán)利要求1所述的任務(wù)處理裝置,其特征在于, 在所述第一處理器的任務(wù)轉(zhuǎn)換未結(jié)束之前由第二處理器發(fā)來(lái)第二系統(tǒng)調(diào)用信號(hào)時(shí),所述任務(wù)控制電路保留所述第二系統(tǒng)調(diào)用信號(hào),在所述第一處理器的任務(wù)轉(zhuǎn)換結(jié)束之后執(zhí)行所述第二處理器的任務(wù)轉(zhuǎn)換。
      3.根據(jù)權(quán)利要求2所述的任務(wù)處理裝置,其特征在于, 在接收到所述第一系統(tǒng)調(diào)用信號(hào)時(shí),所述任務(wù)控制電路在所述第一處理器停止之后執(zhí)行任務(wù)轉(zhuǎn)換,在所述第一處理器的任務(wù)轉(zhuǎn)換未結(jié)束之前由所述第二處理器發(fā)來(lái)所述第二系統(tǒng)調(diào)用信號(hào)時(shí),保留所述第二系統(tǒng)調(diào)用信號(hào),所述第一處理器的任務(wù)轉(zhuǎn)換結(jié)束時(shí),重啟所述第一處理器并執(zhí)行所述第二處理器的任務(wù)轉(zhuǎn)換。
      4.根據(jù)權(quán)利要求1所述的任務(wù)處理裝置,其特征在于, 還具有多個(gè)狀態(tài)寄存器,它們分別對(duì)應(yīng)于多個(gè)任務(wù),用于保持任務(wù)的狀態(tài)數(shù)據(jù), 所述任務(wù)控制電路通過(guò)參照由多個(gè)所述狀態(tài)寄存器輸出的狀態(tài)數(shù)據(jù),確定以READY狀態(tài)等待的任務(wù),在保存所述第一任務(wù)的處理數(shù)據(jù)時(shí),將所述第一任務(wù)的狀態(tài)寄存器中的狀態(tài)數(shù)據(jù)從RUN狀態(tài)變更設(shè)定為別的狀態(tài),并且加載所述第二任務(wù)的處理數(shù)據(jù)時(shí),在所述第二任務(wù)的狀態(tài)寄存器中設(shè)定表示RUN狀態(tài)的狀態(tài)數(shù)據(jù)。
      5.根據(jù)權(quán)利要求1所述的任務(wù)處理裝置,其特征在于, 作為所述第一處理器的第一系統(tǒng)調(diào)用命令的執(zhí)行結(jié)果,發(fā)生第三處理器的任務(wù)轉(zhuǎn)換時(shí),在所述第一處理器的系統(tǒng)調(diào)用處理結(jié)束之后,所述任務(wù)控制電路主動(dòng)產(chǎn)生針對(duì)所述第三處理器的中斷并執(zhí)行所述第三處理器的任務(wù)轉(zhuǎn)換。
      6.根據(jù)權(quán)利要求5所述的任務(wù)處理裝置,其特征在于, 作為所述第一處理器的第一系統(tǒng)調(diào)用命令的執(zhí)行結(jié)果,在所述第三處理器預(yù)定執(zhí)行的第三任務(wù)的執(zhí)行狀態(tài)為解除WAIT (等待)狀態(tài),且所述第三任務(wù)的優(yōu)先級(jí)高于在所述第三處理器中正在執(zhí)行的第四任務(wù)的優(yōu)先級(jí)時(shí),所述任務(wù)控制電路產(chǎn)生針對(duì)所述第三處理器的中斷。
      7.根據(jù)權(quán)利要求1所述的任務(wù)處理裝置,其特征在于, 所述任務(wù)控制電路包含: 處理器切換電路,其用于執(zhí)行處理器的切換;以及 任務(wù)切換電路,其用于執(zhí)行任務(wù)的切換, 所述處理器向所述處理器切換電路發(fā)送系統(tǒng)調(diào)用信號(hào), 所述處理器切換電路在接收到來(lái)自所述第一處理器的所述第一系統(tǒng)調(diào)用信號(hào)時(shí),向所述任務(wù)切換電路發(fā)送所述第一處理器的處理器ID, 所述任務(wù)切換電路根據(jù)接收到的來(lái)自所述處理器切換電路的所述處理器ID與所述處理器管理信息來(lái)確定所述第一任務(wù),將所述第一任務(wù)的處理數(shù)據(jù)從所述第一處理器的處理寄存器保存至規(guī)定的存儲(chǔ)區(qū)域,將所述第二任務(wù)的處理數(shù)據(jù)加載至所述第一處理器的所述處理寄存器用以更新所述處理器管理信息,由此來(lái)執(zhí)行所述第一處理器的任務(wù)轉(zhuǎn)換。
      8.根據(jù)權(quán)利要求7所述的任務(wù)處理裝置,其特征在于, 所述第一處理器在執(zhí)行所述第一系統(tǒng)調(diào)用命令之后停止, 所述任務(wù)切換電路在所述第一處理器的任務(wù)轉(zhuǎn)換已結(jié)束時(shí),向所述處理器切換電路發(fā)送結(jié)束信號(hào), 所述處理器切換電路接收到所述結(jié)束信號(hào)時(shí),重啟所述第一處理器。
      9.根據(jù)權(quán)利要求8所述的任務(wù)處理裝置,其特征在于, 所述任務(wù)切換電路在產(chǎn)生了針對(duì)第四處理器的中斷現(xiàn)象時(shí),產(chǎn)生截取信號(hào)并發(fā)送至所述處理器切換電路后,執(zhí)行對(duì)應(yīng)于所述中斷現(xiàn)象的截取處理, 所述處理器切換電路在接收到所述截取信號(hào)時(shí)停止所述第四處理器,所述截取處理結(jié)束之后重啟所述第四處理器。
      【文檔編號(hào)】G06F9/52GK104272256SQ201280072694
      【公開(kāi)日】2015年1月7日 申請(qǐng)日期:2012年5月24日 優(yōu)先權(quán)日:2012年5月24日
      【發(fā)明者】丸山修孝 申請(qǐng)人:科尼龍硅公司
      網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1