磁盤
柱面
扇區(qū):512字節(jié)
分區(qū)
主分區(qū)旺韭、擴(kuò)展分區(qū)、邏輯分區(qū)
MBR:主引導(dǎo)程序(446)掏觉、分區(qū)表(16 * 4)区端、0xAA 55(其值是0x55 AA)
boot sector:自舉裝入程序區(qū)(本分區(qū)操作系統(tǒng)類型、數(shù)據(jù)區(qū)大小
根目錄區(qū)允許最大目錄項(xiàng)(在根目錄區(qū)最多創(chuàng)建多少個(gè)文件))
超級(jí)塊副本 | 配置信息 | i-node圖 | 塊位圖 | i-node塊 | 目錄塊和數(shù)據(jù)塊
而inode map就是用來映射inode_array這個(gè)數(shù)組使用情況的一個(gè)位圖履腋,用法跟sector map類似珊燎。
每個(gè) i-node對(duì)應(yīng)一個(gè)文件惭嚣,用于存放文件名遵湖、文件屬性等內(nèi)容,inode_array就是把所有 i-node都放在這里晚吞,形成一個(gè)較大的數(shù)組
軟硬鏈接
符號(hào)鏈接又稱軟鏈接延旧,它創(chuàng)建了之后,擁有自己的i-節(jié)點(diǎn)號(hào)槽地,但是它的內(nèi)容卻是指向的鏈接的文件迁沫。這樣的機(jī)制就決定了軟鏈接可以跨越文件系統(tǒng)進(jìn)行鏈接。
硬鏈接創(chuàng)建了之后捌蚊,它的i-節(jié)點(diǎn)號(hào)是共用的鏈接的文件集畅,所以硬鏈接產(chǎn)生的文件并不需要多大的空間,而且修改了其中一個(gè)的內(nèi)容缅糟,另外一個(gè)文件的內(nèi)容也會(huì)隨之改變。由于是共用i-節(jié)點(diǎn),又由于磁盤可能有多個(gè)文件系統(tǒng)涣仿,而每個(gè)文件系統(tǒng)的i-節(jié)點(diǎn)是重復(fù)的咏闪,所以跨文件系統(tǒng)的硬鏈接是不被允許的。
進(jìn)程操作文件
內(nèi)核中赴涵,對(duì)應(yīng)于每個(gè)進(jìn)程都有一個(gè)文件描述符表媒怯,表示這個(gè)進(jìn)程打開的所有文件。文件描述表中每一項(xiàng)都是一個(gè)指針髓窜,指向一個(gè)用于描述打開的文件的數(shù)據(jù)塊———file對(duì)象扇苞,file對(duì)象中描述了文件的打開模式,讀寫位置等重要信息,當(dāng)進(jìn)程打開一個(gè)文件時(shí)杨拐,內(nèi)核就會(huì)創(chuàng)建一個(gè)新的file對(duì)象祈餐。需要注意的是,file對(duì)象不是專屬于某個(gè)進(jìn)程的哄陶,不同進(jìn)程的文件描述符表中的指針可以指向相同的file對(duì)象帆阳,從而共享這個(gè)打開的文件。file對(duì)象有引用計(jì)數(shù)屋吨,記錄了引用這個(gè)對(duì)象的文件描述符個(gè)數(shù)蜒谤,只有當(dāng)引用計(jì)數(shù)為0時(shí),內(nèi)核才銷毀file對(duì)象至扰,因此某個(gè)進(jìn)程關(guān)閉文件鳍徽,不影響與之共享同一個(gè)file對(duì)象的進(jìn)程.
file對(duì)象中包含一個(gè)指針,指向dentry對(duì)象敢课。dentry對(duì)象代表一個(gè)獨(dú)立的文件路徑阶祭,如果一個(gè)文件路徑被打開多次,那么會(huì)建立多個(gè)file對(duì)象直秆,但它們都指向同一個(gè)dentry對(duì)象濒募。
dentry對(duì)象中又包含一個(gè)指向inode對(duì)象的指針。inode對(duì)象代表一個(gè)獨(dú)立文件圾结。因?yàn)榇嬖谟叉溄优c符號(hào)鏈接瑰剃,因此不同的dentry對(duì)象可以指向相同的inode對(duì)象.inode 對(duì)象包含了最終對(duì)文件進(jìn)行操作所需的所有信息,如文件系統(tǒng)類型筝野、文件的操作方法晌姚、文件的權(quán)限、訪問日期等歇竟。
打開文件后挥唠,進(jìn)程得到的文件描述符實(shí)質(zhì)上就是文件描述符表的下標(biāo),內(nèi)核根據(jù)這個(gè)下標(biāo)值去訪問相應(yīng)的文件對(duì)象焕议,從而實(shí)現(xiàn)對(duì)文件的操作宝磨。
########注意,同一個(gè)進(jìn)程多次打開同一個(gè)文件時(shí)号坡,內(nèi)核會(huì)創(chuàng)建多個(gè)file對(duì)象懊烤。
當(dāng)進(jìn)程使用fork系統(tǒng)調(diào)用創(chuàng)建一個(gè)子進(jìn)程后,子進(jìn)程將繼承父進(jìn)程的文件描述符表宽堆,因此在父進(jìn)程中打開的文件可以在子進(jìn)程中用同一個(gè)描述符訪問腌紧。