專利名稱:利用制作成數(shù)據(jù)庫的共享內(nèi)存的工程分析程序間的同步連接方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種利用制作成數(shù)據(jù)庫的共享內(nèi)存的工程分析程序之間的同步連接方法論和系統(tǒng)。尤其涉及這樣一種方法,當(dāng)集成多個(gè)工程分析程序而實(shí)現(xiàn)綜合分析用途時(shí),將各程序所使用的所有內(nèi)部變量的存儲空間重新分配為制作成數(shù)據(jù)庫的共享內(nèi)存的空間,從而能夠?qū)崿F(xiàn)多個(gè)程序之間連接變量的輸入輸出和各程序的當(dāng)前狀態(tài)的存儲及完美恢復(fù),并使時(shí)間上同步的聯(lián)合執(zhí)行變?yōu)榭赡堋?br>
背景技術(shù):
以往,為了實(shí)現(xiàn)對集成的整個(gè)系統(tǒng)的舉動(dòng)進(jìn)行分析的用途,需要針對用于工廠系統(tǒng)的設(shè)計(jì)/安全分析等的安全解析代碼等為了滿足單一目的而開發(fā)的現(xiàn)有代碼進(jìn)行合并以實(shí)現(xiàn)集成,此時(shí)是將現(xiàn)有代碼的源碼合并為一個(gè)大型代碼,或者采用以通過DLL (動(dòng)態(tài)鏈接庫Dynamic Link Library)方式或LIB (靜態(tài)函數(shù)庫Static Library)方式調(diào)用函數(shù)的形態(tài)交換各代碼之間的連接變量的值進(jìn)行結(jié)合的方式。由于這些方式提前預(yù)先定義程序之間的連接變量的形態(tài)和類型后通過函數(shù)因子來傳遞值,因此當(dāng)需要集成的程序數(shù)量增加時(shí),程序彼此之間的連接變量增加,隨之所傳遞的函數(shù)類型和調(diào)用次數(shù)以幾何級數(shù)增加,并且伴隨連接變量的修改,源碼必然要修改,因此還必須要經(jīng)過對源碼進(jìn)行修改后編譯的過程,這些導(dǎo)致集成開發(fā)時(shí)間相當(dāng)長。并且,當(dāng)各程序發(fā)生改版(Version-up)時(shí),還存在為了反映改版程序而需要再次經(jīng)過如上所述的集成過程的困難。并且,在執(zhí)行集成代碼時(shí),為了再現(xiàn)特定情況,需要以在物理存儲器中僅記錄為進(jìn)行重啟(Restart)而選擇的變量的代碼來手動(dòng)修改程序源,才能存儲特定情況,因此除預(yù)定時(shí)間之外,根本無法進(jìn)行程序狀態(tài)的存儲/恢復(fù),而且即使為了用來進(jìn)行分析的圖形連接,為了將連接變量傳遞到外部,也必須要修改程序源,如此種種存在很多問題。
發(fā)明內(nèi)容
本發(fā)明是為了解決如上所述的問題而提出的,其目的在于提供一種工程分析程序之間的同步連接方法及其系統(tǒng),該工程分析程序之間的同步連接方法及其系統(tǒng)通過將需要集成的工程分析程序所使用的所有內(nèi)部變量的存儲空間作為制作成數(shù)據(jù)庫的共享內(nèi)存來使用,從而無需伴隨連接變量的修改而修改程序源,即可實(shí)現(xiàn)任何連接變量的輸入輸出,并通過將所定義的共享內(nèi)存存儲到如硬盤等物理存儲器,且僅通過將物理存儲器的內(nèi)容恢復(fù)到共享內(nèi)存,即可將各可執(zhí)行文件的當(dāng)前狀態(tài)完美地恢復(fù)到與存儲時(shí)刻相同的狀態(tài),并且各可執(zhí)行文件不僅在時(shí)間上同步,而且可以確保獨(dú)立執(zhí)行。本發(fā)明的工程分析程序之間的同步連接系統(tǒng),包含全局變量提取單元,用于同時(shí)提取全局變量和各種信息,該全局變量是多個(gè)程序的源碼中所定義的;內(nèi)存管理單元,構(gòu)成數(shù)據(jù)庫并存儲到共享內(nèi)存中,以能夠根據(jù)鍵值(變量名)檢索到所述全局變量;翻譯單元,移除所述源碼的全局變量聲明區(qū),然后通過修改最初源碼而生成針對各程序的可執(zhí)行文件,以在所述共享內(nèi)存中分得存儲空間;代碼執(zhí)行單元,用于執(zhí)行由所述翻譯單元生成的可執(zhí)行文件,以同步的時(shí)間間隔推進(jìn)時(shí)間,并將確定各程序的狀態(tài)的共孚內(nèi)存的存儲空間存儲到物理存儲器及進(jìn)行恢復(fù)。尤其,所述全局變量提取單元解析(parsing)所述全局變量,并以特定的結(jié)構(gòu)體形式生成包含關(guān)于各全局變量的描述、單位、所屬系統(tǒng)、變量形態(tài)、維(Dims)、偏移值和變量名中的一個(gè)以上的信息,并將所生成的信息傳遞到所述內(nèi)存管理單元中。并且,為了將來自全局變量提取單元的全局變量重新分配共享內(nèi)存中的存儲空間,內(nèi)存管理單元以具有系統(tǒng)化內(nèi)存管理邏輯的結(jié)構(gòu)構(gòu)成共享內(nèi)存,執(zhí)行將關(guān)于全局變量的信息以結(jié)構(gòu)體形式插入、刪除和檢索的功能等對全局變量的共享內(nèi)存中的數(shù)據(jù)庫管理。并且,所述共享內(nèi)存的標(biāo)題包含表示與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象在所述共享內(nèi)存中所占的存儲空間的大小的整數(shù)信息;表示在所述共享內(nèi)存中全局變量的當(dāng)前值所占的存儲空間的大小的整數(shù)信息;表示將在所述代碼執(zhí)行單元中執(zhí)行的可執(zhí)行文件的存儲空間的大小的整數(shù)信息。并且,所述共享內(nèi)存的標(biāo)題進(jìn)一步包含用于對與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象構(gòu)成數(shù)據(jù)庫而進(jìn)行管理(查詢、插入、刪除等)的變量;存儲與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象的存儲空間的起始地址的變量;存儲所述全局變量的當(dāng)前值存儲空間的起始地址的變量;存儲所述可執(zhí)行文件的存儲空間的起始地址的變量。并且,所述共享內(nèi)存包含用于存儲與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象的存儲空間;用于存儲所述全局變量的當(dāng)前值的存儲空間;用于存儲關(guān)于所述可執(zhí)行文件的信息的存儲空間。并且,所述內(nèi)存管理單元定義用于插入、刪除和查詢與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象的管理結(jié)構(gòu)體,所述管理結(jié)構(gòu)體包含表示所注冊的總?cè)肿兞康膫€(gè)數(shù)的變量、為了數(shù)據(jù)檢索而指定成為全局變量整體的重點(diǎn)的節(jié)點(diǎn)的變量、用于對與所述全局變量—對應(yīng)的結(jié)構(gòu)體的對象進(jìn)行插入、刪除、查詢和檢索的函數(shù)。并且,所述翻譯單元將所述最初源碼的時(shí)間推進(jìn)區(qū)間循環(huán)語句修改為等待同步個(gè)體的邏輯,并生成所述可執(zhí)行文件以在所述代碼執(zhí)行單元產(chǎn)生的時(shí)間同步信號為接通(ON)的時(shí)刻推進(jìn)時(shí)間。并且,所述翻譯單元將關(guān)于所述可執(zhí)行文件的信息存儲在所述共享內(nèi)存中的執(zhí)行信息結(jié)構(gòu)體中,所述執(zhí)行信息結(jié)構(gòu)體包含存儲可執(zhí)行文件名稱的存儲空間、接收同步信號的同步個(gè)體存儲空間、存儲可執(zhí)行文件的執(zhí)行狀態(tài)的存儲空間。并且,所述代碼執(zhí)行單元通過掌握存儲所述可執(zhí)行文件的名稱的存儲空間、接收同步信號的同步個(gè)體的存儲空間以及存儲可執(zhí)行文件的執(zhí)行狀態(tài)的存儲空間中注冊的對象的內(nèi)容,利用于可執(zhí)行文件的同步執(zhí)行。另外,本發(fā)明的工程分析程序之間的同步連接方法,包含步驟提取在程序的源碼中定義的全局變量;構(gòu)成數(shù)據(jù)庫后存儲到共享內(nèi)存中,以能夠通過變量名檢索所述全局變量;在移除所述源碼的全局變量聲明區(qū)之后,對最初源碼進(jìn)行修改而生成針對各程序的可執(zhí)行文件,以在所述共享內(nèi)存中分得存儲空間;執(zhí)行所述生成的可執(zhí)行文件,以同步的時(shí)間間隔推進(jìn)時(shí)間,并將確定各程序的狀態(tài)的共享內(nèi)存的存儲空間存儲到物理存儲器及進(jìn)行恢復(fù)。尤其,提取在所述程序的源碼中定義的全局變量的步驟包含解析(parsing)所述全局變量,并以特定的結(jié)構(gòu)體形式生成包含關(guān)于各全局變量的描述、單位、所屬系統(tǒng)、變量形態(tài)、維、偏移值和變量名中的一個(gè)以上的信息的步驟。并且,構(gòu)成數(shù)據(jù)庫后存儲到共享內(nèi)存中,以能夠通過變量名檢索所述全局變量的步驟包含定義管理結(jié)構(gòu)體的步驟,以對與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象進(jìn)行插入、刪除和查詢。并且,所述管理結(jié)構(gòu)體包含表示所注冊的總?cè)肿兞康膫€(gè)數(shù)的變量、為了數(shù)據(jù)檢索而指定成為全局變量整體的重點(diǎn)的節(jié)點(diǎn)的變量、用于對與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象進(jìn)行插入、刪除、查詢和檢索的函數(shù)。并且,在移除所述源碼的全局變量聲明區(qū)之后,對最初源碼進(jìn)行修改而生成針對各程序的可執(zhí)行文件,以在所述共享內(nèi)存中分得存儲空間的步驟包含將關(guān)于所述可執(zhí)行文件的信息存儲在所述共享內(nèi)存中的執(zhí)行信息結(jié)構(gòu)體中的步驟。并且,所述執(zhí)行信息結(jié)構(gòu)體包含存儲可執(zhí)行文件名稱的存儲空間、接收同步信號的同步個(gè)體存儲空間、存儲可執(zhí)行文件的執(zhí)行狀態(tài)的存儲空間。并且,當(dāng)對多個(gè)程序進(jìn)行集成而用作綜合分析用途時(shí),還包含將各程序所使用的所有內(nèi)部變量的存儲空間重新分配為制作成數(shù)據(jù)庫的共享內(nèi)存,將所定義的共享內(nèi)存存儲在所述物理存儲器,將所述物理存儲器的內(nèi)容恢復(fù)到共享內(nèi)存而將各可執(zhí)行文件的狀態(tài)恢復(fù)為與存儲時(shí)刻相同的狀態(tài)的步驟。并且,與針對工程分析程序的圖形程序連接時(shí),進(jìn)一步包含通過所述制作成數(shù)據(jù)庫的共享內(nèi)存的方式重新分配內(nèi)部全局變量的存儲空間,進(jìn)行連接變量的當(dāng)前值的提取和更新的步驟。根據(jù)本發(fā)明可以得到如下效果。為了集成多個(gè)工程分析程序,以往需要對現(xiàn)有的源碼直接進(jìn)行集成而制作大型源碼,或者需要按照DLL方式或LIB方式的函數(shù)因子交換形式進(jìn)行開發(fā),此時(shí)會耗費(fèi)非常長的集成時(shí)間,且更換連接變量會導(dǎo)致相當(dāng)長的代碼修改時(shí)間。但是,在本發(fā)明中,通過使用系統(tǒng)化共享內(nèi)存來共享所有全局變量的所有信息,從而可以克服大量的連接傳遞函數(shù)的生成和連接函數(shù)調(diào)用次數(shù)的增加引起的非有效性增加的問題以及關(guān)系到連接變量的大量源碼的修改等的很多缺點(diǎn),可以得到大大縮短集成開發(fā)時(shí)間的效果。并且,在現(xiàn)有的直接集成源碼的方式中,為了存儲程序的執(zhí)行過程中的狀態(tài),需要在源碼中制作將特定時(shí)刻記錄到物理存儲器的源碼,并且除了預(yù)定的時(shí)刻之外,根本無法實(shí)現(xiàn)程序狀態(tài)的存儲和恢復(fù)。但是,根據(jù)本發(fā)明,通過將所定義的共享內(nèi)存存儲到如硬盤等物理存儲器中,從而僅將物理存儲器的內(nèi)容恢復(fù)到共享內(nèi)存,即可將各可執(zhí)行文件的當(dāng)前狀態(tài)完美地恢復(fù)到與存儲時(shí)刻相同的狀態(tài),因此通過程序進(jìn)行工程分析時(shí),任意時(shí)刻都能根據(jù)需要存儲程序的狀態(tài),在利用同步集成系統(tǒng)進(jìn)行系統(tǒng)分析作業(yè)時(shí)具有很大的優(yōu)勢。并且,在現(xiàn)有的直接集成源碼的方式中,即使是經(jīng)過無數(shù)次試錯(cuò)后完成的集成程序,當(dāng)各程序改版(Version-up)時(shí),為了反映改版內(nèi)容需要再次重復(fù)非常長的集成過程。但是,根據(jù)本發(fā)明,由于各可執(zhí)行文件在獨(dú)立執(zhí)行的同時(shí)也能實(shí)現(xiàn)時(shí)間同步,因此可以提供能夠獨(dú)立地對各程序進(jìn)行維護(hù)并以改版的代碼進(jìn)行集成的根本解決方法。
并且,現(xiàn)有的集成源碼的方式在開發(fā)圖形連接程序時(shí)需要在程序源碼中一一指定期望顯示(Display)的連接變量,直接以如函數(shù)等連接方式將內(nèi)部變量值公開到外部。但是,根據(jù)本發(fā)明,通過提供標(biāo)準(zhǔn)化的連接變量的插入、刪除、查詢和檢索功能函數(shù),因此在開發(fā)圖形顯示程序等具有其他目的的連接程序時(shí),也能夠提供相當(dāng)便捷的功能。
圖1為用于說明本發(fā)明的利用制作成數(shù)據(jù)庫的共享內(nèi)存的工程分析程序之間的同步連接系統(tǒng)的圖。圖2為用于說明本發(fā)明的制作成數(shù)據(jù)庫的共享內(nèi)存的結(jié)構(gòu)的圖。圖3至圖7為用于說明本發(fā)明中所使用的結(jié)構(gòu)體的圖。圖8和圖9為用于說明在本發(fā)明的連接系統(tǒng)的翻譯單元進(jìn)行的最初源碼的修改例子的圖。圖10為用于說明本發(fā)明的利用制作成數(shù)據(jù)庫的共享內(nèi)存的工程分析程序之間的同步連接方法的流程圖。
具體實(shí)施例方式以下,參照附圖來詳細(xì)說明本發(fā)明。在此,對于重復(fù)的說明、可能使本發(fā)明的要點(diǎn)變得不清楚的公知的功能和構(gòu)成的詳細(xì)描述將進(jìn)行省略。本發(fā)明的實(shí)施方式是為了對本領(lǐng)域中具有平均知識的人員更加完整地說明本發(fā)明而提供的。因此,為了更加清楚地描述,附圖中構(gòu)成要素的形狀和大小等可能被放大示出。下面,詳細(xì)說明本發(fā)明的利用制作成數(shù)據(jù)庫的共享內(nèi)存的工程分析程序之間的同步連接方法和系統(tǒng)。圖1為用于說明本發(fā)明的利用制作成數(shù)據(jù)庫的共享內(nèi)存的工程分析程序之間的同步連接系統(tǒng)的圖。參照圖1,本發(fā)明的工程分析程序之間的同步連接系統(tǒng),包含全局變量提取單元100,用于將構(gòu)成多個(gè)程序的源碼所使用的全局變量和各種信息一起提取出來;內(nèi)存管理單元200,用所提取的全局變量構(gòu)成數(shù)據(jù)庫并帶有邏輯性地存儲到共享內(nèi)存中,以能夠根據(jù)變量名(Key值)檢索到所提取的全局變量;翻譯單元300,移除程序源碼的全局變量聲明區(qū)部分,作為替代通過修改7最初源碼而生成可執(zhí)行文件,以在內(nèi)存管理單元200所提供的共享內(nèi)存中分得存儲空間;代碼執(zhí)行單元400,用于執(zhí)行由翻譯單元300生成的可執(zhí)行文件8,以同步的時(shí)間間隔推進(jìn)時(shí)間,并將確定各程序的狀態(tài)的共享內(nèi)存的存儲空間存儲到物理存儲器及進(jìn)行恢復(fù)。參照圖1至圖7,全局變量提取單元100起到如下作用,即,解析(parsing)構(gòu)成單一程序的源碼6中定義的所有全局變量(或者Static變量、new/malloc等Heap變量),并將關(guān)于全局變量的描述(Description) 35、單位(Units) 36、所屬系統(tǒng)(System) 37、變量形態(tài)(Type) 38,維(Dims) 39、關(guān)于用來存儲變量的當(dāng)前值的內(nèi)存地址的偏移值(nOffset) 40、變量名(Name)41等各種信息制作成VAR_INF0結(jié)構(gòu)體34的形式,并將其傳遞到內(nèi)存管理單元200。為了將來自全局變量提取單元100的全局變量重新分配到共享內(nèi)存5中的存儲空間,如圖2所示,內(nèi)存管理單元200以具有系統(tǒng)化內(nèi)存管理邏輯的結(jié)構(gòu)構(gòu)成共享內(nèi)存5,將關(guān)于全局變量的信息以VAR_INFO結(jié)構(gòu)體34的形式插入。并且,內(nèi)存管理單元200還提供執(zhí)行刪除和檢索功能29的函數(shù),起到在共享內(nèi)存5中對全局變量執(zhí)行數(shù)據(jù)庫管理的作用。為此,共享內(nèi)存5具有如圖2所示的存儲結(jié)構(gòu),共享內(nèi)存5的標(biāo)題由SHARED_MEM0RY_HEADER 結(jié)構(gòu)體 15 開始。進(jìn)一步來講,SHARED_MEMORY_HEADER結(jié)構(gòu)體15的起初4字節(jié)空間16存儲用于表示與全局變量一一對應(yīng)的結(jié)構(gòu)體ANODE的對象30在共享內(nèi)存5中的存儲空間23的大小的整數(shù)信息(在此對應(yīng)于nVarsSize值)。并且,其次4字節(jié)空間17中存儲用于表示在共享內(nèi)存5中全局變量的當(dāng)前值存儲空間24所占的大小的整數(shù)信息(在此對應(yīng)于nValuesSize值)。并且,其次4字節(jié)空間18中存儲表示將在隨后要說明的、代碼執(zhí)行單元400執(zhí)行的可執(zhí)行文件8的信息存儲空間25的大小的整數(shù)信息(在此對應(yīng)于nExesSize值)。并且,SHARED_MEMORY_HEADER結(jié)構(gòu)體15中作為構(gòu)成要素而存儲如下成員變量,SP,作為用于對ANODE結(jié)構(gòu)體30的對象構(gòu)成數(shù)據(jù)庫而進(jìn)行管理(查詢/插入/刪除)的DataBaseManager結(jié)構(gòu)體26的Vars成員變量19、存儲ANODE對象30的存儲空間(大小nVarsSize字節(jié))23的起始地址20_1的pVars指針成員變量21、存儲全局變量的當(dāng)前值存儲空間(大小nValuesSize字節(jié))24的起始地址21_1的pValues指針成員變量21、存儲可執(zhí)行文件的信息存儲空間(大小nExesSize字節(jié))25的起始地址22_1的pExes指針成員變量22。并且,共享內(nèi)存5具有上述ANODE對象30的存儲空間23。此外,共享內(nèi)存5具有內(nèi)部全局變量的當(dāng)前值存儲空間24和針對多個(gè)可執(zhí)行文件(數(shù)量相當(dāng)于要執(zhí)行的分析代碼的個(gè)數(shù))的信息存儲空間25。若通過全局變量提取單元100提取了工程分析程序的源碼6的全局變量,則關(guān)于其全局變量的信息填滿VAR_INF0結(jié)構(gòu)體34的字段。VAR_INF0結(jié)構(gòu)體34由如下字段構(gòu)成。-Description:關(guān)于變量的Description字符串存儲空間35-Units :關(guān)于變量的單位存儲空間36-System :變量所屬的代表系統(tǒng)名存儲空間37-Type :變量的(char/bool/short/int/real/double 等)型信息存儲空間 38-Dims :變量的維信息存儲空間39-nOffset :從用于存儲全局變量當(dāng)前值的空間的起始地址101到對應(yīng)變量的值的存儲空間的偏移值存儲空間40-Name :變量名字符串存儲空間41ANODE結(jié)構(gòu)體30中作為成員變量而存在VAR_INF0結(jié)構(gòu)體34和兩個(gè)ANODE指針變量30, ANODE指針成員變量31、32是對應(yīng)于數(shù)據(jù)庫的在先(previous)和其次(next) Node指針的概念。一個(gè)全局變量具有一個(gè)對應(yīng)的ANODE對象30。并且,在本發(fā)明中,為了帶有邏輯性且簡便地插入、刪除和查詢ANODE結(jié)構(gòu)體30,定義DataBaseManager結(jié)構(gòu)體26。在此,DataBaseManager結(jié)構(gòu)體26對應(yīng)于權(quán)利要求書中記載的“管理結(jié)構(gòu)體”。DataBaseManager結(jié)構(gòu)體26由作為所注冊的總?cè)肿兞康膫€(gè)數(shù)(即,注冊的ANODE對象的個(gè)數(shù))的Count成員變量27、作為為了數(shù)據(jù)檢索而指定成為全局變量整體的重點(diǎn)的節(jié)點(diǎn)的ANODE結(jié)構(gòu)體指針的ancestor成員變量28、用于對ANODE結(jié)構(gòu)體30進(jìn)行插入、刪除、查詢和檢索的Insert/Delete/Traverse/Search成員函數(shù)29構(gòu)成。當(dāng)提取到一個(gè)全局變量而獲得一個(gè)ANODE結(jié)構(gòu)體30信息時(shí),通過SHARED_MEM0RY_HEADER結(jié)構(gòu)體15的DataBaseManager結(jié)構(gòu)體26型的Vars成員變量19的Insert29函數(shù),在ANODE對象存儲空間23的一個(gè)區(qū)域插入ANODE對象30。此時(shí),表示ANODE對象存儲空間23的大小的nVarsSize增加+sizeof (ANODE),P Values地址值21、101也增加+sizeof (ANODE),表示pValues存儲空間24的大小的nValuesSize也增加+sizeof (全局變量的數(shù)據(jù)形態(tài)),作為存儲可執(zhí)行文件信息的空間25的pExes指針值22、102也順延增加。并且,關(guān)于由后述的翻譯單元300形成的可執(zhí)行文件8的信息被存儲到EXE_INF0結(jié)構(gòu)體42,成員變量如下。在此,EXE_INF0結(jié)構(gòu)體42對應(yīng)于權(quán)利要求書中記載的“執(zhí)行信息結(jié)構(gòu)體”?!癊xeName”是存儲包含路徑的可執(zhí)行文件名稱的存儲空間43,“hStart成員變量”是將要接收同步信號的同步個(gè)體的存儲空間44,“Status成員變量”是存儲可執(zhí)行文件的執(zhí)行狀態(tài)的存儲空間45。EXE_INF0對象的存儲空間25位于共享內(nèi)存5的末端部分(即,nValuesSize字節(jié)后面),被注冊到該空間25的EXE_INF0對象利用于由代碼執(zhí)行單元400進(jìn)行的同步執(zhí)行。具有上述邏輯結(jié)構(gòu)的共享內(nèi)存5只要掌握對應(yīng)于整體大小的sizeof (SHARED_MEM0RY_HEADER) +nVarsSize+nValuesSize+nExeSize 字節(jié),就意味著不僅能夠檢索和查詢所有全局變量信息和當(dāng)前狀態(tài)值,而且只要將共享內(nèi)存5的整個(gè)字節(jié)存儲到如硬盤等物理存儲器12,以后即可完美地恢復(fù)到特定時(shí)間的狀態(tài),因此在后述的代碼執(zhí)行單元40中可利用此存儲和恢復(fù)當(dāng)前狀態(tài)。翻譯單元300從各程序源碼6中移除全局變量(或者,C語言的情況下為new/malloc等Heap變量)的聲明區(qū)46,作為替代對最初源碼進(jìn)行語法分析而修改47(Translation)源碼本身,以分得內(nèi)存管理單元200所提供的共享內(nèi)存存儲空間。并且,翻譯單元300將程序的時(shí)間推進(jìn)(Advancement)IO區(qū)間循環(huán)語句48修改為等待同步個(gè)體的邏輯49,修改為僅在代碼執(zhí)行單元400產(chǎn)生的時(shí)間同步信號接通(ON)的時(shí)刻11進(jìn)行時(shí)間推進(jìn)10,并對修改的源碼進(jìn)行編譯(compiling)而生成(linking)可執(zhí)行文件。代碼執(zhí)行單元400在共享內(nèi)存5中的可執(zhí)行文件信息存儲空間25中檢索可執(zhí)行文件8的信息,執(zhí)行同步化。S卩,代碼執(zhí)行單元400掌握記錄在可執(zhí)行文件信息存儲空間25的起始地址到共享內(nèi)存末端為止的空間(大小mExesSize字節(jié))的EXE_INF045對象的內(nèi)容,提取可執(zhí)行文件8的路徑和文件名而執(zhí)行可執(zhí)行文件8,在此,可執(zhí)行文件信息存儲空間25的起始地址是共享內(nèi)存5的pExes指針成員變量22的存儲值。此時(shí),可執(zhí)行文件8根據(jù)如WaitForSingleObject等的同步待機(jī)函數(shù)49在待機(jī)(Waiting)狀態(tài)下等待同步信號。通過接收在代碼執(zhí)行單元400產(chǎn)生的同步信號,各可執(zhí)行文件8進(jìn)行同步時(shí)間推進(jìn)10。此時(shí),各可執(zhí)行文件8執(zhí)行預(yù)定的時(shí)間At (Time Advancement)ll_l之后,再次通過同步待機(jī)函數(shù)進(jìn)入待機(jī)狀態(tài)。包含可執(zhí)行文件8的相關(guān)信息的EXE_INF0結(jié)構(gòu)體42的Status成員變量45表示對應(yīng)的可執(zhí)行文件8是否完成一次Time Advancement作業(yè)的狀態(tài),通過在代碼執(zhí)行單元400定期掌握所有EXE_INF042對象的Status成員變量信息,在所有可執(zhí)行文件8完成一次時(shí)間推進(jìn)(Time Advancement)的時(shí)刻將同步個(gè)體的信號修改為ON11,從而使可執(zhí)行文件8能夠進(jìn)行下一個(gè)時(shí)間推進(jìn)(Time Advancement)。按照這種邏輯,各可執(zhí)行文件8能夠在實(shí)現(xiàn)時(shí)間同步的情況下被執(zhí)行。并且,在代碼執(zhí)行單元400中通過將對應(yīng)于上述共享內(nèi)存5的整體大小的sizeof (SHARED_MEMORY_HEADER) +nVarsSize+nValuesSize+nExesSiZe 字節(jié)記錄到如硬盤等物理存儲器(Physical Memory) 12中,從而可以將記錄時(shí)的所有可執(zhí)行文件的狀態(tài)全部存儲。不僅如此,僅將物理存儲器12的內(nèi)容恢復(fù)到共享內(nèi)存5中,即可將各可執(zhí)行文件8的當(dāng)前狀態(tài)完美地恢復(fù)到與存儲時(shí)刻相同的狀態(tài)。如上所述,根據(jù)本發(fā)明,為了集成多個(gè)工程分析程序6,以往需要對現(xiàn)有的源碼直接進(jìn)行集成而制作大型源碼,或者需要按照DLL方式或LIB方式的函數(shù)因子交換形式進(jìn)行開發(fā),此時(shí)需要非常長的集成時(shí)間和更換連接變量帶來的相當(dāng)長的代碼修改時(shí)間。但是,在本發(fā)明中,通過使用系統(tǒng)化共享內(nèi)存來共享所有全局變量的所有信息,從而可以克服大量的連接傳遞函數(shù)的生成和連接函數(shù)調(diào)用次數(shù)的增加引起的非有效性增加的問題以及關(guān)系到連接變量的大量源碼的修改等的很多缺點(diǎn),可以得到大大縮短集成開發(fā)時(shí)間的效果。并且,在現(xiàn)有的直接集成源碼的方式中,為了存儲程序的執(zhí)行過程中的狀態(tài),需要在源碼中制作將特定時(shí)刻記錄到物理存儲器的源碼,并且除了預(yù)定的時(shí)刻之外,根本無法實(shí)現(xiàn)程序狀態(tài)的存儲和恢復(fù)。但是,根據(jù)本發(fā)明,通過將所定義的共享內(nèi)存5存儲到如硬盤等物理存儲器12中,從而僅將物理存儲器12的內(nèi)容恢復(fù)到共享內(nèi)存5,即可將各可執(zhí)行文件8的當(dāng)前狀態(tài)完美地恢復(fù)到與存儲時(shí)刻相同的狀態(tài),因此通過程序進(jìn)行工程分析時(shí),任意時(shí)刻都能根據(jù)需要存儲程序的狀態(tài),在利用同步集成系統(tǒng)進(jìn)行系統(tǒng)分析作業(yè)時(shí)具有很大的優(yōu)勢。并且,在現(xiàn)有的直接集成源碼的方式中,即使是經(jīng)過無數(shù)次試錯(cuò)后完成的集成程序,當(dāng)各程序改版(Version-up)時(shí),為了反映改版內(nèi)容需要再次重復(fù)非常長的集成過程。但是,根據(jù)本發(fā)明,由于各可執(zhí)行文件8在獨(dú)立執(zhí)行的同時(shí)也能實(shí)現(xiàn)時(shí)間同步,因此可以提供能夠獨(dú)立地對各程序進(jìn)行維護(hù)并以改版的代碼進(jìn)行集成的根本解決方法。并且,現(xiàn)有的集成源碼的方式在開發(fā)圖形連接程序時(shí)需要在程序源碼中一一指定期望顯示(Display)的連接變量,直接以如函數(shù)等連接方式將內(nèi)部變量值公開到外部。但是,根據(jù)本發(fā)明,通過提供標(biāo)準(zhǔn)化的連接變量的插入、刪除、查詢和檢索功能函數(shù),因此在開發(fā)圖形顯示程序等具有其他目的的連接程序時(shí),也能夠提供相當(dāng)便捷的功能。圖10為用于說明本發(fā)明的利用制作成數(shù)據(jù)庫的共享內(nèi)存的工程分析程序之間的同步連接方法的流程圖。本發(fā)明所提供的工程程序之間的同步連接方法,包含步驟提取在程序的源碼中定義的全局變量;用該全局變量構(gòu)成數(shù)據(jù)庫后存儲到共享內(nèi)存中,以能夠通過變量名進(jìn)行檢索;在移除其源碼的全局變量聲明區(qū)之后,對最初源碼進(jìn)行修改而生成針對各程序的可執(zhí)行文件,以在共享內(nèi)存中分得存儲空間;執(zhí)行所生成的可執(zhí)行文件,以同步的時(shí)間間隔推進(jìn)時(shí)間,并將確定各程序的狀態(tài)的共享內(nèi)存的存儲空間存儲到物理存儲器及進(jìn)行恢復(fù)。參照圖10,首先,全局變量提取單元解析構(gòu)成單一程序的源碼中定義的所有全局變量(或者Static變量、new/malloc等Heap變量),將關(guān)于變量的各種信息制作成VAR_INF0結(jié)構(gòu)體34形式,并將其傳遞到內(nèi)存管理單元(S100 )。然后,內(nèi)存管理單元用來自全局變量提取單元的全局變量構(gòu)成數(shù)據(jù)庫后帶有邏輯性地存儲到共享內(nèi)存,以通過變量名(Key值)容易進(jìn)行檢索(S110)。然后,翻譯單元從各程序源碼中移除全局變量(或者,C語言的情況下為new/malloc等Heap變量)的聲明區(qū),作為替代對最初源碼進(jìn)行語法分析而修改源碼本身,以得到內(nèi)存管理單元所提供的共享內(nèi)存存儲空間(S120)。并且,翻譯單元將程序的時(shí)間推進(jìn)區(qū)間循環(huán)語句修改為等待同步個(gè)體的邏輯,修改為僅在代碼執(zhí)行單元產(chǎn)生的時(shí)間同步信號接通(ON)的時(shí)刻推進(jìn)時(shí)間,并對修改的源碼進(jìn)行編譯而生成可執(zhí)行文件(S130)。然后,代碼執(zhí)行單元在共享內(nèi)存中的可執(zhí)行文件信息存儲空間中檢索可執(zhí)行文件的信息,進(jìn)行同步執(zhí)行(S140)。如此,通過接收代碼執(zhí)行單元中產(chǎn)生的同步信號,各可執(zhí)行文件8進(jìn)行同步時(shí)間推進(jìn)(S150)。最后,代碼執(zhí)行單元通過將對應(yīng)于上述共享內(nèi)存的整體大小的字節(jié)記錄到如硬盤等物理存儲器中,從而可以將記錄時(shí)的所有可執(zhí)行文件的狀態(tài)全部進(jìn)行存儲,而且僅將物理存儲器的內(nèi)容恢復(fù)到共享內(nèi)存中,既可將各可執(zhí)行文件的當(dāng)前狀態(tài)完美地恢復(fù)到與存儲時(shí)刻相同的狀態(tài)(S160)。如上所述,附圖和說明書中公開了最佳實(shí)施例。雖然在此使用了特定的術(shù)語,但這只是為了說明本發(fā)明,并不是為了限定其技術(shù)含義或者限定權(quán)利要求書中記載的本發(fā)明的保護(hù)范圍而使用的。因此,本技術(shù)領(lǐng)域的具有一般知識水平的人員能夠理解到可以根據(jù)本發(fā)明進(jìn)行各種變形和得到等同的其他實(shí)施例。因此,本發(fā)明的真正的技術(shù)保護(hù)范圍應(yīng)該由權(quán)利要求書的技術(shù)思想來確定。
權(quán)利要求
1.一種工程分析程序之間的同步連接系統(tǒng),其特征在于,包含: 全局變量提取單元,用于提取多個(gè)程序的源碼中所定義的全局變量; 內(nèi)存管理單元,構(gòu)成數(shù)據(jù)庫并存儲到共享內(nèi)存中,以根據(jù)變量名檢索到所述全局變量; 翻譯單元,移除所述源碼的全局變量聲明區(qū)后,通過修改最初源碼而生成針對各程序的可執(zhí)行文件,以在所述共享內(nèi)存中分得存儲空間; 代碼執(zhí)行單元,用于執(zhí)行由所述翻譯單元生成的可執(zhí)行文件,以同步的時(shí)間間隔進(jìn)行時(shí)間推進(jìn),并將確定各程序的狀態(tài)的共享內(nèi)存的存儲空間存儲到物理存儲器及進(jìn)行恢復(fù)。
2.根據(jù)權(quán)利要求1所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述全局變量提取單元解析所述全局變量,并以特定的結(jié)構(gòu)體形式生成包含關(guān)于各全局變量的描述、單位、所屬系統(tǒng)、變量形態(tài)、維、偏移值和變量名中的一個(gè)以上的信息,并將所生成的信息傳遞到所述內(nèi)存管理單元中。
3.根據(jù)權(quán)利要求1所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述共享內(nèi)存的標(biāo)題包含: 表示與所述全局變量--對應(yīng)的結(jié)構(gòu)體的對象在所述共享內(nèi)存中所占的存儲空間的大小的整數(shù)信息; 表示在所述共享內(nèi)存中全局變量的當(dāng)前值所占的存儲空間的大小的整數(shù)信息; 表示將在所述代碼執(zhí)行單元中執(zhí)行的可執(zhí)行文件的存儲空間的大小的整數(shù)信息。
4.根據(jù)權(quán)利要求3所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述共享內(nèi)存的標(biāo)題進(jìn)一步包含: 用于對與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象構(gòu)成數(shù)據(jù)庫而進(jìn)行管理的變量; 存儲與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象的存儲空間的起始地址的變量; 存儲所述全局變量的當(dāng)前值存儲空間的起始地址的變量; 存儲所述可執(zhí)行文件的存儲空間的起始地址的變量。
5.根據(jù)權(quán)利要求3所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述共享內(nèi)存包含: 用于存儲與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象的存儲空間; 用于存儲所述全局變量的當(dāng)前值的存儲空間; 用于存儲關(guān)于所述可執(zhí)行文件的信息的存儲空間。
6.根據(jù)權(quán)利要求3所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述內(nèi)存管理單元定義用于插入、刪除和查詢與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象的管理結(jié)構(gòu)體,所述管理結(jié)構(gòu)體包含表示所注冊的總?cè)肿兞康膫€(gè)數(shù)的變量、為了數(shù)據(jù)檢索而指定成為全局變量整體的重點(diǎn)的節(jié)點(diǎn)的變量、用于對與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象進(jìn)行插入、刪除、查詢和檢索的函數(shù)。
7.根據(jù)權(quán)利要求1所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述翻譯單元將所述最初源碼的時(shí)間推進(jìn)區(qū)間循環(huán)語句修改為等待同步個(gè)體的邏輯,并生成所述可執(zhí)行文件以在所述代碼執(zhí)行單元產(chǎn)生的時(shí)間同步信號為接通的時(shí)刻推進(jìn)時(shí)間。
8.根據(jù)權(quán)利要求1所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述翻譯單元將關(guān)于所述可執(zhí)行文件的信息存儲在所述共享內(nèi)存中的執(zhí)行信息結(jié)構(gòu)體中,所述執(zhí)行信息結(jié)構(gòu)體包含存儲可執(zhí)行文件名稱的存儲空間、接收同步信號的同步個(gè)體存儲空間、存儲可執(zhí)行文件的執(zhí)行狀態(tài)的存儲空間。
9.根據(jù)權(quán)利要求8所述的工程分析程序之間的同步連接系統(tǒng),其特征在于,所述代碼執(zhí)行單元通過掌握存儲所述可執(zhí)行文件名稱的存儲空間、接收同步信號的同步個(gè)體的存儲空間以及存儲可執(zhí)行文件的執(zhí)行狀態(tài)的存儲空間中注冊的對象的內(nèi)容,利用于可執(zhí)行文件的同步執(zhí)行。
10.一種工程分析程序之間的同步連接方法,其特征在于,包含步驟: 提取在程序的源碼中定義的全局變量; 構(gòu)成數(shù)據(jù)庫后存儲到共享內(nèi)存中,以根據(jù)變量名檢索所述全局變量; 在移除所述源碼的全局變量聲明區(qū)之后,對最初源碼進(jìn)行修改而生成針對各程序的可執(zhí)行文件,以在所述共享內(nèi)存中分得存儲空間; 執(zhí)行所述生成的可執(zhí)行文件,以同步的時(shí)間間隔推進(jìn)時(shí)間,并將確定各程序的狀態(tài)的共享內(nèi)存的存儲空間存儲到 物理存儲器及進(jìn)行恢復(fù)。
11.根據(jù)權(quán)利要求10所述的工程分析程序之間的同步連接方法,其特征在于,提取在所述程序的源碼中定義的全局變量的步驟包含解析所述全局變量,并以特定的結(jié)構(gòu)體形式生成包含關(guān)于各全局變量的描述、單位、所屬系統(tǒng)、變量形態(tài)、維、偏移值和變量名中的一個(gè)以上的信息的步驟。
12.根據(jù)權(quán)利要求10所述的工程分析程序之間的同步連接方法,其特征在于,構(gòu)成數(shù)據(jù)庫后存儲到共享內(nèi)存中,以根據(jù)變量名檢索所述全局變量的步驟包含定義管理結(jié)構(gòu)體的步驟,以對與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象進(jìn)行插入、刪除和查詢。
13.根據(jù)權(quán)利要求12所述的工程分析程序之間的同步連接方法,其特征在于,所述管理結(jié)構(gòu)體包含表示所注冊的總?cè)肿兞康膫€(gè)數(shù)的變量、為了數(shù)據(jù)檢索而指定成為全局變量整體的重點(diǎn)的節(jié)點(diǎn)的變量、用于對與所述全局變量一一對應(yīng)的結(jié)構(gòu)體的對象進(jìn)行插入、刪除、查詢和檢索的函數(shù)。
14.根據(jù)權(quán)利要求10所述的工程分析程序之間的同步連接方法,其特征在于,在移除所述源碼的全局變量聲明區(qū)之后,對最初源碼進(jìn)行修改而生成針對各程序的可執(zhí)行文件,以在所述共享內(nèi)存中分得存儲空間的步驟包含將關(guān)于所述可執(zhí)行文件的信息存儲在所述共享內(nèi)存中的執(zhí)行信息結(jié)構(gòu)體中的步驟。
15.根據(jù)權(quán)利要求14所述的工程分析程序之間的同步連接方法,其特征在于,所述執(zhí)行信息結(jié)構(gòu)體包含存儲可執(zhí)行文件名稱的存儲空間、接收同步信號的同步個(gè)體存儲空間、存儲可執(zhí)行文件的執(zhí)行狀態(tài)的存儲空間。
16.根據(jù)權(quán)利要求10所述的工程分析程序之間的同步連接方法,其特征在于,當(dāng)對多個(gè)程序進(jìn)行集成而用作綜合分析用途時(shí),進(jìn)一步包含將各程序所使用的所有內(nèi)部變量的存儲空間重新分配為制作成數(shù)據(jù)庫的共享內(nèi)存,將所定義的共享內(nèi)存存儲在所述物理存儲器,將所述物理存儲器的內(nèi)容恢復(fù)到共享內(nèi)存而將各可執(zhí)行文件的狀態(tài)恢復(fù)為與存儲時(shí)刻相同的狀態(tài)的步驟。
17.根據(jù)權(quán)利要求16所述的工程分析程序之間的同步連接方法,其特征在于,與針對工程分析程序的圖形程序連接時(shí),進(jìn)一步包含通過所述制作成數(shù)據(jù)庫的共享內(nèi)存的方式重新分配內(nèi)部全局變量的存儲空間,進(jìn)行連接變量的當(dāng)前值的提取和更新的步驟。
全文摘要
本發(fā)明的工程分析程序之間的同步連接系統(tǒng),包含全局變量提取單元,用于提取多個(gè)程序的源碼中所定義的全局變量;內(nèi)存管理單元,構(gòu)成數(shù)據(jù)庫并存儲到共享內(nèi)存中,以根據(jù)變量名檢索到全局變量;翻譯單元,移除源碼的全局變量聲明區(qū)后,通過修改最初源碼而生成針對各程序的可執(zhí)行文件,以在共享內(nèi)存中分得存儲空間;代碼執(zhí)行單元,用于執(zhí)行由翻譯單元生成的可執(zhí)行文件,以同步的時(shí)間間隔進(jìn)行時(shí)間推進(jìn),并將確定各程序的狀態(tài)的共享內(nèi)存的存儲空間存儲到物理存儲器及進(jìn)行恢復(fù)。
文檔編號G06F17/30GK103080925SQ201080068330
公開日2013年5月1日 申請日期2010年9月2日 優(yōu)先權(quán)日2010年7月29日
發(fā)明者洪振赫 申請人:韓國水力原子力株式會社