專利名稱:服務(wù)于操作系統(tǒng)核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機(jī)領(lǐng)域,涉及計算機(jī)容錯技術(shù)與數(shù)據(jù)比較技術(shù),特別涉及一種服
務(wù)于操作系統(tǒng)核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方法。
背景技術(shù):
隨著計算機(jī)、互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,信息化已深入到社會的方方面面,計算機(jī)技 術(shù)在提高工作效率、促進(jìn)信息交流等方面極大地改變了人們的生活方式,但同時也使人們 對它產(chǎn)生了越來越多的依賴,一次計算機(jī)系統(tǒng)的故障可能帶來無法估量的損失。對那些需 要保障信息安全和提供不間斷信息服務(wù)的機(jī)構(gòu)來說,例如證券、制造、通信、銀行、運(yùn)輸,業(yè) 務(wù)系統(tǒng)的可靠性和不間斷性顯得尤為重要。如何提高計算機(jī)系統(tǒng)的可靠性與可用性,從而 保障各種關(guān)鍵應(yīng)用持續(xù)運(yùn)營,達(dá)到永續(xù)經(jīng)營的良性循環(huán),已成為信息領(lǐng)域的一個重要問題。 容錯計算機(jī)及相關(guān)技術(shù)正是在這種客觀需求下應(yīng)運(yùn)而生,利用容錯計算機(jī)能避免因服務(wù)器 故障而引發(fā)的數(shù)以萬計的經(jīng)濟(jì)損失。 容錯計算機(jī)是在冗余資源(硬件冗余、時間冗余、信息冗余、軟件冗余)的基礎(chǔ)上, 通過設(shè)計合理的體系結(jié)構(gòu),在系統(tǒng)軟件的有效管理下而形成的高可靠、高可用計算機(jī)。故障 檢測是實現(xiàn)容錯計算機(jī)系統(tǒng)的關(guān)鍵技術(shù)之一,而對任務(wù)數(shù)據(jù)的比較、表決是錯誤發(fā)現(xiàn)的主 要手段。 對數(shù)據(jù)的比較、表決主要有基于硬件和基于軟件兩種方式?;谟布姆椒ㄔ谙?統(tǒng)中增加比較芯片,芯片中包含比較或投票邏輯,對所有待寫出的數(shù)據(jù)進(jìn)行比較、表決,這 種方式發(fā)現(xiàn)錯誤及時,但設(shè)計復(fù)雜,實現(xiàn)成本高?;谲浖姆椒ㄔ趲旌瘮?shù)或者應(yīng)用程序 中設(shè)置比較、表決點(diǎn),對任務(wù)的中間結(jié)果和最后輸出進(jìn)行一致性判斷,這種方式系統(tǒng)設(shè)計簡 單,但對應(yīng)用透明性差,給編程人員和用戶帶來了額外的負(fù)擔(dān)。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對上述現(xiàn)有技術(shù)的缺點(diǎn)和不足,提供了一種服務(wù)于操作系統(tǒng) 核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方法,本發(fā)明能對容錯系統(tǒng)中冗余任務(wù)的狀態(tài)和數(shù)據(jù)結(jié) 果進(jìn)行一致性比較,同時記錄冗余任務(wù)的同步比較信息。 為了實現(xiàn)上述任務(wù),本發(fā)明采用如下的技術(shù)解決方案在Li皿X操作系統(tǒng)內(nèi)核中 創(chuàng)建內(nèi)核態(tài)守護(hù)進(jìn)程ft—syner,執(zhí)行比較器邏輯,為冗余進(jìn)程提供數(shù)據(jù)比較服務(wù);冗余進(jìn) 程在執(zhí)行寫操作時,分別準(zhǔn)備好待寫數(shù)據(jù),再由主進(jìn)程將待寫數(shù)據(jù)封裝為消息包,然后將消 息包添加入冗余進(jìn)程和數(shù)據(jù)比較器通信通道,并主動喚醒數(shù)據(jù)比較器ft_syner進(jìn)行數(shù)據(jù) 比較,在數(shù)據(jù)比較器ft—syner完成數(shù)據(jù)比較后,冗余進(jìn)程通過檢測消息包中的比較結(jié)果字 段獲得比較結(jié)果。 所述的通信通道,實現(xiàn)方式如下在Li皿x操作系統(tǒng)內(nèi)核中創(chuàng)建事件鏈表ft_ syner_event_list,冗余進(jìn)程和數(shù)據(jù)比較器通過事件鏈表ft_syner_event_list實現(xiàn)通信。
3
數(shù)據(jù)比較器和冗余進(jìn)程以生存者_(dá)消費(fèi)者方式工作,冗余進(jìn)程將待比較的數(shù)據(jù)按
協(xié)議格式整理為消息包后掛接在事件鏈表ft_Syner_eVent_list中,比較器從該事件鏈表
ft_syner_event_list中取下消息包,從中提取數(shù)據(jù)信息進(jìn)行比較。 所述的消息包的格式為 typedef struct{ struct list—head list; short ft_msg_type ; struct task—struc1^pl ; struct task—struct氺p2 ; void氺master—data ; long master_data_len ; void氺slave—data ; long slave_data_len ; short error ; } ft_syner_event_msg ; 其中,list為鏈表頭,用于將消息包掛入事件鏈表,采用listjiead為Linux內(nèi)核 通用鏈表結(jié)構(gòu),消息包的插入、刪除操作使用內(nèi)核中的list_add()和list_del()完成;
ft_mSg_type為消息類型,表示消息包來自于哪一類系統(tǒng)調(diào)用,具體值定義如下
#define FT_WRITE 1 〃write()系統(tǒng)調(diào)用
#define FT_WRITEV 2 〃writev()系統(tǒng)調(diào)用
#define FT_SEND3 〃send()系統(tǒng)調(diào)用
#define FT_SENDT0 4 〃sendto ()系統(tǒng)調(diào)用
#define FT_SENDMSG 5 〃sendmsg()系統(tǒng)調(diào)用 比較器根據(jù)ft_mSg_type消息類型的值判斷消息包從哪一類系統(tǒng)調(diào)用上產(chǎn)生,上 述定義能夠根據(jù)需求擴(kuò)展或裁減; pl, p2為生成該消息包的冗余進(jìn)程對的進(jìn)程控制塊指針,pi為主進(jìn)程,p2為從進(jìn) 程,比較器通過這兩個指針獲取冗余進(jìn)程對的進(jìn)程控制塊; master_data是冗余進(jìn)程對中主進(jìn)程的數(shù)據(jù)緩沖區(qū)指針,master_data_len是緩 沖區(qū)長度; slave_data是冗余進(jìn)程對中從進(jìn)程的數(shù)據(jù)緩沖區(qū)指針,slave_data_len為緩沖 區(qū)長度; error記錄比較結(jié)果,值為1表示數(shù)據(jù)一致,值為0表示數(shù)據(jù)不一致。
所述的數(shù)據(jù)比較器,是在Li皿x操作系統(tǒng)內(nèi)核中創(chuàng)建的一個內(nèi)核態(tài)守護(hù)進(jìn)程ft— syner,它常駐操作系統(tǒng)內(nèi)核,執(zhí)行比較器邏輯,為冗余進(jìn)程提供數(shù)據(jù)比較服務(wù)。內(nèi)核態(tài)守護(hù) 進(jìn)程ft_syner空閑時處于等待狀態(tài),有任務(wù)時可被冗余進(jìn)程喚醒,或自身周期性喚醒,內(nèi) 核態(tài)守護(hù)進(jìn)程ft_syner每次被喚醒后,遍歷事件鏈表ft_syner_event_list,取下鏈表中 的每一個消息包進(jìn)行解析,并對數(shù)據(jù)進(jìn)行比較。解析完當(dāng)前事件鏈表中的所有消息包后,內(nèi) 核態(tài)守護(hù)進(jìn)程ft_syner調(diào)用函數(shù)sle印—on—timeout ()進(jìn)入等待狀態(tài),在此函數(shù)中設(shè)置等 待周期為5秒,等待時間用完后喚醒內(nèi)核態(tài)守護(hù)進(jìn)程ft—syner進(jìn)入下一輪遍歷。
所述的冗余進(jìn)程需要增加主從屬性,冗余進(jìn)程在執(zhí)行寫操作時,分別準(zhǔn)備好待寫數(shù)據(jù),再由主進(jìn)程將待寫數(shù)據(jù)封裝為消息包,通過list_add(&(mSg- > list), &ft_syner_event_list)將消息包添加入事件鏈表ft_syner_event_list,并主動喚醒內(nèi)核態(tài)守護(hù)進(jìn)程ft—syner,在內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner完成數(shù)據(jù)比較后,冗余進(jìn)程可通過檢測msg- >error獲得比較結(jié)果。 本發(fā)明的數(shù)據(jù)比較器以內(nèi)核守護(hù)進(jìn)程的方式提供數(shù)據(jù)比較服務(wù),冗余進(jìn)程在調(diào)用write () ,writev() , send() , sendto () , sendmsg()相關(guān)寫操作時,利用數(shù)據(jù)比較器的服務(wù)完成操作中待寫數(shù)據(jù)的比較。即通過在Li皿x操作系統(tǒng)中啟動內(nèi)核守護(hù)進(jìn)程ft—syner,該進(jìn)程執(zhí)行數(shù)據(jù)比較器邏輯,為容錯計算機(jī)系統(tǒng)中的雙模冗余進(jìn)程提供數(shù)據(jù)比較服務(wù)。內(nèi)核中添加的事件鏈表ft_Syner_event_list作為消息通道,冗余進(jìn)程與數(shù)據(jù)比較器以生產(chǎn)_消費(fèi)的方式工作,冗余進(jìn)程將待寫數(shù)據(jù)封裝為消息包插入消息鏈表,比較器從消息鏈表中取下、解析消息包并完成數(shù)據(jù)比較,最后將結(jié)果返還給冗余進(jìn)程。本發(fā)明在操作系統(tǒng)核心層以軟件的方式簡潔、可靠的完成了雙模容錯系統(tǒng)中冗余進(jìn)程的數(shù)據(jù)比較。該方法在操作系統(tǒng)核心層實現(xiàn),無須硬件定制,適用于基于通用硬件架構(gòu)的進(jìn)程級雙模冗余容錯系統(tǒng),所有邏輯都在操作系統(tǒng)核心層自動完成,無須應(yīng)用程序參與,對應(yīng)用具有良好的透明性。
圖1為本發(fā)明中數(shù)據(jù)比較器的工作流程圖; 圖2為本發(fā)明中冗余進(jìn)程與數(shù)據(jù)比較器的交互原理圖。
具體實施例方式
下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
本發(fā)明的方法如下 在Linux操作系統(tǒng)內(nèi)核中創(chuàng)建內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner,執(zhí)行比較器邏輯,為冗余進(jìn)程提供數(shù)據(jù)比較服務(wù);冗余進(jìn)程在執(zhí)行寫操作時,分別準(zhǔn)備好待寫數(shù)據(jù),再由主進(jìn)程將待寫數(shù)據(jù)封裝為消息包,然后將消息包添加入冗余進(jìn)程和數(shù)據(jù)比較器通信通道,并主動喚醒數(shù)據(jù)比較器f t_syner進(jìn)行數(shù)據(jù)比較,在數(shù)據(jù)比較器f t_syner完成數(shù)據(jù)比較后,冗余進(jìn)程通過檢測消息包中的比較結(jié)果字段獲得比較結(jié)果。 所述的通信通道,實現(xiàn)方式如下在Li皿x操作系統(tǒng)內(nèi)核中創(chuàng)建事件鏈表ft—syner_event_list,冗余進(jìn)程和數(shù)據(jù)比較器通過事件鏈表ft_syner_event_list實現(xiàn)通信。 數(shù)據(jù)比較器和冗余進(jìn)程以生存者_(dá)消費(fèi)者方式工作,冗余進(jìn)程將待比較的數(shù)據(jù)按
協(xié)議格式整理為消息包后掛接在事件鏈表ft_Syner_eVent_list中,比較器從該事件鏈表
ft_syner_event_list中取下消息包,從中提取數(shù)據(jù)信息進(jìn)行比較。 所述的消息包的格式為 typedef struct{ struct list—head list ; short ft_msg_type ; struct task—struc1^pl ;
struct task—struct氺p2 ; void氺master—data ; long master_data_len ; void氺slave—data ; long slave_data_len ; short error ; } ft_syner_event_msg ; 其中,list為鏈表頭,用于將消息包掛入事件鏈表,采用list_head為Linux內(nèi)核通用鏈表結(jié)構(gòu),消息包的插入、冊除操作使用內(nèi)核中的list_add()和list_del()完成;
ft_mSg_type為消息類型,表示消息包來自于哪一類系統(tǒng)調(diào)用,具體值定義如下
#define FT_WRITE 1 〃write()系統(tǒng)調(diào)用
#define FT_WRITEV 2〃writev()系統(tǒng)調(diào)用
#define FT_SEND 3 〃send()系統(tǒng)調(diào)用 #define FT_SENDT0 4 〃sendto ()系統(tǒng)調(diào)用
#define FT_SENDMSG 5 〃sendmsg()系統(tǒng)調(diào)用 比較器根據(jù)ft_mSg_type消息類型的值判斷消息包從哪一類系統(tǒng)調(diào)用上產(chǎn)生,上述定義能夠根據(jù)需求擴(kuò)展或裁減; pl, p2為生成該消息包的冗余進(jìn)程對的進(jìn)程控制塊指針,pi為主進(jìn)程,p2為從進(jìn)程,比較器通過這兩個指針獲取冗余進(jìn)程對的進(jìn)程控制塊; master_data是冗余進(jìn)程對中主進(jìn)程的數(shù)據(jù)緩沖區(qū)指針,master_data_len是緩沖區(qū)長度; slave—data是冗余進(jìn)程對中從進(jìn)程的數(shù)據(jù)緩沖區(qū)指針,slave_data_len為緩沖區(qū)長度; error記錄比較結(jié)果,值為1表示數(shù)據(jù)一致,值為0表示數(shù)據(jù)不一致。
所述的數(shù)據(jù)比較器,是在Li皿x操作系統(tǒng)內(nèi)核中創(chuàng)建的一個內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner,它常駐操作系統(tǒng)內(nèi)核,執(zhí)行比較器邏輯,為冗余進(jìn)程提供數(shù)據(jù)比較服務(wù)。內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner空閑時處于等待狀態(tài),有任務(wù)時可被冗余進(jìn)程喚醒,或自身周期性喚醒,內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner每次被喚醒后,遍歷事件鏈表ft_syner_event_list,取下鏈表中的每一個消息包進(jìn)行解析,并對數(shù)據(jù)進(jìn)行比較。解析完當(dāng)前事件鏈表中的所有消息包后,ft_syner調(diào)用函數(shù)sle印—on—timeout0進(jìn)入等待狀態(tài),在此函數(shù)中設(shè)置等待周期為5秒,等待時間用完后喚醒ft_syner進(jìn)入下一輪遍歷。 所述的冗余進(jìn)程需要增加主從屬性,冗余進(jìn)程在執(zhí)行寫操作時,分別準(zhǔn)備好待寫數(shù)據(jù),再由主進(jìn)程將待寫數(shù)據(jù)封裝為消息包,通過list_add(&(mSg- > list), &ft_syner_event_list)將消息包添加入事件鏈表ft_syner_event_list,并主動喚醒數(shù)據(jù)比較器ft_syner,在數(shù)據(jù)比較器ft_syner完成數(shù)據(jù)比較后,冗余進(jìn)程可通過檢測msg- > error獲得比較結(jié)果。 圖1所示數(shù)據(jù)比較器的工作流程為 (1)比較器進(jìn)程ft_syner調(diào)用Spin_l0Ck()獲取消息鏈表的自旋鎖; (2)判斷消息鏈表ft_Syner_event_list是否為空,如果為空轉(zhuǎn)(6),如果不為空轉(zhuǎn)(3); (3)獲取鏈表中的一個消息包msg,解析該消息包并完成數(shù)據(jù)比較; (4)使用內(nèi)核中的liSt_add()將處理完的消息包從消息鏈表中刪除; (5)如果消息鏈表中還有未處理的剩余消息包,轉(zhuǎn)(3),否則轉(zhuǎn)(6); (6)調(diào)用Spin_unloCk()釋放消息鏈表的自旋鎖; (7)比較器進(jìn)程ft_syner調(diào)用sle印—on—timeout ()進(jìn)入睡眠等待; (8)進(jìn)程ft_syner在等待時間周期到達(dá)后被動喚醒,或被冗余進(jìn)程主動喚醒; (9)判斷標(biāo)志位finish,如果finish為1,表示接收到結(jié)束比較器服務(wù)的請求,ft—
syner結(jié)束,如果finish為O,轉(zhuǎn)(1)進(jìn)入下一輪服務(wù)。 圖2展示了冗余進(jìn)程與數(shù)據(jù)比較器的交互過程。該圖以write()操作為例,冗余進(jìn)程P1、 P2在執(zhí)行write()操作時需要進(jìn)行數(shù)據(jù)比較,冗余進(jìn)程將待比較數(shù)據(jù)封裝在消息包msg中,并將其插入消息鏈表,喚醒數(shù)據(jù)比較器。比較器從消息鏈表中取下消息包,按格式定義解析消息包,并對包中的兩份數(shù)據(jù)進(jìn)行一致性比較,將比較結(jié)果存入msg- > error中。最后冗余進(jìn)程通過查看msg- > error的值獲取比較結(jié)果。
權(quán)利要求
服務(wù)于容錯計算機(jī)的操作系統(tǒng)核心層系統(tǒng)數(shù)據(jù)比較方法,其特征在于,首先在Linux操作系統(tǒng)內(nèi)核中創(chuàng)建內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner,其作用為執(zhí)行比較器邏輯,為冗余進(jìn)程提供數(shù)據(jù)比較服務(wù);其次當(dāng)冗余進(jìn)程在執(zhí)行寫操作過程中分別準(zhǔn)備好待寫數(shù)據(jù)后,主進(jìn)程將這些待寫數(shù)據(jù)封裝為消息包并將消息包添加入冗余進(jìn)程和數(shù)據(jù)比較器通信通道里,同時主動喚醒數(shù)據(jù)比較器ft_syner進(jìn)行數(shù)據(jù)比較;最后數(shù)據(jù)比較器ft_syner完成數(shù)據(jù)比較,冗余進(jìn)程通過檢測消息包中的比較結(jié)果字段獲得比較結(jié)果。
2. 根據(jù)權(quán)利要求1所述的服務(wù)于操作系統(tǒng)核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方法, 其特征在于,所述的通信通道,實現(xiàn)方式如下在Li皿x操作系統(tǒng)內(nèi)核中創(chuàng)建事件鏈表ft_ syner_event_list,冗余進(jìn)程和數(shù)據(jù)比較器通過事件鏈表ft_syner_event_list實現(xiàn)通 信。
3. 根據(jù)權(quán)利要求1或2所述的服務(wù)于操作系統(tǒng)核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方 法,其特征在于,數(shù)據(jù)比較器和冗余進(jìn)程以生存者-消費(fèi)者方式工作,冗余進(jìn)程將待比較的 數(shù)據(jù)按協(xié)議格式整理為消息包后掛接在事件鏈表ft_Syner_event_list中,比較器從該事 件鏈表ft_Syner_event_liSt中取下消息包并從中提取數(shù)據(jù)信息進(jìn)行比較。
4. 根據(jù)權(quán)利要求1所述的服務(wù)于操作系統(tǒng)核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方法,其 特征在于,所述的數(shù)據(jù)比較器,是在Li皿x操作系統(tǒng)內(nèi)核中創(chuàng)建的一個內(nèi)核態(tài)守護(hù)進(jìn)程ft— syner,它常駐操作系統(tǒng)內(nèi)核,執(zhí)行比較器邏輯,為冗余進(jìn)程提供數(shù)據(jù)比較服務(wù),內(nèi)核態(tài)守護(hù) 進(jìn)程ft—syner空閑時處于等待狀態(tài),有任務(wù)時被冗余進(jìn)程喚醒,或自身周期性喚醒,內(nèi)核 態(tài)守護(hù)進(jìn)程ft_syner每次被喚醒后,遍歷事件鏈表ft_syner_event_list,取下鏈表中的 每一個消息包進(jìn)行解析,并對數(shù)據(jù)進(jìn)行比較,解析完當(dāng)前事件鏈表中的所有消息包后,內(nèi)核 態(tài)守護(hù)進(jìn)程ft_syner調(diào)用函數(shù)sle印—on—timeout0進(jìn)入等待狀態(tài),在此函數(shù)中設(shè)置等待 周期為5秒,等待時間用完后喚醒內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner進(jìn)入下一輪遍歷。
5. 根據(jù)權(quán)利要求1所述的服務(wù)于操作系統(tǒng)核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方法,其 特征在于,所述的冗余進(jìn)程需要增加主從屬性,冗余進(jìn)程在執(zhí)行寫操作時,分別準(zhǔn)備好待寫 數(shù)據(jù),再由主進(jìn)程將待寫數(shù)據(jù)封裝為消息包,通過list_add(&(mSg- > list) , &ft_syner_ event_list)將消息包添加入事件鏈表ft_syner_event_list,并主動喚醒內(nèi)核態(tài)守護(hù)進(jìn) 程ft_syner,在內(nèi)核態(tài)守護(hù)進(jìn)程ft_syner完成數(shù)據(jù)比較后,冗余進(jìn)程通過檢測msg- > error獲得比較結(jié)果。
全文摘要
服務(wù)于操作系統(tǒng)核心層的容錯計算機(jī)系統(tǒng)數(shù)據(jù)比較方法,通過在Linux操作系統(tǒng)中啟動內(nèi)核守護(hù)進(jìn)程,執(zhí)行數(shù)據(jù)比較器邏輯,為容錯計算機(jī)系統(tǒng)中的雙模冗余進(jìn)程提供數(shù)據(jù)比較服務(wù)。在內(nèi)核中添加事件鏈表作為消息通道,冗余進(jìn)程與數(shù)據(jù)比較器以生產(chǎn)-消費(fèi)的方式工作,冗余進(jìn)程將待寫數(shù)據(jù)封裝為消息包插入消息鏈表,比較器從消息鏈表中取下消息包,按定義格式解析消息包并比較冗余進(jìn)程待寫數(shù)據(jù),最后將結(jié)果返還給冗余進(jìn)程。本發(fā)明在操作系統(tǒng)核心層實現(xiàn),無須硬件定制,實現(xiàn)簡單,適用于基于普通硬件架構(gòu)的進(jìn)程級雙模冗余容錯系統(tǒng),通用性好。所有比較邏輯都在操作系統(tǒng)核心層自動完成,無須應(yīng)用程序參與,對應(yīng)用具有良好的透明性。
文檔編號G06F11/00GK101794242SQ201010103349
公開日2010年8月4日 申請日期2010年1月29日 優(yōu)先權(quán)日2010年1月29日
發(fā)明者伍衛(wèi)國, 孫江斌, 張東, 張興軍, 王恩東, 田佳, 胡冰, 胡雷鈞, 董小社, 趙曉昳, 雷濟(jì)凱 申請人:西安交通大學(xué);山東高效能服務(wù)器和存儲研究院