日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]介紹 Linux® 的 flash 文件系統(tǒng),并探索它們?nèi)绾瓮ㄟ^平均讀寫(wear leveling)處理底層的可消耗設備(flash 部件),并鑒別各種不同的 flash 文件系統(tǒng)以及它們的基本設計。

您之前可能聽說過 Journaling Flash File System(JFFS)和 Yet Another Flash File System(YAFFS),但是您知道使用底層 flash 設備的文件系統(tǒng)意味著什么嗎?本文將向您介紹 Linux® 的 flash 文件系統(tǒng),并探索它們?nèi)绾瓮ㄟ^平均讀寫(wear leveling)處理底層的可消耗設備(flash 部件),并鑒別各種不同的 flash 文件系統(tǒng)以及它們的基本設計。

固態(tài)驅(qū)動器當前非常流行,但是嵌入式系統(tǒng)很久以前就開始使用固態(tài)驅(qū)動器進行存儲。您可以看到 flash 系統(tǒng)被用于個人數(shù)字助理(PDA)、手機、MP3 播放器、數(shù)碼相機、USB flash 驅(qū)動(UFD),甚至筆記本電腦。很多情況下,商業(yè)設備的文件系統(tǒng)可以進行定制并且是專有的,但是它們會遇到以下挑戰(zhàn)。

基于 Flash 的文件系統(tǒng)形式多種多樣。本文將探討幾種只讀文件系統(tǒng),并回顧目前可用的各種讀/寫文件系統(tǒng)及其工作原理。但是,讓我們先看看 flash 設備及其所面對的挑戰(zhàn)。


Flash 內(nèi)存技術

Flash 內(nèi)存(可以通過幾種不同的技術實現(xiàn))是一種非揮發(fā)性內(nèi)存,這意味著斷開電源之后其內(nèi)容仍然保持下來。

兩種最常見的 flash 設備類型為:NOR 和 NAND。基于 NOR 的 flash 技術比較早,它支持較高的讀性能,但以降低容量為代價。NAND flash 提供更大容量的同時實現(xiàn)快速的寫擦性能。NAND 還需要更復雜的輸入/輸出(I/O)接口。

Flash 部件通常分為多個分區(qū),允許同時進行多個操作(擦除某個分區(qū)的同時讀取另一個分區(qū))。分區(qū)再劃分為塊(通常大小為 64KB 或 128KB)。使用分區(qū)的固件可以進一步對塊進行獨特的分段 — 例如,一個塊中有 512 字節(jié)的分段,但不包括元數(shù)據(jù)。

Flash 設備有一個常見的限制,即與其他存儲設備(如 RAM 磁盤)相比,它需要進行設備管理。flash 內(nèi)存設備中惟一允許的 Write 操作是將 1 修改為 0。如果需要撤銷操作,那么必須擦除整個塊(將所有數(shù)據(jù)重置回狀態(tài) 1)。這意味著必須刪除該塊中的其他有效數(shù)據(jù)來實現(xiàn)持久化。NOR flash 內(nèi)存通常一次可以編寫一個字節(jié),而 NAND flash 內(nèi)存必須編寫多個字節(jié)(通常為 512 字節(jié))。

這兩種內(nèi)存類型在擦除塊方面有所不同。每種類型都需要一個特殊的 Erase 操作,該操作可以涵蓋 flash 內(nèi)存中的一個整塊。NOR 技術需要通過一個準備步驟將所有值清零,然后再開始 Erase 操作。Erase 是針對 flash 設備的特殊操作,非常耗費時間。擦除操作與電有關,它將整個塊的所有單元中的電子放掉。

NOR flash 設備通常需要花費幾秒時間來執(zhí)行 Erase 操作,而 NAND 設備只需要幾毫秒。flash 設備的一個關鍵特性是可執(zhí)行的 Erase 操作的數(shù)量。在 NOR 設備中,flash 內(nèi)存中的每個塊可被擦除 100,000 次,而在 NAND flash 內(nèi)存中可達到一百萬次。


Flash 內(nèi)存面臨的挑戰(zhàn)

除了前面提到的一些限制以外,管理 flash 設備還面臨很多挑戰(zhàn)。三個最重大的挑戰(zhàn)分別是垃圾收集、管理壞塊和平均讀寫。

垃圾收集

垃圾收集 是一個回收無效塊的過程(無效塊中包含了一些無效數(shù)據(jù))?;厥者^程包括將有效數(shù)據(jù)移動到新塊,然后擦除無效塊從而使它變?yōu)榭捎谩H绻募到y(tǒng)的可用空間較少,那么通常將在后臺執(zhí)行這一過程(或者根據(jù)需要執(zhí)行)。

管理壞塊

用的時間長了,flash 設備就會出現(xiàn)壞塊,甚至在出廠時就會因出現(xiàn)壞塊而不能使用。如果 flash 操作(例如 Erase)失敗,或者 Write 操作無效(通過無效的錯誤校正代碼發(fā)現(xiàn),Error Correction Code,ECC),那么說明出現(xiàn)了壞塊。

識別出壞塊后,將在 flash 內(nèi)部將這些壞塊標記到一個壞塊表中。具體操作取決于設備,但是可以通過一組獨立的預留塊來(不同于普通數(shù)據(jù)塊管理)實現(xiàn)。對壞塊進行處理的過程 — 不管是出廠時就有還是在使用過程中出現(xiàn) — 稱為壞塊管理。在某些情況下,可以通過一個內(nèi)部微控制器在硬件中實現(xiàn),因此對于上層文件系統(tǒng)是透明的。

平均讀寫

前面提到 flash 設備屬于耗損品:在變成壞塊以前,可以執(zhí)行有限次數(shù)的反復的 Erase 操作(因此必須由壞塊管理進行標記)。平均讀寫算法能夠最大化 flash 的壽命。平均讀寫有兩種形式:動態(tài)平均讀寫 和靜態(tài)平均讀寫 。

動態(tài)平均讀寫解決了塊的 Erase 周期的次數(shù)限制。動態(tài)平均讀寫算法并不是隨機使用可用的塊,而是平均使用塊,因此,每個塊都獲得了相同的使用機會。靜態(tài)平均讀寫算法解決了一個更有趣的問題。除了最大化 Erase 周期的次數(shù)外,某些 flash 設備在兩個 Erase 周期之間還受到最大化 Read 周期的影響。這意味著如果數(shù)據(jù)在塊中存儲的時間太長并且被讀了很多次,數(shù)據(jù)會逐漸消耗直至丟失。靜態(tài)平均讀寫算法解決了這一問題,因為它可以定期將數(shù)據(jù)移動到新塊。


系統(tǒng)架構(gòu)

到目前為止,我已經(jīng)討論了 flash 設備及其面臨的基本挑戰(zhàn)?,F(xiàn)在,讓我們看看這些設備如何組合成為一個分層架構(gòu)的一部分(參加圖 1)。架構(gòu)的頂層是虛擬文件系統(tǒng)(VFS),它為高級應用程序提供通用接口。VFS 下面是 flash 文件系統(tǒng)(將在下節(jié)介紹)。接下來是 Flash 轉(zhuǎn)換層(Flash Translation Layer,F(xiàn)TL),它整體管理 flash 設備,包括從底層 flash 設備分配塊、地址轉(zhuǎn)換、動態(tài)平均讀寫和垃圾收集。在某些 flash 設備中,可以在硬件中實現(xiàn)一部分 FTL 。


圖 1. flash 系統(tǒng)的基本架構(gòu)

Linux 內(nèi)核使用內(nèi)存技術設備(Memory Technology Device,MTD)接口,這是針對 flash 系統(tǒng)的通用接口。MTD 可以自動檢測 flash 設備總線的寬度以及實現(xiàn)總線寬度所需設備的數(shù)量。


Flash 文件系統(tǒng)

Linux 可以使用多種 flash 文件系統(tǒng)。下一小節(jié)將解釋每種文件系統(tǒng)的設計和優(yōu)點。

Journaling Flash File System

Journaling Flash File System 是針對 Linux 的最早 flash 文件系統(tǒng)之一。 JFFS 是一種專門為 NOR flash 設備設計的日志結(jié)構(gòu)文件系統(tǒng)。它非常獨特,能夠解決許多 flash 設備問題,但同時也導致一些新問題。

JFFS 將 flash 設備視為一種循環(huán)的塊日志。寫入 flash 的數(shù)據(jù)被寫到了空間的末尾,開始部分的塊則被收回,而兩者之間的空間是空閑的;當空間變少時,將執(zhí)行垃圾收集。垃圾收集器將有效塊移動到日志的尾部,跳過無效或廢棄塊,并擦除它們(參見圖 2)。因此這種文件系統(tǒng)可以自動實現(xiàn)靜態(tài)和動態(tài)平均讀寫。這種架構(gòu)的主要缺點是過于頻繁地執(zhí)行擦除操作(而沒有使用最佳擦除策略),從而使設備迅速磨損。

圖 2. 在垃圾收集之前和之后循環(huán)日志

掛載 JFFS 時結(jié)構(gòu)細節(jié)將讀取到內(nèi)存中,這將延緩掛載時間并消耗更多的內(nèi)存。

Journaling Flash File System 2

盡管 JFFS 在早期非常有用,但是它的平均讀寫算法容易縮短 NOR flash 設備的壽命。因此重新設計了底層算法,去掉了循環(huán)日志。JFFS2 算法專門為 NAND flash 設備設計,并且改善壓縮性能。

在 JFFS2 中,flash 中的每個塊都是單獨處理的。JFFS2 通過維護塊列表來充分地對設備執(zhí)行平均讀寫。clean 列表表示設備中的塊全部為有效節(jié)點。dirty 列表中的塊至少包含有一個廢棄節(jié)點。最后,free 列表包含曾經(jīng)執(zhí)行過擦除操作并且可以使用的塊。

垃圾收集算法通過合理的方法智能地判斷應該回收的塊。目前,這個算法根據(jù)概率從 clean 或 dirty 列表中選擇。dirty 列表的選擇概率為 99%(將有效內(nèi)容移到另一個塊),而 clean 列表的選擇概率為 1%(將內(nèi)容移到新的塊)。在這兩種情況中,對選擇的塊執(zhí)行擦除操作,然后將其置于 free 列表(參見圖 3)。這允許垃圾收集器重用廢棄的塊,但是仍然圍繞 flash 移動數(shù)據(jù),以支持靜態(tài)平均讀寫。


圖 3. JFFS2 中的塊管理和垃圾收集

Yet Another Flash File System

YAFFS 是針對 NAND flash 開發(fā)的另一種 flash 文件系統(tǒng)。最早的版本(YAFFS)支持 512 字節(jié)頁面的 flash 設備,但是較新的版本(YAFFS2)支持頁面更大的新設備以及更大的 Write 限制。

大多數(shù) flash 文件系統(tǒng)會對廢棄塊進行標記,但是 YAFFS2 使用單調(diào)遞增數(shù)字序列號額外地標記塊。在掛載期間掃描文件系統(tǒng)時,可以快速標識有效的 inode。YAFFS 保留在 RAM 中的樹以表示 flash 設備的塊結(jié)構(gòu),包括通過檢查點(checkpointing)實現(xiàn)快速掛載 — 這個過程將在正常卸載時將 RAM 樹結(jié)構(gòu)保存到 flash 設備,以在掛載時快速讀取和恢復到 RAM(參見圖 4)。與其他 flash 文件系統(tǒng)相比,YAFFS2 的掛載時性能是它的最大優(yōu)勢。

圖 4. YAFFS2 中的塊管理和垃圾收集

只讀式壓縮文件系統(tǒng)

在某些嵌入式系統(tǒng)中,沒有必要提供可更改的文件系統(tǒng):一個不可更改(immutable)的文件系統(tǒng)已經(jīng)足夠。Linux 支持多種只讀文件系統(tǒng),最有用的兩種是 cramfs 和 SquashFS。


Cramfs

cramfs 文件系統(tǒng)是一種可用于 flash 設備的壓縮式 Linux 只讀文件系統(tǒng)。cramfs 的主要特點是簡單和較高的空間利用率。這種文件系統(tǒng)用于內(nèi)存占用較小的嵌入式設計。

雖然 cramfs 元數(shù)據(jù)沒有經(jīng)過壓縮,但是 cramfs 針對每個頁面使用 zlib 壓縮,從而允許隨機的頁面訪問(訪問時對頁面進行解壓縮)。

您可以通過 mkcramfs 實用工具和 loopback 設備嘗試使用 cramfs。

SquashFS

SquashFS 是另一種可用于 flash 設備的壓縮式 Linux 只讀文件系統(tǒng)。您可以在很多 Live CD Linux 發(fā)行版中找到 SquashFS。除了支持 zlib 壓縮外,SquashFS 還使用 Lembel-Ziv-Markov chain Algorithm (LZMA) 改善壓縮并提高速度。

和 cramfs 一樣,您可以通過 mksquashfs 和 loopback 設備在標準 Linux 系統(tǒng)上使用 SquashFS。


結(jié)束語

和大多數(shù)開放源碼一樣,軟件在不斷演變,并且新的 flash 文件系統(tǒng)正在開發(fā)之中。一種還處于開發(fā)階段的有趣的備選文件系統(tǒng)是 LogFS,它包含了一些非常新穎的想法。例如,LogFS 在 flash 設備中保持了一個樹結(jié)構(gòu),因此掛載時間和傳統(tǒng)的文件系統(tǒng)差不多(比如 ext2)。它還使用一種復雜的樹實現(xiàn)垃圾收集(一種 B+樹形式)。然而,LogFS 最有趣的地方是它具有出色的可伸縮性并且支持大型 flash 部件。

隨著 flash 文件系統(tǒng)的日益流行,您將看到針對它們的大量研究。LogFS 就是一個例子,但是其他類似于 UbiFS 的文件系統(tǒng)也在不斷發(fā)展。Flash 文件系統(tǒng)的架構(gòu)非常有趣,并在還將是未來技術創(chuàng)新的源泉。

本站聲明: 本文章由作者或相關機構(gòu)授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉