1. 程式人生 > >作業系統-10——檔案管理

作業系統-10——檔案管理

檔案和檔案系統

1.檔案(File)

    1.1 定義:儲存在外存上具有標識名的一組相關字元流記錄集合。可長期儲存和共享。

    1.2 分類:記錄式檔案、流式檔案。(按檔案結構劃分)

            #記錄式檔案:資料有4個結構層次:域(欄位)、記錄、檔案、資料庫。

                ##磁碟I/O時需將多條記錄組裝成塊才能I/O。以下是三種記錄組塊的方法。

                    ###固定組塊:記錄長度固定,若干完整的記錄放在一塊,塊後部可能會有內碎片

                    ###可變長度跨域式組塊:記錄長度可變,儘可能佔滿一塊。有些記錄可能跨越兩塊,則用指標連結


                    ###可變長度非跨越式組塊:記錄長度可變,但不跨快,有塊內碎片。一個記錄的長度不能超過塊尺寸

             #流式檔案:UNIX將所有檔案都看做由位元組流組成,如源程式。目的碼等。

2.檔案系統(File System)

 2.1 定義OS(作業系統)中負責儲存管理和操作檔案的一組系統實用程式及所需的資料結構

    2.2 功能

                (使用者角度)

              #建立、刪除、開啟、關閉、讀、寫檔案和目錄;

              #維護檔案屬性:檔名,所有者、建立/修改時間、訪問許可權,長度,外存地址等。

              #檔案的透明存取(按名存取)、共享與保護。

                (作業系統角度)

              #目錄管理,訪問(許可權)控制,訪問方法,檔案操作函式,記錄組塊,檔案分配,磁碟管理和排程。

3.目錄

#每個檔案都有一個目錄項(檔案控制塊FCB)用以儲存它的屬性。

#每個目錄本身也是一個檔案。目錄檔案是佔據整數個磁碟塊記錄式檔案,內容是該目錄下所有檔案目錄項的集合

(PS:即目錄本身是一個檔案,必須佔據整數個磁碟塊空間並且本身是記錄式檔案。目錄儲存的內容是什麼呢?儲存的是該目錄下所有檔案的目錄項的集合,即目錄儲存的是目錄項集合。)

#每一個目錄至少包含了當前目錄

父目錄兩項。

#結構:樹形目錄。檔案由檔案路徑名和檔名標識。

4.訪問許可權

#訪問許可權層次:無許可權,知道檔案存在,執行,讀,在檔案尾追加資料,寫,更改其他使用者的訪問許可權,刪除檔案。

(每一項許可權都隱含了前面的許可權,即高許可權包括了低許可權。)

!#使用者刪除檔案時,OS不可能刪除此檔案所在的目錄,但可刪除與此檔案關聯的目錄項,檔案控制塊,記憶體緩衝區。

!#檔案首次被開啟時,OS會變檔案控制塊讀到記憶體中。

5.檔案分配

3種檔案分配方法:連續分配,連結分配,索引分配

#連續分配

    ##為檔案分配一組相鄰的盤塊。(可用FF,BF,WF 分配方法。詳情可見 “作業系統——記憶體分配”)

    ##檔案屬性簡單:起始塊號,塊數。

    ##順序訪問和隨機訪問方便:尋道少,I/O快。(優點)

    ##磁碟外碎片多,需緊縮;檔案不能動態增長(缺點)

!!#增加或刪除塊需要將所有後續塊向後移或向前移(先讀到記憶體在再寫回磁碟)。


#連結分配

##每個磁碟塊都有一個連結指標,將該檔案的多個離散磁碟塊連結成一個連結串列。

    ##動態分配:沒有外碎片(優點);尋道多,I/O慢(缺點)

!!#FCB中有<起始塊號>,下一塊的塊號存放在本次盤塊的末端。增加或刪除塊需要將所有前續塊讀到記憶體,讀取或修改一個塊的塊號。


#索引分配

##把所有磁碟塊的地址集中到索引塊中。

       ##沒有外碎片;隨機訪問。(優點)

       ##增加了索引塊的開銷。(缺點)

       ##基於單塊盤塊進行索引分配


        ##基於長度可變的(磁碟塊)分割槽進行索引分配

            同樣一個索引塊的開銷,可為檔案分配更多的磁碟塊。


6.磁碟空閒空間管理

#管理方法:點陣圖,空閒區鏈,索引表,空閒塊列表

6.1.點陣圖(bitmap)

# 1bit => 1塊的狀態    0:空閒,1:已分配

    分配磁碟塊時:磁碟塊號 i = 字號*字長+位號

    回收i號磁碟塊時:字號 = INT (i/字長),位號 = i mod 字長。


6.2空閒區鏈

#將所有空閒盤塊區形成一個連結串列


6.3索引表

#將所有空閒盤塊區的“首塊號+塊數”放在一個索引表中。


6.4空閒塊列表

#將所有空閒盤塊數放在磁碟一個保留區裡。此表可部分複製到記憶體,可排序以實現連續分配