操作系統中的文件系統闡釋

一、概述
操作系統對系統的軟件資源(不論是應用軟件和系統軟件)的管理都以文件方式進行,承擔這部分功能的操作系統稱爲文件系統。

1、文件
計算機系統對系統中軟件資源:無論是程序或數據、系統軟件或應用軟件都以文件方式來管理。文件是存貯在某種介質上的(如磁盤、磁帶等)並具有文件名的一組有序信息的集合。 文件名是由字符和數字組成的,例如MS-DOS中文件名由三部分組成,格式如下:[<盤符>] <文件名> [.擴展名]。格式 [ ] 中是可以省略,盤符爲存放文件的磁盤驅動器號,如用A:和C:分別 表示軟盤和硬盤驅動器;文件名由1∽8個字符組成。擴展名爲由“.”開始的1-3個字符組成,如.EXE表示可執行的浮動代碼文件,.TXT表示ASCⅡ碼文本文件,.LIB表示庫文件,.BAT表示批處理文件等。 
UNIX 文件系統將文件分成普通文件、目錄文件、設備文件(特殊文件)和符號連接文件(Symbolic link)等幾類,UNIX把所有I/O設備作爲特殊文件,對I/O設備操作模仿爲對普通文件的存取,這樣將文件與設備的I/O儘可能統一起來。 
數據項是描述一個對象的某些屬性的字符集,它是數據的基本單位,一個數據項有一個值。記錄是一組相關數據項的集合,用於描述一個對象某方面的屬性。 文件是具有文件名的一組相關記錄的集合。數據庫是相關數據的集合。

2、文件系統
文件系統是操作系統中以文件方式管理計算機軟件資源的軟件和被管理的文件和數據結構(如目錄和索引表等)的集合。 
從系統角度來看,文件系統是對文件存儲器的存儲空間進行組織、分配和回收,負責文件的存儲、檢索、共享和保護。從用戶角度來看,文件系統主要是實現“按名存取”,文件系統的用戶只要知道所需文件的文件名,就可存取文件中的信息,而無需知道這些文件究竟存放在什麼地方。 
文件系統的類型: 
(1)FAT文件系統(MS-DOS文件系統、msdos) 
它是MS-DOS操作系統使用的文件系統,它也能由Windows98/NT、linux、SCO UNIX等操作系統訪問。文件地址以FAT表結構存放,文件目錄32B,文件名爲8個基本名加上一個“.”和3個字符擴展名。 
(2)擴展文件表系統(vfat) 
它是Windows98使用的擴展的DOS文件系統,它在MS-DOS文件系統基礎上增加了對長文件名(最多到256B)支持。 
(3)NTFS(NT文件系統) 
它是Windows NT操作系統使用的文件系統,它具有很強的安全特性和文件系統恢復功能,可以處理巨大的存儲媒體,支持多種文件系統。 
(4)ext2(二級擴展文件系統) 
它是Linux操作系統使用的高性能磁盤文件系統,它是對Minux操作系統中使用的文件系統擴展(ext)的擴展。它支持256字符的文件名,最大可支持到4TB的文件系統大小。 
(5)HPFS(高性能文件系統、hpfs) 
它是OS/2操作系統使用的文件系統。 
(6)S51K/S52K(sysv) 
它是AT&T UNIX S V 操作系統使用的1KB/2KB文件系統。 
(7)CD-ROM文件系統(iso9660) 
它是符合ISO9660標準的支持CD-ROM的文件系統,它有High sierra CD-ROM和Rock Ridge CD-ROM二種類型。 
(8)UDF通用磁盤格式文件系統 
UDF(Universal Disk Format)文件系統是依據光學儲存技術協會(Optical Storage Technology Association, OSTA)的通用磁盤格式文件系統規格1.02版所制定的。它提供了對 UDF格式媒體的只讀訪問(例如DVD光盤)。Windows98提供對UDF文件系統支持。

現代操作系統(如Windows 2000/XP、Linux、UNIX等)提供了對多種文件系統的支持。 
(1)Windows 2000/XP 
Windows 2000/XP支持FAT文件系統、NTFS、HPFS、CD-ROM文件系統等多種文件系統。 Windows 2000執行體內I/O系統分成I/O管理程序、文件系統驅動程序和盤驅動程序三層,不同的文件系統採用不同的文件系統驅動程序,系統用動態連接庫對這些文件系統進行裝入和卸出並適宜於將來的擴展。 
(2)Linux 
Linux支持ext、ext2、msdos、vfat、iso9660、hpfs等多種文件系統。Linux採用虛擬文件系統VFS支持許多不同類型的文件系統,VFS是物理系統與服務之間的一個接口層,它屏蔽各類文件系統的差異,給用戶和程序提供一個統一的接口。使用命令mkfs創建各類文件系統。

二、文件的組織
文件的組織是指文件的構造方式,從用戶觀點出發觀察到的文件組織結構稱爲文件的邏輯結構;而文件在外存上的存儲組織形式稱爲文件的物理結構,又稱文件的存儲結構。

1、文件的邏輯結構和存取方法
從用戶觀點出發觀察到的文件組織結構稱爲文件的邏輯結構,邏輯結構的文件稱邏輯文件。邏輯文件從結構上分成二種形式,一種是無結構的流式文件,另一種是有結構的記錄式文件。 
流式文件是指對文件內信息不再劃分單位,它是依次的一串字符流構成的文件。記錄式文件是用戶把文件內的信息按邏輯上獨立的含義劃分信息單位,每個單位稱爲一個邏輯記錄(簡稱記錄)。所有記錄通常都是描述一個實體集的,有着相同或不同數目的數據項,記錄的長度可分爲定長和不定長記錄兩類。 
記錄文件有順序、索引、索引順序、直接、分區和堆文件幾種。

堆(The Pile)文件(累積文件) 
堆文件是最簡單的記錄文件,它是串結構的順序文件。數據按先來後到的次序組織,每個記錄所包含的數據項是自我標識的,數據項的長度可以明確指定或使用界定符區分。在堆文件中訪問所需要的記錄需窮盡搜索,這種文件組織不適合大多數應用。
順序文件(Sequential File) 
順序文件的記錄定長,記錄中的數據項的類型長度與次序固定,一般還有一個可以唯一標識記錄的數據項,稱爲鍵(key),記錄按鍵值的約定次序組織。順序文件常用於批處理應用,對於查詢或更新某個記錄的請求的處理性能不佳。
索引文件(Indexed File) 
索引文件對主文件中的記錄按需要的數據項(一個或幾個)建索引表。這時記錄可爲不定長的,它爲每個記錄設置一個表項。索引文件本身是順序文件組織。
索引順序文件(Indexed Sequential File) 
索引順序文件是基於鍵的約定次序組織的,爲之建立一張索引表,爲每個不同鍵值的記錄組的第一個記錄設置一個表項,爲該組的其它記錄設置了溢出區域,在溢出區域內記錄按順序文件方式組織。它是順序文件和索引文件的結合。索引順序文件既適用於交互方式應用,也適用於批處理方式應用。
直接文件/哈希文件(The Direct/Hashed File) 
檢索時給出記錄編號,通過哈希函數計算出該記錄在文件中的相對位置。它可以對記錄在直接訪問存儲設備上的物理地址直接(隨機)訪問。直接文件常用於需要高速訪問文件而且每次訪問一條記錄的應用中。
用戶通過對文件的存取來完成對文件的修改、追加和搜索等操作。常用的存取方法有順序存取法、隨機存取法(直接存取法)和按鍵存取法三種。

順序存取法是按照文件的邏輯地址順序存取,在記錄式文件中,這反映爲按記錄的排列順序來存取,在無結構的字符流文件中,順序存取反映當前讀寫指針的變化。
隨機存取法允許用戶根據記錄的編號來存取文件的任一記錄,或者是根據存取命令把讀寫指針移到欲讀寫處來讀寫。
按鍵存取法是一種用在複雜文件系統,特別是數據庫管理系統中的存取方法,文件的存取是根據給定的鍵或記錄名進行的。
UNIX、Linux和Windows等操作系統都採用順序存取和隨機存取兩種方法。

2、文件的物理結構
文件在存儲介質上的組織方式稱爲文件的存儲結構或稱文件的物理結構、物理文件。 
外存分配方法有連續分配、鏈接分配、索引分配,相應物理文件有:順序文件、鏈接文件、索引文件。

連續分配—順序文件 
把邏輯文件中連續的信息存儲到磁盤連續的物理盤塊中所形成的文件稱爲順序文件。這種文件保證了邏輯文件中邏輯記錄(流式文件爲邏輯塊、頁)順序和存儲器中文件佔用盤塊順序的一致性。爲使系統能查找文件中任一記錄,在文件控制塊FCB(或在目錄)中存放文件第一個記錄所存放的盤塊號ADRR和文件總的盤塊數N。 
優點是管理簡單,順序存取速度快。缺點是增刪記錄相當困難,磁盤存儲空間的利用率不高,有外零頭。所以順序文件只適用於長度不變的只讀文件。
鏈接分配 —鏈接文件 
在將邏輯文件存儲到外存上時,不要求爲整個文件分配連續的空間,而是可以裝入到離散的多個盤塊中,只在每個盤塊最後一個單元設置鏈接指針(這稱爲隱式鏈接) ,然後用鏈接指針將這些離散的盤塊鏈接成一個隊列,這樣形成的物理文件稱爲鏈接文件。管理鏈接文件只需在文件控制塊FCB中設二項,一是存儲文件頭塊信息的盤塊號,另一是存儲文件尾塊信息的盤塊號。 
鏈接文件的優點是盤存儲空間利用率高,文件增刪改記錄方便。缺點是在隨機存取某一個記錄前需要化多次盤I/O操作讀該記錄前的文件信息以取得該記錄的盤塊號,才能存取該記錄。如要讀取邏輯塊號第3塊的信息,就要先進行3次盤I/O操作以讀取存放第3塊邏輯塊信息的盤塊號,所以鏈接文件只適用於順序存取文件。
索引分配 —索引文件 
索引文件是實現非連續存儲的另一種方法,系統爲加快記錄的檢索過程,爲每個文件建立了一張索引表,每個邏輯塊在索引表中佔有一個表項,登記存放該邏輯塊的盤塊號。在FCB中放置了索引表指針,它指向索引表始址,索引表存放在盤塊中。 
當索引表很大時,需要用多個盤塊。管理有多個盤塊的索引表有二種方法: 
一種方法是將存放索引表的盤塊用鏈接指針鏈接起來稱爲鏈接索引。鏈接索引可以順序地讀取索引表各索引表項,但讀取後面的索引表項類同鏈接文件需要化費多次盤I/O操作。 
另一種方法是採用多級索引,即爲索引表本身建立索引表,從而形成了兩級索引,如所形成的兩級索引表還不能存放在一個盤塊中,則需要爲二級索引表建索引表,而形成三級索引。 
索引文件由於它既適合順序存取記錄又適合按任意次序隨意存取記錄,也便於增刪文件的記錄,所以索引結構文件應用範圍較廣。索引文件的缺點是當文件很大時索引表很龐大,佔用了許多盤空間,而在文件很小時,多級索引級別又不變,帶來索引塊的另頭和存取速度減慢。
UNIX/Linux直接間接混合尋址方式 
由於80%以上文件是小文件,爲了解決能高速存取小文件和管理大文件的矛盾,UNIX將直接尋址、一級索引、二級索引和三級索引結合起來,形成了混合尋址方式。
3、VFAT表結構
MS-DOS文件系統的文件物理結構採用FAT表結構。該結構爲了克服鏈接文件隨機讀取任一邏輯塊需要化費多次盤I/O操作的不足,將各盤塊中的鏈接指針集中存放在盤的開始部分,構成一張表,稱爲FAT表。(這稱爲顯式鏈接)FAT表每一項存放鏈接指針(下一個簇號),每個FAT表項佔12位或16位,稱爲FAT12或FAT16。對於軟盤因爲容量小,簇數也少,採用12位FAT表,對於硬盤則採用16位FAT表。 
FAT表文件系統原爲小硬盤的目錄結構而設計,由於簇的數目最多隻能用16位表示,即最多隻能有64K個簇,要用FAT表管理大的磁盤分區,只能採取增大每簇所包含的扇區數,一般根據磁盤的類型和容量大小來決定簇的大小。

三、文件的目錄和管理
1、文件控制塊FCB
爲了實現“按名存取”,系統必須爲每個文件設置用於描述和控制文件的數據結構,它至少要包括文件名和存放文件的盤物理地址,這個數據結構稱爲文件控制塊FCB,文件控制塊的有序集合稱爲文件目錄,即一個文件控制塊FCB就是一個文件目錄項。文件控制塊FCB中包含的信息有以下三類:

基本信息類 
文件名:標識一個文件的符號名,在每個系統中文件必須具有唯一的名字。 
文件的物理地址:這由於文件的物理結構不同而不同。對於連續文件就是文件的起始塊號和文件總塊數;對於MS-DOS是文件的起始簇號和文件總字節數;對於UNIX S V是文件所在設備的設備號、13個地址項、文件長度和文件塊數等。
存取控制信息類 
文件的存取權限,象UNIX用戶分成文件主、同組用戶和一般用戶三類,這三類用戶的讀寫執行(RWX)的權限。
使用信息類 
文件建立日期、最後一次修改日期、最後一次訪問的日期;當前使用的信息:打開文件的進程數,在文件上的等待隊列等。文件控制塊的信息因OS而不同。
2、多級目錄
目錄結構的組織關係到文件系統的存取速度,關係到文件共享性和安全性,因此組織好文件的目錄是設計文件系統的重要環節。

單級目錄結構 
最簡單的目錄結構是在整個文件系統中只建立一張目錄表,每個文件佔一個表目,這稱爲單級目錄。單級目錄結構簡單,能實現目錄管理的基本功能–按名存取,但存在查找速度慢,不允許重名和不便於實現文件共享等缺點,因此它只適用於單用戶環境。
多級目錄結構 
爲了解決以上問題,在多道程序設計系統中常採用多級目錄結構,MS-DOS和UNIX等操作系統都採用多級目錄結構。這種目錄結構象一棵倒置的有根樹,該樹根向下,每一個節點是一個目錄,最末一個結點是文件,下圖爲UNIX樹形多級目錄結構。在多級目錄中要訪問一個文件時,必須指出文件所在的路徑名,路徑名從根目錄開始到該文件的通路上所有各級目錄名拼起來得到,各目錄名之間與文件名之間可用分隔符隔開。在MS-DOS中分隔符爲“\”,在UNIX中分隔符爲“/”。例如下圖中訪問命令文件man的路徑名爲/usr/lib/man,這也稱爲文件全名。 

在多級目錄中存取一個文件需要用文件全名,這就允許用戶在自己的目錄中使用與其它用戶文件相同的文件名,由於各用戶使用不同的目錄,雖二者使用了相同的文件名,但它們的文件全名仍不相同,這就解決了重名問題。 
採用多級目錄結構也提高了檢索目錄的速度:如採用單級目錄則查找一個文件最多需查遍系統所有文件名,平均也要查一半文件名。而多級目錄查找一個文件最多隻要查遍文件路徑上各目錄的子目錄和文件,例如上圖中要查找文件man,只要查遍root目錄、usr目錄和lib目錄所在子目錄和文件就可以。 
每訪問一個文件都要使用從根目錄開始搜索直到樹葉的數據文件爲止,包含各中間子目錄的全路徑名是相當麻煩的,同時由於一個進程運行時訪問的文件大多侷限在某個範圍,基於這一點,可爲每個用戶(或每個進程)設置一個“當前目錄”,又稱“工作目錄”。進程對各文件的訪問都相對於“工作目錄”而設置路徑,這稱爲相對路徑名。相應地,從根目錄開始的路徑名稱爲絕對路徑名(absolute path name)。用相對路徑可縮短搜索路徑,提高搜索速度。例:文件mbox的絕對路徑名爲/usr/ast/mbox,如設置一個“當前目錄”爲/usr,則文件mbox的相對路徑名爲ast/mbox。
3、UNIX/Linux樹型目錄結構
UNIX爲了加快目錄的尋找速度,UNIX將文件控制塊FCB中文件名和文件說明分開。文件說明爲索引節點,各文件索引節點集中存放在索引節點區,索引節點按索引節點號排序。而文件名與索引節點號構成目錄項,UNIX S V 操作系統的文件名14個字節,索引節點2個字節,共16個字節構成目錄項。同一級目錄項構成目錄文件,在文件區存放。 
Linux目錄文件中的目錄項會變長,以保證系統支持文件名長度可變,最長達255個字符。目錄項的前三項是定長的,包含以下信息:(1)索引節點號(4B);(2)目錄項長度(2B);(3)文件名長度(2B)。目錄項最後是文件名,目錄項不能跨越二個塊 。 
每個文件有一個存放在磁盤索引節點區的索引節點,稱爲磁盤索引節點,它包括以下內容:(1)文件主標識符和同組用戶標識符;(2)文件類型:是普通文件、目錄文件、符號連接文件或特別文件(又分塊設備文件或字符設備文件);(3)文件主,同組用戶和其它人對文件存取權限(讀R、寫W、執行X);(4)文件的物理地址(5)文件長度(字節數);(6)文件鏈接數(7)文件最近存取和修改時間等。

4、文件別名(文件共享)
文件共享是指不同的用戶使用不同的文件名來使用同一文件。在用一般共享目錄結構時,一用戶增加文件的內容,只改變自己的文件目錄,其它用戶不知改變。

基於索引節點(index node)的共享方式 
實現文件共享的一種有效方法是基本文件目錄法。該方法把所有目錄的內容分爲文件名和文件說明兩部分。一部分稱爲符號文件目錄(SDF),它包含文件符號名和由系統賦予唯一的內部標識符ID組成。另一部分稱爲基本文件目錄(BDF),它包含目錄項中除文件符號名外的所有其它信息,並加上與符號目錄相一致的內部標識符ID。標識符ID是各文件在基本文件目錄中表目的排序號。UNIX/Linux採用了基本文件目錄法目錄結構。 
採用文件名和文件說明分離的目錄結構有利於實現文件共享,這裏的文件共享是指不同的用戶對同一文件可取不同的文件名,即給文件取別名。文件共享是通過在二個不同子目錄下取了不同的文件名,但它們具有相同的索引節點號的方法來實現,UNIX/Linux這種目錄結構稱爲樹形帶勾連的目錄結構。
利用符號連接(symbolic link, shortcut) 
文件硬連接不利於文件主刪除它擁有的文件,因爲文件主要刪除它擁有的共享文件,必須首先刪除(關閉)所有的硬連接,否則就會造成共享該文件的用戶的目錄表目指針懸空。爲此又提出另一種連接方法:符號連接。系統爲共享的用戶創建一個link類型的新文件,將這新文件登錄在該用戶共享目錄項中,這個link型文件包含連接文件的路徑名。該類文件在用ls命令長列表顯示時,文件類型爲l。當用戶要訪問共享文件且正要讀link型新文件時,操作系統根據link文件類型性質將文件讀出的內容作爲路徑名去訪問真正的共享文件。在UNIX中也是使用ln來建立符號連接的共享文件。 
採用符號連接可以跨越文件系統,甚至可以通過計算機網絡連接到世界上任何地方的機器中的文件,此時只需提供該文件所在的地址,以及在該機器中的文件路徑。 
符號連接的缺點:其它用戶讀取符號連接的共享文件比讀取硬連接的共享文件需要增多讀盤操作。因爲其它用戶去讀符號連接的共享文件時,系統中根據給定的文件路徑名,逐個分量地去查找目錄,通過多次讀盤操作才能找到該文件的索引節點,而用硬連接的共享文件的目錄文件表目中已包括了共享文件的索引節點號。 
Windows 2000的NTFS,支持文件別名的符號鏈接方式。
5、內存目錄管理
目錄查詢技術 
爲了實現用戶對文件的按名存取,系統必須首先利用用戶提供的文件名,對文件目錄進行查詢,找出該文件的文件控制塊FCB,對UNIX系統即要找出該文件的索引節點。然後根據找到的FCB中所記錄的文件物理地址,並根據文件物理組織方式找出文件的盤塊號,進而換算出文件在磁盤上的物理位置(柱面號、磁頭號、扇區號),最後啓動磁盤驅動程序,將所需文件讀入內存。對目錄查詢的技術有兩種:線性檢索法和Hash法。
內存的目錄管理表 
目錄查詢必須通過在磁盤上反覆搜索來完成,這要化費不少次的盤塊I/O,這樣大大浪費了CPU處理時間,降低了處理速度。爲了減輕盤I/O負擔,採用把當前使用的文件目錄表目複製到內存,建立內存的目錄管理表。這樣只要第一次使用某個目錄表目時需要盤I/O來完成讀入內存,以後使用該目錄表目只要在內存目錄管理表中進行,不需再進行盤塊I/O,提高了處理速度,由於只把正在使用的目錄複製到內存而不是全部目錄讀入內存,所以內存目錄所佔容量也不大。
文件操作與目錄管理關係 
爲了讓用戶靈活方便和有效地使用文件,文件系統提供許多有關文件的系統調用,即文件操作供用戶使用。文件系統提供的常用系統調用有“建立”(create)文件、“打開”(open)文件、“寫”(write)文件、“讀”(read)文件、“關閉”(close)文件、“刪除”(delete)文件等。這些操作與目錄管理的數據結構關係密切,下面以UNIX爲例說明。 
(1)建立文件 
當用戶提出在某個路徑或目錄下建立文件時,系統首先檢查在該目錄下有否相同名的文件,如沒有的話則在磁盤目錄中登記此文件,對UNIX系統則需給它分配索引節點,以保存文件存放的盤塊號,同時在該目錄文件中增加一個表目,記錄文件名和相應的索引節點號。 
(2)打開文件 
用戶使用文件前必須使用“打開”命令打開文件,“打開”命令的任務是磁盤目錄中找到該文件的FCB,拷貝到內存,建立內存的目錄管理表。對UNIX系統是找到此文件所在的目錄文件的表目和磁盤索引節點,然後將它們拷貝到內存,建立系統打開文件表和活動索引節點表有關表目,同時在PCB的用戶打開文件表中增加表目,並建立如前圖一樣的三個表間的聯繫。 
(3)讀/寫文件 
用戶(或進程)要讀寫文件時,利用PCB中用戶打開文件表的fP指針可以從三表關係中找到所需讀/寫的文件所的盤塊,在系統打開文件表的表目中設置讀寫指針f_offset[2]分別記錄了進程讀/寫文件的位置。如在寫文件時增加或減少文件所用的磁盤塊數,則要修改活動索引節點表的表目中的13個地址項i_addr[13]. 
(4)關閉文件 
當對文件操作完成後,或暫時不用,均需及時使用“關閉”命令關閉文件,將已修改的內存文件目錄信息及時寫回到磁盤目錄中,並釋放文件的內存目錄表目空間供其它進程使用。對UNIX子系統,關閉文件,將文件在系統打開文件表和活動索引表的表目內容分別寫回到磁盤的相應目錄文件和索引節點表區,並刪除相應表目供它用,同時進程打開文件表中相應表目也刪除,以免進程打開文件數超過定值。如用戶打開文件並進行讀寫後未關閉文件就退出,或者發生斷電情況,這樣都可能會造成這次讀寫修改信息的丟失。 
(5)刪除文件 
如文件不需要則要用“刪除”命令刪除文件,根據用戶提出的在某目錄下的文件名,命令將該文件在目錄文件中的表項和相應的索引節點內容刪除,釋放供它用。
四、文件存儲空間的管理
1、磁盤組織
磁盤是常用的存儲設備,它具有容量大,存取速度快,可以實現隨機存取等優點,是現代操作系統的必需存儲設備,也是實現虛擬存儲器所必需的硬件。 
一個物理磁盤在邏輯上可分爲幾個區域,分區信息存放在主引導塊分區表中。分區表中保存磁盤各種分區起始和終止的磁頭、柱面、扇區、總的扇區數等信息。在主引導塊中有三種類型分區:主分區、擴展區和邏輯分區。主分區是常用的,加載一個操作系統所需文件安裝其上,操作系統必須從主分區上引導,一個硬盤上只能有四個主分區。爲了突破四個分區的限制,就要在四個分區中創建立一個擴展分區。擴展分區其實是一個邏輯盤,它不能格式化,也不能分配盤符。但可在擴展分區中創建一個或多個邏輯分區,(或稱邏輯驅動器),每個邏輯分區分配一個盤符,可以格式化成一個特定的文件系統,MS-DOS、Windows98和WindowsNT可用fdisk命令將硬盤分區。

2、磁盤空閒塊管理和磁盤碎片整理
爲了實現存儲空間的分配和回收,系統應爲存儲空間設置相應的結構以記住存儲空間的使用情況,並配以相應算法方便地對存儲空間進行分配和回收,下面介紹幾種常用的文件存儲空間管理方法。

空閒表法 
空閒表法屬於連讀分配方法,它爲外存上所有空閒區建立一張空閒表,每個空閒區對應一個空閒表項,其中包括序號、該空閒區的第一盤塊號,該區的空閒盤塊數等信息,再將所有空閒區按起始盤塊號遞增的次序排列。 UNIX S V操作系統盤對換區空間管理採用空閒表法,它與內存系統頁表管理採用同樣的數據結構和分配回收算法。空閒表法的缺點是需要專用盤區來存放空閒表,在文件系統中較少採用連續分配。
位示圖法 
位示圖是利用二進制的一位來表示磁盤中一個塊的作用情況,當其值爲0時表示對應盤塊空閒;值爲1時盤塊已分配。磁盤上所有盤塊都有一個二進制位與之對應,這樣,由所有盤塊所對應的位形成了一個集合稱爲位示圖,位示圖用磁盤塊存放,稱爲位圖塊。
空閒塊鏈接法 
空閒塊鏈接法是將磁盤上所有空閒盤區鏈接在一個隊列中,稱爲空閒塊鏈。請求分配時從鏈頭依次摘下適當數目的空閒盤塊來分配,回收時將回收空閒盤塊鏈入空閒塊鏈尾部。空閒塊鏈接法的優點是不需專用塊存放管理信息,它的缺點是連續分配回收多塊空閒塊時需增加盤I/O操作。
成組鏈接法 
UNIX S V操作系統採用成組鏈接法管理磁盤空閒塊,該方法是空閒表法和空閒塊鏈接法的結合,具備分配回收方便,不需專用塊來存放分配表等優點。成組鏈接法將磁盤空閒塊分成若干組,如將每100個盤塊作爲一組,該組空閒塊總數和各空閒塊塊號存入下一組的第一個空閒塊中。最後不滿100塊的那組空閒塊總數和各空閒塊塊號記入磁盤區專用管理塊的空閒塊管理的數據結構:s_nfree和s_free[100]中。
五、安全和保護
影響文件安全性的主要因素,第一是人爲因素,即由於人們有意或無意的行爲,而使文件系統中的數據遭到破壞或丟失;第二是系統因素,即由於系統的某部分出現異常情況,而造成對數據的破壞或丟失,特別是作爲數據存儲介質的磁盤,在出現故障或損壞時,會對文件系統的安全性造成影響;第三是自然因素,即存放在磁盤上的數據,隨着時間的推移將可能發生溢出或逐漸消失。 
爲了確保文件系統的安全性,可針對上述原因而採取以下措施: 
(1)通過存取控制機制來防止由人爲因素所造成的文件不安全性。 
(2)通過磁盤容錯技術,來防止由磁盤部分的故障所造成的文件不安全性。 
(3)通過“後備系統”來防止由自然因素所造成的不安全性。

1、文件的存取控制
文件系統對文件的保護常採用存取控制方式進行,所謂文件的存取控制就是不同的用戶對文件的訪問規定不同的權限,以防止文件被未經文件主同意的用戶訪問。

存取控制矩陣 
理論上存取控制方法可用存取控制矩陣,它是一個二維矩陣,一維列出計算機的全部用戶,另一維列出系統中的全部文件,矩陣中每個元素Aij是表示第i個用戶對第j個文件的存取權限。 
存取控制矩陣在概念上是簡單清楚的,但實現上卻有困難。當一個系統用戶數和文件數很大時,二維矩陣要佔很大的存儲空間,驗證過程也費時。
存取控制表 
存取控制矩陣由於太大而往往無法實現。一個改進的辦法是按用戶對文件的訪問權力的差別對用戶進行分類,由於某一文件往往只與少數幾個用戶有關,所以這種分類方法可使存取控制表大爲簡化。UNIX系統就是使用這種存取控制表方法。它把用戶分成三類:文件主、同組用戶和其它用戶,每類用戶的存取權限爲可讀、可寫、可執行以及它們的組合。
用戶權限表 
改進存取控制矩陣的另一種方法是以用戶或用戶組爲單位將用戶可存取的文件各集中起來存入一表,這稱爲用戶權限表,表中每個表目表示該用戶對應文件的存取權限,如下表所示。這相當於存取控制矩陣一行的簡化。
2、分級安全管理
隨着計算機應用範圍擴大,在所有稍具規模的系統中,都從多個級別上來保證系統的安全性。

系統級安全管理 
系統級安全管理的主要任務是不允許未經覈准的用戶進入系統,從而也防止了他人非法使用系統中各類資源(包括文件)。
用戶級安全管理 
用戶級安全管理是通過對不同的用戶對不同文件設置不同的存取權限來實現。
目錄級安全管理 
目錄級安全管理,是爲了保護系統中各種目錄而設計的,它與用戶權限無關。爲保證目錄的安全規定只有系統核心才具有寫目錄的權利。 
用戶對目錄的讀、寫和執行與一般文件的讀、寫和執行的含義有所不同,對於目錄的讀權限意味着允許打開並讀該目錄的信息,例如UNIX系統使用ls命令可列出該目錄的子目錄和文件名。 
對於目錄的寫權限意味着可以在此目錄中創建或刪除文件,禁止對於某個目錄的寫權限並不意味着在該目錄中的文件不能修改,只有在一個文件上的寫權限才真正地控制修改文件的能力。對於一個目錄的執行權限意味着系統在分析一個文件時可檢索此目錄。禁止一個目錄的執行權限可真正地防止用戶使用該目錄中的文件,用戶不能使用cd命令來進入此目錄。
文件級安全管理 
文件級安全管理,是通過系統管理員或文件主對文件屬性的設置來控制用戶對文件的訪問。用戶對文件的訪問,將由用戶訪問權、目錄訪問權限及文件屬性三者的權限所確定。或者說是有效權限和文件屬性的交集。例如對於只讀文件,儘管用戶的有效權限是讀/寫,但都不能對只讀文件進行修改、更名和刪除。對於一個非共享文件,將禁止在同一時間內由多個用戶對它們進行訪問。通過上述四級文件保護措施,可有效地對文件的保護。
3、備份和恢復
文件系統中不論硬件和軟件都會因電源中斷和變化,用戶粗野和不慎的操作而發生損壞和錯誤,所以爲使至關重要的文件系統萬無一失,應對保存在輔存中的文件採取一些保險措施,這些措施中最簡便方法是“定期轉儲”,使一些重要的文件有多個副本。

轉自:https://blog.csdn.net/xiaokang123456kao/article/details/74171875 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章