1. gzyueqian
      18078865874
      首頁 > 新聞中心 > > 正文

      VxWorks中主備數據一致性功能組件的設計與實現

      更新時間: 2007-07-25 13:22:15來源: 粵嵌教育瀏覽量:771

        摘 要:數據一致性是主備用系統必須解決的問題。目前主備系統的一致性都采用手工編程來實現,導致代碼結構繁雜,且效率不高。利用VxWorks的異常處理機制,結合RISC CPU的特性,設計實現了一個數據一致性功能組件。這個組件可使數據的一致性處理自動化。

        關鍵字:數據一致性;異常處理;精簡指令集計算機

        1 引言

        在電信、電力、國防等應用領域中,其所用設備必須確保有極高的可靠性。為了達到此目的,很多設備都采用主備用結構,當主用設備發生故障時,備用設備可馬上接替主用工作,這就要求主用與備用數據要保持高度的一致性。vxWorks是在電信、電力、國防等應用領域中廣泛使用的實時操作系統,它提供全開放的尋址空間,多任務內核(wind),基于優先級進行任務調度,具有快的上下文切換和低的中斷等待特點。但考察目前運行的基于vxWorks的系統,在實現主備用數據一致性方面,還沒有一個優雅高效的方法。作者在開發國家863計劃項目—“中國第三代移動通信系統”CDMA2000系統集成項目過程中,研究開發了一個主備數據一致性功能組件(下簡稱一致性組件),可實現主備設備間內存數據的自動同步。一致性組件結合MOTOROLA  PowerPC 系列RISC CPU的特點,并利用vxWorks操作系統的異常處理機制,使得主備數據的一致性操作自動化。

        2 目前主備用系統的一致性解決方案及其不足

        在目前的主備用系統中,為了保證主備之間數據一致性,代碼多呈如下樣式。

        主用:

        L1:修改數據
        L2:將更新數據發送到備用
              …
              L1:修改數據
              L2:將更新數據發送到備用

        備用:
        獲取主用數據并進行數據同步
        在上面的流程中,主用的L1語句是具體的業務邏輯處理代碼,有可能觸發數據更新操作(如賦值語句)。頻繁的在業務邏輯處理中加入L2語句(為實現一致性功能),導致整個代碼顯得凌亂,可讀性不高;又因為主備系統常用于實時環境中,還經常需要獲取更新數據的數值及其在物理內存中的位置(用于日志登記或標記更新頁面),而這些煩瑣的底層操作極易產生錯誤。所以,非常需要一種簡便高效的方法,可以將L2語句從L1語句間剝離出來,使程序員專注于業務邏輯的處理,同時也使程序代碼清晰化。一致性組件解決了以上問題。


       
      圖一:主用端程序模塊組成

        3 一致性組件的整體結構設計

        為了實現數據一致性操作的自動化,一致性組件由以下幾個功能模塊組成:

        1) 初始化模塊。用來啟動組件功能,只在主用設備上運行。
        2) 寫操作監視功能模塊。主要用來發現數據的更新操作,只在主用設備上運行。
        3) 更新數據截取模塊。主要用來提取更新數據,只在主用設備上運行。
        4) 數據同步任務模塊。用來進行主備用數據間的一致性同步,主備設備都要運行。

        當加載一致性組件后,完整的主用端程序構成如圖一所示。

        在圖一中,主程序模塊中的I1,I2,In是L1語句在內存中的匯編語言表示形式。數據段中的D1,D2,Dn是可能要被修改的數據。
          
        以下是一致性組件各功能模塊的任務劃分

        3.1 初始化模塊
         
        在計算機內存中,數據和代碼是分別存儲的。為了實現寫操作的自動發現功能,在初始化模塊中,將要需維護數據一致的內存數據區設置為不可寫狀態。這樣每當CPU對該數據區進行寫操作時,將觸發DSI (Data Storage Interrupt) 異常,CPU自動轉到DSI異常處理程序進行異常處理。

        3.2 寫操作監視功能模塊
         
        本模塊功能由DSI異常處理程序來完成。每當CPU產生一異常時,vxWorks都自動將當前程序的上下文信息保存起來,以便異常處理程序處理完異常情況后,返回原程序引發異常的指令處,繼續向下執行。vxWorks中提供默認的異常處理程序,多是顯示一些異常信息,并終止原程序的執行。但用戶也可以編寫自己的異常處理程序,并用其替代系統默認的異常處理程序。新的DSI異常處理程序通過以下一些操作,實現了對被更新數據的定位。
         
        1) 獲取引發異常的當前代碼段指令地址(記為I1)。

        2) 對于將要被改寫的數據,獲取其地址(記為D1)。
           
        3) 設置此內存數據段為可寫狀態。
         
        4) 在圖一中I2(I2=I1+4,因為在POWERPC RISC CPU中,每條指令長度都為4Byte長 )指令處設置指令地址斷點(Instruction Address Breakpoint)。

        3.3 更新數據截取模塊
         
        DSI異常處理程序執行完成后,將返回原程序并繼續向下執行。因當前數據區可寫,D1處的內存數據被更新,并接著執行圖一中所示的下一條指令I2。因I2處設置了指令地址斷點,所以觸發IAB(Instruction Address Breakpoint) 異常, CPU轉而執行IAB異常處理程序。IAB異常處理程序主要用來提取更新數據,完成的功能如下。
         
        1) 根據數據地址D1,讀取4Byte (數據總線寬度為32位)的更新數據。
         
        2) 將更新數據寫入發送緩沖區。
         
        3) 再次將數據區設置回不可寫狀態。
         
        4) 刪除I2指令處的指令地址斷點。

        3.4 數據同步任務模塊
         
        數據同步任務模塊用來實現主備用數據之間的一致性,由不同于主程序任務的另一單獨的任務來完成。因為在更新數據截取模塊中已將更新數據保存在發送緩沖區中,數據同步任務模塊的實現比較簡單。在主用端,數據同步任務將發送緩沖區的更新數據發送到備用端的接收緩沖區;在備用端,數據同步任務從接收緩沖區提取更新數據并進行數據一致性更新。
           
        寫操作監視功能模塊和更新數據截取模塊均在內核態運行,采用匯編語言實現,并通過代碼優化,運行效率很高,有效彌補了用戶態和內核態間切換的開銷。

        4 總結

        一致性組件自動實現主備用數據之間的一致性操作,可廣泛應用于各種主備用設備中。使用一致性組件,只需在程序開始對組件進行初始化,并啟動數據同步任務即可。它使程序員不必考慮數據一致性問題,而把精力集中于具體的業務邏輯處理,從而提高了效率,并使代碼更簡潔。該組件已經用于國家863計劃項目—“中國第三代移動通信系統”CDMA2000系統集成中,產生了很好的效果;本項目已通過驗收并正在進行產業化。本組件設計中綜合利用了RISC CPU的結構特點和vxWorks的異常處理技術,希望通過本文,對廣大vxWorks用戶的工作有所幫助。

        參考文獻:

        [1] Wind River.VxWorks Programmer"s Guide.Wind River Systems Inc,1998
        [2] Motorola.MPC860 PowerQUICC User’s Manual. Motorola, 1998
        [3] Motorola. PowerPC™ 604e RISC Microprocessor User"s Manual. Motorola, 1998
        [4] Motorola. PowerPC™ Microprocessor Family: The Programming Environments For 32-Bit Microprocessors. Motorola, 1997

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲美女性爱视频在线观看 | 久久久理论片免费观看 | 一本久久a久久免费精品网站 | 日本狂喷奶水在线播放114 | 日本乱中文字幕系列在线观看 | 亚洲欧美高清在线精品二区 |