【操作系统】总结四(文件管理)
文件管理
主要內容:
文件系統基礎:包括文件概念、文件的邏輯結構(順序文件,索引文件,索引順序文件)、目錄結構(文件控制塊和索引結點,單級目錄結構和兩級目錄結構,樹形目錄結構,圖形目錄結構)、文件共享和文件保護(訪問類型,訪問控制)。
文件系統實現:包括文件系統層次結構、目錄實現、文件實現。
磁盤組織與管理:包括磁盤的結構、磁盤調度算法、磁盤的管理。
4.1 文件的概念和定義
文件(File)是操作系統中的一個重要概念。在系統運行時,計算機以進程為基本單位進行資源的調度和分配;而在用戶進行的輸入、輸出中,則以文件為基本單位。大多數應用程序的輸入都是通過文件來實現的,其輸出也都保存在文件中,以便信息的長期存及將來的訪問。當用戶將文件用于應用程序的輸入、輸出時,還希望可以訪問文件、修改文件和保存文件等,實現對文件的維護管理,這就需要系統提供一個文件管理系統,操作系統中的文件系統(File
System)就是用于實現用戶的這些管理要求。
從用戶的角度看,文件系統是操作系統的重要部分之一。用戶關心的是如何命名、分類和查找文件,如何保證文件數據的安全性以及對文件可以進行哪些操作等。而對其中的細節,如文件如何存儲在輔存上、如何管理文件輔存區域等關心甚少。
文件系統提供了與二級存儲相關的資源的抽象,讓用戶能在不了解文件的各種屬性、文件存儲介質的特征以及文件在存儲介質上的具體位置等情況下,方便快捷地使用文件。
用戶通過文件系統建立文件,提供應用程序的輸入、輸出,對資源進行管理。首先了解文件的結構,我們通過自底向上的方式來定義。
1) 數據項
數據項是文件系統中最低級的數據組織形式,可分為以下兩種類型:
基本數據項:用于描述一個對象的某種屬性的一個值,如姓名、日期或證件號等,是數據中可命名的最小邏輯數據單位,即原子數據。
組合數據項:由多個基本數據項組成。
2) 記錄
記錄是一組相關的數據項的集合,用于描述一個對象在某方面的屬性,如一個考生報名記錄包括考生姓名、出生日期、報考學校代號、身份證號等一系列域。
3) 文件
文件是指由創建者所定義的一組相關信息的集合,邏輯上可分為有結構文件和無結構文件兩種。在有結構文件中,文件由一組相似記錄組成,如報考某學校的所有考生的報考信息記錄,又稱記錄式文件;而無結構文件則被看成是一個字符流,比如一個二進制文件或字符文件,又稱流式文件。
雖然上面給出了結構化的表述,但實際上關于文件并無嚴格的定義。通常在操作系統中將程序和數據組織成文件。文件可以是數字、字母或二進制代碼,基本訪問單元可以是字節、 行或記錄。文件可以長期存儲于硬盤或其他二級存儲器中,允許可控制的進程間共享訪問,能夠被組織成復雜的結構。
4.2 文件的屬性、基本操作以及文件的打開和關閉
文件的屬性
文件有一定的屬性,這根據系統的不同而有所不同,但是通常都包括如下屬性:
①名稱:文件名稱唯一,以容易讀取的形式保存。
②標識符:標識文件系統內文件的唯一標簽,通常為數字,它是對人不可讀的一種內部名稱。
③類型:被支持不同類型的文件系統所使用。
④位置:指向設備和設備上文件的指針。
⑤大?。何募斍按笮。ㄓ米止?、字或塊表示),也可包含文件允許的最大值。
⑥保護:對文件進行保護的訪問控制信息。
⑦時間、日期和用戶標識:文件創建、上次修改和上次訪問的相關信息,用于保護、 安全和跟蹤文件的使用。
所有文件的信息都保存在目錄結構中,而目錄結構也保存在外存上。文件信息當需要時再調入內存。通常,目錄條目包括文件名稱及其唯一標識符,而標識符定位其他屬性的信息。
文件的基本橾作
文件屬于抽象數據類型。為了恰當地定義文件,就需要考慮有關文件的操作。操作系統提供系統調用,它對文件進行創建、寫、讀、定位和截斷。.
①創建文件:創建文件有兩個必要步驟,一是在文件系統中為文件找到空間;二是在目錄中為新文件創建條目,該條目記錄文件名稱、在文件系統中的位置及其他可能信息。
②寫文件:為了寫文件,執行一個系統調用,指明文件名稱和要寫入文件的內容。對于給定文件名稱,系統搜索目錄以查找文件位置。系統必須為該文件維護一個寫位置的指針。每當發生寫操作,便更新寫指針。
③讀文件:為了讀文件,執行一個系統調用,指明文件名稱和要讀入文件塊的內存位置。同樣,需要搜索目錄以找到相關目錄項,系統維護一個讀位置的指針。每當發生讀操作時,更新讀指針。一個進程通常只對一個文件讀或寫,所以當前操作位置可作為每個進程當前文件位置指針。由于讀和寫操作都使用同一指針,節省了空間也降低了系統復雜度。
④文件重定位(文件尋址):按某條件搜索目錄,將當前文件位置設為給定值,并且不會讀、寫文件。
⑤刪除文件:先從目錄中找到要刪除文件的目錄項,使之成為空項,然后回收該文件所占用的存儲空間。
⑥截斷文件:允許文件所有屬性不變,并刪除文件內容,即將其長度設為0并釋放其空間。
這6個基本操作可以組合執行其他文件操作。例如,一個文件的復制,可以創建新文件、 從舊文件讀出并寫入到新文件。
文件的打開與關閉
因為許多文件操作都涉及為給定文件搜索相關目錄條目,許多系統要求在首次使用文件時,使用系統調用open,將指明文件的屬性(包括該文件在外存上的物理位置)從外存拷貝到內存打開文件目錄表的一個表目中,并將該表目的編號(或稱為索引)返回給用戶。操作系統維護一個包含所有打開文件信息的表(打開文件表,open-file table)。當用戶需要一個文件操作時,可通過該表的一個索引指定文件,就省略了搜索環節。當文件不再使用時,進程可以關閉它,操作系統從打開文件表中刪除這一條目。
大部分操作系統要求在文件使用之前就被顯式地打開。操作open會根據文件名搜索目錄,并將目錄條目復制到打開文件表。如果調用open的請求(創建、只讀、讀寫、添加等)得到允許,進程就可以打開文件,而open通常返回一個指向打開文件表中的一個條目的指針。通過使用該指計(而非文件名)進行所有I/O操作,以簡化步驟并節省資源。
整個系統表包含進程相關信息,如文件在磁盤的位置、訪問日期和大小。一個進程打開一個文件,系統打開文件表就會為打開的文件增加相應的條目。當另一個進程執行open時,只不過是在其進程打開表中增加一個條目,并指向整個系統表的相應條目。通常,系統打開文件表的每個文件時,還用一個文件打開計數器(Open Count),以記錄多少進程打開了該文件。每個關閉操作close則使count遞減,當打開計數器為0時,表示該文件不再被使用。系統將回收分配給該文件的內存空間等資源,若文件被修改過,則將文件寫回外存,并將系統打開文件表中相應條目刪除,最后釋放文件的文件控制塊(File
Control Block, FCB)。
每個打開文件都有如下關聯信息:
文件指針:系統跟蹤上次讀寫位置作為當前文件位置指針,這種指針對打開文件的某個進程來說是唯一的,因此必須與磁盤文件屬性分開保存。
文件打開計數:文件關閉時,操作系統必須重用其打開文件表條目,否則表內空間會不夠用。因為多個進程可能打開同一個文件,所以系統在刪除打開文件條目之前,必須等待最后一個進程關閉文件。該計數器跟蹤打開和關閉的數量,當該計數為0 時,系統關閉文件,刪除該條目。
文件磁盤位置:絕大多數文件操作都要求系統修改文件數據。該信息保存在內存中以免為每個操作都從磁盤中讀取。
訪問權限:每個進程打開文件都需要有一個訪問模式(創建、只讀、讀寫、添加等)。該信息保存在進程的打開文件表中以便操作系統能允許或拒絕之后的I/O請求。
4.3 文件的邏輯結構:無結構文件(流式文件)和有結構文件(記錄式文件)
文件的邏輯結構是從用戶觀點出發看到的文件的組織形式。文件的物理結構是從實現觀點出發,又稱為文件的存儲結構,是指文件在外存上的存儲組織形式。文件的邏輯結構與存儲介質特性無關,但文件的物理結構與存儲介質的特性有很大關系。
按邏輯結構,文件有無結構文件和有結構文件兩種類型:無結構文件和有結構文件。
無結構文件(流式文件)
無結構文件是最簡單的文件組織形式。無結構文件將數據按順序組織成記錄并積累保存,它是有序相關信息項的集合,以字節(Byte)為單位。由于無結構文件沒有結構,因而對記錄的訪問只能通過窮舉搜索的方式,故這種文件形式對大多數應用不適用。但字符流的無結構文件管理簡單,用戶可以方便地對其進行操作。所以,那些對基本信息單位操作不多的文件較適于釆用字符流的無結構方式,如源程序文件、目標代碼文件等。
有結構文件(記錄式文件)
有結構文件按記錄的組織形式可以分為:
1) 順序文件。
文件中的記錄一個接一個地順序排列,記錄可以是定長的或變長的,可以順序存儲或以鏈表形式存儲,在訪問時需要順序搜索文件。順序文件有以下兩種結構:
第一種是串結構,記錄之間的順序與關鍵字無關。通常的辦法是由時間決定,即按存入時間的先后排列,最先存入的記錄作為第1個記錄,其次存入的為第2個記錄,依此類推。
第二種是順序結構,指文件中的所有記錄按關鍵字順序排列。
在對記錄進行批量操作時,即每次要讀或寫一大批記錄,對順序文件的效率是所有邏輯文件中最高的;此外,也只有順序文件才能存儲在磁帶上,并能有效地工作,但順序文件對查找、修改、增加或刪除單個記錄的操作比較困難。
2) 索引文件。
如圖4-1所示。對于定長記錄文件,如果要查找第i個記錄,可直接根據下式計算來獲得第i個記錄相對于第一個記錄的地址:
然而,對于可變長記錄的文件,要查找第i個記錄時,必須順序地查找前i-1個記錄,從而獲得相應記錄的長度L,然后才能按下式計算出第i個記錄的首址:
注意:假定每個記錄前用一個字節指明該記錄的長度。
圖4-1 索引文件示意圖
變長記錄文件只能順序查找,系統開銷較大。為此可以建立一張索引表以加快檢索速度,索引表本身是定長記錄的順序文件。在記錄很多或是訪問要求高的文件中,需要引入索引以提供有效的訪問。實際中,通過索引可以成百上千倍地提高訪問速度。
3) 索引順序文件。
索引順序文件是順序和索引兩種組織形式的結合。索引順序文件將順序文件中的所有記錄分為若干個組,為順序文件建立一張索引表,在索引表中為每組中的第一個記錄建立一個索引項,其中含有該記錄的關鍵字值和指向該記錄的指針。
如圖4-2所示,主文件名包含姓名和其他數據項。姓名為關鍵字,索引表中為每組的第一個記錄(不是每個記錄)的關鍵字值,用指計指向主文件中該記錄的起始位置。索引表只包含關鍵字和指計兩個數據項,所有姓名關鍵字遞增排列。主文件中記錄分組排列,同一個組中關鍵字可以無序,但組與組之間關鍵字必須有序。查找一個記錄時,通過索引表找到其所在的組,然后在該組中使用順序查找就能很快地找到記錄。
圖4-2 索引順序文件示意圖
對于含有N個記錄的順序文件,查找某關鍵字值的記錄時平均需要查找N/2次。在索引順序文件中,假設N個記錄分為N1/2組,索引表中有N1/2個表項,每組有N1/2個記錄,在查找某關鍵字值的記錄時,先順序查找索引表,需要查找N1/2/2次,然后再在主文件中對應的組中順序查找,也需要查找N1/2/2次,這樣總共查找N1/2/2+N1/2/2=N1/2次。顯然,索引順序文件提高了查找效率,如果記錄數很多,可以釆用兩級或多級索引。
索引文件和索引順序文件都提高了存取的速度,但因為配置索引表而增加了存儲空間。
4) 直接文件或散列文件(Hash File)
給定記錄的鍵值或通過Hash函數轉換的鍵值直接決定記錄的物理地址。這種映射結構不同于順序文件或索引文件,沒有順序的特性。
散列文件有很高的存取速度,但是會引起沖突,即不同關鍵字的散列函數值相同。
4.4 文件目錄結構:單級、兩級、多級(樹形)和無環圖目錄結構
與文件管理系統和文件集合相關聯的是文件目錄,它包含有關文件的信息,包括屬性、 位置和所有權等,這些信息主要是由操作系統進行管理。首先我們來看目錄管理的基本要求:從用戶的角度看,目錄在用戶(應用程序)所需要的文件名和文件之間提供一種映射,所以目錄管理要實現“按名存取”;目錄存取的效率直接影響到系統的性能,所以要提高對目錄的檢索速度;在共享系統中,目錄還需要提供用于控制訪問文件的信息。此外,文件允許重名也是用戶的合理和必然要求,目錄管理通過樹形結構來解決和實現。
文件控制塊和索引結點
同進程管理一樣,為實現目錄管理,操作系統中引入了文件控制塊的數據結構。
1) 文件控制塊。
文件控制塊(FCB)是用來存放控制文件需要的各種信息的數據結構,以實現“按名存取”。FCB的有序集合稱為文件目錄,一個FCB就是一個文件目錄項。為了創建一個新文件,系統將分配一個FCB并存放在文件目錄中,成為目錄項。
FCB主要包含以下信息:
基本信息,如文件名、文件的物理位置、文件的邏輯結構、文件的物理結構等。
存取控制信息,如文件存取權限等。
使用信息,如文件建立時間、修改時間等。
2) 索引結點。
在檢索目錄文件的過程中,只用到了文件名,僅當找到一個目錄項(查找文件名與目錄項中文件名匹配)時,才需要從該目錄項中讀出該文件的物理地址。也就是說,在檢索目錄時,文件的其他描述信息不會用到,也不需調入內存。因此,有的系統(如UNIX,見表4-1)釆用了文件名和文件描述信息分開的方法,文件描述信息單獨形成一個稱為索引結點的數據結構,簡稱為 i 結點。在文件目錄中的每個目錄項僅由文件名和指向該文件所對應的i結點的指針構成。
| 文件名 | 索引結點編號 |
|---|---|
| 文件名1 | |
| 文件名2 | |
一個FCB的大小是64字節,盤塊大小是1KB,則在每個盤塊中可以存放16個FCB(注意,FCB必須連續存放)。而在UNIX系統中一個目錄項僅占16字節,其中14字節是文件名,2字節是 i 結點指針。在1KB的盤塊中可存放64個目錄項。這樣,可使查找文件時平均啟動磁盤次數減少到原來的1/4,大大節省了系統開銷。
存放在磁盤上的索引結點稱為磁盤索引結點,UNIX中的每個文件都有一個唯一的磁盤索引結點,主要包括以下幾個方面:
文件主標識符,擁有該文件的個人或小組的標識符。
文件類型,包括普通文件、目錄文件或特別文件。
文件存取權限,各類用戶對該文件的存取權限。
文件物理地址,每個索引結點中含有13個地址項,即 iaddr(0) ~ iaddr(12),它們以直接或間接方式給出數據文件所在盤塊的編號。
文件長度,以字節為單位。
文件鏈接計數,在本文件系統中所有指向該文件的文件名的指針計數。
文件存取時間,本文件最近被進程存取的時間、最近被修改的時間以及索引結點最‘近被修改的時間。
文件被打開時,磁盤索引結點復制到內存的索引結點中,以便于使用。在內存索引結點中又增加了以下內容:
索引結點編號,用于標識內存索引結點。
狀態,指示i結點是否上鎖或被修改。
訪問計數,每當有一進程要訪問此i結點時,計數加1,訪問結束減1。
邏輯設備號,文件所屬文件系統的邏輯設備號。
鏈接指針,設置分別指向空閑鏈表和散列隊列的指針。
目錄結構
在理解一個文件系統的需求前,我們首先來考慮在目錄這個層次上所需要執行的操作,這有助于后面文件系統的整體理解。
搜索:當用戶使用一個文件時,需要搜索目錄,以找到該文件的對應目錄項。
創建文件:當創建一個新文件時,需要在目錄中增加一個目錄項。
刪除文件:當刪除一個文件時,需要在目錄中刪除相應的目錄項。
顯示目錄:用戶可以請求顯示目錄的內容,如顯示該用戶目錄中的所有文件及屬性。
修改目錄:某些文件屬性保存在目錄中,因而這些屬性的變化需要改變相應的目錄項。
操作時,考慮以下幾種目錄結構:
1) 單級目錄結構。
在整個文件系統中只建立一張目錄表,每個文件占一個目錄項,如圖4-3所示。
圖4-3單級目錄結構
當訪問一個文件時,先按文件名在該目錄中查找到相應的FCB,經合法性檢查后執行相應的操作。當建立一個新文件時,必須先檢索所有目錄項以確保沒有“重名”的情況,然后在該目錄中增設一項,把FCB的全部信息保存在該項中。當刪除一個文件時,先從該目錄中找到該文件的目錄項,回收該文件所占用的存儲空間,然后再清除該目錄項。
單級目錄結構實現了“按名存取”,但是存在查找速度慢、文件不允許重名、不便于文件共享等缺點,而且對于多用戶的操作系統顯然是不適用的。
2) 兩級目錄結構。
單級目錄很容易造成文件名稱的混淆,可以考慮釆用兩級方案,將文件目錄分成主文件目錄(Master File Directory, MFD)和用戶文件目錄(User File Directory, UFD)兩級,如圖4-4所示。
圖4-4 兩級目錄結構
主文件目錄項記錄用戶名及相應用戶文件目錄所在的存儲位置。用戶文件目錄項記錄該用戶文件的FCB信息。當某用戶欲對其文件進行訪問時,只需搜索該用戶對應的UFD,這既解決了不同用戶文件的“重名”問題,也在一定程度上保證了文件的安全。
兩級目錄結構可以解決多用戶之間的文件重名問題,文件系統可以在目錄上實現訪問限制。但是兩級目錄結構缺乏靈活性,不能對文件分類。
3) 多級目錄結構(樹形目錄結構)。
將兩級目錄結構的層次關系加以推廣,就形成了多級目錄結構,即樹形目錄結構,如圖4-5所示。
用戶要訪問某個文件時用文件的路徑名標識文件,文件路徑名是個字符串,由從根目錄出發到所找文件的通路上的所有目錄名與數據文件名用分隔符鏈接起來而成。從根目錄出發的路徑稱絕對路徑。當層次較多時,每次從根目錄查詢浪費時間,于是加入了當前目錄,進程對各文件的訪問都是相對于當前目錄進行的。當用戶要訪問某個文件時,使用相對路徑標識文件,相對路徑由從當前目錄出發到所找文件通路上所有目錄名與數據文件名用分隔符“/”鏈接而成。
圖4-5 樹形目錄結枸
圖4-5是Linux操作系統的目錄結構,“/dev/hda”就是一個絕對路徑。若當前目錄為“/bin”,則“./ls”就是一個相對路徑,其中符號表示當前工作目錄。
通常,每個用戶都有各自的“當前目錄”,登錄后自動進入該用戶的“當前目錄”。操作系統提供一條專門的系統調用,供用戶隨時改變“當前目錄”。例如,UNIX系統中,“/etc/passwd”文件就包含有用戶登錄時默認的“當前目錄”,可用cd命令改變“當前目錄”。
樹形目錄結構可以很方便地對文件進行分類,層次結構清晰,也能夠更有效地進行文件的管理和保護。但是,在樹形目錄中查找一個文件,需要按路徑名逐級訪問中間結點,這就增加了磁盤訪問次數,無疑將影響查詢速度。
4) 無環圖目錄結構。
樹形目錄結構可便于實現文件分類,但不便于實現文件共享,為此在樹形目錄結構的基礎上增加了一些指向同一結點的有向邊,使整個目錄成為一個有向無環圖。引入無環圖目錄結構是為了實現文件共享,如圖4-6所示。
當某用戶要求刪除一個共享結點時,若系統只是簡單地將它刪除,當另一共享用戶需要訪問時,卻無法找到這個文件而發生錯誤。為此可以為每個共享結點設置一個共享計數器,每當圖中增加對該結點的共享鏈時,計數器加1;每當某用戶提出刪除該結點時,計數器減1。僅當共享計數器為0時,才真正刪除該結點,否則僅刪除請求用戶的共享鏈。
圖4-6 圖形目錄結構
共享文件(或目錄)不同于文件拷貝(副本)。如果有兩個文件拷貝,每個程序員看到的是拷貝而不是原件;但如果一個文件被修改,那么另一個程序員的拷貝不會有改變。對于共享文件,只存在一個真正文件,任何改變都會為其他用戶所見。
無環圖目錄結構方便實現了文件的共享,但使得系統的管理變得更加復雜。
4.5 共享文件:硬鏈接和軟鏈接
文件共享使多個用戶(進程)共享同一份文件,系統中只需保留該文件的一份副本。如果系統不能提供共享功能,那么每個需要該文件的用戶都要有各自的副本,會造成對存儲空間的極大浪費。隨著計算機技術的發展,文件共享的范圍已由單機系統發展到多機系統,進而通過網絡擴展到全球。這些文件的分享是通過分布式文件系統、遠程文件系統、分布式信息系統實現的。這些系統允許多個客戶通過C/S模型共享網絡中的服務器文件。
現代常用的兩種文件共享方法有:
基于索引結點的共享方式(硬鏈接)
在樹形結構的目錄中,當有兩個或多個用戶要共享一個子目錄或文件時,必須將共享文件或子目錄鏈接到兩個或多個用戶的目錄中,才能方便地找到該文件,如圖4-7所示。
圖4-7 基于索引結點的共享方式
在這種共享方式中引用索引結點,即諸如文件的物理地址及其他的文件屬性等信息,不再是放在目錄項中,而是放在索引結點中。在文件目錄中只設置文件名及指向相應索引結點的指針。在索引結點中還應有一個鏈接計數count,用于表示鏈接到本索引結點(亦即文件) 上的用戶目錄項的數目。當count=2時,表示有兩個用戶目錄項鏈接到本文件上,或者說是有兩個用戶共享此文件。
當用戶A創建一個新文件時,它便是該文件的所有者,此時將count置為1。當有用戶 B要共享此文件時,在用戶B的目錄中增加一個目錄項,并設置一指針指向該文件的索引結點。此時,文件主仍然是用戶A,count=2。如果用戶A不再需要此文件,不能將文件直接刪除。因為,若刪除了該文件,也必然刪除了該文件的索引結點,這樣便會便用戶B的指針懸空,而用戶B則可能正在此文件上執行寫操作,此時用戶B會無法訪問到文件。因此用戶A不能刪除此文件,只是將該文件的count減1,然后刪除自己目錄中的相應目錄項。用戶B仍可以使用該文件。當COunt=0時,表示沒有用戶使用該文件,系統將負責刪除該文件。如圖4-8給出了用戶B鏈接到文件上的前、后情況。
利用符號鏈實現文件共享(軟鏈接)
為使用戶B能共享用戶A的一個文件F,可以由系統創建一個LINK類型的新文件,也取名為F,并將文件F寫入用戶B的目錄中,以實現用戶B的目錄與文件F的鏈接。在新文件中只包含被鏈接文件F的路徑名。這樣的鏈接方法被稱為符號鏈接。
圖4-8 文件共享中的鏈接計數
新文件中的路徑名則只被看做是符號鏈,當用戶B要訪問被鏈接的文件F且正要讀 LINK類新文件時,操作系統根據新文件中的路徑名去讀該文件,從而實現了用戶B對文件 F的共享。
在利用符號鏈方式實現文件共享時,只有文件的擁有者才擁有指向其索引結點的指針。而共享該文件的其他用戶則只有該文件的路徑名,并不擁有指向其索引結點的指針。這樣,也就不會發生在文件主刪除一共享文件后留下一懸空指針的情況。當文件的擁有者把一個共享文件刪除后,其他用戶通過符號鏈去訪問它時,會出現訪問失敗,于是將符號鏈刪除,此時不會產生任何影響。當然,利用符號鏈實現文件共享仍然存在問題,例如:一個文件釆用符號鏈方式共享,當文件擁有者將其刪除,而在共享的其他用戶使用其符號鏈接訪問該文件之前,又有人在同一路徑下創建了另一個具有同樣名稱的文件,則該符號鏈將仍然有效,但訪問的文件已經改變,從而導致錯誤。
在符號鏈的共享方式中,當其他用戶讀共享文件時,需要根據文件路徑名逐個地查找目錄,直至找到該文件的索引結點。因此,每次訪問時,都可能要多次地讀盤,使得訪問文件的開銷變大并增加了啟動磁盤的頻率。此外,符號鏈的索引結點也要耗費一定的磁盤空間。符號鏈方式有一個很大的優點,即網絡共享只需提供該文件所在機器的網絡地址以及該機器中的文件路徑即可。
上述兩種鏈接方式都存在一個共同的問題,即每個共享文件都有幾個文件名。換言之,每增加一條鏈接,就增加一個文件名。這實質上就是每個用戶都使用自己的路徑名去訪問共享文件。當我們試圖去遍歷整個文件系統時,將會多次遍歷到該共享文件。
硬鏈接和軟鏈接都是文件系統中的靜態共享方法,在文件系統中還存在著另外的共享需求,即兩個進程同時對同一個文件進行操作,這樣的共享可以稱為動態共享。
4.6 文件保護:文件訪問類型和訪問控制
為了防止文件共享可能會導致文件被破壞或未經核準的用戶修改文件,文件系統必須控制用戶對文件的存取,即解決對文件的讀、寫、執行的許可問題。為此,必須在文件系統中建立相應的文件保護機制。
文件保護通過口令保護、加密保護和訪問控制等方式實現。其中,口令保護和加密保護是為了防止用戶文件被他人存取或竊取,而訪問控制則用于控制用戶對文件的訪問方式。
訪問類型
對文件的保護可以從限制對文件的訪問類型中出發。可加以控制的訪問類型主要有以下幾種:
讀:從文件中讀。
寫:向文件中寫。
執行:將文件裝入內存并執行。
添加:將新信息添加到文件結尾部分。
刪除:刪除文件,釋放空間。
列表清單:列出文件名和文件屬性。
此外還可以對文件的重命名、復制、編輯等加以控制。這些高層的功能可以通過系統程序調用低層系統調用來實現。保護可以只在低層提供。例如,復制文件可利用一系列的讀請求來完成。這樣,具有讀訪問用戶同時也具有復制和打印的權限了。
訪問控制
解決訪問控制最常用的方法是根據用戶身份進行控制。而實現基于身份訪問的最為普通的方法是為每個文件和目錄增加一個訪問控制列表(Access-Control List, ACL),以規定每個用戶名及其所允許的訪問類型。
這種方法的優點是可以使用復雜的訪問方法。其缺點是長度無法預期并且可能導致復雜的空間管理,使用精簡的訪問列表可以解決這個問題。
精簡的訪問列表釆用擁有者、組和其他三種用戶類型。
擁有者:創建文件的用戶。
組:一組需要共享文件且具有類似訪問的用戶。
其他:系統內的所有其他用戶。
這樣只需用三個域列出訪問表中這三類用戶的訪問權限即可。文件擁有者在創建文件時,說明創建者用戶名及所在的組名,系統在創建文件時也將文件主的名字、所屬組名列在該文件的FCB中。用戶訪問該文件時,按照擁有者所擁有的權限訪問文件,如果用戶和擁有者在同一個用戶組則按照同組權限訪問,否則只能按其他用戶權限訪問。UNIX操作系統即釆用此種方法。
口令和密碼是另外兩種訪問控制方法。
口令指用戶在建立一個文件時提供一個口令,系統為其建立FCB時附上相應口令,同時告訴允許共享該文件的其他用戶。用戶請求訪問時必須提供相應口令。這種方法時間和空間的開銷不多,缺點是口令直接存在系統內部,不夠安全。
密碼指用戶對文件進行加密,文件被訪問時需要使用密鑰。這種方法保密性強,節省了存儲空間,不過編碼和譯碼要花費一定時間。
口令和密碼都是防止用戶文件被他人存取或竊取,并沒有控制用戶對文件的訪問類型。
注意兩個問題:
現代操作系統常用的文件保護方法,是將訪問控制列表與用戶、組和其他成員訪問控制方案一起組合使用。
對于多級目錄結構而言,不僅需要保護單個文件,而且還需要保護子目錄內的文件, 即需要提供目錄保護機制。目錄操作與文件操作并不相同,因此需要不同的保護機制。
總結
以上是生活随笔為你收集整理的【操作系统】总结四(文件管理)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 韬光养晦是什么意思(韬光养晦”到底是什么
- 下一篇: 美宝莲粉底液怎么样(美宝莲粉底液重金属超