版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第五章 文件系統(tǒng),5.1 文件系統(tǒng)概述 5.2 文件的結(jié)構(gòu)和存取法 5.3 文件目錄 5.4 文件存儲空間的管理 5.5 文件的共享 5.6 文件的存取控制 5.7 文件系統(tǒng)和用戶間的接口,5.1 文件系統(tǒng)概述,5.1.1 文件和文件系統(tǒng),1. 文件,文件(File)是一個具有符號名的一組相關(guān)聯(lián)元素的有序序列。 文件可以包含范圍非常廣泛的內(nèi)容。系統(tǒng)和用戶都可以將具有一定獨(dú)立功能的程序模塊、一組數(shù)據(jù)或一組文字命名為一個文件。例如用戶的一個Pascal源程序、 一個目標(biāo)代碼程序、系統(tǒng)中的庫程序和各種系統(tǒng)程序、一批待加工處理的數(shù)據(jù)、一篇文章等等,都可構(gòu)成一個文件。,2. 文件系統(tǒng) 操作系統(tǒng)中負(fù)責(zé)管理
2、和存取文件信息的軟件機(jī)構(gòu)稱為文件管理系統(tǒng), 簡稱文件系統(tǒng)。文件系統(tǒng)由三部分組成:與文件管理有關(guān)的軟件、被管理的文件以及實(shí)施文件管理所需的數(shù)據(jù)結(jié)構(gòu)。 從系統(tǒng)角度來看,文件系統(tǒng)是對文件存儲器的存儲空間進(jìn)行組織和分配,負(fù)責(zé)文件的存儲并對存入的文件進(jìn)行保護(hù)和檢索的系統(tǒng)。具體地說,它負(fù)責(zé)為用戶建立文件,存入、讀出、修改、 轉(zhuǎn)儲文件, 控制文件的存取, 當(dāng)用戶不再使用時撤消文件等。,在操作系統(tǒng)中增設(shè)了文件管理部分后, 為用戶帶來了如下好處:,使用的方便性: (2) 數(shù)據(jù)的安全性: (3) 接口的統(tǒng)一性:,5.1.2 文件的類型 為便于文件的控制和管理,通常把文件分成若干類型。 文件按其性質(zhì)和用途可以分為:
3、 (1) 系統(tǒng)文件:有關(guān)操作系統(tǒng)及其它系統(tǒng)程序的信息所組成的文件。這類文件對用戶不直接開放,只能通過系統(tǒng)調(diào)用為用戶服務(wù)。 (2) 庫文件:由標(biāo)準(zhǔn)子程序及常用的應(yīng)用程序組成的文件。 這類文件允許用戶調(diào)用,但不允許用戶修改。 (3) 用戶文件:由用戶委托操作系統(tǒng)保存的文件,如源程序文件,目標(biāo)程序文件,以及由原始數(shù)據(jù)、計(jì)算結(jié)果等組成的文件。,這類文件根據(jù)使用情況又可以分為三種類型: 臨時文件:用戶在一次算題過程中建立的“中間文件”。 當(dāng)用戶撤離系統(tǒng)時,其文件也隨之被撤消。 檔案文件:只保存在作為檔案的磁帶上, 以便考證和恢復(fù)用的文件, 如日志文件。 永久文件:用戶要經(jīng)常使用的文件。 它不僅在磁盤上有
4、文件副本, 而且在“檔案”上也有一個可靠的副本。,根據(jù)文件的保護(hù)方式,文件可分為三類: (1) 只讀文件:允許文件主及核準(zhǔn)的用戶讀, 但不允許寫的文件。 (2) 讀寫文件:允許文件主及核準(zhǔn)的用戶讀、 寫, 但禁止未核準(zhǔn)的用戶讀、寫的文件。 (3) 不保護(hù)文件: 所有用戶都可以存取的文件。,按文件信息的流向,它又可分為三類: (1) 輸入文件: 例如鍵盤輸入文件, 只能輸入。 (2) 輸出文件: 例如打印機(jī)文件, 只能輸出。 (3) 輸入輸出文件: 在磁盤、 磁帶上的文件, 既可讀, 又可寫。,在UNIX操作系統(tǒng)中,文件按組織和處理方式分為三類: (1) 普通文件:由內(nèi)部無結(jié)構(gòu)的一串平滑的字符構(gòu)
5、成的文件。 這種文件既可以是系統(tǒng)文件,也可以是庫文件或用戶文件。 (2) 目錄文件: 由文件目錄構(gòu)成的一類文件。 對它的處理(讀、 寫、 執(zhí)行)在形式上與普通文件相同。 (3) 特別文件:由一切輸入輸出慢速字符設(shè)備構(gòu)成的文件。 這類文件對于查找目錄、存取權(quán)限驗(yàn)證等的處理與普通文件相似,而其它部分的處理要針對設(shè)備特性要求做相應(yīng)的特殊處理。,5.1.3 文件系統(tǒng)的基本功能,操作系統(tǒng)中的文件管理部分應(yīng)具有如下功能: (1) 文件的結(jié)構(gòu)及有關(guān)存取方法; (2) 文件的目錄機(jī)構(gòu)和有關(guān)處理; (3) 文件存儲空間的管理; (4) 文件的共享和存取控制; (5) 文件操作和使用。,5.2 文件的結(jié)構(gòu)和存取法
6、,5.2.1 文件的邏輯結(jié)構(gòu),圖 5.1 記錄式文件 (a) 定長記錄文件; (b) 變長記錄文件,5.2.2 文件的物理結(jié)構(gòu),1. 連續(xù)結(jié)構(gòu),圖 5.2 連續(xù)結(jié)構(gòu)文件,2. 串聯(lián)結(jié)構(gòu),圖 5.3 串聯(lián)結(jié)構(gòu)文件,3. 索引文件,圖 5.4 索引結(jié)構(gòu)文件,圖 5.5 按串聯(lián)文件方式組織索引表塊,圖 5.6 按多重索引方式組織索引表塊,圖 5.7 UNIX系統(tǒng)的多重索引結(jié)構(gòu),4. Hash文件 文件的物理結(jié)構(gòu)的另一種組織方式是采用計(jì)算尋址結(jié)構(gòu)。在這種方式中,把記錄中的鍵值通過某種計(jì)算,轉(zhuǎn)換為相應(yīng)記錄的相應(yīng)地址。一般說來,由于地址的總數(shù)比可能的鍵值總數(shù)(范圍)要少得多,也就是不會出現(xiàn)一一對應(yīng)的關(guān)系。
7、因此,不同鍵值在計(jì)算之后,可能會得到相同的地址,這種現(xiàn)象稱為“地址沖突”。所謂計(jì)算尋址,就是通常所說的Hash方法,或稱散列法, 雜湊法。利用這種方法所建立的文件稱為Hash文件。這種物理結(jié)構(gòu)用在不宜采用連續(xù)結(jié)構(gòu)、記錄次序較亂、又需在極短時間內(nèi)存取的場合,如用在實(shí)時處理文件、操作系統(tǒng)目錄文件、編譯程序變量名表等方面特別有效。此外,又不需索引,從而節(jié)省了索引表所占的空間和索引表的查找時間。 解決地址沖突的辦法叫溢出處理技術(shù),這是設(shè)計(jì)Hash文件需要考慮的主要內(nèi)容, 用的溢出處理技術(shù)有:順序探索法、二次散列法、 拉鏈法、獨(dú)立溢出區(qū)法等。,5.2.3 文件的存取方法,所謂文件的存取方法,是指讀寫文件
8、存儲器上的一個物理塊的方法,通常有兩類存取方法:順序存取法和直接存取法。 1. 順序存取法 在提供記錄式文件結(jié)構(gòu)的系統(tǒng)中,順序存取法就是嚴(yán)格按物理記錄排列的順序依次存取。如果當(dāng)前存取的記錄為Ri,則下次要存取的記錄自動地確定為Ri+1。在只提供無結(jié)構(gòu)的流式文件系統(tǒng)中,順序存取法按讀寫位移(offset)從當(dāng)前位置開始讀寫,即每讀寫完一段信息后,讀寫位移自動加上這段的長度,然后再根據(jù)該位移讀寫下面的信息。,如圖 5.1 所示,對于順序文件, 如果知道了當(dāng)前記錄的地址,則很容易確定下一個要存取的記錄的地址。例如,設(shè)置一個讀指針rptr,令它總是指向“下一次”要讀出的記錄首址。當(dāng)該記錄讀出后,對rp
9、tr進(jìn)行相應(yīng)的修改。對于定長記錄,rptr修改為rptr=rptr+L 其中L為文件的物理記錄長。此時rptr指向下一次要讀出的記錄首址。對于變長記錄文件,首先根據(jù)rptr讀出存放記錄長Li的單元,然后根據(jù)記錄長度讀出當(dāng)前記錄。此時對rptr作如下修改: rptr=rptr+Li+l ,其中l(wèi)是存放記錄長度Li的字節(jié)數(shù)。例如用 2 個字節(jié)存放Li, 則l=2。,類似地,設(shè)置寫指針,則對定長記錄文件的修改為 wptr=wptr+L 對于變長記錄文件的修改為 wptr=wptr+Li+l,2. 直接存取法 直接存取法允許用戶隨意存取文件中的任何一個物理記錄,而不管上次存取了哪一個記錄。在無結(jié)構(gòu)的流
10、式文件中,直接存取法必須事先用必要的命令把讀寫位移移到欲讀寫的信息開始處,然后再進(jìn)行讀寫。 對于定長記錄文件,這是很方便的。欲讀寫第i個記錄(i=0, 1, 2, )的首址為 rptr=offset+i*L wptr=offset+i*L 其中,offset是該文件的首址,即R0的首址,在邏輯上可認(rèn)為offset=0;L為記錄長度。,3. 按鍵存取法 按鍵存取法,實(shí)質(zhì)上也是直接存取法, 它不是根據(jù)記錄編號或地址來存取的,而是根據(jù)文件中各記錄內(nèi)容進(jìn)行存取的。 適用于這種存取方法的文件組織形式也與順序文件不同,它是按邏輯記錄中的某個數(shù)據(jù)項(xiàng)的內(nèi)容來存放的, 這種數(shù)據(jù)項(xiàng)通常稱為“鍵”。這種根據(jù)鍵而不是
11、根據(jù)記錄號進(jìn)行存取的方法, 稱為按鍵存取法。,5.2.4 文件結(jié)構(gòu)、文件存儲設(shè)備和存取法的關(guān)系,表 5 - 1 文件結(jié)構(gòu)、 存儲設(shè)備和存取方法之間的關(guān)系,5.3 文件目錄,5.3.1 簡單的文件目錄,表 5 - 2 簡單的文件目錄,1. 文件說明及其所含信息,1) 有關(guān)文件結(jié)構(gòu)的信息 (1) 文件的邏輯結(jié)構(gòu):記錄是否為定長, 記錄長度,記錄個數(shù); (2) 文件的物理結(jié)構(gòu): 如果是連續(xù)文件或串聯(lián)文件,要指出該文件的第一個物理塊號; 如果文件是索引文件,則應(yīng)給出索引表所在的塊號, 或者把索引表包括在目錄項(xiàng)中。,2) 有關(guān)存取控制信息 (1) 文件主本人所具有的存取權(quán)限(讀寫和執(zhí)行); (2) 文件
12、主同組用戶的存取權(quán)限; (3) 其它用戶的存取權(quán)限。 3) 有關(guān)管理方面的信息 (1) 文件建立的日期和時間; (2) 上次存取的日期和時間; (3) 文件要求保留時間。,2. 簡單目錄結(jié)構(gòu)的缺陷 (1) 存在“重名”問題。在簡單的文件目錄結(jié)構(gòu)中, 文件名和文件實(shí)體之間存在著一一對應(yīng)關(guān)系,即它不允許兩個文件具有相同的名字。在多道程序系統(tǒng)中,尤其是多用戶的分時系統(tǒng)中, 重名是很難避免的,這就很難準(zhǔn)確地找到用戶所需要的文件。 顯然,如果由人工來管理文件名注冊, 以避免命名沖突, 則是很麻煩的。 (2) 當(dāng)系統(tǒng)文件數(shù)量過多時,目錄項(xiàng)數(shù)就會很大,查找起來就要花費(fèi)較長的時間。解決上述問題的方法是建立二級
13、或多級目錄。,5.3.2 二級目錄,圖 5.8 二級目錄結(jié)構(gòu),5.3.3 多級目錄,1. 多級樹型目錄,圖 5.9 多級樹型目錄結(jié)構(gòu),在根目錄之下, 包含如下子目錄: lib 庫文件子目錄 etc 附加的程序和數(shù)據(jù)文件子目錄 dev 設(shè)備子目錄 tmp 臨時文件子目錄 usr 用戶子目錄 bin 實(shí)用程序子目錄 UNIX UNIX子目錄(包括操作系統(tǒng)核心程序) include 基本數(shù)據(jù)子目錄 根目錄和子目錄都是文件, 稱為目錄文件。,2. 絕對路徑和相對路徑 在樹型目錄結(jié)構(gòu)中,文件名有兩種表示方法: 絕對路徑名和相對路徑名。 從根開始到達(dá)文件的路徑, 稱為絕對路徑。 例如, 文件prog.c的
14、絕對路徑名為/usr/user/u/c/prog.c 它表示根目錄中有子目錄usr, usr中有子目錄user,在user子目錄下有一子目錄lu,lu下的一個文件是prog.c。絕對路徑名總是從根目錄開始, 并且是唯一的。 在UNIX中,路徑各部分之間用“/”分隔。在MS-DOS中,其分隔符是“”,不管使用什么分隔符,如果路徑名的第一個字符是分隔符,那么這個路徑就是絕對路徑。,另一種文件名表示法稱為相對路徑名。 它常和工作目錄(也稱當(dāng)前目錄)的概念一起使用。用戶可以指定一個目錄作為當(dāng)前的工作目錄。這時,所有的路徑名,如果不是從根目錄開始,則都是相對于工作目錄的。例如,如果當(dāng)前的工作目錄是/us
15、r/user/lu,則絕對路徑名為/usr/user/lu/prog.c的文件可以簡單地用prog.c來引用。 大多數(shù)支持樹型結(jié)構(gòu)的操作系統(tǒng), 在每個目錄中有兩個特殊的目錄項(xiàng)“”和“”,通常讀作“點(diǎn)”和“點(diǎn)點(diǎn)”。 “點(diǎn)”指當(dāng)前目錄, “點(diǎn)點(diǎn)”指其父目錄。 在圖 5.9 中,若某進(jìn)程的工作目錄為/usr/user/lu, 它可以使用“”沿樹向上到達(dá)其父目錄/user。該進(jìn)程使用路徑名 /xu/mailbox 訪問子目錄xu下的文件mailbox。,5.3.4 文件目錄項(xiàng)的組織,1. CP/M中的目錄項(xiàng),圖 5.10 CP/M目錄項(xiàng)的內(nèi)容,2. MS-DOS中的目錄項(xiàng),圖 5.11 MS-DOS的
16、目錄項(xiàng),3. UNIX中的目錄項(xiàng),UNIX中使用的目錄結(jié)構(gòu)非常簡單, 每個目錄項(xiàng)僅包含一個文件名及其i節(jié)點(diǎn)號, 即,圖 5.12 查找/usr/ast/mbox的過程,5.4 文件存儲空間的管理,5.4.1 空白文件目錄,表 5 - 3 空白文件目錄例,5.4.2 空白塊鏈,如果采用非連續(xù)結(jié)構(gòu),則可將所有空白塊用鏈接指針或索引結(jié)構(gòu)把它們組織成一個空白文件。采用鏈接結(jié)構(gòu)時,釋放和分配的空白塊都可以在鏈?zhǔn)滋庍M(jìn)行,其主要問題是要修改幾個有關(guān)的鏈接字。這種方法只要求在主存中保存一個指針,令它指向第一個空白塊。當(dāng)修改鏈接字時,要讀幾個盤塊,工作量較大。 如果采用索引表,則只需修改索引表中幾個有關(guān)項(xiàng),但是
17、索引表占用的存儲空間較大, 對系統(tǒng)來說也是負(fù)擔(dān)。 UNIX文件系統(tǒng),采用了一種改進(jìn)的辦法,即空白塊成組鏈接法。,5.4.3 位示圖(Bit Map),圖 5.13 位示圖例,假定磁盤的塊長=1 KB,對于 200 MB的磁盤需有 200 K位來映射,即需要 2001024/8=51 200字節(jié),即 51 200/1024=25個物理塊來構(gòu)成一個位示圖。,5.4.4 MS-DOS的盤空間的管理,圖 5.14 MS-DOS中的FAT表,5.4.5 UNIX文件存儲空間的管理,在UNIX系統(tǒng)中文件存儲介質(zhì)可采用磁盤或磁帶。 通常把每個磁盤或磁帶視為一個文件卷,在每個文件卷上可以存放一個具有獨(dú)立目錄結(jié)
18、構(gòu)的文件系統(tǒng)。一個文件卷包含許多物理塊。 其中,0塊為引導(dǎo)塊,用于引導(dǎo)操作系統(tǒng);1塊為資源管理塊,也稱超級塊,用于存放文件卷的資源管理信息,為便于管理在內(nèi)存中有其副本。從2塊起存放磁盤索引節(jié)點(diǎn)(inode)塊, 其塊數(shù)由文件系統(tǒng)的大小決定,在索引節(jié)點(diǎn)塊之后是一般的數(shù)據(jù)塊。 在資源管理塊中用于一般數(shù)據(jù)塊管理的項(xiàng)主要有: s-nfree: 當(dāng)前在此登記的空閑盤塊數(shù), 最多為 50; s-free50:當(dāng)前在此登記的空閑盤塊號。,1. 空閑盤塊的分組 UNIX系統(tǒng)采用空閑塊成組鏈接法對盤空間進(jìn)行管理。該方法首先把文件存儲器中的所有空閑塊按固定數(shù)量(一般為50塊)劃分為若干組。組的劃分方法是從后往前順
19、序劃分,每組50塊。 每組的第一塊用來存放前一組中各塊的塊號和塊數(shù)。由于第一組前面沒有其它組存在,所以第一組的塊數(shù)為 49,最后一組可能不足 50 塊,而且由于該組后面再也沒有其它組,所以該組的物理塊號和塊數(shù)只能存放在資源管理塊( 1塊)中。系統(tǒng)在初啟時把資源管理塊復(fù)制到內(nèi)存,從而使得空閑塊的分配和釋放可在內(nèi)存中進(jìn)行,參見圖 5.15 。,圖 5.15 空閑塊成組鏈接法,2. 空閑塊的分配與釋放 當(dāng)申請者提出空閑塊請求時,盤塊分配程序從棧頂彈出一空閑盤塊號,將其對應(yīng)的盤塊分配給它,然后棧頂指針下移一格,總塊數(shù)減 1。若該盤塊處于棧底,則將該塊中存放的下一組的各塊號及塊數(shù)讀入內(nèi)存, 然后才將該盤
20、塊分配給它, 并重置棧頂指針。 在系統(tǒng)釋放空間盤塊時,棧頂指針加 1,把釋放的空閑塊號壓入棧頂位置,空閑塊數(shù)加 1。如果棧頂指針等于 50,表示該組已滿, 需把當(dāng)前棧中的 50 個塊號及塊數(shù) 50 寫入新釋放的空閑塊中,使棧頂指針置“0”,然后將新釋放的空閑塊號壓入堆棧,棧頂指針加 1,空閑塊數(shù)置 1。,5.5 文 件 的 共 享,5.5.1 目錄結(jié)構(gòu)中的共享,圖 5.16 目錄結(jié)構(gòu)中的文件共享,勾連有兩種形式:一種是允許目錄項(xiàng)鏈接到目錄樹中的任一節(jié)點(diǎn)上;另一種則只允許鏈接到數(shù)據(jù)文件的葉子節(jié)點(diǎn)上。前一種形式既可以鏈接到目錄樹中的葉子節(jié)點(diǎn),也可以鏈接到子目錄節(jié)點(diǎn)。如果鏈接到子目錄節(jié)點(diǎn),則表示可以
21、共享該目錄及其后繼目錄所包含的所有文件。這種勾連方式功能很強(qiáng),其不足之處是允許共享的范圍過寬,不易控制和管理,使用不當(dāng)會造成循環(huán)勾連。例如圖中的/usr/user2/li勾連到/usr/user1/zhang上, 而/usr/user1/zhang又勾連到/usr/user2上,這樣就形成了循環(huán)勾連。這種循環(huán)勾連造成了目錄結(jié)構(gòu)的混亂。后一種方式雖不如前一種方式功能強(qiáng), 但同樣可以達(dá)到共享的目的,且實(shí)現(xiàn)簡,1. 基于索引節(jié)點(diǎn)的共享方法 UNIX系統(tǒng)中,文件的目錄結(jié)構(gòu)由兩部分構(gòu)成:目錄項(xiàng)和索引節(jié)點(diǎn)(也稱i節(jié)點(diǎn))。其中目錄項(xiàng)由文件名和索引節(jié)點(diǎn)號組成。 索引節(jié)點(diǎn)中包含文件屬性,文件共享目錄數(shù),與時間有
22、關(guān)的文件管理參數(shù)以及文件存放的物理地址的索引區(qū)等。 文件在創(chuàng)建時,系統(tǒng)在目錄項(xiàng)中填入其文件名和分配相應(yīng)的索引節(jié)點(diǎn)號。當(dāng)某用戶希望共享該文件時,則在某目錄的一個目錄項(xiàng)中填入該文件的別名,而索引節(jié)點(diǎn)仍然填寫創(chuàng)建時的索引節(jié)點(diǎn)號。,這時,兩個具有不同文件名的文件指向同一個索引節(jié)點(diǎn), 共享該文件的用戶對文件的操作都將引起對同一索引節(jié)點(diǎn)的訪問。 從而提供了多用戶對該文件的共享。在索引節(jié)點(diǎn)中包含一個鏈接計(jì)數(shù), 用于表示鏈接到該索引節(jié)點(diǎn)上目錄項(xiàng)的個數(shù)。 每當(dāng)有一個用戶要共享該文件時, 則索引節(jié)點(diǎn)中的鏈接計(jì)數(shù)加 1, 當(dāng)用戶使用自己的文件名刪除該文件時, 鏈接計(jì)數(shù)減 1, 只要鏈接計(jì)數(shù)不為 0, 則該文件一直存
23、在。 僅當(dāng)鏈接計(jì)數(shù)為 0 時, 該文件才真正的被刪除。 這種基于索引節(jié)點(diǎn)的共享方法也稱硬連接。,2. 基于符號鏈的共享方法 為共享一個文件,由系統(tǒng)創(chuàng)建一個LINK類型的新文件, 將新文件寫入用戶目錄中,以實(shí)現(xiàn)目錄與文件的鏈接。在新文件中只包含被鏈接文件的路徑名,稱這樣的鏈接方法為符號連接。 新文件的路徑名只是被看成是一個符號鏈。在利用符號連接方法實(shí)現(xiàn)文件共享時,只有文件主才擁有指向其索引節(jié)點(diǎn)的指針(索引節(jié)點(diǎn)號),而共享該文件的其它用戶只有該文件的路徑名, 而沒有指向索引節(jié)點(diǎn)的指針。 符號鏈實(shí)際上是一個文件,盡管該文件非常簡單,卻仍要為它配置一個索引節(jié)點(diǎn),也要用一定的磁盤空間。這種方法有一個很大
24、的優(yōu)點(diǎn), 就是它能跨越文件系統(tǒng)共享。,UNIX/LINUX系統(tǒng)下鏈接的建立 1)硬鏈接 ln gyg01.gif nyp01.gif 1)軟鏈接 ln -s gyg01.gif nyp01.gif ln -s /user/zhang /home/zhang,5.5.2 打開文件結(jié)構(gòu)中的共享,圖 5.17 打開文件結(jié)構(gòu),(1) 進(jìn)程打開文件表。每個進(jìn)程都有一個進(jìn)程打開文件表, 其中每一項(xiàng)是一個指針,指向系統(tǒng)打開文件表。 (2) 系統(tǒng)打開文件表。其也叫打開文件控制塊。 一個進(jìn)程每打開一個文件都有一個系統(tǒng)打開文件表,其中包含: f-count 指向該系統(tǒng)打開文件表的進(jìn)程數(shù) f-inode 指向一個打
25、開文件的內(nèi)存Inode (3) 內(nèi)存Inode。 主要包括: i-addr12 文件在盤上的位置信息 i-count 與此內(nèi)存Inode相連系統(tǒng)打開文件表的個數(shù),1. 父、 子進(jìn)程打開文件的共享 父進(jìn)程創(chuàng)建子進(jìn)程時,除狀態(tài)、標(biāo)識以及與時間有關(guān)的少數(shù)控制項(xiàng)外,子進(jìn)程基本上是復(fù)制父進(jìn)程的所有信息。子進(jìn)程被創(chuàng)建后將擁有自己的進(jìn)程打開文件表,其中的內(nèi)容是復(fù)制父進(jìn)程的。 這時對于父進(jìn)程打開的所有文件,子進(jìn)程都可以使用,也就是說,子進(jìn)程與父進(jìn)程共享父進(jìn)程所打開的文件。 至此以后,父、子進(jìn)程可以并發(fā)運(yùn)行,它們還可以各自獨(dú)立地打開文件,但這些各自獨(dú)立打開的文件不能共享。,2. 同名或異名打開文件的共享,當(dāng)文件
26、首次被打開時,系統(tǒng)將在打開該文件的進(jìn)程打開文件表中分配一個表項(xiàng)、一個系統(tǒng)打開文件表和一個內(nèi)存索引節(jié)點(diǎn), 同時把外存索引節(jié)點(diǎn)中的一些內(nèi)容拷貝到內(nèi)存索引節(jié)點(diǎn)中并建立起打開文件結(jié)構(gòu)。當(dāng)其它進(jìn)程使用同名或異名再次打開該文件時,發(fā)現(xiàn)其索引節(jié)點(diǎn)已在內(nèi)存中, 這時系統(tǒng)在該進(jìn)程的進(jìn)程打開文件表中分配一個表項(xiàng), 同時也分配一個系統(tǒng)打開文件表, 但不再分配內(nèi)存索引節(jié)點(diǎn)。而是與另一進(jìn)程共享內(nèi)存索引節(jié)點(diǎn)。 在這種共享方式中,共享文件的各個進(jìn)程擁有各自的文件讀、 寫指針, 可以獨(dú)立地對文件進(jìn)行操作。,5.5.3 管道文件(Pipe),1. 管道的構(gòu)成 管道是一種特殊的文件, 確切地說, 它是一個特殊的打開文件。 管道由
27、以下部分組成: (1) 一個外存索引節(jié)點(diǎn); (2) 相應(yīng)的內(nèi)存索引節(jié)點(diǎn); (3) 兩個系統(tǒng)打開文件表。,管道示意圖,進(jìn)程1 R/W,進(jìn)程2 R/W,0101011010101010101010101001,管道分為無名管道和有名管道,圖 5.18 管道文件的結(jié)構(gòu),2. 進(jìn)程使用管道的一般形式,圖 5.19 兩個進(jìn)程使用一個通信管道,3. 管道文件的讀寫,1) 管道文件讀寫的同步 作為一種通信方式,寫入管道中的數(shù)據(jù)被讀出后就沒有存在的價值了。為了避免占用過多的存儲資源, 系統(tǒng)對管道文件的大小做了限制,通常取 1 KB、2 KB或 4 KB。那么,如何實(shí)現(xiàn)任意長度信息的傳遞呢? 其基本方法是,進(jìn)程
28、向管道中寫入數(shù)據(jù)時,當(dāng)寫入的數(shù)據(jù)大于規(guī)定的長度時,就要使寫進(jìn)程掛起, 等到數(shù)據(jù)被讀進(jìn)程取走后再喚醒寫進(jìn)程;在讀進(jìn)程從管道中讀數(shù)據(jù)時,當(dāng)管道中的數(shù)據(jù)被讀完讀進(jìn)程也應(yīng)掛起,待寫進(jìn)程再次寫管道寫數(shù)據(jù)時喚醒讀進(jìn)程。,2) 管道文件讀寫的互斥 為了防止幾個進(jìn)程同時對管道文件進(jìn)行讀寫, 在對管道文件實(shí)施讀寫時要先對其加鎖,加鎖時如果發(fā)現(xiàn)管道文件已經(jīng)被加鎖,則要等待到其它進(jìn)程釋放該鎖。,4. 舉例 在下面的例子中,父子進(jìn)程使用兩個管道文件進(jìn)行數(shù)據(jù)交換。其中一個用于父進(jìn)程向其寫數(shù)據(jù),子進(jìn)程從中讀數(shù)據(jù);另一個用于子進(jìn)程向其寫數(shù)據(jù),父進(jìn)程從中讀數(shù)據(jù)。,/* example for pipe channel */
29、define MESSAGECD*2LEN 100; char parent=A message from parent.n; char child=A message from child.n; main() ,int chanl2,chan22; char bufMESSAGECD*2LEN; pipe(chan1); /* create the first pipe */ pipe(chan2); /* create the second pipe */ if(fork()) /* this is parent process */ close(chan10); /* close the
30、 read channel of the first pipe */ close(chan21); /* close the write channel of the second pipe */ write(chan11,parent,sizeof(parent); close(chan11); read(chan20,buf,MESSAGECD*2LEN); printf(Parent process:%s n,buf); close(chan20); ,else /* this is child process */ close(chan11); close(chan20); read(
31、chan10,buf,MESSAGECD*2LEN); printf(Child process:%s n,buf); write(chan21,child,sizeof(child); close(chan10); close(chan21); ,本程序的執(zhí)行結(jié)果是: Child process:A message from parent. Parent process:A message from child.,5.6 文件的存取控制,5.6.1 文件存取控制法 1. 存取控制矩陣 存取控制矩陣是一個這樣的二維矩陣:一維列出系統(tǒng)中的所有用戶,另一維列出系統(tǒng)中的全部文件。矩陣中的每個元素用來
32、表示某一用戶對某一文件的存取權(quán)限。存取控制矩陣法就是通過查訪矩陣來確定某一用戶對某一文件的可訪問性。 例如, 設(shè)計(jì)算機(jī)系統(tǒng)中有n個用戶U1, U2, , Un; 系統(tǒng)中有m個文件F1,F2, , Fm,于是可列出存取控制矩陣,其中,Rij(i=1,2,,m; j=1,2,,n)表示用戶Ui對文件Fi的存取權(quán)限。取權(quán)限可以是讀(R)、寫(W)、執(zhí)行(E)以及它們的任意組合。,表 5 - 4 存取控制矩陣?yán)?2. 存取控制表 對存取控制矩陣進(jìn)行分析,可以發(fā)現(xiàn)某一文件只與少數(shù)幾個用戶有關(guān)。也就是說,這樣的矩陣是一個稀疏矩陣,因而可以簡化。對此,我們可以把對某一文件有存取要求的用戶按某種關(guān)系分成幾種類
33、型,文件主、A組、B組和其它。同時規(guī)定每一類用戶的存取權(quán)限,這樣就得到了一個文件的存取控制表, 如表 5 - 5 所示。 顯然,系統(tǒng)中每一文件都應(yīng)有一張存取控制表。 實(shí)際上該表的項(xiàng)數(shù)較少,可以把它放在文件目錄項(xiàng)中。當(dāng)文件被打開時, 它的目錄項(xiàng)被復(fù)制到內(nèi)存,供存取控制驗(yàn)證模塊檢驗(yàn)存取要求的合法性。,表 5 - 5 文件ALPHA的存取控制表例,3. 用戶權(quán)限表,表 5 - 6 用戶權(quán)限表例,4. 口令 使用口令,必須事先進(jìn)行口令的登記。 文件主在建立一個文件時,一方面進(jìn)行口令登記,另一方面把口令告訴允許訪問該文件的用戶。文件的口令通常登記在該文件的目錄中,或者登記在專門的口令文件上。在登記口令時
34、,通常也把文件的保護(hù)信息登記進(jìn)去。保護(hù)信息可以是: (1) 該文件要不要進(jìn)行保護(hù); (2) 該文件只進(jìn)行寫保護(hù); (3) 該文件讀、 寫均需保護(hù)。,口令的形式采用最多 8 個字符的字母數(shù)字串, 同時, 還可以規(guī)定文件的保護(hù)方式: (1) 無條件地允許讀, 口令正確時允許寫; (2) 口令正確時允許讀, 也允許寫; (3) 口令正確時允許讀, 不管口令正確與否均不能寫; (4) 無條件地允許讀, 不管口令正確與否均不允許寫。 口令、文件保護(hù)信息被登記后,系統(tǒng)在下述條件下進(jìn)行口令核對,以實(shí)現(xiàn)對文件的保護(hù): (1) 打開文件時; (2) 作業(yè)結(jié)束要刪除文件時; (3) 文件改名時; (4) 系統(tǒng)要求
35、刪除該文件時。,圖 5.20 口令核對過程,5. 密碼,文件寫入時的編碼及讀出時譯碼, 都由系統(tǒng)存取控制驗(yàn)證模塊承擔(dān)。但是,要由發(fā)出存取請求的用戶提供一個變元代碼鍵。 一種簡單的編碼是,利用這個鍵作為生成一串相繼隨機(jī)數(shù)的起始碼。編碼程序把這些相繼的隨機(jī)數(shù)加到被編碼文件的字節(jié)中去。譯碼時,用和編碼時相同的代碼鍵啟動隨機(jī)數(shù)發(fā)生器,并從存入的文件中的各字節(jié)依次減去所產(chǎn)生的隨機(jī)數(shù),這樣就能恢復(fù)原來的數(shù)據(jù)。 由于只有核準(zhǔn)的用戶才知道這個代碼鍵,因而他可以正確地存取該文件。,5.6.2 文件系統(tǒng)的安全性,形成文件拷貝的方法基本上有兩種: 一種是周期性的全量轉(zhuǎn)存(Massive Dump), 另一種是增量轉(zhuǎn)
36、存(Incremental Dump)。 周期性轉(zhuǎn)存有如下缺點(diǎn): (1) 在轉(zhuǎn)存期間,應(yīng)停止對文件系統(tǒng)進(jìn)行其它操作, 以免造成混亂。 因此,全量轉(zhuǎn)存影響系統(tǒng)對文件的操作, 因而不應(yīng)轉(zhuǎn)存正在打開進(jìn)行寫操作的文件。 (2) 轉(zhuǎn)存時間長,如果使用磁帶,一次轉(zhuǎn)存可能長達(dá)幾十分鐘, 因此不能經(jīng)常進(jìn)行,一般每周一次。這樣,從轉(zhuǎn)存介質(zhì)上恢復(fù)的文件系統(tǒng)可能與被破壞前那一時刻的文件系統(tǒng)差別較大。,一旦系統(tǒng)發(fā)生故障, 文件系統(tǒng)的恢復(fù)過程大致如下: (1) 從最近一次全量轉(zhuǎn)存中裝入全部系統(tǒng)文件, 使系統(tǒng)得以重新啟動,并在其控制下進(jìn)行后續(xù)的恢復(fù)工作。 (2) 從近到遠(yuǎn)從增量轉(zhuǎn)存盤上恢復(fù)文件??赡芡晃募晦D(zhuǎn)存過若干次,但只恢復(fù)最近一次轉(zhuǎn)存的副本,其它則被略去。 (3) 從最近一次全量轉(zhuǎn)存盤中, 恢復(fù)沒有恢復(fù)過的文件。,5.7 文件系統(tǒng)和用戶間的接口,5.7.1文件的創(chuàng)建和刪除 1. 創(chuàng)建文件 用戶希望創(chuàng)建一個新文件時, 可以使用系統(tǒng)調(diào)用creat, 其格式為fd=creat(name, mode)HT5SS 其中,nam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)療咨詢與接待禮儀
- 2026年河南質(zhì)量工程職業(yè)學(xué)院單招職業(yè)技能筆試備考題庫帶答案解析
- 醫(yī)療人員禮儀培訓(xùn)內(nèi)容
- 2026年河北石油職業(yè)技術(shù)大學(xué)高職單招職業(yè)適應(yīng)性考試備考題庫有答案解析
- 醫(yī)院環(huán)境:整潔與溫馨并重
- 兒科疾病遠(yuǎn)程診療平臺建設(shè)
- 個性化藥物設(shè)計(jì)與藥物篩選
- 醫(yī)療大數(shù)據(jù)挖掘與智能決策
- 智能化醫(yī)療設(shè)備在心血管疾病中的應(yīng)用
- 2026年安徽黃梅戲藝術(shù)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題有答案解析
- 2025中國供銷集團(tuán)校園招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- 不擾民協(xié)議書范文多人簽字模板
- 玻璃陽光房合同模板
- 重力式、擋墻施工方案
- JJG 705-2014液相色譜儀行業(yè)標(biāo)準(zhǔn)
- 媽媽產(chǎn)后營養(yǎng)平衡的課件
- 《李彥宏個人介紹》課件
- 糖尿病核心信息知識講座
- 美容外科臨床診療指南診療規(guī)范2023版
- 【語文】西安高新一小小學(xué)四年級上冊期末試題
- GB/T 9439-2023灰鑄鐵件
評論
0/150
提交評論