最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

操作系統(tǒng)學(xué)習(xí)記錄4-文件管理

2023-07-10 21:02 作者:阿期777  | 我要投稿

文件定義

是由創(chuàng)建者所定義的,具有文件名的一組相關(guān)元素的集合

文件分類

按用途分:系統(tǒng)文件、用戶文件、庫文件

按存取控制屬性分:只執(zhí)行文件、只讀文件、讀寫文件

按組織形式和處理方式分:普通文件、目錄文件、特殊文件

按數(shù)據(jù)形式分:源文件、目標(biāo)文件、可執(zhí)行文件

文件的操作

建立(create系統(tǒng)調(diào)用)

找到文件所需的空間、

創(chuàng)建該文件對應(yīng)的目錄項

刪除(delete)

找到文件名對應(yīng)的目錄項

回收文件占用的磁盤塊

刪除文件對應(yīng)的目錄項

打開(open)

找到文件名對應(yīng)的目錄項

將目錄項復(fù)制到內(nèi)存中的打開文件表中,用戶使用打開文件表的編號來指明要操作的文件

每個進程都有打開文件表,系統(tǒng)有一張總的打開文件表

進程打開文件表特有屬性:讀寫指針、訪問權(quán)限

系統(tǒng)打開文件表中特有屬性:打開計數(shù)器

關(guān)閉(close)

將進程打開文件表相應(yīng)表項刪除

回收分配給該文件的內(nèi)存空間等資源

系統(tǒng)的打開文件表的打開計數(shù)器count減一,若count=0,則刪除對應(yīng)表項

讀(read)

根據(jù)讀指針,讀入數(shù)據(jù)量、內(nèi)存位置將文件數(shù)據(jù)從外存調(diào)入內(nèi)存

寫(write)

根據(jù)寫指針,寫出數(shù)據(jù)量、內(nèi)存位置將文件數(shù)據(jù)從內(nèi)存寫出外存

文件的邏輯結(jié)構(gòu)

無結(jié)構(gòu)文件(流式文件)如文本文件

有結(jié)構(gòu)文件(記錄式文件)如數(shù)據(jù)庫表

每條記錄有一個數(shù)據(jù)項可作為關(guān)鍵字,根據(jù)各條記錄的長度是否相等,可以分為定長記錄和可變長記錄。

根據(jù)有結(jié)構(gòu)文件在邏輯上如何組織可以分為以下三類

順序文件:存取速度快,插入或刪除記錄困難,不利于動態(tài)擴充??勺冮L文件無法實現(xiàn)隨機存取,只能從第一個記錄開始往后找。定長記錄可以實現(xiàn)隨機存取,采用順序結(jié)構(gòu)可以快速的找到關(guān)鍵字對應(yīng)的記錄。

串結(jié)構(gòu):記錄之間的順序與關(guān)鍵字無關(guān)。

順序結(jié)構(gòu):記錄之間調(diào)度順序按關(guān)鍵字排序排列

索引文件:檢索速度快,插入或刪除記錄方便,系統(tǒng)開銷大。本身是定長記錄的順序文件,主要用于對信息處理的及時性要求比較高的場合??梢杂貌煌臄?shù)據(jù)項建立多個索引表。

索引順序文件:順序存取速度快,隨機訪問,增、刪、改記錄方便。與索引文件不同的是,并不是每個記錄對應(yīng)一個索引表項,而是一組記錄對應(yīng)一個索引表項。

在檢索效率分析上,順序文件由10000個記錄,從頭開始順序查找,平均查找5000個記錄。采用索引順序文件,可以把10000個文件分為100組,每組100個記錄,需要先順序查找索引表扎到分組,平均50次,找到分組后再順序查找記錄,平均50次。一共平均查找次數(shù)為100次。

為了進一步提高查找效率,可以建立多級索引表,對于一個1000000個記錄,可以建立一張低級索引表,每100個記錄為1組,低級索引表中有10000個表項,再將這10000個記錄分組,每組100個,建立頂級索引表。頂級索引表有100個表項。

為n個記錄建立k級索引,最優(yōu)的分組是每組。檢索一個記錄的平均查找次數(shù)為(/2)*(k+1)。

文件目錄

文件控制塊(FCB):包含基本信息、存取控制信息、使用信息

FCB的有序集合被稱為“文件目錄”,一個FCB就是一個文件目錄項。FCB包含了文件的基本信息(文件名、物理地址、邏輯結(jié)構(gòu)、物理結(jié)構(gòu)等),存取控制信息,使用信息。最重要最基本的還是文件名、文件存放的物理地址。

索引節(jié)點:包括磁盤索引節(jié)點和內(nèi)存索引節(jié)點

目錄結(jié)構(gòu):單級目錄結(jié)構(gòu)、兩級目錄結(jié)構(gòu)、樹形目錄結(jié)構(gòu)、圖形目錄結(jié)構(gòu)

單級目錄中,整個系統(tǒng)只建立一張目錄表,每個文件占一個目錄項,實現(xiàn)了按名存取,不允許文件重名。

早期多用戶操作系統(tǒng)中,采用兩級目錄結(jié)構(gòu),分為主文件目錄和用戶文件目錄。主文件目錄記錄用戶名和相應(yīng)的用戶文件的存放位置。允許不同用戶的文件重名,文件名相同但是對應(yīng)的文件不同。可以再目錄上實現(xiàn)訪問限制。

多級目錄結(jié)構(gòu)(樹形目錄結(jié)構(gòu))用戶訪問某個文件要用文件路徑名標(biāo)識文件,各級目錄之間用“/”分開,從根目錄出發(fā)的路徑被稱為絕對路徑。系統(tǒng)根據(jù)絕對路徑一層一層找到下級目錄,最開始從外存讀入根目錄的目錄表,找到下級目錄后,再從外存繼續(xù)讀入目錄表??梢栽O(shè)置一個當(dāng)前目錄,使得不用每次從根目錄查找。在linux中,“.”表示當(dāng)前目錄。引入當(dāng)前目錄和相對路徑后,磁盤I/O的次數(shù)減少,提升了訪問文件的效率。

樹形目錄結(jié)構(gòu)可以很方便地對文件進行分類,層次結(jié)構(gòu)清晰,也能夠有效地進行文件的管理與保護,但是樹形結(jié)構(gòu)不便于實現(xiàn)文件的共享。因此,提出了無環(huán)圖目錄結(jié)構(gòu)。

在無環(huán)圖目錄結(jié)構(gòu)中,可以使用不同的文件名指向同一個文件,甚至可以指向同一個目錄。需要為每個共享結(jié)點設(shè)置一個共享計數(shù)器,記錄此時有多少個地方在共享該結(jié)點。用戶提出刪除結(jié)點的請求時,只是刪除該用戶的FCB,并使得共享計數(shù)器減一。只有共享計數(shù)器減為0時,才刪除結(jié)點。在共享文件中,各個用戶指向的是同一個文件,因此只要其中一個用戶修改了文件數(shù)據(jù),那么所有用戶都可以看到文件數(shù)據(jù)的變化。

索引結(jié)點改進:在FCB中只記錄文件名和索引結(jié)點指針字段,其他文件描述信息全部存放到索引節(jié)點上。這樣的話每個磁盤塊可以多存放目錄項,大大提升文件檢索速度。存放在外存中的索引結(jié)點稱為磁盤索引結(jié)點,放入內(nèi)存后稱為內(nèi)存索引結(jié)點。內(nèi)存索引結(jié)點需要增加一些信息,如文件是否被修改,當(dāng)前有幾個進程正在訪問該文件。

?

文件共享

硬鏈接(基于索引結(jié)點)和軟鏈接(符號鏈接)

硬鏈接:在索引結(jié)點上設(shè)置一個鏈接計數(shù)變量count,表示鏈接到本索引結(jié)點上的用戶目錄項目數(shù)。若某個用戶需要刪除該文件,則只需把用戶目錄中與該文件對應(yīng)的目錄項刪除,且索引結(jié)點的count減一。若count>0,則不能把文件數(shù)據(jù)刪除,當(dāng)count=0時,系統(tǒng)負責(zé)刪除文件。

軟鏈接:當(dāng)訪問文件時,操作系統(tǒng)判斷該文件屬于link類型文件,會根據(jù)其中記錄的路徑層層查找目錄,最終找到找到最終目錄表的表項,類似于快捷方式。即使軟鏈接指向的共享文件已被刪除,link文件依然存在,只是通過link型文件中的路徑區(qū)查找共享文件會失敗。用軟鏈接訪問共享文件會查詢多級目錄,會有多次磁盤I/O,因此訪問共享文件的速度要比硬鏈接慢。

文件的物理結(jié)構(gòu)

磁盤塊的大小與內(nèi)存塊,頁面的大小相同

在外存管理中,文件的邏輯地址空間被分為了一個一個的文件塊。文件的邏輯地址可以表示為(邏輯塊號,塊內(nèi)地址)的形式。

連續(xù)分配

連續(xù)分配方式要求每個文件在磁盤上占有一組連續(xù)的塊

用戶給出要訪問的邏輯塊號,操作系統(tǒng)找到該文件對應(yīng)的目錄項(FCB)物理塊號=起始塊號+邏輯塊號。還需要檢查用戶提供的邏輯塊號是否合法(邏輯塊號》=長度就不合法)

可以直接算出邏輯塊號對應(yīng)的物理塊號,因此連續(xù)分配支持順序訪問和直接訪問(隨機訪問)

連續(xù)分配的文件在順序讀寫時速度最快

物理上連續(xù)分配的文件不方便拓展

物理上采用連續(xù)分配,存儲空間利用率低,會產(chǎn)生難以利用的磁盤碎片??梢杂镁o湊處理碎片,但是會耗費很大的時間代價。

?

鏈接分配(隱式鏈接、顯式鏈接)

隱式鏈接:除了文件的最后一個磁盤塊之外,每個磁盤塊都會保存指向下一個盤塊的指針,這些指針對用戶是透明的。目錄項記錄起始塊號和結(jié)束塊號。采用鏈接分配(隱式鏈接)只支持順序訪問,不支持隨機訪問,查找效率低。另外,指向下一個盤塊的指針頁需要耗費少量的存儲空間。

采用隱式鏈接的鏈接分配方式,很方便文件拓展,不會有碎片問題,外存利用率高。

顯式鏈接:把用于鏈接文件各物理塊的指針顯示地存放在一張表中,即文件分配表(FAT)。一個磁盤僅設(shè)置一張FAT,開機時,將FAT讀入內(nèi)存,并常駐內(nèi)存。FAT的各個表項在物理上連續(xù)存儲,且每一個表項長度相同,因此物理塊號字段時隱含的。

用戶給出邏輯塊號,操作系統(tǒng)找到該文件目錄項FCB,F(xiàn)CB只記錄起始塊號,從目錄項中找到起始塊號,查找內(nèi)存中的文件分配表FAT(開機后常駐內(nèi)存),往后找i號邏輯塊對應(yīng)的物理塊號。邏輯塊號轉(zhuǎn)換成物理塊號的過程不需要讀磁盤操作。采用顯式鏈接的方式的文件,支持隨機訪問,而且不需要訪問磁盤,相比隱式鏈接來說快很多。顯式鏈接也不會產(chǎn)生外部碎片,可以很方便對文件進行拓展。缺點是文件分配表會占用一定的存儲空間。

索引分配

索引分配允許文件離散地分配在各個磁盤塊中。系統(tǒng)會為每個文件建立一張索引表,索引表中記錄了文件的各個邏輯塊對應(yīng)的物理塊。索引表存放的磁盤塊被稱為索引塊。文件數(shù)據(jù)存放的磁盤塊稱為數(shù)據(jù)塊。目錄中需要記錄索引塊是幾號磁盤塊

用戶給出邏輯塊號,操作系統(tǒng)找到該文件對應(yīng)的目錄項FCB。從目錄項中可以得知索引表存放位置,將索引表從外存讀入內(nèi)存,并查找索引表即可看到邏輯塊在外存中的存放位置。

索引分配方式可以支持隨機訪問,文件拓展也很容易實現(xiàn)。但是索引表需要占用一定的存儲空間。

文件過大,導(dǎo)致磁盤塊裝不下索引表,可以采用下面方案

鏈接方案:如果索引表太大,一個索引塊裝不下,可以將多個索引塊鏈接起來存放。但是只能順序訪問,低效。

多層索引:建立多層索引(類似于多級頁表)。第一層索引塊指向第二層索引塊,還可以根據(jù)文件大小建立多層索引。如2級索引表,訪問一次一級索引,再訪問一次二級索引,最后訪問目標(biāo)數(shù)據(jù)塊,需要3次讀磁盤。k層索引,且頂級索引表未引入內(nèi)存,只需要k+1次讀磁盤操作。

混合索引:多種索引方式的結(jié)合,在頂級索引表中,既包含直接索引地址(直接指向數(shù)據(jù)塊)還包含一級間接索引,兩級間接索引。

超級重要考點:要會根據(jù)多層索引、混合索引的結(jié)構(gòu)計算出文件的最大長度。要能分析訪問某個數(shù)據(jù)塊所需要的讀磁盤次數(shù)(FCB中會存有指向頂級索引表的指針,可以根據(jù)FCB讀入頂級索引塊,每次讀入下一級的索引塊都需要一次讀磁盤操作)要注意題目條件--頂級索引塊是否已經(jīng)調(diào)入內(nèi)存。

?

文件系統(tǒng)層次結(jié)構(gòu)

最高層:文件系統(tǒng)接口

中間層:對對象操縱和管理的軟件集合

最底層:對象及其屬性

在磁盤區(qū)中,分為目錄區(qū)和文件區(qū),目錄區(qū)存放FCB,用于磁盤存儲空間管理的信息。

外存空閑空間管理方法

空閑表法(適用于連續(xù)分配方式)

分配磁盤塊:為一個文件分配連續(xù)的存儲空間,可以采用首次適應(yīng)、最佳適應(yīng)、最壞適應(yīng)等算法來決定要為文件分配哪個區(qū)間?;厥沾疟P塊也和內(nèi)存管理中的動態(tài)分區(qū)類似,回收要注意表項的合并問題。

空閑鏈表法(適用于離散分配的物理結(jié)構(gòu))

空閑盤塊鏈,以盤塊為單位組成一條空閑鏈,空閑盤塊存儲者下一個空閑盤塊的指針。某個文件申請k個盤塊,從鏈頭開始一次摘下k個盤塊分配,并修改空閑鏈的鏈頭指針?;厥盏谋P塊依次掛到鏈尾,并修改鏈尾指針

?

空閑盤區(qū)鏈,以盤區(qū)為單位組成一條空閑鏈,連續(xù)空閑的盤塊組成一個盤區(qū),空閑盤區(qū)的第一個盤塊記錄了盤區(qū)長度和下一個盤區(qū)的指針。某個文件申請k個盤塊,可以采用首次適應(yīng),最佳適應(yīng)算法,從鏈頭開始檢索,按照算法規(guī)則找到一個大小符合的空閑盤區(qū)分配給文件。若沒有合適的連續(xù)空閑塊,也可以將不同的盤區(qū)的盤塊分配給一個文件。

?

位示圖法

每個二進制位對應(yīng)一個盤塊。在本例中,“0”代表盤塊空閑,“1”代表盤塊已分配。位視圖一般用連續(xù)的“字”來表示。如一個字的字長是16位,可以用(字號,位號)對應(yīng)一個盤塊號。有的題目也描述為(行號,列號)最重要的是自己能推出盤塊號與(字號,位號)。注意題目中盤塊號、字號、位號是從0開始還是1開始。n表示字長,字號,位號(i,j)的二進制位對應(yīng)的盤塊號b=ni+j。 b號盤塊對應(yīng)的字號i=b/n,位號j=b/n

若文件需要k個塊,順序掃描位示圖,找到k個相鄰或者不相鄰的“0”。根據(jù)字號、位號計算出盤塊號,并把盤塊分配給文件。將相應(yīng)位設(shè)置位“1”。回收時根據(jù)盤塊號計算出對應(yīng)的字號,位號。將相應(yīng)的二進制位設(shè)為“0”

成組鏈接法(unix使用)

文件卷的目錄區(qū)中專門用一個磁盤塊作為超級塊,當(dāng)系統(tǒng)啟動時需要將超級塊讀入內(nèi)存,并且要保證內(nèi)存與外存中的超級塊數(shù)據(jù)一致。

文件保護

口令保護

為文件設(shè)置一個口令,用戶想要訪問文件時需要提供口令,系統(tǒng)驗證口令是否正確

實現(xiàn)開銷小,但口令一般存放在FCB或者索引結(jié)點中,不太安全

加密保護

用一個密碼進行文件加密,訪問文件需要提供相應(yīng)的密碼

安全性高,但加解密需要花費一定的時間

訪問控制

用一個訪問控制表(ACL)記錄各個用戶對文件的訪問權(quán)限

對文件的訪問類型可以分為:讀寫執(zhí)行刪除

實現(xiàn)靈活,可以實現(xiàn)復(fù)雜的文件保護功能。

虛擬文件系統(tǒng)

是對各種文件系統(tǒng)的一個抽象,為各種文件系統(tǒng)提供一個通用接口;存在于內(nèi)存,運行在內(nèi)核態(tài)

虛擬文件系統(tǒng)是向上層用戶進程提供一個統(tǒng)一標(biāo)準的系統(tǒng)調(diào)用接口,屏蔽底層具體文件系統(tǒng)的實現(xiàn)差異。通俗來講,這個虛擬文件系統(tǒng)VFS統(tǒng)一了UFS文件系統(tǒng),NTFS文件系統(tǒng),F(xiàn)AT文件系統(tǒng)等,對不同的設(shè)備進行了統(tǒng)一的調(diào)用。

VFS要求下層的文件系統(tǒng)必須實現(xiàn)某些規(guī)定的函數(shù)功能,如open/read/write等。一個新的文件系統(tǒng)想要在某操作系統(tǒng)上被使用,就必須滿足該操作系統(tǒng)VFS的要求。

每打開一個文件,VFS就在主存中新建一個vnode,用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)表示文件,無論該文件存儲在哪個文件系統(tǒng)。(vnode只存在于主存中,inode既會調(diào)入主存,也會在外存中存儲)

打開文件后,創(chuàng)建vnode,并將文件信息復(fù)制到vnode中,vnode的功能指針指向具體文件系統(tǒng)的函數(shù)功能。具體文件系統(tǒng)也就是UFS,F(xiàn)AT之類的,

?

文件系統(tǒng)掛載

文件系統(tǒng)掛載與文件系統(tǒng)通過掛載進行關(guān)聯(lián)

文件系統(tǒng)掛載是指文件系統(tǒng)安裝/裝載,指的是如何將一個文件系統(tǒng)掛載到操作系統(tǒng)中。

文件系統(tǒng)掛載要做的事情(指的具體的文件系統(tǒng)):

在VFS中注冊新掛載的文件系統(tǒng),內(nèi)存中的掛載表(mount table)包含每個文件系統(tǒng)的相關(guān)信息,包括文件系統(tǒng)類型、容量大小等。新掛載的文件系統(tǒng),要向VFS提供一個函數(shù)地址列表。將新文件系統(tǒng)加到掛載點,也就是將新文件系統(tǒng)掛載到某個父目錄下。

?

文件系統(tǒng)的全局結(jié)構(gòu)

原始磁盤(什么也沒有,磁盤空空的)

物理格式化,也就是低級格式化。將磁盤劃分扇區(qū),檢測壞扇區(qū),并用備用扇區(qū)替換壞扇區(qū)。

邏輯格式化,磁盤分區(qū)(分卷)完成各分區(qū)的文件系統(tǒng)初始化。磁盤分區(qū)有主引導(dǎo)記錄(MBR,包含磁盤引導(dǎo)程序和分區(qū)表),c盤,D盤,E盤等。

Open系統(tǒng)調(diào)用打開文件的背后過程。第一步先根據(jù)路徑一級一級讀入目錄。找到目標(biāo)文件的FCB,復(fù)制到系統(tǒng)打開文件表。在進程打開文件表中新建一個條目,并返回文件描述符。


操作系統(tǒng)學(xué)習(xí)記錄4-文件管理的評論 (共 條)

分享到微博請遵守國家法律
建德市| 若羌县| 阿尔山市| 凌云县| 阜新| 萍乡市| 凤冈县| 山东省| 鄂尔多斯市| 东明县| 黄平县| 集安市| 应用必备| 桂阳县| 沂南县| 濮阳市| 余姚市| 岳西县| 新巴尔虎左旗| 桑植县| 屏东县| 新平| 天祝| 湘乡市| 辛集市| 黄平县| 香河县| 那坡县| 仙游县| 伊宁市| 洛扎县| 武平县| 林州市| 马鞍山市| 芜湖市| 曲阳县| 陵川县| 岑巩县| 桂东县| 博爱县| 保康县|