由于工控設(shè)備漸進變化的基本特征,Windows CE5.0仍然被大量的應(yīng)用在當(dāng)前的嵌入式主板中。英創(chuàng)公司的EM9160、EM9360等型號的工控主板也都繼續(xù)預(yù)裝CE5.0操作系統(tǒng)。由于CE5.0文件系統(tǒng)是基于微軟的Windows95/98內(nèi)核的FAT文件系統(tǒng),當(dāng)基于FAT的CE5.0文件系統(tǒng)應(yīng)用到NAND Flash器件上時,NandFlash的以扇區(qū)為單元的讀寫方式、以及塊為單元的擦除方式,有可能讓CE5.0文件系統(tǒng)產(chǎn)生很大的NandFlash存儲單元整理工作量。大規(guī)模的NandFlash整理將消耗很大一部分CPU時間,如果此時應(yīng)用程序又有很重的數(shù)據(jù)存儲的任務(wù),在非常極端情況下,有可能導(dǎo)致CE5.0文件系統(tǒng)的FAT表損壞。本文則是針對這種情況,提出兩種解決方法。
目前我們通常使用的NandFlash的邏輯結(jié)構(gòu)有兩種,一種是扇區(qū)(Sector)大小為512字節(jié),一個塊(Block)包括32個扇區(qū),被稱為小扇區(qū)結(jié)構(gòu);另一種是扇區(qū)大小為2048字節(jié)(即2KB),一個塊包括64個扇區(qū),這種結(jié)構(gòu)的NandFlash通常稱為大扇區(qū)??梢匀菀姿愠?,文件系統(tǒng)對NandFlash的整理,大扇區(qū)的工作量是小扇區(qū)的8倍。因此在同樣的運行條件下,大扇區(qū)結(jié)構(gòu)的NandFlash對文件系統(tǒng)的負(fù)載就高得多。為了確定CE5.0文件系統(tǒng)的這個潛在問題,我們選用了EM9160的精簡版,其基本配置為16-bit數(shù)據(jù)寬度 32MB內(nèi)存+128MB大扇區(qū)NandFlash作為實驗平臺。采用16-bit數(shù)據(jù)寬度是讓CPU的處理能力至少降低一倍,而128MB大扇區(qū)NandFlash為文件系統(tǒng)只提供了768個Block,從而更容易觸發(fā)文件系統(tǒng)的后臺整理進程。
我們的基本測試程序(即應(yīng)用程序)是以低效率的小文件(一個文件大小不超過512字節(jié),試驗文件大小為180字節(jié))為單位,256個小文件存放在一個目錄中,總共256個目錄循環(huán)寫。同時在測試程序中啟動一個定時線程,定時時間為5s – 100s之間的隨機數(shù),定時到時該線程強制重啟系統(tǒng),這樣對文件系統(tǒng)施加一個隨機重啟的沖擊。為了觀察CPU的基本工作情況,測試程序主線程每2s從調(diào)試串口輸出CPU負(fù)載率等系統(tǒng)信息?;镜脑囼炃闆r如下:
1、CPU常規(guī)負(fù)載率在65%水平,當(dāng)系統(tǒng)進行NandFlash整理時,負(fù)載率會上升至95%的水平,且最長時間會持續(xù)近10s。
2、經(jīng)過連續(xù)24小時試驗,大約有3%的主板的FAT表會損壞,導(dǎo)致系統(tǒng)啟動失敗。
在測試程序中采用的文件寫方式是最直接的流程:
// CreateFile -> WriteFile -> CloseHandle
當(dāng)所寫的文件已經(jīng)存在于NandFlash時,CE5.0的TFAT文件系統(tǒng)會以某種方式保留原文件,這樣若在寫文件過程中遇到系統(tǒng)重啟,重啟后系統(tǒng)還能恢復(fù)原來的文件。但這樣做的代價是CE5.0文件系統(tǒng)會啟動后臺線程并行來處理這些老文件。經(jīng)過大量的試驗分析,我們相信正是這種類似的并行操作NandFlash的機制,可能存在某種缺陷,導(dǎo)致在極端情況下FAT的損壞。
根據(jù)上面的分析,我們的第一種處理方法,就是在應(yīng)用程序中增加刪除同名文件,再進行常規(guī)文件寫流程,即:
// 第一種方法:
// DeleteFile -> CreateFile -> WriteFile -> CloseHandle
就可把原來需要后臺并行處理的任務(wù)變成了應(yīng)用程序線程順序執(zhí)行,從而大幅度減少多個線程并行操作NandFlash的情況。修改后的試驗表明,F(xiàn)AT損壞率至少降低一個數(shù)量級以上,在目前的試驗規(guī)模上已完全不能檢測到FAT損壞的情況。
第一種方法是通過應(yīng)用程序調(diào)整,來降低NandFlash操作的并行度,從而避免觸發(fā)CE5.0文件的缺陷顯現(xiàn)。但第一種方法還不能完全消除對NandFlash的并行操作,因為后臺的整理總是存在的。由此產(chǎn)生第二種方法,就是通過監(jiān)視CPU負(fù)載率,一旦CPU負(fù)載超過某個閾值,應(yīng)用線程就暫停文件寫操作,這樣就能主動避免應(yīng)用程序與后臺并行操作NandFlash。其基本流程變成:
// 第二種方法:
bRet = g_pNandMonitor->EnterNandAccess(dwTimeout); // 獲取NAND訪問權(quán)
// 若bRet = TRUE,進入正常NAND操作:
// DeleteFile -> CreateFile -> WriteFile -> CloseHandle
g_pNandMonitor->LeaveNandAccess(); // 歸還NAND訪問權(quán)
在上述流程中,使用了我們構(gòu)造的一個CPU負(fù)載率監(jiān)控類NandFlashMonitor,當(dāng)CPU負(fù)載率超過指定閾值時,應(yīng)用線程調(diào)用EnterNandAccess函數(shù),將導(dǎo)致應(yīng)用線程阻塞(掛起)直至超時或CPU負(fù)載率低于指定閾值。采用CPU負(fù)載率監(jiān)測手段后,可以看到在后臺整理時段,CPU負(fù)載率從原來的95%的水平下降到85%的水平,說明在這個時段的應(yīng)用程序的NandFlash確實是停掉了,同時也說明在這個時段分配給應(yīng)用程序的資源實際是很少的,所以寫文件的效率是很低的。采用延時寫的方法,是不會對總體性能影響的。需要檢測類NandFlashMonitor代碼的客戶,可郵件向英創(chuàng)技術(shù)支持索取。
總之,通過試驗表明,CE5.0的TFAT文件系統(tǒng)對NandFlash管理策略上確實存在某種缺陷,在大扇區(qū)NandFlash及頻繁文件操作的應(yīng)用中,這種缺陷就可能對設(shè)備產(chǎn)生威脅。但我們也可以有充分的手段徹底規(guī)避這樣的風(fēng)險,同時又不降低系統(tǒng)的整體性能。
-
WINDOWS
+關(guān)注
關(guān)注
4文章
3554瀏覽量
89011 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35490
發(fā)布評論請先 登錄
相關(guān)推薦
評論