1、文件和文件系統(tǒng)
文件管理:把所管理的程序和數(shù)據(jù)組織成一系列的文件洞就,并能進(jìn)行合理的存儲(chǔ)盆繁、使用等操作。
1)基本概念
數(shù)據(jù)項(xiàng):描述對(duì)象某種屬性的字符集旬蟋;是數(shù)據(jù)組織中可以命名的最小邏輯數(shù)據(jù)單位油昂。
記錄:一組相關(guān)數(shù)據(jù)項(xiàng)集合,描述對(duì)象某方面的屬性倾贰;
關(guān)鍵字:一個(gè)記錄中的一個(gè)或幾個(gè)數(shù)據(jù)項(xiàng)的集合冕碟,用于唯一的標(biāo)識(shí)一個(gè)記錄。
文件:由創(chuàng)建者定義的匆浙、具有文件名的一組相關(guān)元素的集合安寺。
有結(jié)構(gòu):由相關(guān)記錄組成
無(wú)結(jié)構(gòu):字符流的形式
屬性:類型、長(zhǎng)度首尼、物理位置挑庶、創(chuàng)建時(shí)間
2)文件類型
不同的系統(tǒng)對(duì)文件的管理方式不同
大多用擴(kuò)展名標(biāo)志文件類型,按如下幾種方式分類文件
按用途:系統(tǒng)软能、用戶迎捺、庫(kù)文件
按數(shù)據(jù)形式:源文件、目標(biāo)文件埋嵌、可執(zhí)行文件
按存取控制屬性:只執(zhí)行破加、只讀、讀寫(xiě)
u按組織和處理方式:普通文件雹嗦、目錄文件范舀、特殊(設(shè)備)文件
2、文件的邏輯結(jié)構(gòu)
文件結(jié)構(gòu):
文件的邏輯結(jié)構(gòu)file logical structure:按用戶觀點(diǎn)如何組織數(shù)據(jù)了罪;又稱文件組織file organization
基本要求:檢索速度高锭环、方便修改、降低存儲(chǔ)空間費(fèi)用(不連續(xù))
文件的物理結(jié)構(gòu):根據(jù)外存上的物理塊的分配機(jī)制泊藕,記錄文件外存的存儲(chǔ)結(jié)構(gòu)辅辩。用戶感知不到的。
1)文件邏輯結(jié)構(gòu)的類型
有結(jié)構(gòu)文件(記錄式)
①定長(zhǎng)記錄
②變長(zhǎng)記錄
如何組織記錄:
順序文件娃圆。系統(tǒng)需按該類型記錄“長(zhǎng)度”玫锋,通常定長(zhǎng)。
索引文件讼呢。系統(tǒng)需為文件建立索引表撩鹿。
索引順序文件。建索引表悦屏,記錄每組記錄的第一個(gè)記錄位置节沦。
無(wú)結(jié)構(gòu)文件(字符流式)
字節(jié)為單位键思,利用讀寫(xiě)指針依次訪問(wèn)。
系統(tǒng)對(duì)該類文件不需格式處理甫贯。
①順序文件
兩種記錄排列方式
串結(jié)構(gòu):按記錄形成的時(shí)間順序串行排序吼鳞。記錄順序與關(guān)鍵字無(wú)關(guān);
順序結(jié)構(gòu):按關(guān)鍵字排序叫搁。
檢索方法:
從頭檢索赔桌,順序查找要找的記錄,定長(zhǎng)的計(jì)算相對(duì)快渴逻。
順序結(jié)構(gòu)纬乍,可用折半查找、插值查找裸卫、跳步查找等算法提高效率
順序結(jié)構(gòu)記錄按關(guān)鍵字排序仿贬,可按關(guān)鍵字檢索
定長(zhǎng):結(jié)合折半查找算法等提高檢索速度
變長(zhǎng):從第1個(gè)記錄開(kāi)始順序掃描,直到掃描到要檢索的關(guān)鍵字標(biāo)識(shí)的記錄(例如:數(shù)據(jù)庫(kù)墓贿、文件系統(tǒng)的基于文件名排序的目錄檢索)
順序文件的優(yōu)缺點(diǎn):
不方便隨機(jī)存取某條記錄茧泪,但適用批量存取的場(chǎng)合。
適合磁帶等特殊介質(zhì)聋袋。
單記錄的查找队伟、修改等交互性差;增減不方便(改進(jìn)辦法:把增刪改的記錄登記在一個(gè)事務(wù)文件中幽勒,在某段時(shí)間間隔后再與原文件合并更新)嗜侮。
②索引文件
為了方便單個(gè)記錄的隨機(jī)存取,為文件建立一個(gè)索引表啥容,記錄每項(xiàng)記錄在文件的邏輯地址及記錄長(zhǎng)度锈颗;該索引表按關(guān)鍵字排序,咪惠。
索引表內(nèi)容:
索引號(hào)击吱、長(zhǎng)度、記錄地址指針
檢索效率
索引表本身即是個(gè)按記錄鍵排序的定長(zhǎng)順序文件遥昧,所以能利用算法提高索引表檢索速度
一個(gè)索引文件可以有多個(gè)索引表
? ???為方便用戶根據(jù)不同記錄屬性檢索記錄覆醇,為順序文件建立多個(gè)索引表,每種能成為檢索條件的域都配備一張索引表炭臭。
索引文件的優(yōu)缺點(diǎn)
適用于變長(zhǎng)記錄永脓,可提高檢索速度,實(shí)現(xiàn)直接存取
索引表增加了存儲(chǔ)開(kāi)銷
③索引順序文件
既要方便鞋仍,又要降低開(kāi)銷
本方式是最常見(jiàn)的一種邏輯文件形式常摧。
將順序文件的所有記錄分組
還是建立索引表,但每個(gè)表項(xiàng)記錄的是每組第1條記錄的鍵值和地址凿试。
組內(nèi)記錄仍按順序方式檢索和使用排宰。
檢索一條記錄的過(guò)程:
先計(jì)算記錄是在第幾組,然后再檢索索引確定組在哪里后那婉,在組內(nèi)順序查找板甘。
可利用多級(jí)索引,進(jìn)一步提高檢索效率详炬。
3盐类、外存分配方式
目標(biāo):有效利用外存空間,提高文件訪問(wèn)速度
常用三種方式:
連續(xù)分配呛谜;鏈接分配(不連續(xù))在跳;索引分配
通常一個(gè)系統(tǒng)中僅采用一種方式
采用的磁盤(pán)分配方式?jīng)Q定了文件的“物理結(jié)構(gòu)”
順序結(jié)構(gòu);鏈接式結(jié)構(gòu)隐岛;索引式結(jié)構(gòu)猫妙。
注意與邏輯結(jié)構(gòu)名類似但不是一回事。
缺點(diǎn):會(huì)產(chǎn)生外存碎片聚凹「钭梗可緊湊法彌補(bǔ),但需要額外的空間妒牙,和內(nèi)存緊湊相比更花時(shí)間彼哼。
創(chuàng)建文件時(shí)要給出文件大小湘今;存儲(chǔ)空間利用率不高敢朱,不利于文件的動(dòng)態(tài)增加和修改;
適用于變化不大順序訪問(wèn)的文件摩瞎,在流行的UNIX系統(tǒng)中仍保留了連續(xù)文件結(jié)構(gòu)拴签。如對(duì)換區(qū)
2)鏈接分配
可以為每一個(gè)文件分配一組不相鄰的盤(pán)塊。
設(shè)置鏈接指針旗们,將同屬于一個(gè)文件的多個(gè)離散盤(pán)塊鏈接成一個(gè)鏈表篓吁,這樣形成的文件稱為鏈接文件。會(huì)有鏈接成本蚪拦。
優(yōu)點(diǎn):離散分配杖剪,消除外部碎片,提高利用率驰贷;同時(shí)適用于文件的動(dòng)態(tài)增長(zhǎng)盛嘿;修改容易
FAT 與 NTFS技術(shù)
1.FAT12
? 表項(xiàng)12位。能支持的硬盤(pán)容量?jī)H為8M括袒。
2^12(個(gè))*512B*4(分區(qū)數(shù))=2^23B=8M
磁盤(pán)容量不斷增大次兆,可將若干盤(pán)塊組為一簇。以簇為單位分配空間
FAT表記錄簇號(hào)锹锰,表項(xiàng)數(shù)量減少芥炭,一定程度上提高了檢索速度漓库,減少了指針開(kāi)銷,
但該改進(jìn)有限园蝠,且會(huì)形成簇內(nèi)碎片渺蒿。12位的格式對(duì)磁盤(pán)容量仍有很大限制
2.FAT16
增加FAT表的項(xiàng)數(shù),16位可管理的盤(pán)容量為
2^16*64*512B(一簇含64個(gè)盤(pán)塊)=2048M
若磁盤(pán)容量為8G彪薛,則每簇大小達(dá)到128K(8G/2^16),簇內(nèi)碎片最大會(huì)到128K茂装。浪費(fèi)嚴(yán)重。
3.FAT32
簇不能太大善延,只能繼續(xù)增加表項(xiàng)位數(shù)少态,以記錄更多數(shù)量
FAT32規(guī)定每簇4KB(即8個(gè)512B的盤(pán)塊),該格式能管理的單個(gè)最大磁盤(pán)空間為2^32*4KB=2TB易遣。
簇大小合適潮瓶,空間利用率提高椎工;但分配表的擴(kuò)大使運(yùn)行速度相對(duì)慢了洛二;可支持長(zhǎng)文件名鼻种;有最小空間管理限制,卷必須大于512M澜薄,單個(gè)文件長(zhǎng)度不能大于4G为肮,不能向下兼容。
4.NTFS
New technology file system
①采用64位磁盤(pán)地址肤京,理論上支持2^64字節(jié)的磁盤(pán)分區(qū)颊艳;
②支持長(zhǎng)文件名;
③系統(tǒng)糾容錯(cuò)功能
④提供數(shù)據(jù)一致性忘分、文件加密棋枕、壓縮等功能
磁盤(pán)組織
以簇為單位分配回收、但不規(guī)定盤(pán)塊大小
磁盤(pán)格式化時(shí)確定卷的簇大卸事汀(物理磁盤(pán)扇區(qū)的整數(shù)倍)重斑,512M以內(nèi)的小磁盤(pán)默認(rèn)簇大小為512B,1G的默認(rèn)大小為1KB肯骇。窥浪。。大多數(shù)情況是4KB
卷上簇編號(hào)為L(zhǎng)CN笛丙,用戶用到的簇順序編成用戶虛擬簇號(hào)VCN漾脂,NTFS可進(jìn)行VCN到LCN的映射
文件組織
以卷為單位,將卷的所有文件信息胚鸯、目錄信息骨稿、可用未分配空間記錄在主控文件表MFT中。
每個(gè)文件的信息對(duì)應(yīng)一行,固定大小1KB坦冠,稱為元數(shù)據(jù)
文件屬性信息形耗、文件數(shù)據(jù)較少時(shí)就直接寫(xiě)在MFT中;較多超出1KB時(shí)辙浑,記錄存放這些信息的簇地址指針激涤。
兼容性上也有不足
3)索引分配
鏈接的不足
順序檢索的時(shí)間成本:不能支持高效的盤(pán)塊直接存取。要對(duì)一個(gè)文件進(jìn)行直接存取例衍,仍需在FAT中順序的查找許多盤(pán)塊號(hào)。
鏈接信息的空間成本:FAT需占用較大的內(nèi)存空間已卸。當(dāng)磁盤(pán)容量較大時(shí)佛玄,F(xiàn)AT可能要占用數(shù)MB以上的內(nèi)存空間。這是令人難以忍受的
改進(jìn):系統(tǒng)運(yùn)行時(shí)只涉及部分文件累澡,F(xiàn)AT表無(wú)需全部調(diào)入內(nèi)存
每個(gè)文件單獨(dú)建索引表(物理盤(pán)塊索引)梦抢,記錄所有分配給它的盤(pán)塊號(hào);
建立文件時(shí)愧哟,便分配一定的外存空間用于存放文件盤(pán)塊索引表信息奥吩;
多級(jí)索引下的文件大小
若兩級(jí)索引,盤(pán)塊1KB蕊梧,盤(pán)塊號(hào)占4字節(jié)
一個(gè)盤(pán)塊可存放的盤(pán)塊號(hào)數(shù)有多少個(gè)
1KB/4B= 2^10/4 = 2^8 =256(個(gè))
二級(jí)索引下的文件可分配的最大盤(pán)塊數(shù)
256* 256 =2^6×2^10=64 K(個(gè))
文件最大長(zhǎng)度為 64K(個(gè))*1KB=64MB
若盤(pán)塊大小為4KB霞赫,單級(jí)索引允許文件最大長(zhǎng)度為4MB(4K/4*4KB),二級(jí)索引則文件最大可達(dá)4GB(1K*1K*4KB)肥矢。
③混合組織索引(增量式索引組織方式)
多種索引方式相結(jié)合端衰,以UNIX system V的索引結(jié)點(diǎn)為例:
一個(gè)索引結(jié)點(diǎn)定義為13個(gè)地址項(xiàng):iaddr(0)~iaddr(12),總的來(lái)說(shuō)分為兩種:直接地址甘改、間接地址
iaddr(0)~iaddr(9)存放直接地址旅东,即存文件數(shù)據(jù)的盤(pán)塊號(hào);
iaddr(10)存放單級(jí)索引的索引盤(pán)塊號(hào)十艾;
剩余的用于文件較大時(shí)存放多級(jí)索引數(shù)據(jù)抵代。
iaddr(11)存放二級(jí)索引的主索引盤(pán)塊號(hào)
iaddr(12)存放三級(jí)索引的主索引盤(pán)塊號(hào)
4、存儲(chǔ)空間的管理
典型的管理方法:
1)空閑表和空閑鏈表法
2)位示圖法
3)成組鏈接法
②存儲(chǔ)空間的分配與回收操作
與內(nèi)存的動(dòng)態(tài)分配類似忘嫉,同樣可采用首次適應(yīng)算法荤牍、循環(huán)首次適應(yīng)算法等。
回收主要解決對(duì)數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)修改庆冕。
應(yīng)該說(shuō)明参淫,雖然很少采用連續(xù)分配方式,然而在外存的管理中愧杯,由于它具有較高的分配速度涎才,可減少訪問(wèn)磁盤(pán)的I/O頻率,故它在諸多分配方式中仍占有一席之地。(如實(shí)現(xiàn)虛擬用的部分外存就是連續(xù)分配方式)
空閑鏈表法
將所有空閑盤(pán)區(qū)拉成一條空閑鏈耍铜。
①數(shù)據(jù)結(jié)構(gòu):鏈
? 根據(jù)構(gòu)成鏈所用基本元素的不同邑闺,可把鏈表分成兩種形式:
o空閑盤(pán)塊鏈
o空閑盤(pán)區(qū)鏈
空閑盤(pán)塊鏈
將磁盤(pán)上的所有空閑空間,以盤(pán)塊為單位拉成一條鏈棕兼。
因創(chuàng)建文件而請(qǐng)求分配空間時(shí)陡舅,系統(tǒng)從鏈?zhǔn)滓来握逻m當(dāng)數(shù)目的空閑盤(pán)塊分配給用戶。
因刪除文件而釋放存儲(chǔ)空間時(shí)伴挚,系統(tǒng)將回收的盤(pán)塊依次插入空閑盤(pán)塊鏈的末尾靶衍。
優(yōu)點(diǎn):分配和回收一個(gè)盤(pán)塊的過(guò)程非常簡(jiǎn)單,但為一個(gè)文件分配盤(pán)塊時(shí)茎芋,可能要重復(fù)操作多次颅眶。
空閑盤(pán)區(qū)鏈
將所有空閑盤(pán)區(qū)拉成一條鏈。每個(gè)盤(pán)區(qū)上含有:
? 指示下一空閑盤(pán)區(qū)的指針田弥、本盤(pán)區(qū)大小等信息
分配通常采用首次適應(yīng)算法涛酗。回收盤(pán)區(qū)時(shí)偷厦,將回收區(qū)與相鄰的空閑盤(pán)區(qū)相合并商叹。
為提高檢索速度,可以采用顯式方法只泼,為空閑盤(pán)區(qū)建立一張鏈表放在內(nèi)存中剖笙。
分配、回收操作涉及的鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)的處理方便
2)位示圖法——位示圖
利用二進(jìn)制的一位來(lái)表示一個(gè)盤(pán)塊的使用情況请唱。
值為0表示對(duì)應(yīng)的盤(pán)塊空閑枯途,為1表示已分配。有的系統(tǒng)則相反籍滴。
磁盤(pán)上的所有盤(pán)塊都有一個(gè)二進(jìn)制位與之對(duì)應(yīng)酪夷,這樣由所有盤(pán)塊所對(duì)應(yīng)的位構(gòu)成一個(gè)集合,稱為位示圖孽惰。
總塊數(shù)=m*n晚岭。可用m*n個(gè)位數(shù)來(lái)構(gòu)成位示圖勋功,可看成是二維數(shù)組(數(shù)據(jù)結(jié)構(gòu))坦报。
盤(pán)塊的分配與回收
根據(jù)位示圖進(jìn)行盤(pán)塊分配:
1)順序掃描位示圖。找到為0的二進(jìn)制位狂鞋。
2)將所找到的一個(gè)或一組二進(jìn)制位片择,轉(zhuǎn)換成與之對(duì)應(yīng)的盤(pán)塊號(hào)。進(jìn)行分配操作骚揍。
盤(pán)塊號(hào)計(jì)算公式為:盤(pán)塊號(hào)=列總數(shù)*(i-1)+ j;
(注意下標(biāo)i字管,j從1開(kāi)始)
3)修改位示圖啰挪。
根據(jù)位示圖進(jìn)行盤(pán)塊回收:
1)將回收盤(pán)塊的盤(pán)塊號(hào)轉(zhuǎn)換成位示圖中的行號(hào)和列號(hào)。轉(zhuǎn)換公式為:i=(盤(pán)塊號(hào)-1)div列+1嘲叔;j=(盤(pán)塊號(hào)-1)mod列數(shù)+1
Div 求商亡呵,mod 取余,公式中的i硫戈、j都是從1開(kāi)始的(如12號(hào)盤(pán)塊轉(zhuǎn)換后為1锰什,12)
2)修改位示圖。
優(yōu)點(diǎn):從位示圖中很容易找到一個(gè)或一組相鄰接的空閑盤(pán)塊丁逝。
但限于容量問(wèn)題汁胆,常用于微型機(jī)和小型機(jī)中。
3)成組鏈接法
大型文件系統(tǒng)霜幼,空閑表或空閑鏈表太長(zhǎng)不方便管理操作嫩码。
UNIX系統(tǒng)中采用成組鏈接法,這是將兩種方法結(jié)合而形成的一種空閑盤(pán)塊管理方法辛掠。
中心思想:
所有盤(pán)塊按規(guī)定大小劃分為組谢谦;
組間建立鏈接释牺;
組內(nèi)的盤(pán)塊借助一個(gè)系統(tǒng)椔荞茫可快速處理,且支持離散分配回收没咙。