文件系統(tǒng)通過(guò)為每個(gè)文件分配文件塊的方式把數(shù)據(jù)存儲(chǔ)在存儲(chǔ)設(shè)備中。這樣就要維護(hù)每一個(gè)文件的文件塊的分配信息,而分配信息本身也要存在磁盤(pán)上。DOS和Windows的用戶(hù)可能還記得FAT這種文件系統(tǒng)吧。不同的文件系統(tǒng)用不同的方法分配和讀取文件塊。
有兩種常用的文件系統(tǒng)的分配策略:塊分配(block allocation)和擴(kuò)展分配(extent allocation)。塊分配當(dāng)文件變大的時(shí)候每一次都為這個(gè)文件分配磁盤(pán)空間,而擴(kuò)展分配則是當(dāng)某個(gè)文件的磁盤(pán)空間不夠的時(shí)候,一次性為它分配一連串連續(xù)的塊。
傳統(tǒng)的Unix文件系統(tǒng)使用的塊分配的機(jī)制提供了一個(gè)靈活而高效的文件塊分配策略。
磁盤(pán)上的文件塊根據(jù)需要分配給文件,這樣可以減少存儲(chǔ)空間的浪費(fèi)。當(dāng)一個(gè)文件慢慢變大的時(shí)候,就會(huì)造成文件中文件塊的不連續(xù)。這就導(dǎo)致了過(guò)多的磁盤(pán)尋道時(shí)間,當(dāng)讀取一個(gè)文件的時(shí)候有可能要隨機(jī)而不是連續(xù)地讀取文件塊,這樣的效率很低。
可以通過(guò)優(yōu)化文件塊的分配策略(盡可能為文件分配連續(xù)的塊)來(lái)避免文件塊的隨機(jī)分配。通過(guò)使用聰明的塊分配策略,可以實(shí)現(xiàn)塊的連續(xù)分配。這樣就可以減少磁盤(pán)的尋道時(shí)間。但是,當(dāng)整個(gè)文件系統(tǒng)的文件塊的分配形成碎片的時(shí)候,就再也不可能連續(xù)分配了。
每一次當(dāng)文件擴(kuò)展的時(shí)候,塊分配的算法就要寫(xiě)入一些關(guān)于新分配的塊所在位置的信息。
如果每一次文件擴(kuò)展的時(shí)候只增加一個(gè)塊,那么就需要很多額外的磁盤(pán)I/O用來(lái)寫(xiě)入文件塊的結(jié)構(gòu)信息。文件塊的結(jié)構(gòu)信息也就是上面說(shuō)的meta-data。
meta-data總是一起同時(shí)地寫(xiě)入存儲(chǔ)設(shè)備的,這就意味著改變文件大小的操作要等到所有的meta-data的操作都完成之后才能進(jìn)行。因此,meta-data的操作會(huì)顯著地降低整個(gè)文件系統(tǒng)的性能。
新聞熱點(diǎn)
疑難解答
圖片精選