摘 要:介紹一種記錄系統(tǒng)信息表的設(shè)計(jì)方法,并根據(jù)實(shí)踐經(jīng)驗(yàn)提出優(yōu)化措施。通過(guò)對(duì)信息表進(jìn)行備份、對(duì)備份信息表單獨(dú)刷新、對(duì)備份信息表位置的精心設(shè)計(jì)等措施,保證信息表能效記錄數(shù)據(jù)關(guān)鍵信息,并且兩份信息表不會(huì)同時(shí)被破壞。通過(guò)對(duì)備份信息表的自動(dòng)讀取保證系統(tǒng)在一個(gè)信息表遭到意外破壞時(shí)系統(tǒng)仍能正常工作,并自動(dòng)恢復(fù)被損壞的信息表,在數(shù)據(jù)保護(hù)和系統(tǒng)穩(wěn)定工作方面具有重要意義。
關(guān)鍵詞:記錄系統(tǒng);信息表;電子盤(pán);刷新;邏輯扇區(qū)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004-373X(2008)02-087-03
A Method of Designing and Optimizing Information Table in Recording System
GAO Xianfeng,XIANG Bing
(China Airborne Missile Academy,Luoyang,471009,China)
Abstract: This paper introduces a method of designing information table in recording system and gives an optimized method used in actual applications.The designing method ensures that information table can recording important information of the recorded data and two information tables will not be destroyed at the same time through backupping the information table,separately updating backup information table and carefully placing backup information table.The recording system ensures that when one of the two information table is destroyed,the recording system can work normally and recover the destroyed information table through getting the other automatically.It is significant to data-protecting and the recording system reliably working.
Keywords:recording system;information table;E-disk;update;logic sector
記錄系統(tǒng)中信息表的作用是存儲(chǔ)系統(tǒng)加電次數(shù)、每次加電記錄數(shù)據(jù)的起始位置和結(jié)束位置等關(guān)鍵信息。系統(tǒng)每次加電時(shí)都要讀取信息表,從中獲取上次系統(tǒng)加電時(shí)已經(jīng)記錄的數(shù)據(jù)位置,并確定新數(shù)據(jù)的起始位置;數(shù)據(jù)處理系統(tǒng)在處理數(shù)據(jù)前要讀取信息表,確定每次加電的起始位置和結(jié)束位置,以便正確地分段處理數(shù)據(jù)。若信息表遭到損壞,當(dāng)系統(tǒng)再次記錄時(shí)將無(wú)法找到起始記錄位置,無(wú)法正常工作;數(shù)據(jù)處理軟件也無(wú)法正確讀取已經(jīng)存儲(chǔ)的數(shù)據(jù)。因此信息表是記錄系統(tǒng)的核心部分之一,信息表的設(shè)計(jì)將影響到記錄系統(tǒng)工作的穩(wěn)定性。
1 一種記錄系統(tǒng)信息表的設(shè)計(jì)思路
1.1 記錄系統(tǒng)原理介紹
本文設(shè)計(jì)的記錄系統(tǒng)是以FPGA為控制核心,以電子盤(pán)為存儲(chǔ)器, FPGA通過(guò)對(duì)電子盤(pán)邏輯扇區(qū)的直接讀寫(xiě)實(shí)現(xiàn)對(duì)各類(lèi)數(shù)據(jù)記錄的通用記錄系統(tǒng)。系統(tǒng)原理圖見(jiàn)圖1。記錄系統(tǒng)開(kāi)始工作前要先用指定文件系統(tǒng)格式化電子盤(pán),然后使用專(zhuān)用的處理軟件在電子盤(pán)內(nèi)產(chǎn)生若干個(gè)文件,以P000,P001,…,PXXX依次標(biāo)識(shí),其中P000用于存放記錄信息表,其余用于存放記錄數(shù)據(jù)。文件分配好后,使用工具獲取文件P000的起始邏輯扇區(qū)地址,并通過(guò)計(jì)算獲得其余文件的邏輯扇區(qū)地址,記錄系統(tǒng)通過(guò)對(duì)邏輯扇區(qū)地址的讀寫(xiě)實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。
記錄系統(tǒng)的工作過(guò)程如下:
系統(tǒng)加電即開(kāi)始工作,首先是系統(tǒng)復(fù)位,復(fù)位完成后,系統(tǒng)在FPGA內(nèi)部建立與信息表大小格式一致的信息表緩存,接著系統(tǒng)從P000文件中讀取信息表,將讀取的信息表內(nèi)容存入緩存,同時(shí)獲取信息表中記錄的本次加電前系統(tǒng)加電次數(shù)及上次記錄的結(jié)束文件號(hào);然后把獲取的系統(tǒng)加電次數(shù)加“1”后存入緩存中相應(yīng)位置,把上次結(jié)束文件號(hào)加“1”后作為本次記錄開(kāi)始文件號(hào)和結(jié)束文件號(hào)存入緩存,再將更新后的信息表緩存中數(shù)據(jù)存入信息表文件。然后,判斷加電次數(shù)和文件號(hào)是否達(dá)到最大,若二者任意一個(gè)達(dá)到最大,則停止工作并給出存儲(chǔ)器寫(xiě)滿(mǎn)指示;若二者均沒(méi)有達(dá)到最大,系統(tǒng)就把前端采集的數(shù)據(jù)按照預(yù)先安排好的幀格式寫(xiě)入本次結(jié)束文件號(hào)指定的文件;當(dāng)數(shù)據(jù)寫(xiě)滿(mǎn)一個(gè)文件后,系統(tǒng)把本次記錄結(jié)束文件號(hào)加“1”,存入緩存后更新信息表并判斷文件號(hào)是否達(dá)到最大,接下來(lái)重復(fù)此過(guò)程,直到系統(tǒng)斷電或存儲(chǔ)器寫(xiě)滿(mǎn)。系統(tǒng)工作流程如圖2所示。
1.2 記錄系統(tǒng)中信息表的設(shè)計(jì)
該信息表存放在信息表文件P000的第1個(gè)扇區(qū),為保證系統(tǒng)可靠性,系統(tǒng)設(shè)計(jì)了一個(gè)與之完全一樣的備份信息表,緊隨其后,放在信息表文件的第2個(gè)扇區(qū)。初始狀態(tài)信息表標(biāo)志字首尾一致,均為EB90(H),系統(tǒng)每更新一次信息表,都要把標(biāo)志字按位取反一次(EB90(H)按位取反后為146F(H),反之亦然)。若信息表被正常更新,則首尾標(biāo)志字仍然一致,若信息表更新中出現(xiàn)錯(cuò)誤,則首尾標(biāo)志字不一致。若系統(tǒng)在讀取時(shí)發(fā)現(xiàn)信息表標(biāo)志字不是EB90(H)或146F(H)其中之一或者首尾標(biāo)志字不一致則自動(dòng)讀取備份信息表,若2份信息表都不正確,則系統(tǒng)停止工作,給出信息表錯(cuò)誤提示[1]。
1.3 在本系統(tǒng)中信息表的設(shè)計(jì)缺陷
在實(shí)際應(yīng)用中該記錄系統(tǒng)曾出現(xiàn)停止工作的情況,分析信息表文件時(shí)發(fā)現(xiàn)2個(gè)信息表內(nèi)容全部被改寫(xiě)為“FF”,系統(tǒng)無(wú)法獲取正確的信息表,故停止工作。
經(jīng)進(jìn)一步分析認(rèn)為,由于系統(tǒng)中采用電子盤(pán)作為存儲(chǔ)器,而電子盤(pán)受其工作機(jī)理的限制,在斷電瞬間由于電源的抖動(dòng)等原因,寫(xiě)入的數(shù)據(jù)是不確定的,可能會(huì)有一定數(shù)量的數(shù)據(jù)被改寫(xiě)為“FF(H)”,而此不確定數(shù)據(jù)的最大數(shù)量等于電子盤(pán)默認(rèn)的一次寫(xiě)入的扇區(qū)數(shù)256扇區(qū)(即128 kB)。如果斷電瞬間,系統(tǒng)正在更新信息表,信息表將有可能被破壞,而由于備份信息表與其相鄰,斷電瞬間寫(xiě)入的不確定數(shù)據(jù)也會(huì)將其覆蓋,這樣2個(gè)信息表都將遭到破壞,系統(tǒng)再次加電或數(shù)據(jù)處理軟件處理數(shù)據(jù)時(shí)就找不到相關(guān)加電信息和數(shù)據(jù)存儲(chǔ)位置信息,系統(tǒng)將無(wú)法正常工作。
2 記錄系統(tǒng)信息表的優(yōu)化設(shè)計(jì)
2.1 備份信息表的存放位置設(shè)計(jì)
由于設(shè)計(jì)中備份信息表和第一信息表相鄰放置,如果系統(tǒng)正在更新第一信息表時(shí)發(fā)生突然斷電,錯(cuò)誤影響范圍將覆蓋備份信息表的全部?jī)?nèi)容,造成2份信息表全部損壞。如果把備份信息表放在第一信息表時(shí)發(fā)生突然斷電造成錯(cuò)誤的數(shù)據(jù)范圍之外,則能保證備份信息表不被破壞;如果系統(tǒng)正在刷新備份信息表時(shí)發(fā)生突然斷電,則第一信息表是完好的(見(jiàn)圖3)。
由于發(fā)生突然斷電造成的錯(cuò)誤數(shù)據(jù)范圍最大為128 kB,因此,把設(shè)計(jì)中備份信息表的位置由原來(lái)的緊隨第一信息表之后,更改為放在第一信息表后512 kB(1 024扇區(qū))的位置,即第一信息表占用P000的第1個(gè)扇區(qū),備份信息表占用[GK!5]P000的第1 025個(gè)扇區(qū),遠(yuǎn)離可能遭到破壞的區(qū)域,保證其安全可靠,信息表存放示意圖如圖3所示。
2.2 備份信息表的刷新時(shí)刻設(shè)計(jì)
在原記錄系統(tǒng)中,信息表刷新完成后即開(kāi)始對(duì)備份信息表刷新,二者在時(shí)序上的相鄰關(guān)系也存在著在斷電時(shí)數(shù)據(jù)被改寫(xiě)的可能性。因此,把原系統(tǒng)中的刷新信息表和刷新備份信息表的時(shí)序關(guān)系做了調(diào)整,即刷新完畢第一信息表后,并不立即刷新備份信息表,而是先去寫(xiě)入數(shù)據(jù)文件,當(dāng)數(shù)據(jù)被寫(xiě)入該文件的二分之一時(shí),暫停數(shù)據(jù)寫(xiě)入,刷新備份信息表,完成后再繼續(xù)寫(xiě)入記錄數(shù)據(jù)。新舊信息表刷新過(guò)程對(duì)比如圖4所示。
2.3 優(yōu)化后記錄系統(tǒng)的使用效果
從原理上分析認(rèn)為優(yōu)化后的記錄信息表能滿(mǎn)足系統(tǒng)要求,在存放位置和刷新時(shí)刻上,均保證了2個(gè)信息表的分別刷新。在一個(gè)信息表刷新過(guò)程中遇到錯(cuò)誤、遭到破壞,不會(huì)影響到另一個(gè)信息表,其能保證系統(tǒng)穩(wěn)定工作。
信息表經(jīng)優(yōu)化后的記錄系統(tǒng)在驗(yàn)證試驗(yàn)中,由于信息表的刷新時(shí)間非常短,恰巧正在刷新信息表時(shí)出現(xiàn)故障的機(jī)率非常小。雖然經(jīng)多次斷電試驗(yàn),可僅遇到一次系統(tǒng)正在刷新信息表時(shí)斷電的情況:第一個(gè)信息表及其下面相鄰12 kB的數(shù)據(jù)全部改寫(xiě)為“FF(H)”,后面的備份信息表數(shù)據(jù)正常,經(jīng)再次加電驗(yàn)證,系統(tǒng)正確地從備份信息表中讀取到記錄信息,工作正常,并恢復(fù)了被破壞的信息表,證明了系統(tǒng)工作的穩(wěn)定可靠。該系統(tǒng)目前已經(jīng)投入使用。
3 結(jié) 語(yǔ)
經(jīng)過(guò)優(yōu)化的記錄系統(tǒng)信息表能可靠地記錄數(shù)據(jù)在電子盤(pán)中的存儲(chǔ)信息,并能實(shí)時(shí)更新,保證了信息的有效性;備份信息表的位置和刷新方式保證了即使遇到正在刷新
信息表時(shí)突然斷電等異常情況,兩份信息表至少有一份是完好的。系統(tǒng)自動(dòng)從完好的信息表中讀取信息,并恢復(fù)被破壞的信息表,能夠保證記錄系統(tǒng)穩(wěn)定可靠地工作。
參 考 文 獻(xiàn)
[1]向冰,高宇.新一代彈載高速記錄系統(tǒng)[J].航空兵器,2007(3):54-56.
注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文。