《計算機操作系統(tǒng)原理-Linux實例分析》課件第5章_第1頁
《計算機操作系統(tǒng)原理-Linux實例分析》課件第5章_第2頁
《計算機操作系統(tǒng)原理-Linux實例分析》課件第5章_第3頁
《計算機操作系統(tǒng)原理-Linux實例分析》課件第5章_第4頁
《計算機操作系統(tǒng)原理-Linux實例分析》課件第5章_第5頁
已閱讀5頁,還剩239頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第5章文件管理5.1文件與文件系統(tǒng)5.2文件的組織結構5.3文件的存取方法5.4文件目錄管理5.5文件存儲空間的管理5.6文件的共享與保護5.7文件操作5.8Linux文件系統(tǒng)習題五 5.1文件與文件系統(tǒng)

文件是計算機系統(tǒng)的軟件資源,操作系統(tǒng)本身和大量用戶的程序、數(shù)據(jù)等都是以文件的形式組織和存放的,對這些資源的有效管理和充分利用是操作系統(tǒng)的重要任務之一。文件中的信息根據(jù)用途有不同的存在形態(tài)和不同的組織方式。本節(jié)介紹文件和文件系統(tǒng)的概念,并對操作系統(tǒng)的文件管理功能給予簡要說明。5.1.1文件

在計算機系統(tǒng)中,文件保存在外部存儲器上。從文件存在的形態(tài)上看,一個文件由兩個基本部分組成:數(shù)據(jù)和存儲介質。數(shù)據(jù)是文件的本體,它以計算機可以識別和處理的形式存在,其內容可能是各種不同的信息,如ASCⅡ代碼構成的源程序、二進制的數(shù)據(jù)或程序、一個表格、一篇文章等。文件是計算機系統(tǒng)的重要資源,必須對它們進行妥善的存放和管理。存儲介質是文件的存放載體,一般稱為文件存儲設備,它們屬于外部存儲器,如磁盤、磁帶、光盤等。對文件的信息進行處理和加工時,文件必須在內存儲器中。由于內存的容量十分有限,不可能把大量的文件長期存放在內存中。此外,內存儲器屬于揮發(fā)性存儲器件,它不可能對文件進行長期的保存。因此,大量的文件是保存在容量很大的外存儲器中。當文件需要進行處理時再把它們調進內存,處理完畢仍放回外存。

為了便于對文件的識別,每個文件都有一個符號名字,稱為文件名。文件名一般是以字母字符開頭,后續(xù)字母、數(shù)字等其他字符構成的字符串。文件名的長度因操作系統(tǒng)而異。因此,可以把文件定義為被命名的數(shù)據(jù)的集合體,或具有名字的信息序列。例如,已經(jīng)命名的源程序、目標程序、數(shù)據(jù)集合、人事檔案表、設備表,以及文件目錄和系統(tǒng)程序等,給予命名后也均可作為文件。文件存放在外存,有自己的屬性,即類型、長度、物理位置、存取控制、建立日期等。

5.1.2文件的分類

在計算機系統(tǒng)中存放著大量的文件,它們有著不同的內容、用途和形式。

為了便于對文件進行管理和加工,通常把眾多的文件從不同的角度進行分類。下面介紹幾種經(jīng)常使用的文件分類方法。按文件的創(chuàng)建角度,文件分為:

(1)系統(tǒng)文件,即由操作系統(tǒng)創(chuàng)建的文件。這些文件包含著操作系統(tǒng)執(zhí)行的程序和處理的數(shù)據(jù)。系統(tǒng)文件僅供系統(tǒng)使用,不對用戶開放。

(2)用戶文件,即由用戶創(chuàng)建的文件。這些文件包含的是用戶的信息,如用戶的程序、數(shù)據(jù)和其他各種形式的信息。用戶文件的使用權歸文件的建立者。

(3)庫文件,即由系統(tǒng)創(chuàng)建的供系統(tǒng)和用戶使用的文件,它們是一些由標準函數(shù)或子程序及常用的應用程序組成的文件。庫文件允許用戶調用,但是不允許用戶修改。在某些系統(tǒng)中,允許用戶通過系統(tǒng)向庫文件中添加信息。按文件的存取權限,文件分為:

(1)只讀文件,指只允許對文件進行讀操作,而不允許寫操作的文件。

(2)讀寫文件,指既可以進行讀操作,又可以寫操作的文件。

(3)可執(zhí)行文件,指只可調入到內存中執(zhí)行,而不能對它們進行讀寫操作的文件。

(4)不保護文件,這種文件不作任何保護,所有用戶都可以使用。按文件在系統(tǒng)中的信息流向,文件分為:

(1)輸入文件,這種文件只能從輸入設備中讀入到內存,如讀卡機、紙帶輸入機上的文件。

(2)輸出文件,這種文件只能從系統(tǒng)寫入到輸出設備中,如打印機、穿孔機上的文件。

(3)輸入/輸出文件,這種文件既可以從輸入設備中讀取,又可以向輸出設備寫入,如磁盤、磁鼓、磁帶上的文件。按文件內容的信息類型,文件分為:

(1)文本文件,即由字符代碼組成的文件。文本文件可以直接顯示在屏幕上,或在打印機上打印,也可以使用編輯器進行編輯。

(2)二進制文件,即由二進制數(shù)據(jù)組成的文件,如可執(zhí)行程序、圖像文件、聲音文件等。二進制文件不能直接顯示和打印,也不能使用編輯器進行編輯。此外,按照文件的性質,文件分為普通文件、目錄文件和設備文件。按照文件的存儲介質,文件分為磁盤文件、磁帶文件、光盤文件等。按照文件的物理結構,文件分為連續(xù)文件、順序文件、索引文件等。按照文件的保存時間,文件分為永久文件和臨時文件。5.1.3文件系統(tǒng)及其功能

1.文件系統(tǒng)

在計算機系統(tǒng)的外存上,存放著大量的各種不同類型文件,如果由用戶直接管理和存取外存中的文件,就要求用戶十分熟悉外存的物理特性,這對用戶來說無疑是一個沉重的負擔,也給系統(tǒng)帶來了不安全因素。計算機操作系統(tǒng)作為重要的系統(tǒng)軟件,被用戶最直接可見的部分就是它的文件管理。因為用戶使用計算機遇到的首要問題是如何保存程序和數(shù)據(jù),然后如何查找、復制、刪改它們。文件管理就是為了解決用戶的這些問題而設置的,它是操作系統(tǒng)的重要組成部分。因此,操作系統(tǒng)中負責管理和存取文件信息的軟件機構叫做文件管理,也稱文件系統(tǒng)。

2.文件系統(tǒng)的功能

文件系統(tǒng)是操作系統(tǒng)的重要組成部分,它為系統(tǒng)本身及計算機用戶在管理和使用文件上提供了極大方便。對用戶而言,文件系統(tǒng)允許用戶按自己的需要,在文件系統(tǒng)的規(guī)則下來定義文件結構和使用文件。對系統(tǒng)而言,文件系統(tǒng)將用戶的要求轉換成對文件的管理和控制操作。文件系統(tǒng)的功能主要體現(xiàn)在以下四個方面。

(1)文件組織。文件組織提供了文件信息的組織結構。它面向用戶和系統(tǒng)提供了不同的組織結構。面向用戶,它提供了用戶組織文件信息的結構方式,稱為文件的邏輯結構。用戶按照系統(tǒng)提供的文件邏輯結構組織自己的文件信息,例如,用戶可以按照流式文件的邏輯結構把文件信息看做是一個有序的數(shù)據(jù)流,也可以按照記錄式文件的邏輯結構把信息組織成記錄,以記錄為單位管理文件的信息。

面向系統(tǒng),根據(jù)存儲設備的特點把文件信息按照一定的組織結構存放在外存空間,這種組織結構稱為文件的物理組織。按照不同的物理組織方式形成了不同物理結構的文件,如連續(xù)文件、鏈接文件和索引文件。文件組織還包括文件的目錄組織結構。文件目錄是文件由邏輯結構向物理結構轉換的橋梁。系統(tǒng)通過文件目錄來確定用戶所指定的文件在外存的物理位置和文件的屬性等。

(2)文件存儲空間的管理。由文件系統(tǒng)對文件存儲空間進行統(tǒng)一管理,包括對文件存儲空間使用情況的記載,實施存儲空間的分配與回收,并為文件的信息與存放的物理位置建立映射關系,在存取文件時有效地確定文件的存放位置。

(3)文件共享與保護。有合作關系的用戶之間渴望共享彼此的文件,即使無合作關系的用戶之間,也允許它們共享某些系統(tǒng)的信息資源。比如多個用戶可以同時使用系統(tǒng)提供的共享程序庫,幾個協(xié)同工作的用戶可以共享某些程序文件或數(shù)據(jù)文件。文件系統(tǒng)的一個重要任務就是為用戶提供共享文件的手段,通過文件共享,不僅避免了系統(tǒng)復制文件的開銷,而且節(jié)省了文件占用的存儲空間。但共享與系統(tǒng)安全性之間有時會產(chǎn)生矛盾,文件系統(tǒng)要控制用戶對共享文件的使用,包括不同用戶對共享文件的訪問權限和操作限制,記錄共享某個文件的用戶進程數(shù)目等。為了實現(xiàn)文件的保護和共享,文件系統(tǒng)必須提供安全可靠的保護與保密措施,以防止文件信息被有意或無意地破壞或偷竊。因此,需要對用戶訪問文件進行有效的控制,杜絕用戶之間對文件的非法交叉訪問。從邏輯控制上,文件系統(tǒng)提供了對文件的訪問權限。用戶或用戶組必須按照訪問權限使用文件。在物理控制上,系統(tǒng)設置了文件的保護級別和訪問文件時的檢查保護機制。面對用戶的文件操作請求,系統(tǒng)要根據(jù)訪問權限和保護級別檢查訪問是否合法,對于非法訪問予以拒絕。

(4)提供方便的接口。文件管理主要向用戶提供簡便、統(tǒng)一的使用文件的界面。用戶使用界面中的命令,按照文件的邏輯結構,直觀、透明地對文件實施操作。所謂透明,是指用戶不必了解文件存放的物理結構、查找方法、I/O實現(xiàn)細節(jié)等與存儲介質有關的特性,用戶只要給出文件名和要對文件執(zhí)行的操作,就可以對文件“按名存取”,完成對文件的有關操作。特別是當文件的物理位置發(fā)生了改變,甚至更換了存儲設備,對用戶使用文件都不會產(chǎn)生任何影響。一般來說,文件系統(tǒng)的用戶界面有兩種:一種是由用戶通過命令來操作和管理文件,稱為文件操作的命令界面;另一種是在程序設計中使用操作系統(tǒng)提供的系統(tǒng)調用來使用文件,稱為文件操作的程序界面,這同操作系統(tǒng)與用戶的界面基本一致。

在用戶使用文件時,由文件系統(tǒng)使用特定的數(shù)據(jù)結構和有效的算法,實現(xiàn)文件邏輯結構到物理結構的轉換,把用戶對文件的使用請求轉換成對外存中物理文件的操作。 5.2文件的組織結構

在操作系統(tǒng)中,用戶最直接可見、打交道最頻繁的就是文件系統(tǒng)。文件系統(tǒng)既要面向用戶的文件使用請求,又要面向系統(tǒng)有效地管理文件。因此,文件系統(tǒng)提供了兩種文件的組織結構,即面向用戶的邏輯結構和面向系統(tǒng)的物理結構,對文件的存取與文件的組織有著密切的關系。

5.2.1文件的邏輯結構

文件的邏輯結構是指根據(jù)用戶自身處理文件中數(shù)據(jù)的要求,從用戶的觀點來看待文件的組織形式。這種組織形式是用戶可以直接處理的數(shù)據(jù)結構。用戶在組織文件信息時,往往根據(jù)使用信息的習慣把信息組織成文件。從用戶觀點組織信息形成的文件是一個抽象概念的文件,它們的組織結構與存儲介質的構造無關,所以也稱邏輯文件。

操作系統(tǒng)一般要面向用戶提供多種文件的邏輯結構,其主要目的是為用戶使用文件提供便利。用戶在存儲、使用和處理文件時只需按照邏輯結構進行,不必顧及文件在存儲介質上是如何組織與存放的,在檢索和讀寫文件時也不必考慮文件操作的細節(jié)。文件系統(tǒng)根據(jù)用戶的需要通常提供兩種文件的邏輯結構,按照它們的組織形態(tài)分別稱為記錄式文件和流式文件。文件系統(tǒng)向用戶提供邏輯文件結構的組織規(guī)則,用戶按照規(guī)則把信息組織成邏輯文件并提交給系統(tǒng),系統(tǒng)就可以根據(jù)用戶的要求對文件進行各種操作。

1.記錄式文件

記錄式文件是指邏輯上可被看成一組連續(xù)順序的記錄的集合。每個記錄是一個有一定意義的信息集合,稱為邏輯記錄。邏輯記錄在文件中只有順序的關系,記錄按先后順序編號為記錄l,記錄2,……,記錄n,其序號稱為邏輯記錄號。例如,在學生管理文件中,每個學生的學號、姓名、性別、年齡、班級和住址等數(shù)據(jù)組成一個邏輯記錄,由若干學生的邏輯記錄組成文件。從操作系統(tǒng)的觀點來看,邏輯記錄是記錄式文件的基本信息單位,它是檢索、存儲和傳輸文件的基本對象。但從用戶的角度看,邏輯記錄還可進一步分成若干個稱為數(shù)據(jù)項更小的單位。例如,在學生管理文件中,學生的學號、姓名、性別、年齡、班級和住址等就是數(shù)據(jù)項。所以,邏輯記錄可以看做是數(shù)據(jù)項的有序集合,一個邏輯記錄中所有數(shù)據(jù)項長度的總和稱為邏輯記錄的長度。

在記錄式文件中,按其記錄長度是否相同分為定長記錄文件和變長記錄文件。定長記錄文件是指文件中的所有邏輯記錄的長度都相等,并且每個記錄中的數(shù)據(jù)項的長度和相對位置都是固定的。

變長記錄是指在一個記錄式文件中各邏輯記錄的長度不一定相等,但是每個邏輯記錄的長度在處理之前能預先確定。當文件記錄中包含的數(shù)據(jù)項的長度是可變的,或者包含的數(shù)據(jù)項長度固定但數(shù)目是可變的,就形成變長記錄文件。

2.流式文件

流式文件又稱為無結構文件。這種文件在邏輯上看做是一系列有意義的字符或字節(jié)按照一定順序的集合。在流式文件中,字符或字節(jié)是構造文件的基本元素,它們不再組成任何其他結構。流式文件一般按字節(jié)位置來定位,按字節(jié)長度進行存取。某些文件本身就是一個整體,它們不能再進行劃分,只能以字節(jié)或字符作為基本單位。例如,源程序文件、文本文件、可執(zhí)行文件、庫函數(shù)等都是由一系列字符組成的,目標文件、可執(zhí)行文件、圖像文件、聲音文件等都是由以字節(jié)為單位的二進制數(shù)據(jù)組成的,它們都是流式文件。在流式文件中,通常插入一些特殊字符作為信息間的分隔符。例如,源程序文件是順序的字符流,并以回車符作為程序行的結束標志。5.2.2文件的物理結構

文件的物理結構是指文件在外存空間存放時的組織結構,即文件在外存的存放方式。按照一定物理結構存放在外存的文件稱為物理文件,它可以看做是相關物理塊的集合。文件的物理結構一般是由存儲設備的類型和存儲介質的特性決定的。系統(tǒng)按照文件的物理結構與文件存儲設備打交道。所以,文件的物理結構對文件的存取方法有直接的影響。另外,文件的物理結構對用戶是透明的。由于文件系統(tǒng)中文件的數(shù)量很多,它們一般使用很大的存儲空間。為了有效地管理物理文件,通常把存放物理文件的存儲介質分成兩級進行管理。首先把存儲介質的龐大存儲空間劃分成若干物理卷,簡稱卷;然后再把物理卷劃分成大小相同的物理塊。例如,以磁盤作為文件存儲介質時,每個磁盤分區(qū)就是一個物理卷,分區(qū)中的每個扇區(qū)是一個物理塊。在存儲介質上,物理塊是物理文件的基本管理單位。存儲空間以物理塊為單位進行分配,文件的信息也是以物理塊為單位在外存與內存之間進行傳輸?shù)?。例如,磁盤一般以512?B或1024?B作為一個物理塊,磁帶以1024?B或2048?B作為一個物理塊。當文件存儲在塊設備上時,按照文件占用物理塊的狀況,文件本身也被劃分成與物理塊大小相等的邏輯塊,每個邏輯塊占用一個物理塊。文件在存儲時總是占用整塊數(shù)的物理塊,如每個物理塊是512?B,一個文件的長度是1025?B,它要占用3個物理塊,對本身文件來說,它有3個邏輯塊。由于邏輯塊是對文件的依次分割,因此一個文件的邏輯塊總是連續(xù)的。但是,根據(jù)文件使用的物理結構不同,文件的物理塊可以是連續(xù)的,也可以是不連續(xù)的。

通常,把物理塊中存放的信息稱為物理記錄。所以,物理文件可以看做是相關物理記錄的集合。物理記錄與記錄式文件的邏輯記錄的含義完全不同,物理記錄僅是進行存儲分配和信息傳輸?shù)膯挝?,它不能表示信息本身包含的意義。由于各種文件的邏輯記錄長度是不同的,而物理塊的大小在某種設備上是相同的,因此,邏輯記錄的大小與物理記錄的大小之間不存在固定的對應關系。有時一個物理塊可以存放幾個邏輯記錄,而有時一個邏輯記錄要占用幾個物理塊。文件在外存上有多種組織形式,常用的有連續(xù)結構(順序結構)、鏈接結構及索引結構。

1.連續(xù)結構

連續(xù)結構是計算機最早使用的,也是一種最簡單的物理文件結構。其特點是文件中的信息連續(xù)地依次存放在存儲設備上若干個相鄰的物理塊中。由于這種文件的組織結構采用的是連續(xù)存儲分配,因此稱為連續(xù)結構。連續(xù)結構在外存占用的物理塊數(shù)和首塊的塊號一般記錄在文件目錄中。

在這種結構中,文件的物理順序與邏輯順序是一致的。例如,一個文件A,其長度為2000?B,存放在磁盤上,若磁盤物理塊的大小為512?B,則文件A需占用4個物理塊,它們分別被分配到10、11、12和13四個相鄰的物理塊中,其中第13塊中實際使用了444?B,如圖5.1所示。圖5.1連續(xù)結構連續(xù)結構的文件,對于文件在外存的查找定位非常簡單。邏輯地址到物理地址的變換步驟如下:

①由邏輯地址求得相對物理塊號;

②絕對物理塊號=文件首塊+相對物理塊號;

③求出邏輯記錄在絕對物理塊內的相對地址;

④邏輯記錄在外存的物理地址=絕對物理塊首址+塊內相對地址。

連續(xù)結構的主要優(yōu)點是:組織方法簡單,存取速度快,所需的磁盤尋道次數(shù)和尋道時間最少,只要知道了文件存儲的起始塊號和文件長度就能快速進行存取。連續(xù)結構的主要缺點是:

(1)要求建立文件時就確定它的長度,依此來分配相應的存儲空間,這往往很難實現(xiàn)。

(2)它不便于文件的動態(tài)擴充。在實際計算時,作為輸出結果的文件往往隨執(zhí)行過程而不斷增加新內容。當該文件需要擴大空間而其后的存儲單元已被別的文件占用時,就必須另外尋找一個足夠大的空間,把原空間中的內容和新加入的內容復制進去,這種文件的“大搬家”是很費時的。

(3)造成存儲空間的浪費。因為文件的長度不會正好等于連續(xù)空閑塊區(qū)域的長度,文件存放后可能出現(xiàn)不能再利用的空閑塊。

2.鏈接結構

鏈接結構又稱為串聯(lián)結構。這種結構的文件,它占用的存儲空間可以是不連續(xù)的,即連續(xù)的邏輯塊可以占用不連續(xù)的物理塊。為了保持文件邏輯上的聯(lián)系,系統(tǒng)在每個物理塊中設置了一個鏈接指針,指向文件的下一個物理塊,最后一塊的鏈接指針為空。這樣就把文件的若干個物理塊用鏈表結構組織起來。指向鏈表中第一個物理塊的指針一般存放在文件目錄中。當訪問文件時,從第一個物理塊開始,順著鏈接指針就能依次找到在邏輯上連續(xù)的下一個物理塊。圖5.2給出了鏈接結構的示意圖,其中文件A的數(shù)據(jù)占用塊號為20、35、22和41。它的第一個物理塊號由文件目錄表中說明,最后一個物理塊的鏈接指針為null,表示是該文件的末尾塊。圖5.2鏈接結構鏈接結構的優(yōu)點是:

(1)不需要連續(xù)存放在外存的物理塊中。

(2)適應文件長度的動態(tài)變化。由于文件具有鏈接結構,因此可以采用動態(tài)存儲分配的方法為文件分配存儲空間。這樣就不需要預先知道文件的大小,增加或減少或插入物理塊相當方便,只需修改插入處和刪除處的鏈接指針即可。鏈接結構的缺點是:

(1)查找鏈表的時間開銷較大,特別當鏈表很長時。只適合于按照文件的邏輯順序進行存取的方法。若隨機存取某一塊的數(shù)據(jù)時,存取速度比較慢。因為要讀寫某一塊上的數(shù)據(jù),只能從頭開始依次讀出前面所有物理塊,順著鏈接指針才能找到所需要的塊。

(2)每個物理塊增加了一個鏈接指針,占用了一部分空間。讀出信息時要把指針信息分離出來,還要防止指針丟失或破壞造成的混亂,為信息管理添加了麻煩。

3.索引結構

索引結構也是一種非連續(xù)存儲的結構,它是將文件信息按物理塊大小劃分為若干個邏輯塊,文件連續(xù)的邏輯塊可以存放于不連續(xù)的物理塊中。文件系統(tǒng)為每個文件建立一張索引表,每個表目指出邏輯記錄號與物理塊號的對應關系。索引表即為文件邏輯塊與物理塊的映射表。索引表的指針一般存放在文件目錄中。索引表本身與文件同時存放在存儲介質的指定區(qū)域。圖5.3給出了這種結構的示意圖。圖5.3索引結構索引結構是對鏈接結構的進一步改進,它除了具備鏈接文件的優(yōu)點外,還克服了只能順序存取的缺點。索引結構既適合順序存取記錄,也可以方便地隨機存取記錄,并且容易實現(xiàn)記錄的增刪和插入,所以索引結構被廣泛應用。

索引結構的缺點是由于需要索引表而增加了存儲空間的開銷。另外,在存取文件時需要兩次訪問存儲設備,第一次訪問索引表,通過索引表得到要存取的物理塊號,第二次訪問該物理塊存取數(shù)據(jù),因此降低了文件存取速度。改進的辦法是在文件存取之前,預先把索引表裝入內存中,這樣文件的存取可以直接在內存通過索引表確定物理塊號,訪問存儲設備的操作只需要一次。在文件很長的情況下,相應的索引表也很長,查找索引表將花費較多的時間,因此增加了系統(tǒng)的開銷。為解決這個問題可以采用多重索引方式,如圖5.4所示。在多重索引中設置一張主索引表,它指出各級次索引表的位置,次索引表指出文件各個物理塊的位置。

索引結構一般也存放在磁盤上。UNINX和Linux操作系統(tǒng)在磁盤上采用的就是改進的索引結構。圖5.4多重索引結構5.2.3記錄的成組與分解

由于磁盤塊的大小是預先劃分好的,大小固定,而邏輯記錄的大小是用戶文件的性質決定的,不一定和塊大小一致,如果邏輯記錄比物理塊小得多,則可以把多個邏輯記錄存放在一個塊中,這就是記錄的成組。用戶使用時再在讀取的一塊信息中分離出所需的記錄,這就是記錄的分解。

1.記錄的成組

將若干個邏輯記錄合并成組寫入1個物理塊的操作叫記錄的成組。每塊中邏輯記錄的個數(shù)稱“塊因子”。利用主存緩沖區(qū)可以把多個邏輯記錄一次性保存到磁盤塊上。也就是,當記錄要求存盤時,先存入主存緩沖區(qū),緩沖區(qū)的大小等于最大邏輯長度乘以成組的塊因子,就是塊的大小。

在緩沖區(qū)未存滿時,不啟動磁盤寫,這樣就提高了存儲空間的利用率,減少啟動外設的次數(shù),提高了系統(tǒng)的工作效率。

2.記錄的分解

當1個物理塊讀出存入緩沖區(qū)后,把邏輯記錄從塊中分離出來的操作稱為記錄的分解。這是記錄成組的一個逆過程,先從磁盤中找到記錄所在的塊,并將本塊讀入主存緩沖區(qū),再從緩沖區(qū)取出所需要的記錄送到用戶工作區(qū)。如果用戶所需的記錄已經(jīng)在緩沖區(qū)中,則不需要啟動外設讀塊信息,這也可以提高系統(tǒng)工作效率。

5.3文件的存取方法

計算機的存儲設備上存放有大量的文件,用戶經(jīng)常需要讀寫文件,文件系統(tǒng)就要從存儲介質上取出文件信息存入到內存中或將內存中的信息寫入到存儲介質上。那么,按照什么方式完成信息的存取呢?計算機系統(tǒng)提供了不同的存取方法,而文件的存取方法是由文件的性質和用戶使用文件的情況來決定的。根據(jù)存取的次序來劃分,通??煞譃閮纱箢悾喉樞虼嫒『碗S機存取。5.3.1順序存取

順序存取是按照字符流或記錄排列的次序進行存取。在記錄式文件中,順序存取就是按邏輯記錄的排列順序依次存取每個記錄,下次要存取的記錄和當前存取的記錄之間有嚴格的順序關系。例如,當前存取的記錄為R,則下次要存取的記錄自動確定為R+l。通常,在文件說明中設置一個文件讀寫位置指針指向文件中下一個要讀寫的位置。對于定長記錄文件,由于其記錄長度相同,根據(jù)記錄號就可以確定位置指針的值。而變長記錄文件的記錄長度不同,在每次存取一個記錄后,位置指針要加上本次存取記錄的長度。在無結構的流式文件中,順序存取是按照文件中字符的排列順序依次存取指定字節(jié)長度的信息。用于流式文件的讀寫位置指針以字符或字節(jié)為單位進行計數(shù),每存取一段信息,位置指針自動加上本次存取的字節(jié)長度。

5.3.2隨機存取

隨機存取是可以從任意指定的位置開始存取文件的信息。在記錄式文件中,允許用戶根據(jù)記錄的編號來存取文件的任一個記錄,下次要存取的記錄和當前存取的記錄之間不存在順序關系。在流式文件中,可以從任意指定的字節(jié)位置存取任意長度的字節(jié)信息。隨機存取也是使用讀寫位置指針來指出存取位置的。文件的存取方法與文件的物理結構密切相關。連續(xù)文件采用順序存取方法時的速度最快,鏈接文件也適宜順序存取,但速度比連續(xù)文件要慢。連續(xù)文件和鏈接文件不適宜采用隨機存取方法,若一定要隨機存取,只能從文件頭開始依次找到存取位置,這將花費較長的時間。具有索引結構的文件適宜采用隨機存取和直接存取方法,它可以通過索引表快速地找到存取位置。當然,索引文件也可以使用順序存取方法。

5.4文件目錄管理

文件系統(tǒng)的重要作用是為用戶使用文件提供最大的便利,這主要體現(xiàn)在用戶對文件可以“按名存取”,即用戶只需指出要訪問的文件的名字,就可以實現(xiàn)對文件的存取。一個計算機系統(tǒng)中存放著成千上萬個文件,為了便于對文件進行有效的管理和用戶“按名存取”,文件系統(tǒng)設置了文件目錄的數(shù)據(jù)結構,用以標識和管理系統(tǒng)中的所有文件。文件目錄在文件系統(tǒng)中的作用類似于圖書館中的圖書目錄,無論是讀者還是圖書管理員通過圖書目錄就可以十分方便地找到圖書。

文件目錄的管理除了要解決存儲空間的有效利用之外,還要解決快速搜索、文件命名沖突,以及文件共享問題。5.4.1文件的組成

在前面介紹進程管理時提到進程控制塊和操作系統(tǒng)管理進程,并不關心進程的程序完成什么功能,也不關心程序運行時所作用的數(shù)據(jù)對象如何。它們所關心的是進程在其生命期會向系統(tǒng)提出哪些資源申請,進程運行過程中的狀態(tài)如何等問題。為此,操作系統(tǒng)為每個進程設置一個進程控制塊,記載這些相關信息。所以,操作系統(tǒng)管理進程是通過進程控制塊來實現(xiàn)的。同理,在文件系統(tǒng)中,要管理大量的文件。系統(tǒng)并不關心文件的內容是什么,是程序還是數(shù)據(jù),是聲音信息還是圖像信息。文件系統(tǒng)只關心如何區(qū)別不同的文件、文件的大小、文件在存儲介質上的存放位置、文件的屬性等用于管理的相關信息。所以,從系統(tǒng)對文件管理的角度來看,一個文件包括兩部分:文件控制塊(FCB)和文件信息體。文件控制塊往往也叫文件說明,它至少包括文件名、文件信息在文件存儲設備上第一個物理塊的地址(物理結構是連續(xù)結構時)。另外,根據(jù)系統(tǒng)要求不同,它還包括關于文件邏輯結構、物理結構、存取控制和管理信息等。這里的管理信息主要指訪問時間、記賬信息、文件控制塊組成目錄文件等。文件系統(tǒng)利用目錄文件完成按名存取和對文件信息的共享與保護。

文件信息體指文件本身的信息,它就是前面討論的記錄式文件或字符流式文件。5.4.2文件控制塊和文件目錄

1.文件控制塊(FCB)

為了便于對文件進行控制和管理,文件系統(tǒng)為每個文件唯一地設置一個文件控制塊。文件控制塊是文件存在的標志。它是操作系統(tǒng)為管理文件而設置的數(shù)據(jù)結構,存放了為管理文件所需的所有有關信息。文件控制塊通常包括下列信息。

(1)文件名:符號文件名,用來識別文件。

(2)文件類型:指明文件的屬性,是普通文件還是目錄文件、特別文件,是系統(tǒng)文件還是用戶文件等。

(3)物理地址:用來說明文件在外存中的存放位置。

(4)文件大?。寒斍拔募拇笮?以字節(jié)、字或塊為單位)和允許的最大值。

(5)保護信息:對文件讀、寫及執(zhí)行等操作的控制權限標志。

(6)使用計數(shù):表示當前有多少個進程在使用(打開了)該文件。

(7)時間:反映文件有關創(chuàng)建、最后修改、最后使用等情況,用于對文件實施保護和監(jiān)控等。

文件系統(tǒng)利用這種結構對文件實施各種管理。例如,按名存取文件時,先要找到對應的控制塊,驗證權限。僅當存取合法時,才能取得存放文件信息的物理地址。

2.文件目錄

為了加快對文件的檢索,往往把文件控制塊集中在一起進行管理。這種文件控制塊的有序集合就稱為文件目錄。當然,文件控制塊也就是其中的目錄項。由于文件目錄是訪問文件必須使用的機構,所以管理文件的關鍵是管理好文件目錄。

3.目錄文件

為了實現(xiàn)對文件目錄的管理,通常將文件目錄以文件的形式保存在外存,完全由目錄項構成的文件就稱為目錄文件。

目錄文件是操作系統(tǒng)管理文件的重要依據(jù),通常與文件信息一起存放在外存介質的專門區(qū)域中,并提供了一系列專門管理目錄文件的命令,供用戶查看、建立、刪除或改名。目錄文件與一般文件具有相同的性質,它們也有文件名,文件的內容就是該目錄包含的目錄項。與一般文件不同的是,目錄文件一般只能由操作系統(tǒng)存取,普通用戶不能直接訪問目錄文件。在需要訪問某個文件時,系統(tǒng)按照指定的路徑把有關的目錄文件讀取到內存,從目錄項中搜索所需的文件。在使用當前目錄的系統(tǒng)中,把要訪問文件的目錄文件裝入內存緩沖區(qū)中,并把它設置為當前目錄,以備以后檢索文件使用。文件目錄具有將文件名轉換成該文件在外存的物理位置的功能,即實現(xiàn)文件名與其存放盤塊之間的映射。在訪問一個文件時,首先使用文件名檢索文件目錄,找到該文件對應的目錄項后就可以直接得到文件的管理信息,系統(tǒng)使用這些信息實現(xiàn)對文件的定位,并實現(xiàn)從用戶指定的文件名到文件的物理地址之間的轉換。這是文件目錄所提供的最基本的功能。

在MS-DOS系統(tǒng)中,一個目錄項有32個字節(jié),其中包含文件名、擴展名、屬性、時間、日期、首塊號和文件大小。利用首塊號作為查找物理塊鏈接表的索引,按索引鏈向下查找,可找到該文件所有的盤塊。5.4.3文件目錄的結構

1.一級目錄結構

最簡單的文件目錄采用一級目錄結構。一級目錄結構就是把系統(tǒng)中的所有文件的目錄項都建立在一張目錄表中,整個目錄組織是個線性表,結構比較簡單。如果文件系統(tǒng)為存儲設備的所有文件建立一張目錄表,每個文件在其中占有一項用來存放文件說明信息。該目錄表存放在存儲設備的某固定區(qū)域,在系統(tǒng)初啟或需要時,系統(tǒng)將其調入內存(或部分調入內存)。文件系統(tǒng)通過對該表提供的信息對文件進行創(chuàng)建、搜索、刪除等操作。每當創(chuàng)建一個新文件時就在文件目錄中增加一個目錄項,每當刪去一個文件時,就在文件目錄中刪除該文件的目錄項。

圖5.5是一級文件目錄結構,其中各方框表示文件目錄中的各目錄項,圓圈表示由目錄項描述的文件。圖5.5一級目錄結構一級目錄結構的唯一的優(yōu)點是結構簡單、便于管理。它的缺點如下:

(1)當系統(tǒng)中文件的數(shù)量很大時,文件目錄將很大。當查找一個文件時,需要從整個目錄表中查詢,這將花費大量的時間而影響文件的訪問效率。

(2)由于文件系統(tǒng)是通過文件目錄“按名存取”一個文件,因此在文件目錄中的文件不能重名,否則系統(tǒng)無法判斷用戶指定的是哪個文件。因為一級目錄結構無法解決文件命名沖突問題,所以在多用戶環(huán)境下,用戶在給文件命名時需要十分慎重,這將給用戶造成不便。此外,當系統(tǒng)中的某些文件由多個用戶共享使用時,不同的用戶從使用文件的便利出發(fā),可能給同一個共享文件起了不同的名字,而文件系統(tǒng)在使用一級目錄結構時無法做到使用不同文件名來訪問同一個文件。

2.二級目錄結構

為了解決一級目錄中不同用戶文件同名的問題,文件系統(tǒng)為每個用戶建立一個文件目錄,稱為用戶文件目錄或第二級目錄,用戶把自己的文件登記在用戶目錄中。同時,文件系統(tǒng)還設置了用于管理所有用戶文件目錄的總目錄,稱為主目錄或第一級目錄。主目錄中記錄著所有用戶目錄的名字及其物理地址。也就是說,主目錄中的目錄項記錄的不是一個文件,而是指向一個用戶目錄的指針。例如,圖5.6給出了一個有4個用戶的二級目錄結構,每個子目錄都是一個用戶目錄,存放該用戶使用的文件。用戶與用戶之間使用的文件名可以不同,也可以相同。在不同子目錄下的同名文件互不影響。

采用二級目錄結構后,用戶要求存取文件時,總是搜索該用戶自己的文件目錄。圖5.6二級目錄結構用戶目錄本身也必須被創(chuàng)建或刪除,這是由專用的系統(tǒng)程序實現(xiàn)的,用戶要提供相應的用戶名和某些說明信息。當創(chuàng)建一個用戶文件目錄時,要在主文件目錄中附加相應的一項。

用戶要創(chuàng)建新文件時,系統(tǒng)先找到該用戶的用戶文件目錄,在判定該目錄中沒有與新建文件同名的文件的情況下,在該目錄中建立一個新的目錄項,并填入新文件名及有關屬性信息。當用戶要刪除一個文件時,系統(tǒng)從主文件目錄中找到該用戶目錄,再由該目錄中找到指定文件的目錄項,然后回收該文件占用的外存空間,清除該目錄項。二級目錄結構基本上解決了一級目錄存在的問題,其優(yōu)點是:不同用戶可以有相同的文件名;提高了檢索目錄的速度。

這種結構能有效地將用戶與用戶之間隔開,還可以通過在目錄項中設置密碼實現(xiàn)文件的保護。其缺點是不利于文件的共享。

3.樹形目錄結構

樹形目錄結構又稱為多級目錄結構,產(chǎn)生于UNIX操作系統(tǒng),已被現(xiàn)代操作系統(tǒng)廣泛采用,它是二級目錄結構的擴充。目錄與文件在一起,目錄也做成文件,在多級目錄結構中,每一級目錄的目錄項可以描述一個文件,也可以描述它的下一級子目錄,從而形成一個多層次的目錄結構。如同一棵倒掛樹,主目錄就是樹根,稱為根目錄,每一個樹結點就是一個子目錄,每一個樹葉表示一個文件,如圖5.7所示。圖5.7樹形目錄結構在樹形目錄結構中,主文件目錄是樹根。因此,常常把主文件目錄稱為根目錄(root)。用戶可以在根目錄下建立子目錄和組織文件。子目錄可以是多層次的,就像樹枝,文件在最末端,就像樹葉。在UNIX系統(tǒng)和MS-DOS系統(tǒng)中都采用了樹形目錄結構。

在樹形目錄結構中,每個文件都有一個唯一的路徑名(從根目錄出發(fā)到某文件的通路上所有各級子目錄名和該文件名的順序組合),在各級子目錄名和文件名之間可用“/”隔開,例如:root/programs/p/list。用戶存取文件時必須給出文件所在的路徑名。文件系統(tǒng)根據(jù)用戶指定的路徑名檢索各級目錄,從而確定文件所在的位置,對文件進行相應的操作。樹形目錄結構具有如下優(yōu)點:

(1)解決了重名問題。樹形結構允許在不同的子目錄中使用相同的名字命名文件或下級子目錄。這樣,系統(tǒng)在檢索時使用的路徑名是不同的,故對同名文件不會引起混淆。

(2)有利于文件的分類。系統(tǒng)或用戶可以把不同類型的文件登錄在不同的子目錄下,并可按層次建立子樹。

(3)提高檢索文件的速度。利用當前目錄和相對路徑不僅方便用戶,而且系統(tǒng)從當前目錄開始檢索文件,可縮短檢索路徑,提高檢索速度。

(4)能進行存取權限的控制。在子目錄中可規(guī)定存取權限,在檢索文件時核對存取權限,避免一個用戶未經(jīng)授權就存取另一個用戶的文件,保證了用戶文件的私有性,可實現(xiàn)對文件的保護和保密。 5.5文件存儲空間的管理

對文件存儲空間的管理是文件系統(tǒng)的一個重要功能。當一個用戶要求創(chuàng)建一個新文件時,系統(tǒng)要為用戶的文件分配相應的外存空間。相應地,當用戶要求刪除一個舊文件時,系統(tǒng)就要回收該文件所占用的外存空間,供以后新建文件使用。

為了能對外存空間進行有效地利用,并提高對文件的訪問速率,系統(tǒng)必須對外存中的空閑塊資源進行妥善管理。通常情況下,都是利用磁盤來存放文件。下面就基于磁盤文件討論目前常用的磁盤空閑區(qū)管理技術,主要有空閑區(qū)表法、空閑塊鏈接法、位示圖法和成組鏈接法。5.5.1空閑區(qū)表法

1.空閑區(qū)表

空閑區(qū)表是以一個空閑塊為單位登記的。為了記載磁盤上有哪些盤塊當前是空閑的,文件系統(tǒng)需要建立一個空閑區(qū)表,所有連續(xù)的空閑塊在表中占據(jù)一項,表中的每一項記載著存儲空間中每一個空閑區(qū)域的起始塊號和塊數(shù),如圖5.8所示。

空閑區(qū)表可以按照開始塊號大小的順序排列,也可按照空閑塊數(shù)量的多少順序排列。圖5.8空閑區(qū)表

2.空閑塊的分配

當用戶新建文件或文件追加信息時,系統(tǒng)必須為文件分配存儲空間(即分配空閑盤塊),可以參照內存可變分區(qū)管理的方法,采用“最先適應算法”、“最佳適應算法”或“最差適應算法”從空閑區(qū)表中找出一個空閑區(qū)分配給該文件。若分配后空閑區(qū)仍有剩余,則把它們作為一個新的空閑區(qū),修改并登記在空閑區(qū)表中。若對應空閑區(qū)的大小正好與申請的大小相等,則將該項從空閑區(qū)表中刪除。

3.空閑塊的回收

當用戶刪除文件時,系統(tǒng)必須收回該文件所占用的存儲空間(即文件占用的盤塊),將回收的物理塊作為空閑塊登記在空閑區(qū)表中,若存在相鄰的空閑區(qū),則合并在一起形成一個更大的空閑區(qū)(同內存可變分區(qū)管理方法中的內存空間回收)。有的操作系統(tǒng)把外存中的每個連續(xù)的空閑區(qū)看成是一個文件,稱為空閑文件??臻e文件也登記在文件目錄中,它使用的目錄項稱為空閑文件項。在為一個文件分配存儲空間時,系統(tǒng)依次查找文件目錄中的空閑文件項,按照上述的某一算法,選擇合適的空閑區(qū)分配給文件,然后把空閑文件項作為該文件的目錄項使用。若分配后仍有多余的空閑區(qū),則把它作為一個新的空閑文件登記在文件目錄中。采用空閑文件項的方法把空閑區(qū)表與文件目錄合二為一,為文件的分配和管理提供了方便。但它存在著明顯的缺點,由于文件目錄中空閑文件項和真正的文件目錄項混雜在一起,因此無論是查找文件還是查找空閑區(qū),都將造成查找速度下降。這種方法是把若干連續(xù)的空閑塊組合在一個空閑表項中,它們可一起被分配或釋放,所以特別適于存放連續(xù)結構的文件。但是,若存儲空間有大量的小空閑區(qū),則空閑表會變得很大,使檢索效率大大降低。另外,如同內存的動態(tài)分區(qū)分配一樣,隨著文件不斷地被創(chuàng)建和刪除,將使磁盤空間分割成許多小的空閑區(qū)。這些小空閑區(qū)無法用來存放文件,從而產(chǎn)生了外存碎片,造成磁盤空間的浪費。雖然從理論上講可采用緊縮辦法,使盤上所有的文件集中在一起,使所有的外存碎片拼接成一大片連續(xù)的磁盤空閑空間,但這樣做要花費大量的時間,因而僅在必要時才進行磁盤的整理工作。5.5.2空閑塊鏈法

1.空閑塊單塊鏈接法

(1)空閑塊鏈??臻e塊鏈法把分散在外存空間中的所有空閑塊利用指針鏈接在一起形成了空閑塊鏈。系統(tǒng)設置一個指向空閑塊鏈首的指針,在每一個空閑塊中有一個指針指向下一個空閑塊,鏈尾的最后一個空閑塊中的指針為空,如圖5.9所示。圖5.9空閑塊單塊鏈

(2)空閑塊的分配。當為文件分配空閑盤塊時,從空閑塊鏈首開始分配所需的空閑塊。每分配出一個空閑塊后,鏈首指針依次后移,指向下一個空閑塊。若需n塊,則重復上述動作n次。

(3)空閑塊的回收。當刪除文件時,文件所占用的盤塊就成為空閑塊。只需把這些釋放的盤塊依次鏈入空閑鏈頭,并使空閑區(qū)頭指向最后釋放的那一塊。

這種方法與文件的串連結構有相似之處,只是鏈上的盤塊都是空閑塊而已。優(yōu)點:可充分利用零散的盤塊空間,易于實現(xiàn),只需要在內存中用一個單元保留鏈頭指針。

缺點:I/O操作次數(shù)增加,工作效率低,因為每當在鏈上增加或移走空閑塊時都需要很多的I/O操作。

2.空閑塊成組鏈接法

把空閑塊分成若干組,把指向一組中各空閑塊的指針集中在一起,這樣既可方便查找,又可減少為修改指針而啟動磁盤的次數(shù)。UNIX系統(tǒng)就是采用空閑塊成組鏈接的方法,圖5.10是UNIX系統(tǒng)的空閑塊成組鏈接示意圖。圖5.10空閑塊成組鏈接

UNIX系統(tǒng)把每100個空閑塊作為一組,每一組的第一個空閑塊登記下一組空閑塊的塊號和空閑塊數(shù),余下不足100塊的那部分空閑塊的塊號及塊數(shù)登記在一個專用塊中,登記最后一組塊號的那個空閑塊(在圖5.10中的第7900塊)中第2個單元填“0”,表示該塊中指出的塊號是最后一組的塊號,空閑塊鏈到此結束。系統(tǒng)初始化時先把專用塊內容讀到主存儲器,當需要分配空閑塊時,就直接在主存中可找到哪些塊是空閑的,每分配一塊即把空閑塊數(shù)減1。但要把一組中的第一個空閑塊分配出去之前,應把登記在該塊中的下一組的塊號及塊數(shù)保存到專用塊中(原專用塊中的信息已經(jīng)無用,因為它指示的一組空閑塊都已被分配了)。

當一組空閑塊被分配完后,再把專用塊的內容讀到主存儲器中,指出另一組可供分配的空閑塊。當歸還一個塊時,只要把歸還塊的塊號登記到當前組中且空閑塊數(shù)加l即可。如果當前組已滿100塊,則把主存中的內容寫到歸還的那塊中,該歸還塊作為新組的第一塊。5.5.3位示圖法

13位示圖(或盤圖文件)是一張存儲空間分配表。當存儲器以塊為單位分配時,用位示圖進行存儲空間分配比較方便。位示圖以連續(xù)文件形式存放在磁盤或內存中,磁盤空間中的各個盤區(qū)和位示圖中每個字的各個二進制位建立一一對應的關系。二進制位等于0,表示此塊未分配;二進制位等于1,表示此塊已分配,如圖5.11所示。當創(chuàng)建一個文件需要分配存儲空間時,只要查詢位示圖,將位示圖中為0所對應的空閑塊分配給文件并將對應的位置1即可。當刪除一個文件時,只要將該文件所占的盤塊對應于位示圖中的1清0即可。位示圖的大小由盤塊總數(shù)確定,它所占的存儲空間很小,可將其復制到內存中,以便快速查找。圖5.11位示圖同空閑盤區(qū)目錄方法相比較,位示圖方法分配空閑塊的時間要長一些,但釋放空閑塊較快,所以常常用于對磁盤等大容量外存儲器的管理。

這種方法描述能力強,適合各種物理結構。微型計算機文件系統(tǒng)中外存儲器(磁盤)的空閑管理也大都采用位示圖法。在某些情況下,位示圖可能太大,不宜存放在內存中,此時可把它放在外存,只把其中的一段裝入內存,先用該段進行分配,待它填滿時(即所有的位均變成0),再與外存中的另一段交換。但是,自由空間的回收就需要在位示圖中找到對應于那些回收塊的有關段,并對它們進行檢索,置相應位為1,這就會引起磁盤的頻繁存取??山⒁粋€保存回收塊的表格,僅當一個新的段調入內存時,才按該表對段進行更新,這樣就可減少磁盤的存取次數(shù)。使用這種技術應注意,在磁盤出現(xiàn)故障時應使位示圖與磁盤空間分配的狀態(tài)保持一致。 5.6文件的共享與保護

5.6.1文件的共享

多個進程使用同一文件,稱為文件共享。文件共享的好處是不言而喻的,但共享必須受到控制,否則被共享的文件易被某個進程所損害。不管這種損害是有意的還是無意的,都會給別的共享進程造成災難。

文件的保護和保密是從系統(tǒng)以及用戶的角度出發(fā),防止對文件的各種非法訪問。文件保密是指未經(jīng)文件所有者許可,任何其他用戶不得訪問該文件。文件的保護是指避免文件。所有者或他人對文件造成破壞。所以,文件的共享、控制、保密都與文件系統(tǒng)安全性有著密切的關系。

1.文件共享的方式

文件共享的方式有以下兩種。

(1)互斥共享:某個被共享的文件是臨界資源,即某一時段只允許某一進程使用它,或者說不會有兩個以上的進程同時訪問它。一個用戶打開文件后,待使用結束關閉文件后,才允許另一個用戶打開該文件。操作系統(tǒng)采用臨界段調度算法能滿意地解決這類共享。

(2)同時性共享:多個進程同時訪問一個文件。允許多個用戶同時使用同一個共享文件,但系統(tǒng)實現(xiàn)對共享文件的同步控制。一般來說,允許多個用戶同時打開共享文件執(zhí)行讀操作,但不允許同時對共享文件進行讀操作與寫操作,也不允許多個用戶同時對共享文件執(zhí)行寫操作,這樣是為了確保文件信息的完整性。

在集中式環(huán)境下,同時性共享本質上是個“讀者/寫者”的問題,在分布式環(huán)境下,要考慮如何保證文件內容的完整性和一致性。

2.實現(xiàn)文件共享的方法

通過以下方法可以實現(xiàn)文件共享:

(1)公共目錄。在目錄樹中設置公共目錄,將被共享的文件登記在這些目錄中,每個用戶都能訪問公共目錄中的文件,如此便實現(xiàn)了多用戶對文件的共享。例如,在UNIX系統(tǒng)中,/bin、/dev等目錄便是根目錄下的公共目錄,它們是由系統(tǒng)創(chuàng)建的,存放供用戶共享的系統(tǒng)文件,也可存放用戶提供的實用程序。

(2)鏈接。鏈接是目錄樹上的一種操作,它給文件定義“別名”,以便實現(xiàn)按“別名”訪問文件的目的。如果允許一個用戶對另一個用戶的某一個文件進行鏈接,則共享合法,這種情況多發(fā)生在同一個開發(fā)組中。

這種方法是在與共享文件的相應目錄之間進行鏈接,用戶在自己的文件目錄中對要共享的文件建立相應的表項。在二級目錄結構下,通過使多個用戶目錄中的目錄項指向同一文件的位置,就可以實現(xiàn)對該文件的共享,如圖5.12所示。圖5.12文件的鏈接共享在UNIX系統(tǒng)中,允許在結點(目錄)與葉(文件)之間進行鏈接,并通過系統(tǒng)調用link()實現(xiàn)鏈接。例如,用戶wang和用戶li是同組用戶,用戶li已知用戶wang有一個文件file,其路徑是wang/file。若用戶li打算從其目錄li出發(fā),以符號名file1訪問用戶wang的文件file,則用戶li使用系統(tǒng)調用link(wang/file,li/file1)來實現(xiàn)鏈接。在樹形目錄結構中,目錄的目錄項可以共享,因此也可以采用上述鏈接方法。它可以在目錄與目錄(結點)之間進行,也可以在目錄與文件(結點和葉)之間進行,如MULTICS系統(tǒng)允許按這種方式進行文件的鏈接來實現(xiàn)文件的共享。但是,經(jīng)過鏈接后,目錄結構已經(jīng)不是樹形結構了,而成為網(wǎng)絡狀結構,路徑就不是唯一的了。特別是在刪除目錄樹的某個分支時,要考慮到是否有鏈接。如果目錄的鏈接指針指向一個已刪除的文件將引起錯誤。

(3)授權。系統(tǒng)給某用戶授以某個組號gid,那么該用戶就享受gid組的成員所擁有的權利,其中包括共享組內文件的權利。在支持文件共享的系統(tǒng)中,當用戶關閉一個文件時,系統(tǒng)必須判明該文件是否還有共享用戶在使用中,若已無用戶使用,才能進行關閉操作。所以,在文件控制塊中一般都設置有“共享計數(shù)”項,用以記錄當前共享該文件的用戶個數(shù)。當某個用戶關閉一個共享的文件時,對文件而言僅是把其共享計數(shù)減一。只有當共享計數(shù)為0時,才真正關閉該文件。刪除一個文件時還要判明是否存在與該文件有鏈接關系的其他文件,所以在文件控制塊中還設置了“鏈接計數(shù)”項。只有在鏈接計數(shù)為0時,才能刪除該文件。5.6.2文件的保護

系統(tǒng)中的文件,有些文件可供多個用戶共同使用,但有些文件只能由文件主使用,而不能被其他用戶使用。對于這樣的文件需要采取保護措施,防止非法用戶存取文件。除此之外,共享文件有不同的共享級別,要求文件主指定哪些用戶可以存取他的文件,哪些用戶不能存取。此外,也應該使文件主能夠說明允許哪一種類型的存取,例如只允許他的一些同事修改他的文件,而另一些同事只可以讀這些文件,其他用戶就只能執(zhí)行這些文件??偠灾募鞅仨毮軌蛑付ㄆ渌脩魧ξ募心男┐嫒嘞?。為了正確地共享文件,必須采取保護措施。這些保護措施包括為防止未經(jīng)授權的用戶使用其他用戶文件,以及為防止文件主自己錯誤使用文件而采取的措施。

為了保證文件系統(tǒng)的安全可靠,現(xiàn)在許多操作系統(tǒng)要求用戶提供口令和用戶名作為建立用戶文件信息的一部分,用戶使用文件系統(tǒng)時,系統(tǒng)都要在終端上詢問用戶名和口令,只有核準之后的用戶,系統(tǒng)才能認定他能使用哪些文件和不能使用哪些文件。文件共享和文件保護是一對矛盾,但各有各的用途,應根據(jù)用戶對文件的不同要求,采取相應措施。

文件主為使自己的文件有控制地供別的用戶共享,通常給文件設置控制信息。每當有用戶訪問時,文件管理機構負責核查訪問權限,從而使文件受到保護。

1.文件訪問控制

常用的文件控制方法有如下三種:

(1)文件存取控制矩陣。文件存取控制矩陣是由系統(tǒng)的全部用戶和系統(tǒng)中的全部文件組成的一個二維矩陣,一維列出使用文件系統(tǒng)的全部用戶,另一維列出系統(tǒng)中存放的所有文件,如表5-1所示。表5-1存取控制矩陣矩陣中的每個元素都規(guī)定了用戶對該文件的存取權限。例如,用戶陳華對圖書管理文件可以進行讀(R)、寫(W)和執(zhí)行(E)操作,而對工資表文件只能讀,對貨價文件不能訪問(N)。

如果某個用戶向文件系統(tǒng)申請存取操作,系統(tǒng)中的存取控制驗證模塊根據(jù)存取控制矩陣,把用戶的存取請求同允許他存取的文件進行比較。如果它們不匹配,就不允許進行存取操作,否則就可以進行相應的操作。存取控制矩陣的原理很簡單,實現(xiàn)起來也不難,而且可以把權限規(guī)定得很細,但當用戶和文件都很多時,n×m矩陣需要占用大量的存儲空間。例如,如果文件系統(tǒng)有5000個核準的用戶和約3000個聯(lián)機文件,二維矩陣就要5000×3000個項,這樣多的項將占去大量的存儲空間,另外,查找這樣大的表不僅不方便,而且還將浪費大量的時間。

(2)文件存取控制表。這種方法首先將用戶分成組,然后為每個組建立一個存取權限控制表,表中記錄各用戶組擁有的訪問權限。多個用戶對同一個文件可能具有相同的存取權限,可把這些用戶按工程項目或某種關系分成若干組。于是把具有同一存取權限的同一類型的用戶分為一組,而把不具有存取權限的用戶統(tǒng)統(tǒng)歸入“其他”組。如表5-2所示。對于某些公共文件,它允許所有用戶享有某種存取權限,則可采用表5-3所示的存取控制表。因為多數(shù)用戶都只具有選擇性很強的共享,所以存取控制表往往都很短。但是一個文件被許多用戶共享時,存取控制表也很長。如果每個文件都另設一張文件存取控制表,則又會增加系統(tǒng)空間開銷。表5-2選擇性共享控制表表5-3普遍共享控制表

(3)分權至目錄。在樹形目錄中,可以把存取權限指定給目錄,如果用戶不能訪問該目錄,則不能訪問該目錄下的任何子目錄和文件。目錄是不能被執(zhí)行的,而且出于安全和完整性考慮,用戶也不能向目錄文件寫數(shù)據(jù)。因此,目錄的寫權限和執(zhí)行權限有特別的含義。用戶擁有目錄的寫權限,意味著可以在該目錄下建立、刪除或修改文件;用戶擁有目錄的執(zhí)行權限,意味著可以訪問該目錄下的指定文件或子目錄。讀權限的意義與普通文件的情形相似,即可以控制目錄的內容是否被列出。具體地說,建立目錄時要有寫權限,列目錄時要有讀權限,而把一個目錄作為用戶的當前目錄時,要有執(zhí)行權限。

2.文件保密

常用的文件保密方法有口令和加密。

(1)文件口令。為了保證文件的安全所采取的另一種比較簡單的保密措施是“口令”。文件主在創(chuàng)建高度機要的文件時,指定一個文件口令(即加密字符串)。該口令保存在文件屬性表中或系統(tǒng)專用的保密區(qū)域。每當打開該文件時,系統(tǒng)核對用戶給出的文件口令,只有口令相符時才允許訪問。為防止口令泄漏,系統(tǒng)會定期提醒文件主更改口令。這種方法的優(yōu)點是:系統(tǒng)為每個文件提供保護信息,并且只占用少量的存儲空間,實現(xiàn)起來方便,易于管理。因此,這種方法在各種操作系統(tǒng)上得到了廣泛的應用。其缺點是:當文件經(jīng)過一定時間,要回收某個用戶的使用權時,必須更改口令,而更改后的新口令又必須通知它所允許使用的用戶,這對用戶很不方便。

(2)文件加密。文件的加密是在文件寫入時秘密進行的,讀出時需對寫入的編碼進行解密。加密和解密都由系統(tǒng)中的存取控制驗證模塊完成,但發(fā)請求的用戶要提供一個加密鍵,用戶可根據(jù)情況改變這個加密鍵。信息加密的方法有許多種,其中一種簡單的加密方法是,把加密鍵作為生成一串相繼隨機數(shù)的起始碼,加密程序把相繼的隨機數(shù)加到被加密文件的字節(jié)中;解密時,用和加密時相同的加密鍵來啟動隨機數(shù)發(fā)生器,并從存入的文件中依次減去所得到的隨機數(shù),這樣就得到了原來的數(shù)據(jù)。因為只有核準的用戶才知道用戶提供的加密鍵,所以他才可以正確地訪問文件。在這種方法中,因為加密鍵不存放在系統(tǒng)中,只是用戶需要存取文件時,才需給出加密鍵。這樣,系統(tǒng)中就沒有那種可由不誠實的系統(tǒng)程序員能讀出的表,他也無法找到各個文件的加密鍵,因而也就不能偷竊或篡改別人的文件。加密技術雖然具有保密性強、節(jié)省存儲空間等優(yōu)點,但需要耗費大量加密和解密時間。

5.7文件操作

在操作系統(tǒng)中,用戶最直接可見、打交道最頻繁的就是文件系統(tǒng)。文件系統(tǒng)必須向用戶提供各種對文件的操作。文件操作是指以文件或文件目錄為對象實施的操作,如建立文件或目錄、撤消文件或目錄、讀/寫文件等。用戶使用操作系統(tǒng)提供的文件操作功能就可以建立自己所需的文件,在處理文件時可以把信息寫入文件或從文件中讀取信息。為了使用戶能夠方便、有效地使用文件,文件系統(tǒng)對用戶提供了文件操作的統(tǒng)一接口,或稱用戶界面。用戶通過這個接口向系統(tǒng)發(fā)出各種使用文件的請求,系統(tǒng)接受用戶的請求后,通過內部的程序和數(shù)據(jù)結構完成用戶指定的操作。文件系統(tǒng)對用戶的接口有兩種形式:操作命令和系統(tǒng)調用。操作命令是文件系統(tǒng)的命令級接口,用戶可以使用鍵盤鍵入操作命令來操作和管理文件。例如,對于MS-DOS,用戶可以鍵入dir、cop、delete等命令來執(zhí)行查看文件目錄、復制文件和刪除文件等操作。系統(tǒng)調用又稱系統(tǒng)調用命令,它們是文件系統(tǒng)的程序級接口,用戶可以在程序中使用這些系統(tǒng)調用對文件實施各種操作。不同文件系統(tǒng)提供的文件操作系統(tǒng)調用的數(shù)量和功能可能不同,但它們通常都包括建立文件、打開文件、關閉文件、撤消文件、讀文件、寫文件六種最基本的文件操作系統(tǒng)調用命令。5.7.1建立文件

當用戶需要把某些信息作為文件存放在文件系統(tǒng)中時,可以使用系統(tǒng)提供的建立文件的系統(tǒng)調用。建立文件系統(tǒng)調用的一般形式為

CREAT(文件名,文件屬性)

文件名包括文件所在目錄的路徑。文件屬性主要指文件長度、記錄長度、操作屬性、存取權限等。建立文件系統(tǒng)調用的功能是在指定的目錄中按照指定的文件名建立一個具有指定屬性的文件,由系統(tǒng)完成的主要操作是:

(1)按給定的路徑查文件目錄,找出用戶指定的目錄位置,檢查目錄上是否存在同名文件,若存在則發(fā)出錯誤信息。

(2)在指定的目錄中找一空表項作為該文件的目錄項,寫入指定的文件名。

(3)由文件長度確定文件存儲所需的物理塊數(shù)。

(4)調用存儲分配程序按規(guī)定的物理結構為文件分配存儲空間。對于連續(xù)文件,按文件長度預分配一個連續(xù)的存儲空間。對索引文件,先分配索引表用的物理塊。對于非連續(xù)結構的文件,在實際進行寫操作時再分配物理塊。

(5)在該文件目錄項中寫入文件屬性、文件的物理塊首地址等。

一個文件建立后,只要用戶命令撤消它,就一直存放于文件系統(tǒng)中。

在有些文件系統(tǒng)中,建立文件的功能隱含在“寫文件”操作中。在用戶提出向文件寫入信息時,若系統(tǒng)發(fā)現(xiàn)要寫入的文件并不存在,則自動地建立該文件,然后再寫入信息。5.7.2打開文件

為了避免用戶在每次訪問文件時從外存中查找目錄,減少CPU額外開銷和I/O信息量,文件系統(tǒng)設置了打開文件的命令。打開文件操作的功能是建立起用戶進程與該文件的聯(lián)系,為進程隨后對文件的操作做好準備,即在內存建立文件控制塊,并把它組織到系統(tǒng)活動文件表和進程活動文件表中。

打開文件系統(tǒng)調用的一般形式為

OPEN(文件名)系統(tǒng)完成此系統(tǒng)調用執(zhí)行的主要操作是:

(1)根據(jù)所給文件路徑和文件名查找文件目錄,若找到返回該文件的內部代號,否則說明該文件不存在,發(fā)出錯誤信息。

(2)在系統(tǒng)活動文件表中查看是否存在該文件的表項,若存在,說明該文件已被其他進程打開,則把文件控制塊中的“共享計數(shù)”加1。

(3)若系統(tǒng)文件表中無此文件,則為該文件分配一個空表項建立文件控制塊,并從外存文件說明中把有關信息復制到文件控制塊中。

(4)把系統(tǒng)活動文件表中該文件的控制塊首地址登記到進程活動文件表中。

文件只有在打開后,才能進行讀/寫操作。而且文件一經(jīng)打開可以進行任意次數(shù)的讀/寫操作,直到文件關閉為止。在有些操作系統(tǒng)中,也可以通過讀/寫操作隱含地向系統(tǒng)提出打開文件的要求。5.7.3讀文件

文件打開后,進程就可以對它進行讀/寫操作。文件的讀和寫是文件系統(tǒng)最基本的操作。讀文件操作就是把外存中文件的信息讀入到內存用戶區(qū),以便對它們進行各種加工和處理。不同操作系統(tǒng)以及對不同結構的文件,讀文件系統(tǒng)調用的格式不同,其一般形式為

READ(文件名,M,N,L)

其中,M是存放讀入信息的內存首址;在記錄式文件中N是起始邏輯記錄號;L是要讀取的記錄數(shù)。在流式文件中N是起始字節(jié)位置,L是要讀取的字節(jié)長度。系統(tǒng)執(zhí)行讀文件系統(tǒng)調用的主要操作是:

(1)按文件名查內存中的系統(tǒng)活動文件表,若無該文件對應的表項,則說明文件尚未打開,返回錯誤信息。

(2)在活動文件表中得到該文件的管理信息。

(3)驗證文件的存取權限,確認用戶讀此文件的合法性。

(4)確定系統(tǒng)調用參數(shù)中由文件名和N指出的信息在存儲設備上的物理地址。

(5)由設備管理程序將文件信息從外存讀入到參數(shù)M所指定的內存區(qū)域中。5.7.4寫文件

當用戶要求修改、添加或更新文件中的信息時,可以使用“寫文件”系統(tǒng)調用。

寫文件操作是把內存用戶區(qū)中的一段信息寫到指定的文件中。它是“讀文件”操作的逆過程。寫文件系統(tǒng)調用的一般形式為

WRITE(文件名,M,N,L)

其中,各參數(shù)的含義與“讀文件”系統(tǒng)調用相同。系統(tǒng)執(zhí)行寫文件系統(tǒng)調用的主要操作是:

(1)按文件名查系統(tǒng)活動文件表,若無該文件對應的表項,則說明文件尚未打開,返回錯誤信息。

(2)在活動文件表中得到該文件的管理信息。

(3)驗證文件的存取權限,確認用戶對此文件寫操作的合法性。

(4)在外存空間分配足夠的空閑物理塊。

(5)由設備管理程序將文件信息從參數(shù)M指定的內存區(qū)域寫入到外存中。

從以上讀/寫操作的執(zhí)行過程中可以看到,在對文件進行讀取或寫入之前系統(tǒng)要檢驗文件的存取權限,以此確定進程是否有權訪問該文件,是否可以對文件進行讀或寫操作。

這些檢驗操作是系統(tǒng)對文件信息實施的保護措施。5.7.5關閉文件

若文件暫時不用,用戶應該把它關閉,即切斷用戶與該文件的聯(lián)系。文件關閉后就不能再存取,除非重新打開它。關閉文件是打開文件的逆操作,關閉文件系統(tǒng)調用的一般形式為

CLOSE(文件名)系統(tǒng)完成此系統(tǒng)調用執(zhí)行的主要操作是:

(1)在系統(tǒng)活動文件表中找到該文件占用的表項。

(2)把文件的“共享計數(shù)”減1。

(3)若“共享計數(shù)”減1后為0,則檢查該文件的控制塊的有關內容是否被修改過,若修改過則把它們寫到外存中文件說明相應表項中。然后撤消內存該文件的控制塊,并把該文件在系統(tǒng)活動文件表中占用的表項置為空表項。5.7.6刪除文件

當一個文件不再使用時,用戶應使用刪除操作把它從文件系統(tǒng)中刪除。一個文件在刪除之前應先執(zhí)行關閉文件操作。刪除文件系統(tǒng)調用的一般形式為

DELETE(文件名)系統(tǒng)完成刪除文件系統(tǒng)調用的主要操作是:

(1)清除用戶文件目錄中的相應目錄項。

(2)若此文件在另一文件上建立了鏈接關系,首先要撤消鏈接關系,將另一文件中的“鏈接計數(shù)”減1。

(3)只有當一個文件的“共享計數(shù)”為0且“鏈接計數(shù)”為0時,該文件才能被刪除。

(4)釋放被刪除文件占用的外存空間。

5.8Linux文件系統(tǒng)

文件系統(tǒng)是Linux操作系統(tǒng)的重要組成部分,Linux最早的文件系統(tǒng)是Minix,但是專門為Linux設計的文件系統(tǒng)——擴展文件系統(tǒng)第二版或EXT2被設計出來并添加到Linux中,這對Linux產(chǎn)生了重大影響。EXT2文件系統(tǒng)功能強大、易擴充、性能上進行了全面優(yōu)化,也是現(xiàn)在Linux發(fā)布和安裝的標準文件系統(tǒng)類型。每個實際文件系統(tǒng)從操作系統(tǒng)和系統(tǒng)服務中分離出來,它們之間通過一個接口層,即虛擬文件系統(tǒng)(VirtualFileSystem,VFS)來通信。VFS使得Linux可以支持多個不同的文件系統(tǒng),每個表示一個VFS的通用接口。由于軟件將Linux文件系統(tǒng)的所有細節(jié)進行了轉換,因此Linux核心的其他部分及系統(tǒng)中運行的程序將看到統(tǒng)一的文件系統(tǒng)。虛擬文件系統(tǒng),說它虛擬是因為它所有的數(shù)據(jù)結構都是在系統(tǒng)運行以后才建立,并在系統(tǒng)卸載時撤消,在系統(tǒng)磁盤上并沒有存儲這些數(shù)據(jù)結構。顯然如果只有VFS,系統(tǒng)是無法工作的,VFS只有與實際的文件系統(tǒng)相結合,才能進行工作,所以VFS并不是一個真正的文件系統(tǒng)。

Linux支持多種不同類型的實際的文件系統(tǒng),目前支持的有ext、ext2、Minix、hpfs、MS-DOS、vfbt、proc和sysv等。Linux不僅支持多種文件系統(tǒng),而且還支持這些文件系統(tǒng)相互之間的訪問,這一切都要歸功于Linux的虛擬文件系統(tǒng)。本節(jié)將介紹Linux的虛擬文件系統(tǒng)和一個邏輯文件系統(tǒng)ext2。5.8.1虛擬文件系統(tǒng)

Linux中允許眾多不同的文件系統(tǒng)共存,如ext2、ext3、vfat等。通過使用同一套文件I/O系統(tǒng)調用,即可對Linux中的任意文件進行操作而無需考慮其所在的具體文件系統(tǒng)格式。更進一步,Linux還支持跨文件系統(tǒng)的文件操作,即對文件的操作可以跨文件系統(tǒng)執(zhí)行。如圖5.13所示,可以使用CP命令從vfat文件系統(tǒng)格式的硬盤拷貝數(shù)據(jù)到ext3文件系統(tǒng)格式的硬盤,而這樣的操作涉及到兩個不同的文件系統(tǒng),而虛擬文件系統(tǒng)正是實現(xiàn)上述Linux的兩個特性的關鍵所在。圖5.13跨文件系統(tǒng)的文件操作虛擬文件系統(tǒng)是Linux內核中的一個軟件抽象層,它一方面用于給用戶空間的程序提供文件系統(tǒng)接口;另一方面,它還提供了內核中的一個抽象功能,它通過一些數(shù)據(jù)結構及其方法向實際的文件系統(tǒng)如ext2、vfat提供接口機制,使得不同的文件系統(tǒng)在Linux中共存。系統(tǒng)中所有的文件系統(tǒng)不但依賴VFS共存,而且也依靠VFS協(xié)同工作。為了能夠支持各種實際文件系統(tǒng),VFS定義了所有文件系統(tǒng)都支持的基本的、概念上的接口和數(shù)據(jù)結構,如超級塊、inode、文件操作函數(shù)入口等。同時,實際文件系統(tǒng)也提供了VFS所期望的抽象接口和數(shù)據(jù)結構,將自身的如文件、目錄等概念在形式上與VFS的定義保持一致。換句話說,一個實際的文件系統(tǒng)想要被Linux支持,就必須提供一個符合VFS標準的接口,才能與VFS協(xié)同工作。實際上文件系統(tǒng)在統(tǒng)一的接口和數(shù)據(jù)結構下隱藏了具體的實現(xiàn)細節(jié),所以在VFS層和內核的其他部分看來,所有文件系統(tǒng)都是相同的。嚴格說來,VFS并不是一種實際的文件系統(tǒng),它僅是一套轉換機制,僅存在于內存中,不存在于任何外存空間。VFS在系統(tǒng)初啟時建立,在系統(tǒng)關閉時消失。圖5.14顯示了VFS在內核中與實際的文件系統(tǒng)的協(xié)同關系。圖5.14VFS在內核中與實際文件系統(tǒng)的協(xié)同關系

1.VFS的功能

VFS的功能包括:

(1)記錄可用的文件系統(tǒng)的類型;

(2)將設備同對應的文件系統(tǒng)聯(lián)系起來;

(3)處理一些面向文件的通用操作;

(4)涉及針對文件系統(tǒng)的操作時,VFS把它們映射到與控制文件、目錄以及inode相關的物理文件系統(tǒng)。

當某個進程發(fā)出了一個面向文件的系統(tǒng)調用時,內核將調用VFS中相應的函數(shù)。這個函數(shù)處理一些與物理結構無關的操作,并且把它重定向為真實文件系統(tǒng)中相應的函數(shù)調用,后者則用來處理那些與物理結構相關的操作。

2.VFS數(shù)據(jù)結構

Linux虛擬文件系統(tǒng)的通用文件模型由下列代表對象類型的數(shù)據(jù)結構組成。

(1)超級塊數(shù)據(jù)結構(SuperBlockObject):存放已安裝文件系統(tǒng)的相關信息。如果是基于磁盤的文件系統(tǒng),該結構通常對應于存放在磁盤上的文件系統(tǒng)控制塊。

(2)索引節(jié)點數(shù)據(jù)結構(InodeObject):存放一個具體文件的所有信息。如果是基于磁盤的文件系統(tǒng),該結構通常對應于存放在磁盤上的文件控制塊。每個索引節(jié)點對象分配一個索引節(jié)點號,用它來指示文件系統(tǒng)中的指定文件。

(3)目錄項數(shù)據(jù)結構(DentryObject):保存目錄項與對應文件進行鏈接的所有信息。內核把最近且最常使用的目錄項對象放在目錄項高速緩存中,加快文件路徑名的轉化過程,以提高系統(tǒng)性能。

(4)文件數(shù)據(jù)結構(FileObject):存放打開文件與進程之間進行交互的有關信息。這類信息是進程訪問文件時所使用的。

VFS依靠這四個主要的數(shù)據(jù)結構和一些輔助的數(shù)據(jù)結構來描述其結構信息,這些數(shù)據(jù)結構表現(xiàn)得就像是對象。每個主要對象中都包含由操作函數(shù)表構成的操作對象,這些操作對象描述了內核針對這幾個主要的對象可以進行的操作。

(1)?VFS超級塊。VFS超級塊用于存儲一個已安裝的文件系統(tǒng)的控制信息,代表一個已安裝的文件系統(tǒng)。每次安裝一個實際的文件系統(tǒng)時,內核會從該文件系統(tǒng)所在磁盤的特定位置讀取一些控制信息來填充內存中的超級塊。其作用是把在各種文件系統(tǒng)中的表示整體組織結構的信息轉換成統(tǒng)一格式,其中包括一個物理文件系統(tǒng)的組織結構、物理塊尺寸和使用情況、時間信息等。一個安裝實例和一個超級塊一一對應。超級塊通過其結構中的一個域s_type記錄它所屬的文件系統(tǒng)類型。VFS超級塊是在文件系統(tǒng)安裝時由系統(tǒng)在內存中建立的,對于每種已安裝的文件系統(tǒng),在內存中都有與其對應的VFS超級塊。各種文件系統(tǒng)的VFS超級塊都是一個super_block結構體,它包含的成員項表示各種物理文件系統(tǒng)具有共性的整體組織結構信息,它們是從各種文件系統(tǒng)的結構特性中抽象出來的。各文件系統(tǒng)VFS超級塊中各成員項的數(shù)據(jù)來自該文件系統(tǒng)本身的管理信息結構。這些數(shù)據(jù)是在文件系統(tǒng)安裝時,由讀超級塊例程readsuper()把某種文件系統(tǒng)的管理信息寫入它的VFS超級塊中。

VFS超級塊super_block結構體在include/fs/fs.h中定義,如下所示:structsuper_block{

kdev_t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論