【正文】
實(shí)現(xiàn),其中 _ISR_Disable()實(shí)現(xiàn)關(guān)中斷操作, _ISR_Enable()實(shí)現(xiàn)開中斷操作。 ( 2)信號(hào)量 信號(hào)量是一種非常常用的同步互斥機(jī)制,既可實(shí)現(xiàn)任務(wù)之間的互斥,也可實(shí)現(xiàn)任務(wù)和中斷之間,中斷和中斷之間的互斥,包括三種類型:普通二值信號(hào)量、可嵌套二值信號(hào)量和計(jì)數(shù)信號(hào)量。 普通二值信號(hào)量,又叫互斥信號(hào),只能取值 0 和 1 兩種情況,不支持嵌套,否則有可能發(fā)生死鎖。當(dāng)互斥信號(hào)為 1 時(shí),任務(wù)可以進(jìn)入代碼臨界區(qū),并且信號(hào)值對應(yīng)減一,當(dāng)其余任務(wù)也要求進(jìn)入時(shí),會(huì)發(fā)生阻塞。該任務(wù)完成對臨界區(qū)的訪問時(shí),對互斥信號(hào)進(jìn)行加一操作,釋放互斥信號(hào),可從等待該信號(hào)量的任務(wù)隊(duì)列中選擇一任務(wù)進(jìn)行分配。普通二值信號(hào)有可能發(fā)生優(yōu)先級(jí)反轉(zhuǎn)現(xiàn)象, RTEMS 通過采用優(yōu)先級(jí)繼承算法解決該問題,即使低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)繼承高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí),重新調(diào)度,獲得處理器后進(jìn)入執(zhí)形態(tài),退出臨界區(qū)后釋放互斥量,優(yōu)先級(jí)再恢復(fù)為之前的優(yōu)先級(jí)。 可嵌套信號(hào)量除了取值只有 0 和 1 兩種情況外,還允許進(jìn)行嵌套。當(dāng)發(fā)生嵌套時(shí),只是嵌套層次進(jìn)行了加一 操作,互斥信號(hào)并沒有進(jìn)行加減操作,嵌套層數(shù)表明被同一任務(wù)訪問次數(shù)。 計(jì)數(shù)信號(hào)量主要解決共享多資源的問題,其值等于系統(tǒng)中實(shí)際資源個(gè)數(shù)。 信號(hào)量解決同步互斥問題是通過任務(wù)等待隊(duì)列實(shí)現(xiàn)的,每鐘類型的信號(hào)量對應(yīng)一個(gè)隊(duì)列,申請某一資源而被阻塞的任務(wù)將被掛在其對應(yīng)隊(duì)列下。當(dāng)有任務(wù)釋放資源時(shí),檢查該隊(duì)列是否掛有阻塞任務(wù),如果有,進(jìn)行選擇,直接將資源對其進(jìn)行分配,而不改變信號(hào)量狀態(tài);如果沒有,則對信號(hào)量進(jìn)行加一操作。等待隊(duì)列有兩種實(shí)現(xiàn)策略:基于優(yōu)先級(jí)和先來先服務(wù)。先來先服務(wù)指按照阻塞的順序?qū)Y源進(jìn)行分配,先被阻塞的任務(wù)放在 隊(duì)列的頭部,而不管任務(wù)的優(yōu)先級(jí)?;趦?yōu)先級(jí)是指,若有空閑資源時(shí)先分配給高優(yōu)先級(jí)的任務(wù),為了加快檢索速度,實(shí)現(xiàn)時(shí)利用 Chain_Control 結(jié)構(gòu),其中包括四個(gè)元素,每個(gè)元素對應(yīng) 64 個(gè)優(yōu)先級(jí),當(dāng)有任務(wù)阻塞時(shí),首先除以 64 取余,找到對應(yīng)的元素,然后將其優(yōu)先級(jí)與 0x20 做比較,如果小于則從開始進(jìn)行查找,如果大于則從尾部進(jìn)行查找,放入到對應(yīng)優(yōu)先級(jí)的隊(duì)列中。 ( 3)消息隊(duì)列和事件 第 2 章 RTEMS 操作系統(tǒng)內(nèi)核剖析 13 消息隊(duì)列是實(shí)現(xiàn)任務(wù)間或任務(wù)與中斷間的通信機(jī)制,其中消息是一塊數(shù)據(jù)區(qū)域,其大小和類型由用戶定義。進(jìn)行數(shù)據(jù)通信時(shí),發(fā)送方將消息放在目的方的消息隊(duì)列中,如果隊(duì)列滿,則阻塞該操作;接收方從其對應(yīng)隊(duì)列中取出消息,如果該隊(duì)列無消息,則進(jìn)入阻塞態(tài),注意如果該操作處于中斷處理中,則不會(huì)阻塞,而只是返回 “ 條件不滿足 ” 。因?yàn)橄㈥?duì)列是通過內(nèi)容拷貝實(shí)現(xiàn)的,因此不適合大量數(shù)據(jù)的通信,在這種情況下可以考慮通過在消息中存儲(chǔ)指針或共享內(nèi)存區(qū)域的辦法來解決。 事件相對消息隊(duì)列來說更快捷,效率更高,并且實(shí)現(xiàn)了一對多的同步,但是不支持?jǐn)?shù)據(jù)通信 。具體實(shí)現(xiàn)是,每個(gè)事件對應(yīng)一個(gè)標(biāo)志位,只有發(fā)生和不發(fā)生兩種情況,不記錄其余信息。每個(gè)任務(wù)可支持 32 種事件,可對其感興趣的位進(jìn)行設(shè)置,并且通過其余任務(wù)或中斷對事件進(jìn)行觸發(fā),同時(shí)通知所有關(guān)心該事件的任務(wù),由此達(dá)到同步和通信的目的。 ( 4)異步信號(hào) 異步信號(hào)是 RTEMS 中任務(wù)之間和任務(wù)與中斷間異步通信的唯一機(jī)制,當(dāng)有異步信號(hào)到達(dá)時(shí),任務(wù)中斷當(dāng)前的執(zhí)行路徑,調(diào)用相應(yīng)的異步處理函數(shù)對異步信號(hào)進(jìn)行處理,處理完畢后再恢復(fù)中斷了的執(zhí)行路徑。 RTEMS 定義了一個(gè) 32 位整數(shù) rtems_signal_ret 信號(hào)集,每一位代表一 種信號(hào),異步信號(hào)處理函數(shù) ASR 通過調(diào)用 rtems_signal_catch 函數(shù)進(jìn)行注冊,所有信號(hào)都交給一個(gè)ASR, ASR 通過判斷信號(hào)的類型進(jìn)行不同的處理。異步處理函數(shù)在進(jìn)行上下文切換時(shí)調(diào)用,一是當(dāng)中斷返回時(shí),先判斷是否有異步信號(hào)到達(dá),如果有則先處理異步信號(hào);另一個(gè)是當(dāng)任務(wù)進(jìn)入執(zhí)形態(tài),重新開始運(yùn)行時(shí),執(zhí)行之前代碼之前先判斷是有有異步信號(hào)到達(dá)。 中斷管理 中斷管理為系統(tǒng)提供一種快速響應(yīng)外部事件的機(jī)制,任何任務(wù)只要有中斷到來都必須終止,系統(tǒng)繼而調(diào)用相應(yīng)的中斷處理函數(shù)。中斷有 256 級(jí), 0255,數(shù)字 越大優(yōu)先級(jí)越低。 中斷管理提供的處理中斷命令包括: ? _rtems_interrupt_cacheEstablish an ISR ? _rtems_interrupt_disableDisable Interrupts ? _rtems_interrupt_enableEnable Interrupts ? _rtems_interrupt_flashFlash Interrupt 哈爾濱工程大學(xué)碩士學(xué)位論文 14 ? _rtems_interrupt_is_in_progressIs an ISR in Progress 中斷產(chǎn)生之后,首先根據(jù) 中斷向量值查找中斷向量表,調(diào)用相應(yīng)的中斷處理程序。在中斷處理程序中保存被中斷任務(wù)的內(nèi)容并調(diào)用用戶中斷處理程序?;謴?fù)被中斷任務(wù)的內(nèi)容,中斷返回。從中斷產(chǎn)生到用戶中斷處理器程序處理完畢,就是系統(tǒng)相應(yīng)中斷響應(yīng)的時(shí)間。中斷響應(yīng)流程圖如圖 所示。 向 量 值保 存 寄 存 器 調(diào) 用用 戶 中 斷 處 理 程序 恢 復(fù) 寄 存 器 返回中 斷 向 量 表 中 斷 處 理 程 序 用 戶 中 斷 處 理 程 序 圖 中斷流程圖 對多處理器的支持 RTEMS 對多核處理器提供了強(qiáng)而有力的支持,不但支持同構(gòu)多核處理器,還支持異構(gòu)和混合多核處理器。這是通過多節(jié)點(diǎn)的方式實(shí)現(xiàn)的 [27],多核處理器中每個(gè)處理器都分配一個(gè)唯一的節(jié)點(diǎn)編號(hào),在多處理器節(jié)點(diǎn)配置表中進(jìn)行定義,處理器由分配的節(jié)點(diǎn)編號(hào)進(jìn)行區(qū)別。 RTEMS 在每個(gè)處理器節(jié)點(diǎn)中都有一個(gè)局部對象表和全局對象表,以此來區(qū)分節(jié)點(diǎn)執(zhí)行任務(wù)類型,系統(tǒng)據(jù)此決定下一步行為。局部對象表中的對象只能由該節(jié)點(diǎn)訪問,而全局對象表中的對象所有節(jié)點(diǎn)都可以訪問。 RTEMS 的設(shè)計(jì)目標(biāo)是跨越所有軟硬件的邊界,在邏輯上成為一個(gè)統(tǒng)一的整體,而這一切都是通過用戶層和內(nèi)核層之間的多核處理器支持層來實(shí)現(xiàn)的 [28]。 本章小結(jié) 首先對 RTEMS 進(jìn)行介紹,然后深入剖析了 RTEMS 體系結(jié)構(gòu)和內(nèi)核的核心組件,包括任務(wù)管理組件、內(nèi)存管理組件、同步互斥與通信機(jī)制、中斷機(jī) 制及對多處理器的支持,為后文對多核化關(guān)鍵技術(shù)的研究提供理論支持。 第 3 章 基于 SMP 方式的 RTEMS 多核化實(shí)現(xiàn)機(jī)制 15 第 3 章 基于 SMP 方式的 RTEMS 多核化 實(shí)現(xiàn) 機(jī)制 雖然 RTEMS 提出了對多核處理器支持的設(shè)計(jì)思路和 MPSL 的接口定義,然而具體硬件體系結(jié)構(gòu)不同,多核化設(shè)計(jì)過程中需要實(shí)現(xiàn)機(jī)制不一樣。 主要 探討 RTEMS 對 SMP系統(tǒng)提供支持的 關(guān)鍵技術(shù),針對單核下的同步與互斥機(jī)制不能直接應(yīng)用在多核系統(tǒng)中的問題,提出改進(jìn)的自旋鎖機(jī)制保證多核的同步與互斥 。任務(wù)調(diào)度策略在并行系統(tǒng)中發(fā)揮重要作用,嚴(yán)重影響著系統(tǒng)的性能,將作為一項(xiàng)關(guān)鍵技術(shù)在第 4 章探討。 RTEMS 多核化硬件體系結(jié)構(gòu) 對并行系統(tǒng)結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)模型以及通信機(jī)制的了解是探討和選擇 RTEMS 多核化過程中所需機(jī)制的依據(jù)。 ( 1)并行系統(tǒng)結(jié)構(gòu)分類 并行系統(tǒng)的結(jié)構(gòu)按照存儲(chǔ)器結(jié)構(gòu)可以分為兩大類:集中式共享存儲(chǔ)結(jié)構(gòu)和分布式存儲(chǔ)結(jié)構(gòu) [29]。 集中式共享存儲(chǔ)結(jié)構(gòu)中,所有處理器利用一根總線共聯(lián)實(shí)現(xiàn)共用一個(gè)存儲(chǔ)器,這種情況下,所有處理器訪問內(nèi)存的時(shí)間相同,并且處理器的個(gè)數(shù)容易擴(kuò)展,但是隨著處理器個(gè)數(shù)的增加,內(nèi)存訪問寬帶必定會(huì)成為系統(tǒng)瓶頸。集中式共享存儲(chǔ)結(jié)構(gòu)圖如圖 所示 。 C P U 0 C P U 2C P U 1C P U 3存 儲(chǔ) 器I / O 圖 集中式共享存儲(chǔ)結(jié)構(gòu) 集中式共享存儲(chǔ)結(jié)構(gòu)只適用于處理器數(shù)量較少的情況,當(dāng)處理器數(shù)目很多的時(shí)候應(yīng)該采用分布式存儲(chǔ)結(jié)構(gòu)。分布式存儲(chǔ)結(jié)構(gòu)中,每個(gè)處理器都 獨(dú)有 存儲(chǔ)器,這樣可以解決進(jìn)行海量數(shù)據(jù)處理時(shí)帶來寬帶瓶頸的問題。但同時(shí)也使得處理器間通信復(fù)雜,遠(yuǎn)程節(jié)點(diǎn)訪問延遲變大 [30]。分布式存儲(chǔ)結(jié)構(gòu)圖如圖 所示 。 哈爾濱工程大學(xué)碩士學(xué)位論文 16 C P U 0C P U 2C P U 1C P U 3存 儲(chǔ) 器I / O互 連 網(wǎng) 絡(luò)存 儲(chǔ) 器存 儲(chǔ) 器存 儲(chǔ) 器I / OI / OI / O 圖 分布式共享存儲(chǔ)結(jié)構(gòu) ( 2)存儲(chǔ)結(jié)構(gòu)模型 目前有兩種可供選擇的存儲(chǔ)結(jié)構(gòu)模型,一種是將所有存儲(chǔ)結(jié)構(gòu)視為邏輯上統(tǒng)一的一個(gè)存儲(chǔ)器,所有處理器對其進(jìn)行統(tǒng)一編址,而不管存儲(chǔ)具體位置,這種存儲(chǔ)結(jié)構(gòu)模型適合處理器間通信頻繁的情況。第二種是每個(gè)存儲(chǔ)器都含有私有地址空間,每個(gè)處理器的私有地址并空間不允許其余節(jié)點(diǎn) 進(jìn)行訪問。即使訪問地址相同,也是指向不同的存儲(chǔ)位置,這種模型勢必增加了處理器間通信的復(fù)雜度 [31]。 ( 3)通信機(jī)制 不同的地址空間組織方式采用不同的通信機(jī)制,對于共享存儲(chǔ)結(jié)構(gòu)的系統(tǒng),可以利用指令中的地址進(jìn)行隱式的數(shù)據(jù)通信。對于采用私有地址進(jìn)行編址的系統(tǒng),必須采用消息傳遞機(jī)制進(jìn)行顯示通信 [32]。 采用消息傳遞進(jìn)行通信的系統(tǒng)利用簡單的協(xié)議來完成處理器之間通信。例如,當(dāng)發(fā)送方需要向遠(yuǎn)程節(jié)點(diǎn)發(fā)送數(shù)據(jù)或要求獲取數(shù)據(jù)時(shí),首先向?qū)Ψ桨l(fā)送請求,目的節(jié)點(diǎn)通過輪詢或中斷的方式接收該請求,并做相應(yīng)的處理,處理結(jié)束后生成相應(yīng)的 響應(yīng)消息,發(fā)送到請求方。如果需 要目的節(jié)點(diǎn)進(jìn)行數(shù)據(jù)傳輸,則接收方繼續(xù)等待,直到數(shù)據(jù)傳輸結(jié)束。上述 方式屬于同步傳輸,在目的節(jié)點(diǎn)的響應(yīng)消息或數(shù)據(jù)未到達(dá)之前,接收方的任務(wù)將一直被阻塞。如果節(jié)點(diǎn)直接發(fā)送消息到遠(yuǎn)程節(jié)點(diǎn),而不是等待發(fā)送方請求,這種方式屬于異步傳輸,節(jié)點(diǎn)發(fā)送完數(shù)據(jù)后不用等待目的節(jié)點(diǎn)的響應(yīng),可以繼續(xù)執(zhí)行原有的任務(wù) [33]。 ( 4)總體架構(gòu) 本文研究的 RTEMS 多核化系統(tǒng)支持 如圖 所示的硬件體系結(jié)構(gòu) , 該結(jié)構(gòu)采用分布式存儲(chǔ)結(jié)構(gòu),且每個(gè)節(jié)點(diǎn)都有 含有 私有地址空間。另外, 0 節(jié)點(diǎn)單獨(dú)開辟一段地址空間,作為系統(tǒng)所有節(jié)點(diǎn)進(jìn)行通信的共享存儲(chǔ)區(qū)域。 第 3 章 基于 SMP 方式的 RTEMS 多核化實(shí)現(xiàn)機(jī)制 17 C P U 0C P U 1R O M私 有內(nèi) 存私 有內(nèi) 存公 有內(nèi) 存橋R O M 圖 硬件系統(tǒng)結(jié)構(gòu) 總體架構(gòu)由 2 個(gè)相同內(nèi)核的 32 位 CPU 構(gòu)成, CPU 兼容 SPARC 指令集,采用哈佛結(jié)構(gòu),可同時(shí)接收 12 個(gè)中斷源。系統(tǒng)通過在 0 節(jié)點(diǎn)開辟的共享存儲(chǔ)空間實(shí)現(xiàn)核間通信。其中 0 節(jié)點(diǎn)為主控處理器,負(fù)責(zé)系統(tǒng)的初始化、配置以及任務(wù)分配等工作。 RTEMS 系統(tǒng) 多處理器支持層 RTEMS 系統(tǒng)對多處理器的支持關(guān)鍵是完成 MPSL 層提供功能 [34]。 MPSL 層隱藏了底層多處理器之間通信的具體實(shí)現(xiàn),加快了應(yīng)用層程序的開發(fā)進(jìn)度;同時(shí)減輕了內(nèi)核的工作量,有了 MPSL 層的存在,內(nèi)核主要完成對本地對象的操作和判斷全局對象的具體物理位置等基本功能。 RTEMS 系統(tǒng)提出了 MPSL 的接口定義,為了增強(qiáng) RTEMS 可移植性,選擇保留原有接口。 MPSL 層繼承了 RTENS 系統(tǒng)層次化和模塊化的設(shè)計(jì)模式 [35],方便了不同硬件平臺(tái)之間的移植工作,滿足了嵌入式系統(tǒng)對通用性的要求,便于開發(fā)。 MPSL 層分為以下三層: MPCI 接口層,共享內(nèi)存實(shí)現(xiàn)層,硬件相關(guān)實(shí)現(xiàn)層。 多處理器支 持層提供的接口 該組接口登記在多處理器通信接口表 MPCIT(MulityProcessor Communication Interface Table)中 。 MPSL 層主要負(fù)責(zé)對緩沖池的管理,緩沖池中的基本單位為包,通過對包的操作實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)之間的通信。 包括以下幾個(gè)接口 [36]: ? 初始化 MPSL: initialization ? 獲取一個(gè)包緩沖: get_packet ? 發(fā)送一個(gè)包緩沖: send_packet ? 接收一個(gè)包緩沖: receive_packet ? 釋放一個(gè)包緩沖: return_packet 哈爾濱工程大學(xué)碩士學(xué)位論文 18 MPCI 接口層 該模塊要求實(shí)現(xiàn)節(jié)點(diǎn)之間進(jìn)行消息傳遞的通信機(jī)制,為上層應(yīng)用提供了遠(yuǎn)程通信需要的接口例程 [37]。 應(yīng)用層訪問對象分為兩種:局部對象和全局對象。局部對象只有本地節(jié)點(diǎn)才能進(jìn)行訪問,而全局對象則可由任一節(jié)點(diǎn)進(jìn)行訪問。在每個(gè)節(jié)點(diǎn)中都有一個(gè)用于存儲(chǔ)對象信息的局部對象表和全局對象表。所有節(jié)點(diǎn)中的全局對象表保持一致。當(dāng)節(jié)點(diǎn)需要訪問全局對象時(shí),從該表中查找全局對象的相關(guān)信息,確定全局對象的位置后進(jìn)行訪問。對局部對象的操作,直接交由內(nèi)核處理,與單處理器下的情況相同。而對全局對象的處理,則需要調(diào)用 MPCI 接口層的 例程來完成。應(yīng)用組件根據(jù)對象的屬性和位置來判斷訪問的對象屬于局部對象,還是全局對象,進(jìn)而選擇調(diào)用相應(yīng)的處理模塊。 為了簡化 系統(tǒng) 對于遠(yuǎn)程請求的處理,采取在 每個(gè) 需 要進(jìn)行遠(yuǎn)程通信的應(yīng)用組件 中實(shí)現(xiàn) MP( mulityprocess)模塊 策略 [38],該模塊生成一個(gè)進(jìn)程,專門負(fù)責(zé)監(jiān)視通信介質(zhì),即共享內(nèi)存中是否有消息到來。當(dāng)有消息到來時(shí),該代理被喚醒,作為遠(yuǎn)地節(jié)點(diǎn)在該節(jié)點(diǎn)中的代理,向內(nèi)核提交請求,完成相應(yīng)請求后再將反饋信息發(fā)送到被代理節(jié)點(diǎn),完成一次通信過程。 一般情況下,節(jié)點(diǎn)之間的通信都是由一方發(fā)出請求,等待對方回應(yīng)后開 始進(jìn)行數(shù)據(jù)的傳輸,下面,以節(jié)點(diǎn) 1 與節(jié)點(diǎn) 2 之間通信的全過程為例,說明 MPCI 層的通信機(jī)制,如圖 所示。 第 3 章 基于 SMP 方式的 RTEMS 多核化實(shí)現(xiàn)機(jī)制 19 結(jié) 點(diǎn) 1 的 M P S L 層1 . 獲 取 包 緩 沖g e t _ p a c k e t ( )2 . 發(fā) 送 包s e n d _ p a c k e t ( )3 . 阻 塞 , 并 讓 出 處 理 器結(jié) 點(diǎn) 2 的 M P S L 層1 . 收 到 包2 . 調(diào) 用 中 斷 服 務(wù) 例 程I S R , 觸 發(fā) 遠(yuǎn) 程 通 信 服務(wù) 器 ( M S )3 . M S 接 收 請 求 、 處 理并 將 結(jié) 果 發(fā) 送 回 請 求 結(jié)點(diǎn)r e c e i v e _ p a c k e t ( )s e n d _ p a c k e t ( )1 . 收 到 包2 . 調(diào) 用 中 斷 服 務(wù) 例 程I S R , 觸 發(fā) 遠(yuǎn) 程 通 信 服務(wù) 器 ( M S )3 . 調(diào) 用r e c e i v e _ p a c k e t ( )4 . 激 活 阻 塞 的 任 務(wù) 完 成處 理 , 釋 放 空 間r e t u r n _ p a c k e t ( ) 圖 遠(yuǎn)程通信過程 共享內(nèi)存 實(shí)現(xiàn)層 共享內(nèi)存層的主要功能是 實(shí)現(xiàn) MPCI 層的包交換機(jī)制以及機(jī)間通信中斷機(jī)制 [39]。下面首先 給出 共享內(nèi)存層的組織結(jié)構(gòu), 在此基礎(chǔ)上深入探討 MPCI 層的包交換機(jī)制以及機(jī)間通信中斷機(jī)制。 ( 1)共享內(nèi)存層的組織結(jié)構(gòu) 共享內(nèi)存層的組織結(jié)構(gòu)如圖 所示。 哈爾濱工程大學(xué)碩士學(xué)位論文 20 N o d e 1N o d e 20 ( f r e e E c b q u e u e )S h m _ N o d e _ s t a t u s e sS h m _ L o c k e d _ q u e u e sB a s e12..M a x N o d e sI n d e x 0I n d e x 1..M a x E c bS h m _ E n v e l o p e sB a s e + l e n g t h頭 指 針尾 指 針 結(jié) 點(diǎn) 狀 態(tài) 控 制 塊 通 信 隊(duì) 列 控 制 塊 E n v e l o p e s 控 制 塊 圖 共享存儲(chǔ)區(qū)組織結(jié)構(gòu) 共包括三個(gè)域 [40]:節(jié)點(diǎn)狀態(tài)控制塊,通信隊(duì)列控制塊和 Envelope 控制塊。 ? 節(jié)點(diǎn)狀態(tài)控制塊 節(jié)點(diǎn)狀態(tài)控制塊主要記錄各節(jié)點(diǎn)的狀態(tài)信息,方便操作系統(tǒng)掌握各節(jié)點(diǎn)的狀態(tài)信息,利于管理。其中狀態(tài)信息主要包括節(jié)點(diǎn)的運(yùn)行狀態(tài)(未覺,準(zhǔn)備好,活躍),中斷值,中斷入口地址和錯(cuò)誤碼。 ? 通信隊(duì)列控制塊 第二個(gè)區(qū)域?qū)儆谕ㄐ抨?duì)列控制塊區(qū)域。為了實(shí)現(xiàn)各節(jié)點(diǎn)之間的通 信,系統(tǒng)為每個(gè)節(jié)點(diǎn)分配了一個(gè)隊(duì)列,記錄從其余節(jié)點(diǎn)發(fā)過來的信息包 [41]。 如果系統(tǒng)中有 n 個(gè)節(jié)點(diǎn),則共享內(nèi)存中存在 n+1 個(gè)隊(duì)列。如本例中共有 2 個(gè)節(jié)點(diǎn),該區(qū)域內(nèi)實(shí)現(xiàn)了 3 個(gè)隊(duì)列,其中隊(duì)列 0 用于管理空閑的 envelope 包。為了便于隊(duì)列的管理,在第二個(gè)區(qū)域中存儲(chǔ)每個(gè)隊(duì)列的控制塊。 ? 交換區(qū) 共享內(nèi)存的第三個(gè)區(qū)域保存所有的包,包結(jié)構(gòu)中保存通信內(nèi)容和所屬隊(duì)列等信息。 ( 2)多處理器間中斷機(jī)制 在分析完共享內(nèi)存層對 MPCI 接口層的支持后,開始探討如何實(shí)現(xiàn)多處理器間的通信觸發(fā)機(jī)制,即當(dāng)有遠(yuǎn)程請求到達(dá)目的節(jié)點(diǎn)的消息隊(duì)列后,采用什么樣的機(jī)制通知節(jié)點(diǎn),以啟動(dòng) MS(遠(yuǎn)程通信服務(wù)器),執(zhí)行相應(yīng)的處理。通信觸發(fā)機(jī)制有兩種:軟件輪訓(xùn)方式第 3 章 基于 SMP 方式的 RTEMS 多核化實(shí)現(xiàn)機(jī)制 21 和中斷方式 [42]。由于采用輪訓(xùn)方式 CPU 利用率比較低,所以主要研究通過采用中斷方式完成 MS 的啟動(dòng)工作。中斷流程已在 節(jié)進(jìn)行了分析。 為了確定 系統(tǒng)中 MS 服務(wù)器的啟動(dòng)時(shí)機(jī) ,在每個(gè)節(jié)點(diǎn)中設(shè)置 信號(hào) 變 量MPCI_semaphore[43]。在系統(tǒng)啟動(dòng)建立 MS 服務(wù)器時(shí),該信號(hào)量同時(shí)被定義,并初始化為 0。開始 MS 阻塞在 MPCI_semaphore 信號(hào)量上,直到該節(jié)點(diǎn)對應(yīng)的消息隊(duì)列中有遠(yuǎn)程請求到達(dá)時(shí),通過中斷處理函數(shù)將信號(hào)量值加 1。 MS 服務(wù)器捕獲到信號(hào)量的增加,從阻塞隊(duì)列中喚醒,進(jìn)入就緒隊(duì)列,等待系統(tǒng)的調(diào)度。 MS 獲得 CPU 使用權(quán)后,根據(jù)請求類型,執(zhí)行相應(yīng)的處理工作,同時(shí)對信號(hào)量執(zhí)行減 1 操作。該流程一直循環(huán)執(zhí)行,直到信號(hào)量值為 0 時(shí), MS 服務(wù)器重新被阻塞。 多處理器間的通信中斷觸發(fā)機(jī)制流程圖如圖 所示: 中 斷 處 理 程 序 Y_ M P C I _ S e m a p h o r e等 候 隊(duì) 列 是 否 為 空_ M P C I _ S e m a p h o r e + 1調(diào) 用 函 數(shù)_ T h r e a d _ q u e u e _ D e q u e u e啟 動(dòng) M S 服 務(wù) 器 _ M P C I _