sector:硬件(磁盤)上的最小的操作單位,是操作系統(tǒng)和塊設(shè)備(硬件、磁盤)之間傳送數(shù)據(jù)的單位
block由一個或多個sector組成,是軟件(OS、文件系統(tǒng))中最小的操作單位;操作系統(tǒng)的虛擬文件系統(tǒng)從硬件設(shè)備上讀取一個block,實際為從硬件設(shè)備讀取一個或多個sector.對于文件管理來說,每個文件對應(yīng)的多個block可能是不連續(xù)的;block最終要映射到sector上,所以block的大小一般是sector的整數(shù)倍。不同的文件系統(tǒng)block可使用不同的大小,操作系統(tǒng)會在內(nèi)存中開辟內(nèi)存,存放block到所謂的block buffer中。
=======================================================================
扇區(qū)組成物理塊,物理塊對應(yīng)邏輯塊,邏輯塊與文件相對應(yīng)。
扇區(qū)是硬件被操作時軟件使用的最小的操作單元,就是一個扇區(qū)一個扇區(qū)進行操作(扇區(qū)的大小在存儲設(shè)備生產(chǎn)時就設(shè)計好)。
塊是上層軟件中(操作文件時)使用的最小的操作單元,就是(操作文件時)一個塊一個塊進行操作(塊的大小格式化時可以設(shè)置【如linux、fatfs等等】)。
如fatfs的格式化函數(shù)(即在存儲設(shè)備上建立文件系統(tǒng))
創(chuàng)建文件系統(tǒng)時,可以指定塊的大小。如果將來在你的文件系統(tǒng)中是一些比較大的文件的話,使用較大的塊大小將得到較好的性能。將ext2文件系統(tǒng)的塊大小調(diào)整為4096byte而不是缺省的1024byte,可以減少文件碎片,加快fsck掃描的速度和文件刪除以及讀操作的速度。另外,在ext2的文件系統(tǒng)中,為根目錄保留了5%的空間,對一個大的文件系統(tǒng),除非用作日志文件,5%的比例有些過多。可以使用命令"# mke2fs -b 4096 -m 1 /dev/hda6"將它改為1%并以塊大小4096byte創(chuàng)建文件系統(tǒng)。
使用多大的塊大小,需要根據(jù)你的系統(tǒng)綜合考慮,如果系統(tǒng)用作郵件或者新聞服務(wù)器,使用較大的塊大小,雖然性能有所提高,但會造成磁盤空間較大的浪費。比如文件系統(tǒng)中的文件平均大小為2145byte,如果使用4096byte的塊大小,平均每一個文件就會浪費1951byte空間。如果使用 1024byte 的塊大小,平均每一個文件會浪費927byte空間。在性能和磁盤的代價上如何平衡,要看具體應(yīng)用的需要。
第1組命令:
mkfs.ext3 -T news /dev/sda5 (指定該分區(qū)文件系統(tǒng)的塊大小為4096)
mkfs.ext3 -b 4096 /dev/sda5
norflash有地址線與數(shù)據(jù)線,可以通過芯片對應(yīng)的手冊查到該norflash的扇區(qū)的大小。
nandflash使用復(fù)用的接口線,它內(nèi)部有一個頁寄存器(一個頁:大小一般為512字節(jié)),nandflash內(nèi)部存儲管理使用的塊大小是多少個頁。它的扇區(qū)一般為一個頁的一半大小。
=======================================================================
winhex的使用:
=======================================================================
我們把Ext2、Minix、Ext等實際可使用的文件系統(tǒng)稱為具體文件系統(tǒng)。具體文件系統(tǒng)管理的是一個邏輯空間,這個邏輯空間就象一個大的數(shù)組,數(shù)組的每個元素就是文件系統(tǒng)操作的基本單位——邏輯塊,邏輯塊是從0開始編號的,而且,邏輯塊是連續(xù)的。與邏輯塊相對的是物理塊,物理塊是數(shù)據(jù)在磁盤上的存取單位,也就是每進行一次I/O操作,最小傳輸?shù)臄?shù)據(jù)大小。我們知道數(shù)據(jù)是存儲在磁盤的扇區(qū)中的,那么扇區(qū)是不是物理塊呢?或者物理塊是多大呢?這涉及到文件系統(tǒng)效率的問題。
如果物理塊定的比較大,比如一個柱面大小,這時,即使是1個字節(jié)的文件都要占用整個一個柱面,假設(shè)Linux環(huán)境下文件的平均大小為1K,那么分配32K的柱面將浪費97%的磁盤空間,也就是說,大的存取單位將帶來嚴重的磁盤空間浪費。另一方面,如果物理塊過小,則意味著對一個文件的操作將進行更多次的尋道延遲和旋轉(zhuǎn)延遲,因而讀取由小的物理塊組成的文件將非常緩慢!可見,時間效率和空間效率在本質(zhì)上是相互沖突的。
因此,最優(yōu)的方法是計算出Linux環(huán)境下文件的平均大小,然后將物理塊大小定為最接近扇區(qū)的整數(shù)倍大小。在Ext2中,物理塊的大小是可變化的,這取決于你在創(chuàng)建文件系統(tǒng)時的選擇,之所以不限制大小,也正體現(xiàn)了Ext2的靈活性和可擴充性,一是因為要適應(yīng)近年來文件的平均長度緩慢增長的趨勢,二是為了適應(yīng)不同的需要。比如,如果一個文件系統(tǒng)主要用于BBS服務(wù),考慮到BBS上的文章通常很短小,所以,物理塊選的小一點是恰當?shù)。通常?span xml:lang="EN-US">Ext2的物理塊占一個或幾個連續(xù)的扇區(qū),顯然,物理塊的數(shù)目是由磁盤容量等硬件因素決定的。邏輯塊與物理塊的關(guān)系類似于虛擬內(nèi)存中的頁與物理內(nèi)存中的頁面的關(guān)系。
具體文件系統(tǒng)所操作的基本單位是邏輯塊,只在需要進行I/O操作時才進行邏輯塊到物理塊的映射,這顯然避免了大量的I/O操作,因而文件系統(tǒng)能夠變得高效。邏輯塊作為一個抽象的概念,它必然要映射到具體的物理塊上去,因此,邏輯塊的大小必須是物理塊大小的整數(shù)倍,一般說來,兩者是一樣大的。
通常,一個文件占用的多個物理塊在磁盤上是不連續(xù)存儲的,因為如果連續(xù)存儲,則經(jīng)過頻繁的刪除、建立、移動文件等操作,最后磁盤上將形成大量的空洞,很快磁盤上將無空間可供使用。因此,必須提供一種方法將一個文件占用的多個邏輯塊映射到對應(yīng)的非連續(xù)存儲的物理塊上去,Ext2等類文件系統(tǒng)是用索引節(jié)點解決這個問題的,具體實現(xiàn)方法后面再予以介紹。
為了更好的說明邏輯塊和物理塊的關(guān)系,我們來看一個例子。
假設(shè)用戶要對一個已有文件進行寫操作,用戶進程必須先打開這個文件,file結(jié)構(gòu)記錄了該文件的當前位置。然后用戶把一個指向用戶內(nèi)存區(qū)的指針和請求寫的字節(jié)數(shù)傳送給系統(tǒng),請求寫操作,這時系統(tǒng)要進行兩次映射。
(1)一組字節(jié)到邏輯塊的映射。
這個映射過程就是找到起始字節(jié)到結(jié)束字節(jié)所占用的所有邏輯塊號。這是因為在邏輯空間,文件傳輸?shù)幕締挝皇沁壿媺K而不是字節(jié)。
(2)邏輯塊到物理塊的映射。
這個過程必須要用到索引節(jié)點結(jié)構(gòu),該結(jié)構(gòu)中有一個物理塊指針數(shù)組,以邏輯塊號為索引,通過這些指針找到磁盤上的物理塊,具體實現(xiàn)將在介紹Ext2索引節(jié)點時再進行介紹。
圖9.1是由一組請求的字節(jié)到物理塊的映射過程示意圖。
在Ext2中,還有一個重要的概念:片(fragment),它的作用是什么?
每個文件必然占用整數(shù)個邏輯塊,除非每個文件大小都恰好是邏輯塊的整數(shù)倍,否則最后一個邏輯塊必然有空間未被使用,實際上,每個文件的最后一個邏輯塊平均要浪費一半的空間,顯然最終浪費的還是物理塊。在一個有很多文件的系統(tǒng)中,這種浪費是很大的。Ext2使用片來解決這個問題。
片也是一個邏輯空間中的概念,其大小在1K至4K之間,但片的大小總是不大于邏輯塊。假設(shè)邏輯塊大小為4K,片大小為1K,物理塊大小也是1K,當你要創(chuàng)建一個3K大小的文件時,實際上分配給你了3個片,而不會給你一個邏輯塊,當文件大小增加到4K時,文件系統(tǒng)則分配一個邏輯塊給你,而原來的四個片被清空。如果文件又增加到5K時,則占用1個邏輯塊和1個片。上述三種情況下,所占用的物理塊分別是3個、4個、5個,如果不采用片,則要用到4個、4個、8個物理塊,可見,使用片,減少了磁盤空間的浪費。當然,在物理塊和邏輯塊大小一樣時,片就沒有意義了。
由上面分析也可看出:
物理塊大小<=片大小<=邏輯塊大小
=========================================================================
NANDFLASH是FLASH存儲器的一種,與NOR FLASH相比,NANDFLASH具有更高的存儲密度,單片F(xiàn)LASH的存儲容量大大增加,也使得NANDFLASH的價格遠遠低于NOR FLASH。NANDFLASH采用命令方式實現(xiàn)讀寫和擦除,只需要8或16根數(shù)據(jù)線及相關(guān)的控制線,而且目前相同類型的NANDFLASH芯片都做到了管腳兼容,使得NANDFLASH在不變更電路板的條件下更容易增加或減少容量。另外NANDFLASH還具有讀寫速度快的特點。NANDFLASH具有以上特點,才使得它得到了廣泛的應(yīng)用。
NANDFLASH存儲按頁(page)的方式,根據(jù)頁的大小不同,NANDFALSH可分為大頁(每頁2048+64字節(jié))和小頁(每頁512+16字節(jié))兩種。目前使用最多最廣泛的為大頁的FLASH,本文檔中如不做特殊說明,則指的是大頁的NANDFLASH。
對于三星平臺,直接使用NANDFLASH作為手機內(nèi)的存儲器,一個分了7個區(qū)(bootloader、nk、systemdata、Userdata、DBData、DBBack、RegData),其中bootloader、nk分區(qū)無文件系統(tǒng),存放的是bootloader和nk程序;其他分區(qū)均有文件系統(tǒng),供wince啟動之后是用。對于TI和FREECALE平臺,使用mdoc作為手機內(nèi)的存儲器。
FMD層提供的接口有:
FMD_Deinit:驅(qū)動卸載時調(diào)用,主要用于關(guān)閉初始化函數(shù)里打開的句柄;
FMD_Init:驅(qū)動加載時調(diào)用,為設(shè)備初始化函數(shù);
FMD_GetInfo:獲得該分區(qū)的基本信息;
FMD_GetBlockStatus:獲得指定塊的狀態(tài)信息;
FMD_OEMIoControl:提供給OEM廠家直接調(diào)用的接口;
FMD_PowerUp:驅(qū)動喚醒時調(diào)用的接口;
FMD_PowerDown:驅(qū)動進入待機狀態(tài)時調(diào)用的接口;
FMD_ReadSector:按扇區(qū)讀取NANDFLASH里的數(shù)據(jù);
FMD_WriteSector:按扇區(qū)向NANDFLASH里寫入數(shù)據(jù);
FMD_SetBlockStatus:設(shè)定指定塊的狀態(tài);
FMD_EraseBlock:擦除指定的塊;
=========================================================================
=========================================================================
NandFlash系列之一:NorFlash與NandFlash對比
作者:劉洪濤,華清遠見嵌入式學院高級講師。
FLASH存儲器又稱閃存,主要有兩種:NorFlash和NandFlash,下面我們從多個角度來對比介紹一下。在實際開發(fā)中,設(shè)計者可以根據(jù)產(chǎn)品需求來進行閃存的合理選擇。
1、接口對比
NorFlash帶有通用的SRAM接口,可以輕松地掛接在CPU的地址、數(shù)據(jù)總線上,對CPU的接口要求低。NorFlash的特點是芯片內(nèi)執(zhí)行(XIP,eXecute In Place),這樣應(yīng)用程序可以直接在flash閃存內(nèi)運行,不必再把代碼讀到系統(tǒng)RAM中。如uboot中的ro段可以直接在NorFlash上運行,只需要把rw和zi段拷貝到RAM中運行即可。
NandFlash器件使用復(fù)雜的I/O口來串行地存取數(shù)據(jù),8個引腳用來傳送控制、地址和數(shù)據(jù)信息。由于時序較為復(fù)雜,所以一般CPU最好集成NAND控制器。另外由于NandFlash沒有掛接在地址總線上,所以如果想用NandFlash作為系統(tǒng)的啟動盤,就需要CPU具備特殊的功能,如s3c2410在被選擇為NandFlash啟動方式時會在上電時自動讀取NandFlash的4k數(shù)據(jù)到地址0的SRAM中。如果CPU不具備這種特殊功能,用戶不能直接運行NandFlash上的代碼,那可以采取其他方式,比如好多使用NandFlash的開發(fā)板除了使用NandFlash以外,還用上了一塊小的NorFlash來運行啟動代碼。
2、容量和成本對比
相比起NandFlash來說,NorFlash的容量要小,一般在1~16MByte左右,一些新工藝采用了芯片疊加技術(shù)可以把NorFlash的容量做得大一些。在價格方面,NorFlash相比NandFlash來說較高,如目前市場上一片4Mbyte的AM29lv320 NorFlash零售價在20元左右,而一片128MByte的k9f1g08 NandFlash零售價在30元左右。
NandFlash生產(chǎn)過程更為簡單,NAND結(jié)構(gòu)可以在給定的模具尺寸內(nèi)提供更高的容量,這樣也就相應(yīng)地降低了價格。
3、可靠性性對比
NAND器件中的壞塊是隨機分布的,以前也曾有過消除壞塊的努力,但發(fā)現(xiàn)成品率太低,代價太高,根本不劃算。NAND器件需要對介質(zhì)進行初始化掃描以發(fā)現(xiàn)壞塊,并將壞塊標記為不可用。在已制成的器件中,如果通過可靠的方法不能進行這項處理,將導(dǎo)致高故障率。而壞塊問題在NorFlash上是不存在的。
在Flash的位翻轉(zhuǎn)(一個bit位發(fā)生翻轉(zhuǎn))現(xiàn)象上,NAND的出現(xiàn)幾率要比NorFlash大得多。這個問題在Flash存儲關(guān)鍵文件時是致命的,所以在使用NandFlash時建議同時使用EDC/ECC等校驗算法。
4、壽命對比
在NAND閃存中每個塊的最大擦寫次數(shù)是一百萬次,而NOR的擦寫次數(shù)是十萬次。閃存的使用壽命同時和文件系統(tǒng)的機制也有關(guān),要求文件系統(tǒng)具有損耗平衡功能。
5、升級對比
NorFlash的升級較為麻煩,因為不同容量的NorFlash的地址線需求不一樣,所以在更換不同容量的NorFlash芯片時不方便。通常我們會通過在電路板的地址線上做一些跳接電阻來解決這樣的問題,針對不同容量的NorFlash。
而不同容量的NandFlash的接口是固定的,所以升級簡單。
6、讀寫性能對比
寫操作:任何flash器件的寫入操作都只能在空或已擦除的單元內(nèi)進行。NAND器件執(zhí)行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內(nèi)所有的位都寫為1。擦除NOR器件時是以64~128KB的塊進行的,執(zhí)行一個擦除/寫入操作的時間約為5s。擦除NAND器件是以8~32KB的塊進行的,執(zhí)行一個擦除/寫入操作最多只需要4ms。
讀操作:NOR的讀速度比NAND稍快一些。
7、文件系統(tǒng)比較
Linux系統(tǒng)中采用MTD來管理不同類型的Flash芯片,包括NandFlash和NorFlash。支持在Flash上運行的常用文件系統(tǒng)有cramfs、jffs、jffs2、yaffs、yaffs2等。cramfs文件系統(tǒng)是只讀文件系統(tǒng)。如果想在Flash上實現(xiàn)讀寫操作,通常在NorFlash上我們會選取jffs及jffs2文件系統(tǒng),在NandFlash上選用yaffs或yaffs2文件系統(tǒng)。Yaffs2文件系統(tǒng)支持大頁(大于512字節(jié)/頁)的NandFlash存儲器。
參考文章:《NAND和NORFLASH技術(shù)設(shè)計師在使用閃存時需要慎重選擇》M-Systems公司 Arie TAL
=====================================================================================