九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MINIX, EXT2,FAT文件系統(tǒng)概要分析
userphoto

2014.05.18

關注
             Title: 概述了MINIX,EXT2,F(xiàn)AT文件系統(tǒng),看完應該有一個全局的了解
Author: Quan
Date: 18.04.2006
====================

MINIX:
====================
Minix的文件系統(tǒng)主要包括一下6個部分:
引導塊,超級塊,i節(jié)點位圖,區(qū)段位圖,真正的i節(jié)點信息,數(shù)據(jù)。
引導塊:
    一般來將,每一個文件分區(qū)里面,都必須包含一個引導塊。雖然并不是每一個設備的分區(qū)都是用來引導的,但是,出于結(jié)構(gòu)的統(tǒng)一以及兼容性方面的考慮,一般文件系統(tǒng)需要將分區(qū)的第一個塊保留為引導塊。因此,我以前曾經(jīng)犯過的一個錯誤就是,認為啟動盤在windows里面是不能夠被識別的,會提示磁盤未格式化??磥砦艺娴氖清e了,只能將那個啟動盤上的系統(tǒng),windows不能夠識別。但是,啟動盤里面確實也裝載著完整的文件系統(tǒng)。
超級塊:
    之所以稱之為超級塊,就是因為這個塊是整個文件系統(tǒng)的龍頭!從它,可以推算出整個文件系統(tǒng)的信息。在minix中,它包含了i節(jié)點數(shù),區(qū)段數(shù),塊/區(qū)段比,最大文件長度,magic number等等信息。這樣,整個文件系統(tǒng)中,上面所涉及到的6個部分的分布就清楚了。
位圖:
    常用的一個數(shù)據(jù)結(jié)構(gòu)。使用一個bit來代表一個有序邏輯單位,如這里的一個i節(jié)點,一個區(qū)段,或者是內(nèi)存中的一頁等等。這里,使用位圖來表示哪些i節(jié)點是可以的或者是不可用的,對于區(qū)段的使用方式也是相同的。這樣,就是對有序的邏輯單位進行了標記,而且這樣的標記是寫入磁盤的因此可以長期的保存。所以,必須要確保文件系統(tǒng)的一致性(consistency),因為標記和真正的邏輯單位并不是同時寫入磁盤的。這一點,相當?shù)闹匾?br>i節(jié)點:
    這個結(jié)構(gòu)和UNIX下的文件系統(tǒng)應該說是一樣的。這里保存著對應于每個文件的具體的信息,如文件類型,訪問權(quán)限,鏈接信息,文件大小,時間信息,區(qū)段號(包括一次間接塊和二次間接塊)等等與文件密切相關的信息。這樣,在系統(tǒng)訪問文件的時候,只要找到對應的i節(jié)點就可以確定整個文件的所有方面了。宏觀一點看,文件系統(tǒng)的實現(xiàn)還是一個層次性的結(jié)構(gòu),通過超級塊找到i節(jié)點,通過i節(jié)點再找到真正的文件的所有信息,是一個二級指針的結(jié)構(gòu)。這個和intel CPU里面的內(nèi)存分頁訪問有幾分的類似了,其實總的來說還都是數(shù)據(jù)結(jié)構(gòu)的提醒。因此,學習別人的系統(tǒng)實現(xiàn),很大程度上是了解里面的數(shù)據(jù)結(jié)構(gòu)。
目錄:
    MINIX下的目錄相當?shù)暮唵危篿節(jié)點號+文件/目錄名稱。當然,這里可以統(tǒng)一的稱為文件,不需要考慮文件和目錄的差別。首先,在使用mkfs初始化文件系統(tǒng)的時候,該設備分區(qū)上的根目錄就以及存在了,而且是在一個確定的位置。也就是i節(jié)點位圖里面對應的bit為1,從而對應的i節(jié)點的信息就變得有效。在那個i節(jié)點所對應的數(shù)據(jù)區(qū)段里面存儲著根目錄中的文件的信息(這里就不考慮目錄和文件的區(qū)別了),格式就是i節(jié)點號+文件名(當然,通過文件屬性就可以知道這是一個普通的文件還是目錄文件了)。于是,文件名和真正的文件就通過i節(jié)點這個中介完成了最終的連接。這其中可以說跳轉(zhuǎn)了很多次,相當?shù)那郏?br>但是,總的來說,從宏觀的邏輯上講,這樣的文件系統(tǒng)是“可實現(xiàn)的”,而且功能已經(jīng)達到了。

參考:
1. Andrew. S. Tanenbaum. Operating System Design & Implementation.



EXT2
====================
    EXT2文件系統(tǒng)在物理結(jié)構(gòu)分布上兼?zhèn)銶INIX和BSD文件系統(tǒng)的特質(zhì)。使用了BOOTSECTOR, SUPERBLOCK,和BLOCK GROUP的結(jié)構(gòu)。使用BLOCK GROUP的理由很直接,這樣,在計算出inode之后,磁頭并不需要多長時間就可以到達真正的DATA BLOCK。
    同時,EXT2的目錄采用了可變長度的鏈表結(jié)構(gòu),從而可以支持長達255個字符的文件名。這是一個比較大的進步。實現(xiàn)原理就是多使用一個域來標記整個entry的長度,這樣,程序就可以找到下一個entry的入口了。在數(shù)據(jù)結(jié)構(gòu)上,比MINIX的目錄多了2個域:entry長度和文件名長度。
    一個具體的例子,這是一個軟盤上的物理分布圖:
    offset    number of blocks    description
    0        1                    boot record
    1        1                    superblock
    2        1                    group descriptors ( in MINIX, no such block )
    3        1                    block bitmap
    4        1                    inode bitmap ( in MINIX, first inode and then block bitmap )
    5        23                    inode table
    28        1412                data blocks
    因此,與MINIX文件系統(tǒng)相比,這里僅僅多了一個group descriptor,然后block和inode的bitmap位置更換了。其它基本一致。
    在大一些的分區(qū)里面,會有多個block groups,而且,上面的super block和group descriptor這兩個重要的信息還會在一個或者多個block groups里面進行備份。而各個block group里面的結(jié)構(gòu)是一樣的,包含的都是塊位圖,i節(jié)點位圖,i節(jié)點表,數(shù)據(jù)塊。如果理解了MINIX文件系統(tǒng)里面的位圖和i節(jié)點表的作用,這里的概念就不難理解了。至于為什么要在每個塊group里面放置該組的空閑塊和空閑i節(jié)點的信息,這在前面已經(jīng)講過了,從硬盤的物理結(jié)構(gòu)來講,尋道是最耗時間的,一般在10ms左右,因此,這樣可以減少從i節(jié)點到真正的block的尋道時間。
    和MINIX一樣,ROOT目錄始終是i節(jié)點表的第二個條目。這樣,就可以找到所有的文件了。

參考:
1. 包懷中. EXT2文件系統(tǒng)分析.
2. RemyCard, Theodore Ts'o, Stephen Tweedie. Design and Implementationof the Second Extended Filesystem.
3. Dave Poirier. The Second Extended File System.
4. Louis-Dominique Dubeau. Analysis of the Ext2fs structure.



FAT:
====================
    FAT分區(qū)格式是Microsoft最早支持的分區(qū)格式,依據(jù)FAT中每個簇鏈的所占比特位數(shù)分為FAT12、FAT16、FAT32三種格式"變種",但其基本存儲方式是相似的。
    假設FAT分區(qū)是硬盤的第一個分區(qū),那么該FAT分區(qū)一般從chs={0,1,1}開始,而并不是從chs={0,0,2}開始的,一般會保留62個扇區(qū)。這個算是一個歷史原因吧。分區(qū)的物理結(jié)構(gòu)分布如下:
    DBR->FAT1->FAT2->rootdir->data
    其中,DBR即DOS Boot Record,它由MBR裝入內(nèi)存,然后BIOS交出控制權(quán)給DBR,從而過渡到操作系統(tǒng)的引導。DBR的第一個可執(zhí)行語句通常都是一個jmp,接下來放置一些OEM信息,如MSDOS 5.0等等。接下來是BPB即BIOS Parameter Block,記錄了磁盤的一些具體信息,如扇區(qū)字節(jié)數(shù),每簇扇區(qū)數(shù)(類似與MINIX中的block),保留扇區(qū)數(shù)(第一個FAT之前的未使用的扇區(qū)數(shù),包括DBR),F(xiàn)AT數(shù)目(一般有兩個FAT),媒體描述符(0xF8表示硬盤,0xF0表示3.5軟盤),該FAT分區(qū)總的扇區(qū)數(shù),每個FAT所占用的扇區(qū)數(shù)(PC使用這個值,F(xiàn)AT個數(shù),以及隱藏扇區(qū)數(shù)來計算得到根目錄所在的扇區(qū)),文件系統(tǒng)版本。最后就是著名的0xaa55了。接下來在DBR喝FAT1之間一般還會有一段保留區(qū)域,當然,F(xiàn)AT12和FAT16沒有。接下來就是真正的FAT1和FAT1的一個備份FAT2了。接下來就是真正的數(shù)據(jù)區(qū)了,F(xiàn)AT32里面也沒有rootdir,因為rootdir也是可以任意的放在數(shù)據(jù)區(qū)中的,不一定是數(shù)據(jù)區(qū)的開始。但是,root的簇一般來講,是整個文件系統(tǒng)的起始簇,也就是第二個簇。
    實際上,以FAT32構(gòu)建的操作系統(tǒng)如果是win98,系統(tǒng)會使用基本分區(qū)的第0扇區(qū)和第2扇區(qū)存儲os引導代碼;以FAT32構(gòu)建的操作系統(tǒng)如果是win2000或winxp,系統(tǒng)會使用基本分區(qū)的第0扇區(qū)和第0xC扇區(qū),而不僅僅使用分區(qū)的第0個扇區(qū),但是不管怎么樣,第0個扇區(qū)總是被MBR加載到內(nèi)存中的,因此,后面的扇區(qū)即使使用到了也是由第0個扇區(qū)加載到內(nèi)存中的。正是基于這一點,GRUB這樣的引導工具才能夠使用chain的方式將Windows,或者其它非Linux的系統(tǒng)進行引導。GRUB在這個時候,僅僅扮演的是MBR的角色。這一點非常重要!
    在FAT16文件系統(tǒng)中,保留扇區(qū)的數(shù)據(jù)通常設置為1,即僅僅DBR扇區(qū)。而在FAT32中,保留扇區(qū)的數(shù)據(jù)通常 取為32,有時候用Partition Magic分過的FAT32分區(qū)會設置36個保留扇區(qū),有的工具可能會設置63個保留扇區(qū)。操作系統(tǒng)之所以在FAT32中設置保留扇區(qū),是為了對DBR作備份或留待以后升級時用。FAT32中,DBR偏移0x34占2字節(jié)的數(shù)據(jù)指明了DBR備份扇區(qū)所在,一般為0x06,即第6扇區(qū)。當FAT32分區(qū)DBR扇區(qū)被破壞導致分區(qū)無法訪問時??梢杂玫?扇區(qū)的原備份替換第0扇區(qū)來找回數(shù)據(jù)。
    下面來看一下真正的FAT表:
    FAT表以"F8 FF FF FF" 開頭,此4字節(jié)為介質(zhì)描述單元,并不參與FAT表簇鏈關系。FAT表記錄了磁盤數(shù)據(jù)文件的存儲鏈表,對于數(shù)據(jù)的讀取而言是極其重要的,以至于Microsoft為其開發(fā)的FAT文件系統(tǒng)中的FAT表創(chuàng)建了一份備份,就是我們看到的FAT2。FAT2與FAT1的內(nèi)容通常是即時同步的,也就是說如果通過正常的系統(tǒng)讀寫對FAT1做了更改,那么FAT2也同樣被更新。
    FAT文件系統(tǒng)的目錄結(jié)構(gòu)其實是一顆有向的從根到葉的樹,這里提到的有向是指對于FAT分區(qū)內(nèi)的任一文件(包括文件夾),均需從根目錄尋址來找到??梢赃@樣認為:目錄存儲結(jié)構(gòu)的入口就是根目錄。
    FAT16中目錄項的結(jié)構(gòu)(括號中的是所占的字節(jié)數(shù)):
    文件名(8)->擴展名(3)->文件屬性(1)->保留(10)->修改時間(2)->修改日期(2)->首簇號(2)->文件長度(4)
    這個格式很簡單,通過這里面的首簇號就可以從FAT表里面訪問到實際的文件內(nèi)容了。在MINIX的文件系統(tǒng)里面inode表代替了這里的FAT的功能,本質(zhì)兩者還是一樣的。但是這里使用的是鏈表的結(jié)構(gòu),而MINIX里面使用的索引的結(jié)構(gòu)。FAT的一個很明顯的問題就是隨著分區(qū)變大,F(xiàn)AT將變得十分的臃腫。因為有多少個簇,就需要有雙倍或者是四倍的字節(jié)數(shù)來供FAT消耗。如假設FAT32用滿了4G個簇,也就是至少可以尋址2TB的分區(qū),那么FAT將占據(jù)16G的空間。而一般考慮到查找效率,F(xiàn)AT都是要被加載到內(nèi)存的,因此不可想象。一般來講,F(xiàn)AT不宜超過4MB大小,也就是FAT32里面簇的個數(shù)不宜超過1M個,相應的磁盤空間如果按照每簇32K的話,也就是32G的磁盤分區(qū)。
    FAT32對簇的編號依然同F(xiàn)AT16。順序上首簇仍然編號為第2簇,通常為根目錄所用(這和FAT16是不同的,F(xiàn)AT16的根目錄并不占簇區(qū)空間,32個扇區(qū)的根目錄以后才是簇區(qū)第1個簇) ,這是FAT16和FAT32一個比較大的不同點。
    FAT32下,與EXT2文件系統(tǒng)相比,長文件名的實現(xiàn)比較特別。長文件名依然是記錄在目錄項中的。為了低版本的OS或程序能正確讀取長文件名文件,系統(tǒng)自動為所有長文件名文件創(chuàng)建了一個對應的短文件名,使對應數(shù)據(jù)既可以用長文件名尋址,也可以用短文件名尋址。長文件名還是按照32個字節(jié)的條目來存放的,每個條目里面存放13個字符(注意,使用的是unicode編碼,因此占用26個字節(jié),還有一些輔助信息),因此,一個長文件名需要使用多個條目。而且,物理結(jié)構(gòu)上的存放是倒著的:
    首先是長文件名的最后一個13字符部分,然后一次完全,直到第一個32字節(jié)條目。然后下面存放的才是短文件名,在短文件名里面存放著真正的文件的信息,如創(chuàng)建時間,文件大小等等。因此,短文件名條目的作用是至關重要的。當然,這里面還有一些對應算法,這里就不詳談了。 長文件名的實現(xiàn)有賴于目錄項偏移為0xB的屬性字節(jié),當此字節(jié)的屬性為:只讀、隱藏、系統(tǒng)、卷標,即其 值為0FH時,DOS和WIN32會認為其不合法而忽略其存在。這正是長文件名存在的依據(jù)。

參考:
1. Microsoft Corp. Microsoft Extensible Firmware Initiative FAT32 File System Specification.
2. Shrishail Rana. Fat32 & File System Guide        
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
硬盤 FAT 文件系統(tǒng)原理的詳細分析
FAT16 文件結(jié)構(gòu)與組織
圖解電腦硬盤維修及數(shù)據(jù)恢復11
FAT16存儲原理:
FAT文件系統(tǒng)原理+FAT32文件系統(tǒng)學習+FAT32 FAT區(qū)__FAT表解析
fat32
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服