基于Linux共享內存實現家庭網關數據通信的系統及方法
【專利摘要】本發明公開了一種基于Linux共享內存實現家庭網關數據通信的系統及方法,涉及Linux數據通信【技術領域】。系統包括共享內存互斥訪問單元、讀共享內存數據單元、寫共享內存數據單元和數據同步單元;共享內存互斥訪問單元包括順次連接的臨界區互斥初始化子單元、臨界區權限獲取子單元和死鎖重建子單元,臨界區權限獲取子單元與讀共享內存數據單元、寫共享內存數據單元連接;數據同步單元包括信號安裝子單元、信號監聽子單元和信號發送子單元,寫共享內存數據單元與信號安裝子單元連接,信號安裝子單元與信號監聽子單元、信號發送子單元連接。本發明能夠保證家庭網關系統多進程之間業務配置數據安全,高效的進行共享訪問,便于人們使用。
【專利說明】基于Linux共享內存實現家庭網關數據通信的系統及方法
【技術領域】
[0001]本發明涉及Linux數據通信【技術領域】,具體涉及一種基于Linux共享內存實現家庭網關數據通信的系統及方法。
【背景技術】
[0002]家庭網關能夠借助現有的計算機網絡技術,將家庭內各種家電和設備連網,通過網絡為人們提供各種多樣化的服務。隨著網絡技術的發展,家庭網關已逐漸應用于普通家庭;隨著時代的進步,家庭網關將代替Modem (調制解調器)和路由器,成為主流的家庭網絡接入設備。家庭網關的上行方式主要支持:ADSL(Asymmetric Digital Subscriber Line,非對稱數字用戶線路)上行、LAN(Local Area Network,局域網)上行、P0N(Passive OpticalNetwork,無源光纖網絡)上行。業務數據主要包括:Internet (互聯網)、VoIP (Voice overInternet Protocol,網絡協議電話)和 IPTV (Internet Protocol TV,網絡協議電視)等。
[0003]目前,家庭網關一般遵循TR069規范中對數據模型的定義要求,該數據模型具有良好的可管理性,不僅能夠靈活適應于各種上行方式,而且能夠給用戶提供多種業務能力,有利于網絡服務商進行統一的部署和管理。
[0004]家庭網關的可管理性需求,使得家庭網關的業務需要根據運營商下發的配置數據要求生效;因為運營商對家庭網關的數據進行統一配置管理,所以家庭網關配置數據在配置管理模塊和業務模塊之間,需要一種實現配置數據在不同應用模塊之間共享的通信方法,以實現家庭網關業務根據運營商的要求生效的目的。
[0005]目前,家庭網關系統一般基于Linux(—種自由和開放源碼的類Unix操作系統)系統進行開發,繼承Linux系統資源,Linux系統進程之間的通信方式一般為:配置文件共享通信方式、IPC (Inter-Process Communication,進程間通信)消息隊列通信方式和本地Socket (BSD UNIX的進程通信機制插座)通信方式,以上通信方式在使用時分別存在以下缺陷:
[0006]使用配置文件共享通信方式時,由于配置文件被多個程序訪問,因此配置文件可能同時被兩個程序進行讀寫操作,進而使得配置文件重入,造成配置信息丟失,不僅安全存在一定的隱患,而且與內存操作相比,配置文件的I/o (input/output,輸入輸出端口)操作效率較低。
[0007]使用IPC消息隊列通信方式時,IPC消息隊列僅能支持小數據量的通信,在多進程進行大量數據通信的過程中使用IPC消息隊列,會使得數據收發順序控制不當,進而引起消息亂序,生成錯誤的數據,導致IPC運行可能發生偏差,得不到預期的結果。
[0008]使用本地Socket通信方式時,由于Socket僅支持二進制流通信,因此本地Socket對數據的打包和解包的過程比較復雜,其工作效率較低,不便于人們使用。
【發明內容】
[0009]針對現有技術中存在的缺陷,本發明的目的在于提供一種基于Linux共享內存實現家庭網關數據通信的系統及方法,不僅能夠保證家庭網關系統多進程之間業務配置數據安全,而且能夠高效的進行共享訪問,便于人們使用。
[0010]為達到以上目的,本發明采取的技術方案是:1、一種基于Linux共享內存實現家庭網關數據通信的系統,其特征在于:包括共享內存互斥訪問單元、讀共享內存數據單元、寫共享內存數據單元和數據更新同步通知單元;
[0011]共享內存互斥訪問單元包括順次連接的臨界區互斥初始化子單元、臨界區權限獲取子單元和死鎖重建子單元,死鎖重建子單元與臨界區互斥初始化子單元連接,臨界區權限獲取子單元分別與讀共享內存數據單元、寫共享內存數據單元連接;
[0012]數據更新同步通知單元包括信號安裝子單元、信號監聽子單元和信號發送子單元,寫共享內存數據單元與信號安裝子單元連接,信號安裝子單元分別與信號監聽子單元、信號發送子單元連接;
[0013]臨界區互斥初始化子單元,用于:預設業務數據,獲取與業務數據對應的互斥信號量名稱,發送初始化信號;接收初始化信號后,調用Linux系統函數;根據互斥信號量名稱,通過Linux系統函數初始化互斥信號量,生成Linux系統函數的返回值;判定Linux系統函數的返回值為0,Linux內核將互斥信號量資源儲存至信號量存儲區,向臨界區權限獲取子單元發送權限獲取信號;
[0014]臨界區權限獲取子單元,用于:接收臨界區互斥初始化子單元發送的權限獲取信號后,預設獲取互斥信號量的等待時間,預設獲取互斥信號量的訪問次數;預設Linux內核信號量資源訪問函數調用失敗的錯誤碼,錯誤碼內包括存在調用超時EHMED0UT信息;
[0015]在信號量存儲區中,通過Linux內核信號量資源訪問函數,獲取互斥信號量資源,生成Linux內核信號量資源訪問函數的返回值;判斷Linux內核信號量資源訪問函數的返回值是否為0,
[0016]若是,調用Linux系統函數,操作互斥信號量資源鎖定共享內存數據存儲臨界區,生成Linux系統函數調用返回值;判定Linux系統函數調用返回值為0,通過共享內存數據讀寫單元接口,對共享內存數據存儲臨界區進行業務數據操作;釋放共享內存數據存儲臨界區的操作權限;
[0017]否則判定錯誤碼是否為EHMED0UT信息,判斷獲取互斥信號量資源的獲取次數是否大于訪問次數,若是,向死鎖重建子單元發送死鎖重建信號,否則將訪問次數加1,重新獲取信號量資源;
[0018]死鎖重建子單元,用于:接收臨界區權限獲取子單元發送的死鎖重建子單元發送死鎖重建信號后,刪除共享內存數據存儲臨界區原有的控制信號量,生成刪除結果;
[0019]讀共享內存數據單元,用于:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為0,若是,從共享內存數據存儲臨界區中讀取所需的業務數據,釋放共享內存數據存儲臨界區的操作權限;否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息;
[0020]寫共享內存數據單元,用于:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為0,若是,在共享內存數據存儲臨界區中寫入配置業務數據,釋放共享內存數據存儲臨界區的操作權限,通過調用信號發送單元提供的函數發送信號通知業務數據對應的業務功能模塊,否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息;
[0021]信號安裝子單元,用于:調用Linux系統函數初始化Linux信號,安裝Linux信號接收處理程序,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為0,若是,定義Linux信號接收處理程序安裝成功,否則獲取并記錄Linux信號接收處理程序安裝失敗的息;
[0022]信號監聽子單元,用于:預設Linux信號接收的監聽時間,預設Linux信號監聽的超時時間,倉Il建Linux信號監聽線程,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為0,若不是,獲取并記錄Linux信號監聽線程創建失敗信息,否則在監聽時間內循環監聽Linux信號;
[0023]判斷信號到達全局標識是否為非0,若是,將信號到達全局標識加1,否則在超時時間內,判斷信號到達全局標識是否為非0,若不是,繼續在監聽時間內循環監聽Linux信號,否則從內存數據存儲臨界區內讀取業務數據、并發送至相應的業務模塊,將信號到達全局標識置為0,繼續在監聽時間內循環監聽Linux信號;
[0024]信號發送子單元,用于:收到外部調用接口發送的Linux系統命令后,根據與Linux系統命令對應的目標進程名稱獲取信號發送目標進程號,生成Linux系統函數的返回值;判定Linux系統函數的返回值為0,向目標進程發送Linux信號。
[0025]在上述技術方案的基礎上,所述臨界區互斥初始化子單元中的所述業務數據包括互聯網Internet業務數據、網絡協議電話VoIP業務數據和網絡協議電視IPTV業務數據。
[0026]在上述技術方案的基礎上,所述臨界區權限獲取子單元中的所述等待時間為800~1200毫秒;所述訪問次數為3~5次。
[0027]在上述技術方案的基礎上,所述臨界區權限獲取子單元中的所述業務數據操作包括:在共享內存數據存儲臨界區中寫入業務數據、在共享內存數據存儲臨界區中讀取業務數據。
[0028]在上述技術方案的基礎上,所述信號監聽子單元中的所述發送時間為2~3秒,所述超時時間為2~5秒。
[0029]一種應用于上述系統的基于Linux共享內存實現家庭網關數據通信的方法,包括以下步驟:
[0030]S1:預設業務數據,獲取與業務數據對應的互斥信號量名稱,發送初始化信號;調用Linux系統函數;根據互斥信號量名稱,通過Linux系統函數初始化互斥信號量,生成Linux系統函數的返回值;判定Linux系統函數的返回值為0,將互斥信號量資源儲存至信號量存儲區;
[0031]S2:預設獲取互斥信號量的等待時間,預設獲取互斥信號量的訪問次數;預設Linux內核信號量資源訪問函數調用失敗的錯誤碼,錯誤碼內包括EHMEDOUI^ti ;
[0032]在信號量存儲區中,通過Linux內核信號量資源訪問函數,獲取互斥信號量資源,生成Linux內核信號量資源訪問函數的返回值;判斷Linux內核信號量資源訪問函數的返回值是否為0,
[0033]若是,調用Linux系統函數,操作互斥信號量資源鎖定共享內存數據存儲臨界區,生成Linux系統函數調用返回值;判定Li nux系統函數調用返回值為0,通過共享內存數據讀寫單元接口,對共享內存數據存儲臨界區進行業務數據操作;釋放共享內存數據存儲臨界區的操作權限;
[0034]否則判定錯誤碼是否為EHMED0UT信息,判斷獲取互斥信號量資源的獲取次數是否大于訪問次數,若是,轉到步驟S3,否則將訪問次數加1,重新獲取信號量資源;
[0035]S3:刪除共享內存數據存儲臨界區原有的控制信號量,生成刪除結果;
[0036]S4:讀取業務配置操作信息,若業務配置操作信息為讀取業務配置數據信息,轉到步驟S5 ;若業務配置操作信息為修改或更新業務數據信息,轉到步驟S6 ;
[0037]S5:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為0,若是,從共享內存數據存儲臨界區中讀取所需的業務數據,釋放共享內存數據存儲臨界區的操作權限;否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息;
[0038]S6:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為0,若是,在共享內存數據存儲臨界區中寫入配置業務數據,釋放共享內存數據存儲臨界區的操作權限,通過調用信號發送單元提供的函數發送信號通知業務數據對應的業務功能模塊,否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息;轉到步驟S7 ;
[0039]S7:調用Linux系統函數初始化Linux信號,安裝Linux信號接收處理程序,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為0,若是,定義Linux信號接收處理程序安裝成功,否則獲取并記錄Linux信號接收處理程序安裝失敗的信息;讀取Linux信號操作信息,若Linux信號操作信息為Linux信號監聽信息,轉到步驟S8 ;若Linux信號操作信息為Linux信號發送信息,轉到步驟S9 ;
[0040]S8:預設Linux信號接收的監聽時間,預設Linux信號監聽的超時時間,創建Linux信號監聽線程,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為0,若不是,獲取并記錄Linux信號監聽線程創建失敗信息,否則在監聽時間內循環監聽Linux信號;
[0041]判斷信號到達全局標識是否為非0,若是,將信號到達全局標識加1,否則在超時時間內,判斷信號到達全局標識是否為非0,若不是,繼續在監聽時間內循環監聽Linux信號,否則從內存數據存儲臨界區內讀取業務數據、并發送至相應的業務模塊,將信號到達全局標識置為0,繼續在監聽時間內循環監聽Linux信號;
[0042]S9:根據與Linux系統命令對應的目標進程名稱獲取信號發送目標進程號,生成Linux系統函數的返回值;判定Linux系統函數的返回值為O,向目標進程發送Linux信號。
[0043]在上述技術方案的基礎上,步驟SI中所述業務數據包括Internet業務數據、VoIP業務數據和IPTV業務數據。
[0044]在上述技術方案的基礎上,步驟S2中所述等待時間為800?1200毫秒;所述訪問次數為3?5次。
[0045]在上述技術方案的基礎上,步驟S2中所述業務數據操作包括:在共享內存數據存儲臨界區中寫入業務數據、在共享內存數據存儲臨界區中讀取業務數據。
[0046]在上述技術方案的基礎上,步驟S8中所述發送時間為2?3秒,所述超時時間為2?5秒。
[0047]與現有技術相比,本發明的有益效果在于:[0048](I)本發明的共享內存互斥訪問單元是一種基于Linux命名信號量的共享內存數據存儲臨界區保護單元,共享內存互斥訪問單元能夠控制對共享內存數據存儲臨界區的互斥訪問,有效保護共享內存數據存儲臨界區;不僅能夠保證同一時間內,僅有單個進程能夠訪問共享內存數據存儲臨界區的資源,而且能夠防止共享內存數據存儲臨界區因重入而導致數據被破壞,保證了家庭網關系統多進程之間業務配置數據的安全。
[0049](2)本發明的共享內存互斥訪問單元能夠控制對共享內存數據存儲臨界區的互斥訪問,因此,本發明使用時不易消息亂序,進而能夠準確得到預期的結果。
[0050](3)本發明的讀共享內存數據單元讀取業務配置數據時、寫共享內存數據單元寫入業務數據時,均為對共享內存數據存儲臨界區的片式操作。與現有技術中配置文件的IO操作相比,本發明能夠對業務配置數據進行批量操作,其操作和傳輸效率均較高,能夠高效的進行共享訪問,便于人們使用。
【專利附圖】
【附圖說明】
[0051]圖1為本發明實施例中基于Linux共享內存實現家庭網關數據通信的系統的連接框圖;
[0052]圖2為本發明實施例中臨界區互斥初始化子單元的工作流程圖;
[0053]圖3為本發明實施例中臨界區權限獲取子單元的工作流程圖;
[0054]圖4為本發明實施例中死鎖重建子單元的工作流程圖;
[0055]圖5為本發明實施例中讀共享內存數據單元的工作流程圖;
[0056]圖6為本發明實施例中寫共享內存數據單元的工作流程圖;
[0057]圖7為本發明實施例中信號安裝子單元的工作流程圖;
[0058]圖8為本發明實施例中信號監聽子單元的工作流程圖;
[0059]圖9為本發明實施例中信號發送子單元的工作流程圖。
【具體實施方式】
[0060]以下結合附圖及實施例對本發明作進一步詳細說明。
[0061]參見圖1所示,本發明實施例中的基于Linux共享內存實現家庭網關數據通信的系統,包括共享內存互斥訪問單元、讀共享內存數據單元、寫共享內存數據單元和數據更新同步通知單元;共享內存互斥訪問單元與讀共享內存數據單元連接,共享內存互斥訪問單元通過寫共享內存數據單元與數據更新同步通知單元連接。
[0062]共享內存互斥訪問單元包括順次連接的臨界區互斥初始化子單元、臨界區權限獲取子單元和死鎖重建子單元,死鎖重建子單元與臨界區互斥初始化子單元連接,臨界區權限獲取子單元分別與讀共享內存數據單元、寫共享內存數據單元連接。
[0063]數據更新同步通知單元包括信號安裝子單元、信號監聽子單元和信號發送子單元,寫共享內存數據單元與信號安裝子單元連接,信號安裝子單元分別與信號監聽子單元、信號發送子單元連接。
[0064]參見圖2所示,本發明實施例中的基于Linux共享內存實現家庭網關數據通信的方法,包括以下步驟:
[0065]S1:通過臨界區互斥初始化子單元進行互斥信號量初始化。[0066]S2:通過臨界區權限獲取子單元,獲取共享內存數據存儲臨界區的操作權限,若共享內存數據存儲臨界區的操作權限獲取成功,則轉到步驟S4,否則轉到步驟S3。
[0067]S3:通過死鎖重建子單元重建共享內存數據存儲臨界區的控制信號量,重新執行步驟S2。
[0068]S4:讀取業務配置操作信息,若業務配置操作信息為讀取業務配置數據信息,轉到步驟S5 ;若業務配置操作信息為修改或更新業務數據信息,轉到步驟S6。
[0069]S5:通過讀共享內存數據單元在共享內存數據存儲臨界區中讀取所需的業務配置數據。
[0070]S6:通過寫共享內存數據單元修改和更新共享內存數據存儲臨界區中的業務數據,轉到步驟S7。
[0071]S7:通過信號安裝子單元,安裝Linux信號接收處理程序;讀取Linux信號操作信息,若Linux信號操作信息為Linux信號監聽信息,轉到步驟S8 ;若Linux信號操作信息為Linux信號發送信息,轉到步驟S9。
[0072]S8:通過信號監聽子單元,進行Linux信號的監聽。
[0073]S9:通過信號發送子單元,向目標進程發送Linux信號。
[0074]參見圖2所示,步驟SI (即臨界區互斥初始化子單元工作時),包括以下步驟:
[0075]SlOl:預設業務數據,獲取與業務數據對應的互斥信號量名稱,發送初始化信號。業務數據包括Internet (互聯網)業務數據、VoIP (Voice over Internet Protocol,網絡協議電話)業務數據和IPTV (網絡協議電視)業務數據等。
[0076]S102:接收初始化信號后,調用Linux系統函數;根據互斥信號量名稱,通過Linux系統函數初始化互斥信號量,生成Linux系統函數的返回值。
[0077]S103:判斷Linux系統函數的返回值是否為0,若是,則互斥信號量初始化成功,轉到步驟S104,否則互斥信號量初始化失敗,異常退出臨界區互斥初始化子單元。
[0078]S104 =Linux內核將互斥信號量資源儲存至信號量存儲區,正常退出臨界區互斥初始化子單元。
[0079]參見圖3所示,步驟S2 (即臨界區權限獲取子單元工作時),包括以下步驟:
[0080]S201:預設獲取互斥信號量的等待時間,等待時間根據用戶的需求設定,一般為800?1200毫秒;預設獲取互斥信號量的訪問次數,訪問次數根據用戶的需求設定,一般為3?5次;預設Linux內核信號量資源訪問函數調用失敗的錯誤碼,錯誤碼內包括ETIMEDOUT (存在調用超時)信息。
[0081]S202:在信號量存儲區中,通過Linux內核信號量資源訪問函數(外部調用接口),獲取外部接口調用訪問的互斥信號量資源,生成Linux內核信號量資源訪問函數的返回值。
[0082]S203:判斷Linux內核信號量資源訪問函數的返回值是否為0,若是,則互斥信號量資源獲取成功,轉步驟207,否則互斥信號量資源獲取失敗,轉到步驟204。
[0083]S204:判斷錯誤碼是否為EHMED0UT (存在調用超時)信息,若是,則獲取互斥信號量資源的獲取時間大于等待時間,轉到步驟S205,否則獲取共享內存數據存儲臨界區操作權限失敗,異常退出臨界區權限獲取子單元。
[0084]S205:判斷獲取互斥信號量資源的獲取次數是否大于訪問次數,若是,向死鎖重建子單元發送死鎖重建信號(即轉到步驟S301),異常退出臨界區權限獲取子單元,否則轉到步驟S206。
[0085]S206:將訪問次數加I,轉到步驟S202。
[0086]S207:調用Linux系統函數,操作互斥信號量資源鎖定共享內存數據存儲臨界區,生成Linux系統函數調用返回值。
[0087]S208:判斷Linux系統函數調用返回值是否為0,若是,則共享內存數據存儲臨界區鎖定成功,轉到步驟S209,否則獲取共享內存數據存儲臨界區操作權限失敗,異常退出臨界區權限獲取子單元。
[0088]S209:通過共享內存數據讀寫單元接口,對共享內存數據存儲臨界區進行業務數據操作,業務數據操作包括:在共享內存數據存儲臨界區中寫入業務數據、在共享內存數據存儲臨界區中讀取業務數據。
[0089]S210:釋放共享內存數據存儲臨界區的操作權限,正常退出臨界區權限獲取子單
J Li ο
[0090]參見圖4所示,步驟S3 (即死鎖重建子單元工作時),包括以下步驟:
[0091]S301:收到死鎖重建信號后,刪除共享內存數據存儲臨界區原有的控制信號量,生成刪除結果。
[0092]S302:判斷刪除結果是否為0,若是,則控制信號量刪除成功,轉到步驟S303,否則控制信號量刪除失敗,異常退出死鎖重建子單元。
[0093]S303:向臨界區互斥初始化子單元發送初始化信號,(即轉到步驟S102),正常退出
死鎖重建子單元。
[0094]參見圖5所示,步驟S5 (即讀共享內存數據單元工作時),包括以下步驟:
[0095]S501:通過臨界區權限獲取子單元的接口(外部調用接口),獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值。
[0096]S502:判斷獲取共享臨界區權限的返回值是否為0,若是,則共享內存數據存儲臨界區的訪問權限獲取成功,轉到步驟S503,否則共享內存數據存儲臨界區的訪問權限獲取失敗,轉到S505。
[0097]S503:從共享內存數據存儲臨界區中讀取所需的業務數據。
[0098]S504:釋放共享內存數據存儲臨界區的操作權限,正常退出讀共享內存數據單元,讀取的業務數據等待使用。
[0099]S505:獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息,異常退出讀共享內存數據單元。
[0100]參見圖6所示,步驟S6 (即寫共享內存數據單元工作時),包括以下步驟:
[0101]S601:通過臨界區權限獲取子單元的接口(外部調用接口),獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值。
[0102]S602:判斷獲取共享臨界區權限的返回值是否為0,若是,則共享內存數據存儲臨界區的訪問權限獲取成功,轉到步驟S603,否則共享內存數據存儲臨界區的訪問權限獲取失敗,轉到S606。
[0103]S603:在共享內存數據存儲臨界區中寫入配置業務數據。
[0104]S604:釋放共享內存數據存儲臨界區的操作權限。[0105]S605:通過調用信號發送單元提供的函數發送信號通知業務數據對應的業務功能模塊,正常退出寫共享內存數據單元。
[0106]S606:獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息,異常退出寫共享內存數據單元。
[0107]參見圖7所示,步驟S7 (即信號安裝子單元工作時),包括以下步驟:
[0108]S701:調用Linux系統函數初始化Linux信號,安裝Linux信號接收處理程序,生成Linux系統函數的返回值。
[0109]S702:判斷Linux系統函數的返回值是否為0,若是,則Linux信號接收處理程序安裝成功,正常退出信號安裝單元,否則Linux信號接收處理程序安裝失敗,轉到步驟S703。
[0110]S703:獲取并記錄Linux信號接收處理程序安裝失敗的信息,異常退出信號安裝單元。
[0111]參見圖8所示,步驟S8 (即信號監聽子單元工作時),包括以下步驟:
[0112]S801:預設Linux信號接收的監聽時間(發送時間根據用戶的需求設置,一般為2?3秒);預設Linux信號監聽的超時時間,(超時時間根據用戶的需求設置,一般為2?5秒)調用Linux系統函數(即外部調用接口)創建Linux信號監聽線程,生成Linux系統函數的返回值。
[0113]S802:判斷Linux系統函數的返回值是否為0,若是,則Linux信號監聽線程創建成功,轉到步驟S803,否則Linux信號監聽線程創建失敗,轉到步驟S807。
[0114]S803:在監聽時間內循環監聽Linux信號,判斷信號到達全局標識是否為非0,若是,則轉到步驟S804,否則轉到步驟S805。
[0115]S804:將信號到達全局標識加I。
[0116]S805 ;在超時時間內,判斷信號到達全局標識是否為非0,若是,則確定Linux信號到達,轉到步驟S806,否則確定Linux信號未到達,重新執行步驟S803。
[0117]S806:通過信號到達處理功能函數,從內存數據存儲臨界區內讀取業務數據、并發送至相應的業務模塊,同時將信號到達全局標識置為0,轉到步驟S803。
[0118]S807:獲取并記錄Linux信號監聽線程創建失敗信息,異常退出信號監聽子單元。
[0119]信號功能函數由“信號”和“功能函數”組成,“信號”用于:將業務數據有變的信息告知相關業務模塊;“功能函數”用于:負責數據同步,從內存數據存儲臨界區讀出數據,完成數據同步。“信號”和“功能函數”的結合,能夠實現完整的數據通信。
[0120]參見圖9所示,步驟S9 (即信號發送子單元工作時),包括以下步驟:
[0121]S901:收到外部調用接口發送的Linux系統命令后,根據與Linux系統命令對應的目標進程名稱獲取信號發送目標進程號,生成Linux系統函數的返回值。
[0122]S902:判斷Linux系統函數的返回值是否為0,若是,則信號發送目標進程號獲取成功,轉到步驟S903,否則信號發送目標進程號獲取失敗,異常退出信號發送子單元,結束信號發送流程,程序繼續運行其他任務。
[0123]S903:向目標進程發送Linux信號,正常退出信號發送子單元。
[0124]本發明不局限于上述實施方式,對于本【技術領域】的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發明的保護范圍之內。本說明書中未作詳細描述的內容屬于本領域專業技術人員公知的現有技術。
【權利要求】
1.一種基于Linux共享內存實現家庭網關數據通信的系統,其特征在于:包括共享內存互斥訪問單元、讀共享內存數據單元、寫共享內存數據單元和數據更新同步通知單元; 共享內存互斥訪問單元包括順次連接的臨界區互斥初始化子單元、臨界區權限獲取子單元和死鎖重建子單元,死鎖重建子單元與臨界區互斥初始化子單元連接,臨界區權限獲取子單元分別與讀共享內存數據單元、寫共享內存數據單元連接; 數據更新同步通知單元包括信號安裝子單元、信號監聽子單元和信號發送子單元,寫共享內存數據單元與信號安裝子單元連接,信號安裝子單元分別與信號監聽子單元、信號發送子單元連接; 臨界區互斥初始化子單元,用于:預設業務數據,獲取與業務數據對應的互斥信號量名稱,發送初始化信號;接收初始化信號后,調用Linux系統函數;根據互斥信號量名稱,通過Linux系統函數初始化互斥信號量,生成Linux系統函數的返回值;判定Linux系統函數的返回值為O,Linux內核將互斥信號量資源儲存至信號量存儲區,向臨界區權限獲取子單元發送權限獲取信號; 臨界區權限獲取子單元,用于:接收臨界區互斥初始化子單元發送的權限獲取信號后,預設獲取互斥信號量的等待時間,預設獲取互斥信號量的訪問次數;預設Linux內核信號量資源訪問函數調用失敗的錯誤碼,錯誤碼內包括存在調用超時EHMEDOUT信息; 在信號量存儲區中,通過Linux內核信號量資源訪問函數,獲取互斥信號量資源,生成Linux內核信號量資源訪問函數的返回值;判斷Linux內核信號量資源訪問函數的返回值是否為O, 若是,調用Linux系統函數,操作互斥信號量資源鎖定共享內存數據存儲臨界區,生成Linux系統函數調用返回值;判定Linux系統函數調用返回值為O,通過共享內存數據讀寫單元接口,對共享內存數據存儲臨界區進行業務數據操作;釋放共享內存數據存儲臨界區的操作權限; 否則判定錯誤碼是否為ETIMEDOUT信息,判斷獲取互斥信號量資源的獲取次數是否大于訪問次數,若是,向死鎖重建子單元發送死鎖重建信號,否則將訪問次數加1,重新獲取信號量資源; 死鎖重建子單元,用于:接收臨界區權限獲取子單元發送的死鎖重建子單元發送死鎖重建信號后,刪除共享內存數據存儲臨界區原有的控制信號量,生成刪除結果; 讀共享內存數據單元,用于:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為O,若是,從共享內存數據存儲臨界區中讀取所需的業務數據,釋放共享內存數據存儲臨界區的操作權限;否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息; 寫共享內存數據單元,用于:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為O,若是,在共享內存數據存儲臨界區中寫入配置業務數據,釋放共享內存數據存儲臨界區的操作權限,通過調用信號發送單元提供的函數發送信號通知業務數據對應的業務功能模塊,否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息; 信號安裝子單元,用于:調用Linux系統函數初始化Linux信號,安裝Linux信號接收處理程序,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為O,若是,定義Linux信號接收處理程序安裝成功,否則獲取并記錄Linux信號接收處理程序安裝失敗的信息; 信號監聽子單元,用于:預設Linux信號接收的監聽時間,預設Linux信號監聽的超時時間,倉Il建Linux信號監聽線程,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為O,若不是,獲取并記錄Linux信號監聽線程創建失敗信息,否則在監聽時間內循環監聽Linux信號; 判斷信號到達全局標識是否為非O,若是,將信號到達全局標識加1,否則在超時時間內,判斷信號到達全局標識是否為非O,若不是,繼續在監聽時間內循環監聽Linux信號,否則從內存數據存儲臨界區內讀取業務數據、并發送至相應的業務模塊,將信號到達全局標識置為O,繼續在監聽時間內循環監聽Linux信號; 信號發送子單元,用于:收到外部調用接口發送的Linux系統命令后,根據與Linux系統命令對應的目標進程名稱獲取信號發送目標進程號,生成Linux系統函數的返回值;判定Linux系統函數的返回值為O,向目標進程發送Linux信號。
2.如權利要求1所述的基于Linux共享內存實現家庭網關數據通信的系統,其特征在于:所述臨界區互斥初始化子單元中的所述業務數據包括互聯網Internet業務數據、網絡協議電話VoIP業務數據和網絡協議電視IPTV業務數據。
3.如權利要求1所述的基于Linux共享內存實現家庭網關數據通信的系統,其特征在于:所述臨界區權限獲取子單元中的所述等待時間為800~1200毫秒;所述訪問次數為3~5次。
4.如權利要求1至3任一項所述的基于Linux共享內存實現家庭網關數據通信的系統,其特征在于:所述臨界區權限獲取子單元中的所述業務數據操作包括:在共享內存數據存儲臨界區中寫入業務數據、在共享內存數據存儲臨界區中讀取業務數據。
5.如權利要求1至3任一項所述的基于Linux共享內存實現家庭網關數據通信的系統,其特征在于:所述信號監聽子單元中的所述發送時間為2~3秒,所述超時時間為2~5秒。
6.一種應用于權利要求1至5任一項所述系統的基于Linux共享內存實現家庭網關數據通信的方法,其特征在于,包括以下步驟: 51:預設業務數據,獲取與業務數據對應的互斥信號量名稱,發送初始化信號;調用Linux系統函數;根據互斥信號量名稱,通過Linux系統函數初始化互斥信號量,生成Linux系統函數的返回值;判定Linux系統函數的返回值為0,將互斥信號量資源儲存至信號量存儲區; 52:預設獲取互斥信號量的等待時間,預設獲取互斥信號量的訪問次數;預設Linux內核信號量資源訪問函數調用失敗的錯誤碼,錯誤碼內包括EHMED0UT信息; 在信號量存儲區中,通過Linux內核信號量資源訪問函數,獲取互斥信號量資源,生成Linux內核信號量資源訪`問函數的返回值;判斷Linux內核信號量資源訪問函數的返回值是否為O, 若是,調用Linux系統函數,操作互斥信號量資源鎖定共享內存數據存儲臨界區,生成Linux系統函數調用返回值;判定Linux系統函數調用返回值為0,通過共享內存數據讀寫單元接口,對共享內存數據存儲臨界區進行業務數據操作;釋放共享內存數據存儲臨界區的操作權限; 否則判定錯誤碼是否為EHMEDOUT信息,判斷獲取互斥信號量資源的獲取次數是否大于訪問次數,若是,轉到步驟S3,否則將訪問次數加1,重新獲取信號量資源;S3:刪除共享內存數據存儲臨界區原有的控制信號量,生成刪除結果; S4:讀取業務配置操作信息,若業務配置操作信息為讀取業務配置數據信息,轉到步驟S5 ;若業務配置操作信息為修改或更新業務數據信息,轉到步驟S6 ; 55:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為O,若是,從共享內存數據存儲臨界區中讀取所需的業務數據,釋放共享內存數據存儲臨界區的操作權限;否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息; S6:獲取共享內存數據存儲臨界區的訪問權限,生成獲取共享臨界區權限的返回值;判斷獲取共享臨界區權限的返回值是否為O,若是,在共享內存數據存儲臨界區中寫入配置業務數據,釋放共享內存數據存儲臨界區的操作權限,通過調用信號發送單元提供的函數發送信號通知業務數據對應的業務功能模塊,否則獲取并記錄共享內存數據存儲臨界區的訪問權限獲取失敗的異常信息;轉到步驟S7 ; S7:調用Linux系統函數初始化Linux信號,安裝Linux信號接收處理程序,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為O,若是,定義Linux信號接收處理程序安裝成功,否則獲取并記錄Linux信號接收處理程序安裝失敗的信息;讀取Linux信號操作信息,若Linux信號操作信息為Linux信號監聽信息,轉到步驟S8 ;若Linux信號操作信息為Linux信號發送信息,轉到步驟S9 ; S8:預設Linux信號接收的監聽時間,預設Linux信號監聽的超時時間,倉Il建Linux信號監聽線程,生成Linux系統函數的返回值;判斷Linux系統函數的返回值是否為O,若不是,獲取并記錄Linux信號監聽線程創建失敗信息,否則在監聽時間內循環監聽Linux信號; 判斷信號到達全局標識是否為非O,若是,將信號到達全局標識加1,否則在超時時間內,判斷信號到達全局標識是否為非O,若不是,繼續在監聽時間內循環監聽Linux信號,否則從內存數據存儲臨界區內讀取業務數據、并發送至相應的業務模塊,將信號到達全局標識置為O,繼續在監聽時間內循環監聽Linux信號; S9:根據與Linux系統命令對應的目標進程名稱獲取信號發送目標進程號,生成Linux系統函數的返回值;判定Linux系統函數的返回值為O,向目標進程發送Linux信號。
7.如權利要求6所述的基于Linux共享內存實現家庭網關數據通信的方法,其特征在于:步驟SI中所述業務數據包括Internet業務數據、VoIP業務數據和IPTV業務數據。
8.如權利要求6所述的基于Linux共享內存實現家庭網關數據通信的方法,其特征在于:步驟S2中所述等待時間為800~1200毫秒;所述訪問次數為3~5次。
9.如權利要求6至8任一項所述的基于Linux共享內存實現家庭網關數據通信的方法,其特征在于:步驟S2中所述業務數據操作包括:在共享內存數據存儲臨界區中寫入業務數據、在共享內存數據存儲臨界區中讀取業務數據。
10.如權利要求6至8任一項所述的基于Linux共享內存實現家庭網關數據通信的方法,其特征在于:步驟S8中所述發送時間為2~3秒,所述超時時間為2~5秒。
【文檔編號】H04L12/28GK103731328SQ201410002084
【公開日】2014年4月16日 申請日期:2014年1月2日 優先權日:2014年1月2日
【發明者】余仁春, 祝振東 申請人:烽火通信科技股份有限公司