一、概述
文件的邏輯結(jié)構(gòu) ( 順序文件,索引文件,索引順序文件,直接文件和哈希文件 )
外存分配方式
文件目錄管理
文件存儲空間管理
文件系統(tǒng)的可靠性和安全性
文件系統(tǒng)的數(shù)據(jù)一致性控制
文件管理,由于系統(tǒng)的內(nèi)存有限并且不能長期保存,故平時總是把它們以文件的形式存放在外存中,需要時再將它們調(diào)入內(nèi)存。如何高效的對文件進行管理是操作系統(tǒng)實現(xiàn)的目標(biāo)。
二、文件和文件系統(tǒng)
2.1
現(xiàn)代OS幾乎都是通過文件系統(tǒng)來組織和管理在計算機中所存儲的大量程序和數(shù)據(jù)的。文件系統(tǒng)的管理功能是通過把它所管理的程序和數(shù)據(jù)組織成一系列文件的方法來實現(xiàn)的。而文件則是指具有文件名的若干相關(guān)元素的集合。元素通常是記錄,而記錄是一組有意義的數(shù)據(jù)項的集合??梢园褦?shù)據(jù)組成分為數(shù)據(jù)項、記錄、文件。
?、贁?shù)據(jù)項,數(shù)據(jù)項是最低級數(shù)據(jù)組織形式。分為基本數(shù)據(jù)項(用于描述一個對象某種屬性的字符集,是數(shù)據(jù)組織中可以明明的最小邏輯數(shù)據(jù)單位,即原子數(shù)據(jù),又稱為數(shù)據(jù)元素或字段)和組合數(shù)據(jù)項(由若干個基本數(shù)據(jù)項組成)
② 記錄,是一組相關(guān)數(shù)據(jù)項的集合,用于描述一個對象在某方面的屬性,為了能夠唯一標(biāo)識一個記錄,需要在一個記錄的各個數(shù)據(jù)項中確定一個或幾個數(shù)據(jù)項,把他們的集合稱為關(guān)鍵字,關(guān)鍵字是能夠唯一標(biāo)識一個記錄的數(shù)據(jù)項。
③ 文件,文件是具有文件名的一組相關(guān)元素的集合,分為有結(jié)構(gòu)文件(又稱記錄式文件:文件由一組相似記錄組成 。如報考某學(xué)校的所有考生的報考信息記錄)和無結(jié)構(gòu)文件(又稱流式文件:被看成是一個字符流。比如一個二進制文件或字符文件)。有結(jié)構(gòu)文件由若干個相關(guān)記錄組成,無結(jié)構(gòu)文件則被看成一個字符流。文件是文件系統(tǒng)的最大數(shù)據(jù)單位。文件應(yīng)該具有自己的屬性,包括文件類型(如源文件、目標(biāo)文件、可執(zhí)行文件等),文件長度(文件的當(dāng)前長度,也可能是最大允許長度),文件的物理位置(指示文件在哪一個設(shè)備上及在該設(shè)備的哪個位置的指針),文件的建立時間(文件最后一次修改時間)。
一個文件可對應(yīng)若干個記錄,一個記錄可對應(yīng)若干個數(shù)據(jù)項。
文件系統(tǒng)管理的對象有:文件(作為文件管理的直接對象),目錄(為了方便用戶對文件的存取和檢索,在文件系統(tǒng)中配置目錄,每個目錄項中,必須含有文件名及該文件所在的物理地址,對目錄的組織和管理是方便和提高對文件存取速度的關(guān)鍵),磁盤(文件和目錄必定占用存儲空間,對這部分空間的有效管理,不僅能提高外存的利用率,而且能提高對文件的存取速度)。
2.2 文件的屬性、基本操作以及文件的打開和關(guān)閉
2.2.1 文件的屬性
①名稱:文件名稱唯一,以容易讀取的形式保存。
②標(biāo)識符:標(biāo)識文件系統(tǒng)內(nèi)文件的唯一標(biāo)簽,通常為數(shù)字,它是對人不可讀的一種內(nèi)部名稱。
③類型:被支持不同類型的文件系統(tǒng)所使用。
④位置:指向設(shè)備和設(shè)備上文件的指針。
⑤大?。何募?dāng)前大小(用字節(jié)、字或塊表示),也可包含文件允許的最大值。
⑥保護:對文件進行保護的訪問控制信息。
⑦時間、日期和用戶標(biāo)識:文件創(chuàng)建、上次修改和上次訪問的相關(guān)信息,用于保護、 安全和跟蹤文件的使用。
2.2.2 文件的基本橾作
?、?創(chuàng)建文件,在創(chuàng)建一個新文件時,系統(tǒng)首先要為新文件分配必要的外存空間,并在文件系統(tǒng)的目錄中,為之建立一個目錄項,目錄項中應(yīng)該記錄新文件的文件名及其在外存的地址等屬性。
?、?刪除文件,當(dāng)已不再需要某文件時,可將其從文件系統(tǒng)中刪除,在刪除時,系統(tǒng)應(yīng)先從目錄中找到要刪除文件的目錄項,使之成為空項,然后回收該文件所占用的存儲空間。
③ 讀文件,讀文件時,須在相應(yīng)系統(tǒng)調(diào)用中給出文件名和應(yīng)讀入的內(nèi)存目標(biāo)地址。此時,系統(tǒng)要查找目錄,找到指定目錄項,從中得到被讀文件在外存中的位置。在目錄項中,還有一個指針用于對文件進行讀/寫。
?、?寫文件,寫文件時,須在相應(yīng)系統(tǒng)調(diào)用中給出文件名和其在內(nèi)存源地址。此時,系統(tǒng)要查找目錄,找到指定目錄項,從再利用目錄中的寫指針進行寫操作。
?、?截斷文件,如果一個文件的內(nèi)容已經(jīng)陳舊而需要全部更新時,一種方法是將此文件刪除,再重新創(chuàng)建一個新文件,但如果文件名和屬性均無改變,則可采取截斷文件的方法,其將原有的文件長度設(shè)置為0,放棄原有文件的內(nèi)容。
?、?設(shè)置文件的讀/寫位置,用于設(shè)置文件讀/寫指針的位置,以便每次讀/寫文件時,不需要從始端開始而是從所設(shè)置的位置開始操作。可以改順序存取為隨機存取。
2.2.3 文件的打開和關(guān)閉
來源:當(dāng)前OS所提供的大多數(shù)對文件的操作,其過程大致都是這樣兩步:首先,檢索文件目錄來找到指定文件的屬性及其在外存上的位置;然后,對文件實施相應(yīng)的操作,如讀/寫文件等,當(dāng)用戶要求對一個文件實施多次讀/寫或其他操作時,每次都要從檢索目錄開始,為了避免多次重復(fù)地檢索目錄,在大多數(shù)OS中都引入了打開這一文件系統(tǒng)調(diào)用,當(dāng)用戶第一次請求對某文件系統(tǒng)進行操作時,先利用open系統(tǒng)調(diào)用將該文件打開。
打開是指系統(tǒng)將指名文件的屬性(包括該文件在外存上的物理位置)從外存拷貝到內(nèi)存打開文件表的一個表目中,并將該表目的編號(索引號)返回給用戶,以后,當(dāng)用戶再要求對該文件進行操作時,便可利用系統(tǒng)所返回的索引號向系統(tǒng)提出操作請求,系統(tǒng)便可直接利用該索引號到打開文件表中去查找,從而避免了對該文件的再次檢索,如果用戶不再需要對該文件實施操作,可利用關(guān)閉系統(tǒng)調(diào)用來關(guān)閉此文件,OS將會把該文件從打開文件表中的表目上刪除掉。
三、文件的邏輯結(jié)構(gòu)
文件的邏輯結(jié)構(gòu):從用戶角度看文件的組織形式
文件的物理結(jié)構(gòu):文件在外存上的存儲組織形式
3.1 文件的邏輯結(jié)構(gòu)類型
無結(jié)構(gòu)文件(流式文件)
1
無結(jié)構(gòu)文件是最簡單的文件組織形式。無結(jié)構(gòu)文件將數(shù)據(jù)按順序組織成記錄并積累保存,它是有序相關(guān)信息項的集合,以字節(jié)(Byte)為單位。由于無結(jié)構(gòu)文件沒有結(jié)構(gòu),因而對記錄的訪問只能通過窮舉搜索的方式,故這種文件形式對大多數(shù)應(yīng)用不適用。但字符流的無結(jié)構(gòu)文件管理簡單,用戶可以方便地對其進行操作。所以,那些對基本信息單位操作不多的文件較適于釆用字符流的無結(jié)構(gòu)方式,如源程序、可執(zhí)行文件、庫函數(shù)等。
有結(jié)構(gòu)文件(記錄式文件)
1
按記錄的組織形式可以分為:
3.1.1 順序文件
文件是記錄的集合,文件中的記錄可以是任意順序的,因此,它可以按照各種不同的順序進行排列,一般地,可歸納為以下兩種情況。
① 串結(jié)構(gòu),個記錄之間的順序與關(guān)鍵字無關(guān),通常按照時間先后排序,最先存入的記錄作為第一個記錄,其次,為第二個記錄,以此類推。
?、?順序結(jié)構(gòu),文件中所有記錄按照關(guān)鍵字排列,可以按照關(guān)鍵詞長度從大到小排列。順序結(jié)構(gòu)的檢索效率更高。
順序文件的最佳應(yīng)用場合是在對諸記錄進行批量存取時,即每次要讀或?qū)懸淮笈涗洉r,此時,對順序文件的存取效率是所有邏輯文件中最高的,此外,只有順序文件才能存儲在磁帶上,并能有效工作。但是想要增加或刪除一個文件比較困難。
提問:為什么增加或刪除一個文件比較困難?
答:類似于數(shù)組的缺點。
3.1.2 索引文件
對于定長記錄文件,可以方便的實現(xiàn)順序存取和直接存取,然而,對于變長記錄就很難實現(xiàn)。為了解決變長記錄檢索問題,可為變長記錄文件建立一張索引表,對主文件中的每個記錄,在索引表中設(shè)有一個相應(yīng)的表項,用于記錄該記錄的長度 L 及指向該記錄的指針(指向該記錄在邏輯地址空間的首址),由于索引表按記錄鍵排序的,因此,索引表本身就是一個定長記錄的順序文件。從而可以方便實現(xiàn)直接存取。
索引表與文件一一對應(yīng)
1
由于是按照關(guān)鍵字進行建立的索引,所以在對索引文件進行檢索時,首先根據(jù)用戶(程序)提供的關(guān)鍵字,并利用折半查找檢索索引表,從中找到相應(yīng)的表項,再利用該表項給出的指向記錄的指針值,去訪問所需的記錄。每當(dāng)要向索引文件中增加一個新紀錄時,便須對索引表進行修改。索引表的問題在于除了有主文件外,還需要配置一張索引表,每個記錄需要有一個索引項,因此提高了存儲費用。優(yōu)點就是擁有較快的檢索速度,適合用于對及時性要求比較高的場合。
3.1.3 索引順序文件
其有效克服了變長記錄不便于直接存取的缺點,而且所付出的代價也不算太大,它是順序文件和索引文件相結(jié)合的產(chǎn)物,它將順序文件中的所有記錄分為若干個組,為順序文件建立一張索引表,在索引表中為每組中的第一個記錄建立一個索引項,其中含有該記錄的鍵值和指向記錄的指針。
在對索引順序文件進行檢索時,首先利用用戶(程序)所提供的關(guān)鍵字及某種查找算法去檢索索引表,找到該記錄組中的第一個記錄的表項,從中得到該記錄組第一個記錄在主文件中的位置,然后,再利用順序查找法去查找主文件,從中找出所要求的記錄。
3.1.4 直接文件
對于直接文件,則根據(jù)給定的記錄鍵值,直接獲得指定記錄的物理地址,換言之,記錄鍵值本身就決定了記錄的物理地址,這種由記錄鍵值到記錄物理地址的轉(zhuǎn)換被稱為鍵值轉(zhuǎn)換。
3.1.5 哈希(Hash)文件
利用Hash函數(shù)可將記錄鍵值轉(zhuǎn)換為相應(yīng)記錄的地址,為了能實現(xiàn)文件存儲空間的動態(tài)分配,通常由Hash函數(shù)所求得的并非是相應(yīng)記錄的地址,而是指向一目錄表相應(yīng)表目的指針,該表目的內(nèi)容指向相應(yīng)記錄所在的物理塊。
emmmmmmm , 這個所講的意思并不是很懂~_~
四、文件目錄管理
為了能夠?qū)ξ募嵤┯行У墓芾?,必須對它們加以妥善組織,這主要是通過文件目錄實現(xiàn)的,文件目錄也是一種數(shù)據(jù)結(jié)構(gòu),用于標(biāo)識系統(tǒng)中的文件及其物理地址,供檢索時使用,對目錄的管理要求如下:
?、?實現(xiàn)按名存取,即用戶只須向系統(tǒng)提供所需訪問的文件的名字,便能夠快速準(zhǔn)確地找到指定文件在外存上的存儲位置,這是目錄管理中最基本的功能。
?、?提高對目錄檢索速度,通過合理地組織目錄結(jié)構(gòu)的方法,可加快對目錄的檢索速度,從而提高對文件的存取速度。
?、?文件共享,在多用戶系統(tǒng)中,應(yīng)該允許用戶共享一個文件。
?、?允許文件重名,系統(tǒng)應(yīng)允許不同用戶對不同文件采用相同的名字,以便用戶按照自己的習(xí)慣給文件命名和使用文件。
4.1 文件控制塊
為了能對文件進行正確的存取,必須為文件設(shè)置用于描述和控制文件的數(shù)據(jù)結(jié)構(gòu),稱之為文件控制塊FCB,文件管理程序可借助于文件控制塊中的信息,對文件施加各種操作,文件與文件控制塊一一對應(yīng),而人們把文件控制塊的有序集合稱為文件目錄,一個文件控制塊就是一個文件目錄項。通常,一個文件目錄也可被看成是一個文件,稱為目錄文件。
文件控制塊包含基本信息、存取控制信息、使用信息。
?、?基本信息,包括文件名(標(biāo)識一個文件的符號名,在每個系統(tǒng)中,每個文件都有唯一的名字,用戶利用該名字進行存?。?;文件物理位置(指文件在外存上的存儲位置,包括存放文件的設(shè)備名、文件在外村上的起始盤塊號、指示文件所占用的盤塊數(shù)或字節(jié)數(shù)的文件長度);文件邏輯結(jié)構(gòu)(指示文件是流式文件還是記錄式文件、記錄數(shù),文件是定長還是變長記錄);文件物理結(jié)構(gòu)(指示文件是順序文件、鏈?zhǔn)轿募€是索引文件)
?、?存取控制信息,包括文件主的存取權(quán)限、核準(zhǔn)用戶的存取權(quán)限及一般用戶的存取權(quán)限。
?、?使用信息,包括文件的建立日期和時間、文件上一次修改的日期和時間及當(dāng)前使用信息(這項信息包括當(dāng)前已打開該文件的進程數(shù)、是否被其他進程鎖住、文件在內(nèi)存中是否已被修改但尚未拷貝到盤上)
4.2 索引結(jié)點
文件目錄通常是存放在磁盤上的,當(dāng)文件很多時,文件目錄可能要占用大量的盤塊,在查找的過程中,先將存放目錄文件的第一個盤塊中的目錄調(diào)入內(nèi)存,然后把用戶所給定的文件名和目錄項中的文件名逐一對比。若未找到指定文件,則再將下一個盤塊中的目錄項調(diào)入內(nèi)存。在檢索目錄文件時,只用到了文件名,僅當(dāng)找到一個目錄項(即其中的文件名與指定要查找的文件名相匹配)時,才需要從該目錄項中讀出該文件的物理地址,而其他一些對該文件進行描述的信息,在檢索目錄時一概不用,顯然,這些信息在檢索目錄時不需要調(diào)入內(nèi)存。為此,在有的系統(tǒng)中,如UNIX系統(tǒng),便采用了把文件名和文件描述信息分開的方法,亦即,使文件描述信息單獨形成一個稱為索引結(jié)點的數(shù)據(jù)結(jié)構(gòu),簡稱為i結(jié)點,在文件目錄中的每個目錄項由文件名和指向該文件所對應(yīng)的i結(jié)點的指針?biāo)鶚?gòu)成。
每個文件都有唯一的磁盤索引結(jié)點(磁盤索引結(jié)點信息與文件名等信息一起構(gòu)成了FCB)
1
4.3 目錄結(jié)構(gòu)
目錄結(jié)構(gòu)的組織,關(guān)系到文件系統(tǒng)的存取速度,也關(guān)系到文件的共享性和安全性,目前常用的目錄結(jié)構(gòu)形式有單級目錄、兩級目錄、多級目錄。
① 單級目錄結(jié)構(gòu),在整個系統(tǒng)中只建立一張目錄表,每個文件占一個目錄項,目錄項中含文件名、文件擴展名、文件長度、文件類型、文件物理地址、狀態(tài)位(表示目錄項是否空閑)等。每當(dāng)要建立一個新文件時,必須先檢查所有的目錄項,以保證新文件名在目錄中是唯一的,然后再從目錄表中找到一個空白目錄項,填入新文件的文件名及其他說明信息,并置狀態(tài)為1,刪除文件時,先從目錄中找到該文件的目錄項,回收該文件所占用的存儲空間,然后再清除該目錄項。單級目錄的有點是簡單并且能夠?qū)崿F(xiàn)目錄管理的基本功能-按名存取,但是查找速度慢(查找一個目錄項要花費較多的時間),不允許重名(在一個目錄表中的所有文件,都不能與另一個文件有相同的名字,這是難以避免的),不便于實現(xiàn)文件共享(每一個用戶都有自己的名字空間或命名習(xí)慣,因此,應(yīng)該允許不同用戶使用不同的文件名來訪問同一個文件)
② 兩級目錄結(jié)構(gòu),為每個用戶建立一個單獨的用戶文件目錄UFD(User File Directory),這些文件目錄具有相似的結(jié)構(gòu),由用戶所有文件的文件控制塊組成。此外,系統(tǒng)中還有一個主文件目錄MFD(Master File Directory),在主文件目錄中,每個用戶目錄文件都占有一個目錄項,其目錄項包括用戶名和指向用戶目錄文件的指針。
兩級目錄結(jié)構(gòu)克服了單級目錄的缺點,具有如下優(yōu)點:提高了檢索目錄的速度(如果在主目錄中有n個子目錄,每個用戶目錄最多為m個目錄項,則為查找一指定的目錄項,最多只需要檢索n+m個目錄項)。在不同的用戶目錄中,可以使用相同的文件名(只要在用戶自己的UFD中,每個文件名都是唯一的,不同用戶可以有文件名相同的文件)。不同用戶還可使用不同的文件名來訪問系統(tǒng)中同一個共享文件。但在多個用戶需要合作完成一個大任務(wù)時,不便于用戶之間共享文件。
③ 多級目錄結(jié)構(gòu),對于大型文件系統(tǒng),通常采用三級或三級以上的目錄結(jié)構(gòu),以提高對目錄的檢索速度和文件系統(tǒng)的性能。多級目錄結(jié)構(gòu)又稱為樹形目錄結(jié)構(gòu),主目錄被稱為根目錄,把數(shù)據(jù)文件稱為樹葉,其他的目錄均作為樹的結(jié)點。
說明:方框代表目錄文件,圓圈代表數(shù)據(jù)文件
1. 應(yīng)該允許在一個目錄文件中的目錄項既是作為目錄文件的FCB,又是數(shù)據(jù)文件的FCB,這一信息可用目錄項中的一位來指示。如用戶A總目錄中,目錄項A是目錄文件FCB,而目錄項B和D則是數(shù)據(jù)文件的FCB。
2. 系統(tǒng)中的每個文件都有唯一的路徑名
3. 絕對路徑與相對路徑
4.4 目錄查詢技術(shù)
當(dāng)用戶要訪問一個已存在的文件時,系統(tǒng)首先利用用戶提供的文件名對目錄進行查詢,找出該文件的文件控制塊或?qū)?yīng)索引結(jié)點,然后,根據(jù)FCB或索引結(jié)點中所記錄的文件物理地址(盤塊號),換算出文件在磁盤上的物理位置,最后,再通過磁盤驅(qū)動程序,將所需文件讀入內(nèi)存。目前常用的方式有線性檢索法和Hash方法。
① 線性檢索法,其又稱為順序檢索法,在樹形目錄中,用戶提供的文件名是由多個文件分量名組成的路徑名,此時須對多級目錄進行查找,假定用戶給定的文件路徑名為/usr/ast/mbox,則查找過程如下。
1. 讀入第一個文件分量名usr,用它與根目錄文件(或當(dāng)前目錄文件)中各目錄項中的文件名順序地進行比較
2. 得到匹配項的索引結(jié)點號是6
3. 從6號索引結(jié)點中得到usr目錄文件放在132號盤塊中,將該盤塊內(nèi)容讀入內(nèi)存
4. 再將路徑名中的第二個分量名ast讀入,用它與放在132號盤塊中的第二級目錄文件中各目錄項的文件名順序進行比較
5. 依次類推
② Hash方法,系統(tǒng)利用用戶提供的文件名并將它轉(zhuǎn)換為文件目錄的索引值,再利用該索引值到目錄中去查找,這將提高檢索速度。