虛擬中斷方法及裝置的製作方法
2023-12-02 08:07:56
專利名稱:虛擬中斷方法及裝置的製作方法
技術領域:
本發明涉及中斷技術,特別涉及可用於作業系統(OS)間通訊的一種虛擬中斷方
法及裝置。
背景技術:
現有技術中存在至少兩個OS承載於例如ARM、或8086處理器等同一硬體的情況, 這種情況通常會需要兩個OS之間的通訊。然而,現有技術中並未提供可供兩個OS之間通 訊的有效方法。
發明內容
有鑑於此,本發明提供了 一種虛擬中斷方法及裝置,能夠實現OS間的通訊。本發明提供的一種虛擬中斷方法,該虛擬中斷方法在硬體層與第一 OS和第二 OS 所在的軟體層之間的虛擬層執行如下步驟步驟a、在第一 OS將需要傳遞給第二 OS的數據寫入至對應的Buffer中、並發起中 斷請求之後,進行環境切換;步驟b、將當前執行態切換為中斷模式;步驟C、虛擬出真實硬體中斷的現場;步驟d、將第一 OS的中斷請求調度至第二 0S,使第二 OS可按照處理真實中斷的方 式處理所述Buffer中的數據。優選地,步驟a所述的環境切換包括步驟al、保存當前執行態的CPSR ;步驟a2、保存當前執行態的中斷返回地址。優選地,步驟b在切換中斷模式的同時進一步關閉中斷。優選地,步驟c所述的虛擬出真實硬體中斷的現場包括步驟Cl、依據步驟al所保存的前一個執行態的CPSR,將當前執行態下的SPSRjrq 設置為前一個執行態;步驟c2、依據步驟a2所保存的前一個執行態的中斷返回地址設置當前執行態下 的中斷返回地址;步驟c3、設置程序計數PC寄存器到中斷向量表入口。優選地,步驟c2之後、步驟c3之前進一步設置0S2用於標識虛擬中斷的虛擬原因
寄存器。優選地,步驟d所述將第一 OS的中斷請求調度至第二 OS包括根據中斷向量表中 預存的0S2中斷處理入口跳轉。本發明提供的一種虛擬中斷裝置,包括第一中斷處理模塊,其位於第一 0S,用於將需要傳遞給第二 OS的數據寫入至第一 OS與第二 OS之間的對應Buffer中、並發起中斷請求;
中斷控制模塊,其位於硬體層與第一 OS和第二 OS所在的軟體層之間的虛擬層,用 於在第一中斷處理模塊發起中斷請求之後先進行環境切換、再將當前執行態切換為中斷模 式,然後虛擬出真實硬體中斷的現場後將所述中斷請求調度至第二 OS ;第二中斷處理模塊,其位於第二 0S,用於在所述中斷請求調度至第二 OS之後,按 照處理真實中斷的方式處理所述Buffer中的數據。優選地,所述中斷控制模塊通過保存當前執行態的CPSR和中斷返回地址實現所 述環境切換。優選地,所述中斷控制模塊在切換中斷模式的同時進一步關閉中斷。優選地,所述中斷控制模塊依據其所保存的前一個執行態的CPSR將當前執行態 下的SPSR_irq設置為前一個執行、依據其保存的前一個執行態的中斷返回地址設置當前 執行態下的中斷返回地址、以及設置程序計數PC寄存器到中斷向量表入口,用以虛擬出真 實硬體中斷的現場。優選地,所述中斷控制模塊在設置當前執行態下的中斷返回地址之後、設置PC寄 存器之前進一步設置0S2用於標識虛擬中斷的虛擬原因寄存器。優選地,所述中斷控制模塊根據中斷向量表中預存的0S2中斷處理入口跳轉,用 以實現將第一 OS的中斷請求調度至第二 OS。由上述技術方案可見,本發明在第一 OS需要與第二 OS通訊時,可以由第一 OS發 起中斷請求,然後由硬體層與第一 OS和第二 OS所在的軟體層之間的虛擬層依據發起的中 斷請求進行環境切換、以及將當前執行態切換為中斷模式,並在虛擬出出真實硬體中斷的 現場之後將中斷請求調度至第二 0S,從而能夠使第二 OS可按照處理真實中斷的方式處理 來自第一 OS的數據,進而以中斷方式實現第一 OS與第二 OS之間的通訊。
圖1為本發明實施例中虛擬中斷方法所基於的系統架構示意圖;圖2為如圖1所示系統架構的一具體實現結構的示意圖;圖3為本發明實施例中虛擬中斷方法的一具體實現流程的示意圖。
具體實施例方式為使本發明的目的、技術方案及優點更加清楚明白,以下參照附圖並舉實施例,對 本發明進一步詳細說明。如圖1所示,以同時存在OSl和0S2這兩個OS為例,本實施例在OSl和0S2所在 的軟體層與硬體層之間增設了一虛擬層(SVL),用來統一管理圖1示出的系統架構所基於 的所有硬體層資源、以及OSl和0S2所在的所有軟體層資源。OSl和0S2均不直接訪問硬體 層,而是通過SVL模擬出的虛擬設備間接地訪問硬體層,即,SVL能夠將OSl和0S2中任一 個的請求和命令轉換為與虛擬設備的虛擬物理環境相應的請求和命令,從而,OSl和0S2之 間的通訊可以藉助SVL進行。具體至本實施例,OSl和0S2之間藉助SVL的通訊採用虛擬中斷的方式,當OSl和 0S2中的任意一個準備好數據、並需要通知另一個之後,可調用SVL提供的虛擬中斷入口函 數發起虛擬中斷,然後將控制權交給SVL,由SVL作為調度核心負責實現中斷的調度,以使上述準備好的數據交由OSl和0S2中的另一個按照與處理真實中斷相同的方式進行處理。也就是說,OSl和0S2中的每一個OS均可以將另一個OS看作是一個與真實硬體 中斷無區別的虛擬中斷,相應地,即可與真實硬體中斷一樣地為虛擬中斷分配唯一的標識 號、並根據實際需要配置中斷優先級;而且,在任意一個給定的時間點,只能是0S1、0S2、以 及SVL中的其中一個在運行。以硬體層由ARM實現為例,本實施例中的一種更為具體的實現方式如圖2所示OSl和0S2之間分別設置有用於OSl向0S2傳遞數據的Bufferl2、以及用於0S2 向OSl傳遞數據的Buffer21,當OSl和0S2中的任意一個準備好數據、並需要通知另一個之 後,其可將準備好的數據存放於對應的Buffer 12或Buffer21中;OSl和0S2中的每一個OS分別包括一個中斷處理模塊,其可調用SVL提供的虛擬 中斷入口函數發起虛擬中斷,以及,可按照與處理真實中斷相同的方式處理SVL分發的虛 擬中斷;OSl和0S2中的每一個OS分別包括一個中斷向量表,以便於該OS中的中斷處理模 塊可按照與處理真實中斷相同的方式處理虛擬中斷;OS1和0S2中的每一個OS還分別包括一個可供中斷處理模塊查詢的虛擬原因寄存 器,用於標誌虛擬中斷的發生;SVL中還包括中斷控制模塊,用於執行虛擬中斷的相關操作;SVL中包含有系統統一的中斷向量表,以便於中斷控制模塊執行中斷分發,該中斷 向量表至少包含中斷標識號、以及與其對應的flag區,將該flag區置位即可表明對應的中 斷處於就緒狀態。基於如圖2所示的系統架構的實現方式,以OSl向0S2傳遞數據為例,本實施例中 的虛擬中斷方法可包括如下過程1)、0S1將需要傳遞給0S2的數據寫入至對應的Buffer、即圖2中示出的Bufferl2 中。本步驟可以由OSl中的中斷處理模塊來執行。2)、OSl發送中斷請求。本步驟中,可以由OSl中的中斷處理模塊通過調用中斷入口函數的方式來發起虛 擬中斷。3)、SVL保存OSl在當前執行態svc的當前程序狀態寄存器(CPSR)。本步驟可以由代碼「mrs r0,cpsr」的操作過程來實現,並可由SVL中的中斷控制 模塊來執行。其中,rO為預先設置的一寄存器。4)、SVL保存當前執行態svc下的寄存器lr_svc中的中斷返回地址。本步驟可以由代碼「mov rl,Ir」的操作過程來實現,並可由SVL中的中斷控制模 塊來執行。其中,rl為預先設置的另一寄存器。上述步驟3) 4)為環境切換(Context Switch)過程。5)、SVL將0S1、0S2、以及SVL的狀態由管理模式(svc)切換到中斷狀態(irq),同 時,SVL還關閉中斷,即,重新開啟中斷之前不會響應任何中斷請求,以確保原子性。
本步驟可以由代碼「mov r2, # (I_BIT | F_BIT | IRQ_M0DE) 」的操作過程、以及代碼 "msr cpsr_c, r2」的操作過程來實現,並可由SVL中的中斷控制模塊來執行。其中,r2為預先設置的又一寄存器;IRQ_M0DE表示irq,將r2置位「I_BIT」以及 「F_BIT」即表示關閉中斷;cpsr_c為CPSR表示當前執行態的控制位域,由於r2已被設置為 irq,因而利用r2修改cpsr_c即可將cpsr_c由svc修改為irq。6)、SVL將當前執行態下irq的備份程序狀態寄存器(SPSR_irq)設置為前一個執 行態SVCo本步驟可以由代碼「msr spsr_c, rO」的操作過程來實現,並可由SVL中的中斷控 制模塊來執行。其中,spsr_c為SPSRjrq表示當前執行態的控制位域,由於rO已在步驟3)保存 了 SVC下的CPSR、且當前執行態已由SVC變為irq,因而本步驟利用rO修改spsr_C即可將 spsr_c從當前執行態irq修改為前一個執行態svc。7)、SVL設置當前執行態irq下的寄存器lr_irq中的中斷返回地址。本步驟可以由代碼「mov Ir,rl」的操作過程來實現,並可由SVL中的中斷控制模 塊來執行。本步驟所在的當前執行態已由svc變為irq,本步驟中的寄存器Ir也就相應地變 為lr_irq,從而,前一個執行態svc下的寄存器lr_svc中保存的中斷返回地址也就無法在 當前執行態irq下獲得,但由於步驟4)中已將lr_SVC中保存的中斷返回地址保存於寄存 器rl,因而本步驟中利用寄存器rl中的中斷返回地址在寄存器lr_irq中設置中斷返回地址。8)、SVL設置0S2的虛擬原因寄存器。本步驟可由SVL中的中斷控制模塊來執行。9)、SVL設置程序計數(PC)寄存器到中斷向量表入口。本步驟可以由代碼「mov pc, #0x18」的操作過程來實現,,並可由SVL中的中斷控 制模塊來執行。其中,0xl8(低端向量表為0x18,高段向量表為0xFFFF0018)為ARM標準下的系統 統一的中斷向量表的標準位置,當然,OSl和0S2也分別具有各自的中斷向量表地址,但這 兩個地址不固定、可通過函數掛接到SVL的中斷控制模塊所執行的程序。由於發生真實的硬體中斷時,硬體會將svc態的CPSR保存在SPSRjrq中、將中斷 返回地址保存到lr_irq中,還會將PC寄存器設置為0x18,因此,上述步驟6)、7)、以及9) 即相當於虛擬出真實硬體中斷現場的處理過程。而步驟8)則為可選的步驟,以供0S2能夠 獲知當前的中斷並非真實硬體中斷。10)、SVL根據中斷向量表中預存的0S2中斷處理入口跳轉。本步驟可由SVL中的中斷控制模塊來執行。11)、0S2查詢其虛擬原因寄存器。本步驟在查詢虛擬原因寄存器之後,可將虛擬原因寄存器的標誌位清除。12)、0S2從對應的Buffer、即圖2中示出的Bufferl2中讀取OSl寫入的數據。13)、0S2處理讀取的數據。上述步驟11) 13)可以由0S2中的中斷處理模塊來執行。
14)、SVL依據設置的中斷返回地址執行中斷返回、並開啟中斷。本步驟可由SVL中的中斷控制模塊來執行。至此,從OSl到0S2的一次OS間通訊過程結束。實際應用中,0S2還可以按照與上述流程中OSl相同的處理方式,利用對應的 Buffer21向OSl返回處理後的數據、或者其它需要發送給OSl的數據,SVL則執行反向的 調度,再由OSl按照與上述流程中0S2相同的處理方式利用對應的Buffer21接收數據並處理。當然,本實施例僅僅是以OSl、0S2這兩個OS為例,對於包含有多於兩個OS的系 統,任意兩個OS之間均可以按照上述流程實現通訊;此外,除了 ARM之外,基於例如8086處 理器等其它硬體層也可實現本實施例中的上述方案。以上所述僅為本發明的較佳實施例而已,並非用於限定本發明的保護範圍。凡在 本發明的精神和原則之內,所作的任何修改、等同替換以及改進等,均應包含在本發明的保 護範圍之內。
權利要求
一種虛擬中斷方法,其特徵在於,該虛擬中斷方法在硬體層與第一OS和第二OS所在的軟體層之間的虛擬層執行如下步驟步驟a、在第一OS將需要傳遞給第二OS的數據寫入至對應的Buffer中、並發起中斷請求之後,進行環境切換;步驟b、將當前執行態切換為中斷模式;步驟c、虛擬出真實硬體中斷的現場;步驟d、將第一OS的中斷請求調度至第二OS,使第二OS可按照處理真實中斷的方式處理所述Buffer中的數據。
2.如權利要求1所述的虛擬中斷方法,其特徵在於,步驟a所述的環境切換包括 步驟al、保存當前執行態的CPSR ;步驟a2、保存當前執行態的中斷返回地址。
3.如權利要求1或2所述的虛擬中斷方法,其特徵在於,步驟b在切換中斷模式的同時 進一步關閉中斷。
4.如權利要求2所述的虛擬中斷方法,其特徵在於,步驟c所述的虛擬出真實硬體中斷 的現場包括步驟Cl、依據步驟al所保存的前一個執行態的CPSR,將當前執行態下的SPSRjrq設 置為前一個執行態;步驟c2、依據步驟a2所保存的前一個執行態的中斷返回地址設置當前執行態下的中 斷返回地址;步驟c3、設置程序計數PC寄存器到中斷向量表入口。
5.如權利要求4所述的虛擬中斷方法,其特徵在於,步驟c2之後、步驟c3之前進一步 設置0S2用於標識虛擬中斷的虛擬原因寄存器。
6.如權利要求4所述的虛擬中斷方法,其特徵在於,步驟d所述將第一OS的中斷請求 調度至第二 OS包括根據中斷向量表中預存的0S2中斷處理入口跳轉。
7.一種虛擬中斷裝置,其特徵在於,包括第一中斷處理模塊,其位於第一 0S,用於將需要傳遞給第二 OS的數據寫入至第一 OS與 第二 OS之間的對應Buffer中、並發起中斷請求;中斷控制模塊,其位於硬體層與第一 OS和第二 OS所在的軟體層之間的虛擬層,用於在 第一中斷處理模塊發起中斷請求之後先進行環境切換、再將當前執行態切換為中斷模式, 然後虛擬出真實硬體中斷的現場後將所述中斷請求調度至第二 OS ;第二中斷處理模塊,其位於第二 0S,用於在所述中斷請求調度至第二 OS之後,按照處 理真實中斷的方式處理所述Buffer中的數據。
8.如權利要求7所述的虛擬中斷裝置,其特徵在於,所述中斷控制模塊通過保存當前 執行態的CPSR和中斷返回地址實現所述環境切換。
9.如權利要求7或8所述的虛擬中斷裝置,其特徵在於,所述中斷控制模塊在切換中斷 模式的同時進一步關閉中斷。
10.如權利要求8所述的虛擬中斷方法,其特徵在於,所述中斷控制模塊依據其所保存 的前一個執行態的CPSR將當前執行態下的SPSRjrq設置為前一個執行、依據其保存的前 一個執行態的中斷返回地址設置當前執行態下的中斷返回地址、以及設置程序計數PC寄存器到中斷向量表入口,用以虛擬出真實硬體中斷的現場。
11.如權利要求10所述的虛擬中斷方法,其特徵在於,所述中斷控制模塊在設置當前 執行態下的中斷返回地址之後、設置PC寄存器之前進一步設置0S2用於標識虛擬中斷的虛 擬原因寄存器。
12.如權利要求10所述的虛擬中斷方法,其特徵在於,所述中斷控制模塊根據中斷向 量表中預存的0S2中斷處理入口跳轉,用以實現將第一 OS的中斷請求調度至第二 OS。
全文摘要
本發明公開了一種虛擬中斷方法及裝置。本發明在第一OS需要與第二OS通訊時,可以由第一OS發起中斷請求,然後由硬體層與第一OS和第二OS所在的軟體層之間的虛擬層依據發起的中斷請求進行環境切換、以及將當前執行態切換為中斷模式,並在虛擬出出真實硬體中斷的現場之後將中斷請求調度至第二OS,從而能夠使第二OS可按照處理真實中斷的方式處理來自第一OS的數據,進而以中斷方式實現第一OS與第二OS之間的通訊。
文檔編號G06F9/455GK101944044SQ20101029898
公開日2011年1月12日 申請日期2010年9月28日 優先權日2010年9月28日
發明者崔寧, 楊興華, 王泰運, 陳立勤, 齊蘭柱 申請人:凌陽科技股份有限公司;北京北陽電子技術有限公司