謝容麗
(福建船政交通職業(yè)學(xué)院,福州 350000)
實(shí)驗(yàn)室嵌入式系統(tǒng)是當(dāng)前比較熱門的科學(xué)技術(shù)之一,主要用于管理和規(guī)劃實(shí)驗(yàn)室。由于該系統(tǒng)具有成本低、可靠性高、系統(tǒng)內(nèi)核小、專用性較強(qiáng)等優(yōu)點(diǎn),已經(jīng)被廣泛應(yīng)用于多個(gè)領(lǐng)域中,例如工業(yè)控制、醫(yī)療儀器、通信等,并且在各大高校成立了專門的學(xué)科[1]。實(shí)驗(yàn)室嵌入式系統(tǒng)在運(yùn)行一段時(shí)間后會(huì)存儲(chǔ)大量的日志數(shù)據(jù),由于其內(nèi)核比較小,大量的囤積數(shù)據(jù)會(huì)影響實(shí)驗(yàn)室嵌入式系統(tǒng)的運(yùn)行效果,出現(xiàn)系統(tǒng)延遲、卡頓現(xiàn)象[2]。該系統(tǒng)在設(shè)計(jì)開發(fā)時(shí)考慮到這一問題,為了保證系統(tǒng)能夠長(zhǎng)期有效運(yùn)行,定期會(huì)對(duì)系統(tǒng)日志數(shù)據(jù)進(jìn)行自動(dòng)刪除和銷毀[3]。這樣雖然可以確保實(shí)驗(yàn)室嵌入式系統(tǒng)運(yùn)行質(zhì)量,但是由于系統(tǒng)日志存有一些有價(jià)值和有用的數(shù)據(jù),當(dāng)實(shí)驗(yàn)室嵌入式系統(tǒng)用戶沒有及時(shí)對(duì)日志數(shù)據(jù)進(jìn)行備份,系統(tǒng)將原有數(shù)據(jù)進(jìn)行了刪除,從而使系統(tǒng)日志有效數(shù)據(jù)丟失,該問題成為實(shí)驗(yàn)室嵌入式系統(tǒng)用戶一大難題[4]。針對(duì)該問題,相關(guān)學(xué)者對(duì)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)方法進(jìn)行研究,并取得了一定的研究成果。目前,現(xiàn)有的方法雖然可以保證實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)的時(shí)效性,但在實(shí)際應(yīng)用中恢復(fù)的數(shù)據(jù)量較少,無法實(shí)現(xiàn)100%數(shù)據(jù)恢復(fù)。傳統(tǒng)方法已經(jīng)無法滿足實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)需求,為此,提出基于時(shí)效規(guī)則的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)方法。
目前用于實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)的方法主要有兩大類:一類是基于機(jī)器學(xué)習(xí)的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)方法,該方法利用機(jī)器學(xué)習(xí)算法對(duì)系統(tǒng)日志數(shù)據(jù)集進(jìn)行聚類分析學(xué)習(xí),并使用K鄰近值算法為每一個(gè)自動(dòng)刪除的系統(tǒng)日志數(shù)據(jù)找到與其距離最近的鄰居類,最后根據(jù)鄰居類相關(guān)屬性對(duì)系統(tǒng)自動(dòng)刪除的日志數(shù)據(jù)屬性值進(jìn)行替換,從而恢復(fù)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)[5]。基于機(jī)器學(xué)習(xí)的方法對(duì)日志數(shù)據(jù)的恢復(fù)是以相鄰數(shù)據(jù)屬性為根據(jù),但是相鄰數(shù)據(jù)與缺失數(shù)據(jù)的屬性在本質(zhì)上還是有區(qū)別的,因此,該方法所恢復(fù)的數(shù)據(jù)大部分與原有數(shù)據(jù)不同,且隨著實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)缺失率的增加,機(jī)器學(xué)習(xí)算法系統(tǒng)進(jìn)行大規(guī)模的訓(xùn)練和學(xué)習(xí),在數(shù)據(jù)恢復(fù)過程中難免會(huì)存在恢復(fù)誤差,同時(shí)還會(huì)影響系統(tǒng)日志數(shù)據(jù)恢復(fù)速度,并不適用于大規(guī)模的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)問題。第二類是基于人工智能的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)方法,該方法主要應(yīng)用人工智能算法將丟失的數(shù)據(jù)以矩陣的形式表示,利用矩陣對(duì)丟失數(shù)據(jù)進(jìn)行計(jì)算,隨機(jī)生成若干個(gè)初始解;然后采用關(guān)聯(lián)算法通過交叉、變異等操作從初始解中尋找出最優(yōu)解,從而得到一個(gè)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)相似的恢復(fù)數(shù)據(jù)集[6]。該方法雖然在計(jì)算過程上進(jìn)行了精進(jìn),但是由于實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)屬性之間存在著復(fù)雜的非線性相關(guān)關(guān)系,人工智能算法在實(shí)際應(yīng)用中難以尋找到最合適的目標(biāo)函數(shù),所以也很難恢復(fù)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù),且在實(shí)際應(yīng)用中恢復(fù)的數(shù)據(jù)量與丟失的數(shù)據(jù)量不對(duì)等,無法實(shí)現(xiàn)最大比例的丟失日志數(shù)據(jù)恢復(fù)。
在對(duì)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)之前,首先需要對(duì)丟失的數(shù)據(jù)進(jìn)行定位,確定數(shù)據(jù)恢復(fù)對(duì)象,數(shù)據(jù)定位這一過程中主要完成的任務(wù)如下。
將實(shí)驗(yàn)室嵌入式系統(tǒng)日志物理地址編號(hào)進(jìn)行排序,建立數(shù)據(jù)組blo存儲(chǔ)各個(gè)日志物理地址編號(hào),按照編號(hào)對(duì)建立的數(shù)據(jù)組從小到大排序。在此基礎(chǔ)上再建立jsd數(shù)據(jù)組和dsm數(shù)據(jù)組用于存儲(chǔ)實(shí)驗(yàn)室嵌入式系統(tǒng)日志對(duì)象頭和頁面編號(hào)[7]。內(nèi)存映射管理器攔截來自上層應(yīng)用程序的分配/解除分配請(qǐng)求,并通過連續(xù)塊的預(yù)分配為其提供服務(wù),每個(gè)塊托管不同的二次冪大小的塊。為每個(gè)模擬對(duì)象保留一個(gè)名為 malloc_area 的元數(shù)據(jù)表,用于識(shí)別已預(yù)先分配的內(nèi)存塊的虛擬地址,服務(wù)來自該對(duì)象的分配請(qǐng)求,并通過簡(jiǎn)潔的位圖表示維護(hù)塊內(nèi)每個(gè)塊的狀態(tài)(忙或空閑),包括元數(shù)據(jù)表和預(yù)分配塊的數(shù)量/大小的動(dòng)態(tài)擴(kuò)展機(jī)制。內(nèi)存映射管理器通過將所有分配的塊打包在一個(gè)連續(xù)的日志緩沖區(qū)中,以及在對(duì)象恢復(fù)的情況下將記錄的塊放回原位。為了啟用增量日志記錄,內(nèi)存映射管理器已連續(xù)與編譯/鏈接時(shí)檢測(cè)工具(已針對(duì) IA-32/x86-64 體系結(jié)構(gòu)和 ELF 量身定制)集成,從而允許透明集成輕量級(jí)的更新操作跟蹤機(jī)制。內(nèi)存映射管理器僅將當(dāng)前正在使用的注冊(cè)模塊打包在日志緩沖區(qū)中,并記錄數(shù)據(jù)狀態(tài)恢復(fù)時(shí)使用的元數(shù)據(jù)。
建立完成數(shù)據(jù)組之后,對(duì)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)進(jìn)行正序遍歷,從第一物理塊開始遍歷,讀取每一個(gè)物理塊中的日志對(duì)象頭頁面。當(dāng)讀取完一個(gè)物理塊中日志對(duì)象頭頁面后,在所對(duì)應(yīng)的數(shù)據(jù)組中記錄日志對(duì)象頭頁面的文件名、創(chuàng)建時(shí)間以及更新時(shí)間等信息。當(dāng)所有數(shù)據(jù)組遍歷完成之后,再按照上述程序進(jìn)行遍歷[8]。當(dāng)再次讀取數(shù)據(jù)組信息時(shí),如果發(fā)現(xiàn)讀取的信息與上一次信息相同,則對(duì)該數(shù)據(jù)組跳過,不再進(jìn)行信息記錄。如果發(fā)現(xiàn)讀取的信息與上一次信息不一致,則將該實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)定義為丟失數(shù)據(jù)。通過讀取的數(shù)據(jù)組信息之間的映射關(guān)系可以計(jì)算出丟失日志數(shù)據(jù)所對(duì)應(yīng)的物理地址,其公式為
(1)
式中:s表示丟失的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)物理地址;k表示讀取到的數(shù)據(jù)組中日志頁面所在的邏輯地址號(hào);a表示物理塊內(nèi)的頁面數(shù)量;co表示日志頁面所在的物理地址在物理塊內(nèi)的偏移量[9]。利用式(1)計(jì)算丟失的系統(tǒng)日志數(shù)據(jù)物理地址,并設(shè)置一個(gè)指針pdde,利用該指針對(duì)丟失日志數(shù)據(jù)物理地址進(jìn)行拷貝,用于后續(xù)數(shù)據(jù)恢復(fù)。
當(dāng)定位到實(shí)驗(yàn)室嵌入式系統(tǒng)日志待恢復(fù)數(shù)據(jù)后,對(duì)丟失數(shù)據(jù)狀態(tài)時(shí)效規(guī)則進(jìn)行提取。數(shù)據(jù)的時(shí)效規(guī)則是指相同的一個(gè)實(shí)體在不同時(shí)間階段內(nèi)記錄的數(shù)據(jù)屬性會(huì)隨著時(shí)間的推移表現(xiàn)出有規(guī)律性的特征,該特征為數(shù)據(jù)的時(shí)效規(guī)則。文中需要提取丟失數(shù)據(jù)的狀態(tài)時(shí)效規(guī)則,假設(shè)關(guān)系數(shù)據(jù)庫(kù)模式為T,表示為
T=(EID,A1,…,Ai).
(2)
式中:EID表示數(shù)據(jù)標(biāo)識(shí)符,不同元組的相同數(shù)據(jù)標(biāo)識(shí)符對(duì)應(yīng)的是同一個(gè)數(shù)據(jù);Ai表示數(shù)據(jù)第i個(gè)屬性,假設(shè)數(shù)據(jù)屬性的值域?yàn)閐omAi。在以上設(shè)定的關(guān)系中,將Ai值域dom中所有不重復(fù)值進(jìn)行集合,定義為有限狀態(tài)集合,用有向圖G(V,E)表示實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)時(shí)效規(guī)則的狀態(tài)圖[10]。在該關(guān)系上,屬于同一個(gè)待恢復(fù)數(shù)據(jù)的兩個(gè)元組分別有對(duì)應(yīng)的屬性值,且該兩個(gè)元組的狀態(tài)結(jié)點(diǎn)都在有向圖G(V,E)上[11]。如果前一個(gè)元組比后一個(gè)元組新,則在有向圖G(V,E)中,新的元組可以到達(dá)后一個(gè)元組,而后一個(gè)元組不可到達(dá)新的元組[12]。如果呈現(xiàn)該狀態(tài)則表示為一條狀態(tài)時(shí)效規(guī)則,對(duì)其進(jìn)行提取,如果沒有呈現(xiàn)該狀態(tài),則自動(dòng)跳過,如此對(duì)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)狀態(tài)時(shí)效規(guī)則進(jìn)行提取。
數(shù)據(jù)的眾多屬性中時(shí)間屬性最為重要,時(shí)間作為一個(gè)連續(xù)值,如果數(shù)據(jù)中時(shí)間屬性丟失,則無法對(duì)其進(jìn)行完整修復(fù)。因此,在提取到數(shù)據(jù)的狀態(tài)時(shí)效規(guī)則之后,利用時(shí)效規(guī)則對(duì)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)進(jìn)行恢復(fù)。假設(shè)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)的實(shí)現(xiàn)序列為e(1→2→3→…→n),1~n表示日志數(shù)據(jù)記錄時(shí)間索引,按照時(shí)間先后順序排列[13]。在此基礎(chǔ)上通過時(shí)效規(guī)則匹配還原該數(shù)據(jù),其過程如下:
第一步:以“1”為起始/終點(diǎn)窮舉路徑,將得到的路徑集中到集合A中。
第二步:以“n”為起始/終點(diǎn)窮舉路徑,將得到的路徑集中到集合B中。
第三步:分別計(jì)算出每個(gè)路徑的支持度。支持度用于表示數(shù)據(jù)時(shí)效規(guī)則的強(qiáng)和弱,其計(jì)算公式為
(3)
式中:d表示數(shù)據(jù)時(shí)效規(guī)則的支持度;u表示滿足時(shí)效規(guī)則的實(shí)體集合;x表示實(shí)體集合中的實(shí)體數(shù)量;w表示不滿足時(shí)效規(guī)則的實(shí)體數(shù)量[14]。對(duì)集合A中的多個(gè)時(shí)效規(guī)則進(jìn)行支持度檢查,檢查是否存在支持度為1的時(shí)效規(guī)則[15]。如果存在,將時(shí)效規(guī)則作為依賴條件的時(shí)間索引添加到后繼的時(shí)效列表中。如果檢驗(yàn)發(fā)現(xiàn)不存在支持度為1的時(shí)效規(guī)則,則依賴時(shí)效規(guī)則的時(shí)間索引的后繼時(shí)效列表為空。
第四步:同樣對(duì)集合B中的多個(gè)時(shí)效規(guī)則支持度進(jìn)行檢查。如果在該集合中存在強(qiáng)符合時(shí)效規(guī)則,則將時(shí)效規(guī)則前件時(shí)間索引添加到前驅(qū)的時(shí)效列表中。如果檢驗(yàn)發(fā)現(xiàn)不存在支持度為1的時(shí)效規(guī)則,則時(shí)效規(guī)則前件時(shí)間索引的前驅(qū)時(shí)效列表為空。
第五步:對(duì)上兩步中的前驅(qū)、后繼時(shí)效列表進(jìn)行處理。如果實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)的后繼時(shí)序列表為空,則可以確定該數(shù)據(jù)屬性狀態(tài)結(jié)點(diǎn)出度0是有向圖G(V,E)的一個(gè)終點(diǎn);如果實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)屬性的后繼時(shí)序列表存在強(qiáng)符合時(shí)效規(guī)則,則按照狀態(tài)時(shí)效規(guī)則的強(qiáng)和弱對(duì)數(shù)據(jù)屬性進(jìn)行排序。按照處理后的時(shí)序順序?qū)?shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)屬性進(jìn)行恢復(fù),由此可以完成實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù),進(jìn)而實(shí)現(xiàn)基于時(shí)效規(guī)則的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)。
以某實(shí)驗(yàn)室嵌入式系統(tǒng)為研究對(duì)象,該系統(tǒng)日志數(shù)據(jù)丟失率為20%~80%,每隔1 h就會(huì)自動(dòng)刪除實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)。為了收集到系統(tǒng)丟失的數(shù)據(jù),將系統(tǒng)日志某個(gè)數(shù)據(jù)項(xiàng)作為ground truth(真值),如果該數(shù)據(jù)項(xiàng)的MMU數(shù)據(jù)屬性和AMU數(shù)據(jù)屬性的數(shù)據(jù)記錄被實(shí)驗(yàn)室嵌入式系統(tǒng)自動(dòng)移除,則將其作為丟失數(shù)據(jù)。實(shí)驗(yàn)隨機(jī)收集了500 MB丟失日志數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),利用文中設(shè)計(jì)方法與傳統(tǒng)方法對(duì)該數(shù)據(jù)集進(jìn)行恢復(fù)。本次實(shí)驗(yàn)環(huán)境為一臺(tái)計(jì)算機(jī),該計(jì)算機(jī)CPU配置為AMD Ryzen 8 1 500 K@4.25 GHz,計(jì)算機(jī)內(nèi)存配置為16 GB,外存配置為128 GB,以Windows2010作為操作系統(tǒng)。實(shí)驗(yàn)分別進(jìn)行單個(gè)數(shù)據(jù)恢復(fù)、多個(gè)數(shù)據(jù)恢復(fù)、多次修改后的數(shù)據(jù)恢復(fù)以及日志歷史數(shù)據(jù)的恢復(fù)。以test名字建立一個(gè)文本文件,將恢復(fù)后的數(shù)據(jù)輸入到該文件中,并利用LPP軟件記錄該實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)情況,表1為設(shè)計(jì)方法與傳統(tǒng)方法數(shù)據(jù)恢復(fù)統(tǒng)計(jì)。
表1 兩種方法數(shù)據(jù)恢復(fù)統(tǒng)計(jì) 個(gè)
實(shí)驗(yàn)又對(duì)兩種方法數(shù)據(jù)恢復(fù)量進(jìn)行了統(tǒng)計(jì),并將其作為實(shí)驗(yàn)結(jié)果,如表2所示。
表2 兩種方法數(shù)據(jù)恢復(fù)量對(duì)比
從表2中數(shù)據(jù)分析可以得出以下結(jié)論:文中設(shè)計(jì)方法數(shù)據(jù)恢復(fù)量比較大,且數(shù)據(jù)恢復(fù)率比較高,基本都在98%以上,說明設(shè)計(jì)方法可以基本將實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)進(jìn)行全面恢復(fù)。而傳統(tǒng)方法隨著數(shù)據(jù)丟失量的增加,數(shù)據(jù)恢復(fù)率呈下降趨勢(shì),最低達(dá)到62.8%,說明傳統(tǒng)方法恢復(fù)的數(shù)據(jù)量有限,相比設(shè)計(jì)方法數(shù)據(jù)恢復(fù)性能較差。因此,實(shí)驗(yàn)證明了本設(shè)計(jì)方法可以實(shí)現(xiàn)實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)有效恢復(fù),在恢復(fù)量方面更優(yōu)于傳統(tǒng)方法,可以滿足實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)的需求。
實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)丟失問題日益嚴(yán)重,現(xiàn)有的恢復(fù)方法無法應(yīng)對(duì)系統(tǒng)日志數(shù)據(jù)丟失的挑戰(zhàn),并且系統(tǒng)日志數(shù)據(jù)稀疏性和數(shù)據(jù)時(shí)間屬性之間存在著復(fù)雜的相關(guān)關(guān)系。文中結(jié)合現(xiàn)有方法的不足,應(yīng)用時(shí)效規(guī)則設(shè)計(jì)了一種面向?qū)嶒?yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)方法。該方法以時(shí)效分析確定丟失數(shù)據(jù)的時(shí)間屬性,并通過數(shù)據(jù)重組實(shí)現(xiàn)了數(shù)據(jù)恢復(fù)。此次研究為基于時(shí)效規(guī)則的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)方法實(shí)踐提供了參考依據(jù),同時(shí)也解決了實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)丟失問題,對(duì)傳統(tǒng)方法的優(yōu)化與完善具有一定的現(xiàn)實(shí)意義。由于此次查閱的文獻(xiàn)資料有限,設(shè)計(jì)的方法可能存在一些不足之處,有待今后在基于時(shí)效規(guī)則的實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)方法優(yōu)化,以及實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)模型等方面進(jìn)行進(jìn)一步研究,為實(shí)驗(yàn)室嵌入式系統(tǒng)日志數(shù)據(jù)恢復(fù)提供理論支持。