1. 程式人生 > >理解作業系統4--檔案管理疑惑總結

理解作業系統4--檔案管理疑惑總結

檔案和檔案系統

檔案系統是作業系統的一個重要組成部分,負責管理系統裡面的檔案,為使用者提供檔案操作介面,檔案系統由實施檔案管理的軟體和被管理的檔案組成,為使用者提供使用檔案的操作介面,檔案系統軟體屬於系統核心程式碼,檔案按照特定的格式存放在磁碟分割槽。檔案系統通常安裝磁碟分區劃分,每個分割槽對應一個獨立的檔案系統。

檔案系統提供的功能:

  • 提供檔案訪問的介面,實現檔案的“按名存取”
  • 實施對檔案的操作,包括建立,讀寫,檢索,修改,刪除。
  • 管理檔案分割槽的儲存空間,實施儲存空間的分配,回收,與重組
  • 實現對檔案的共享,保密和保護措施

檔案的描述

檔案系統為每個檔案建立了一個檔案控制塊(FCP),類似與程序裡面的PCB,對FCB操作就是對檔案操作,相應的對檔案操作FCB內容也會變化,檔案被刪除對應的FCB消失。

檔案目錄

因為檔案和PCB是一一對應的,管理檔案就是管理FCB,檔案系統採用目錄組織檔案,通過目錄將所有的FCB分層次組織在一起,為了方便操作,目錄資訊也必須長久儲存,所以目錄也需要以檔案的形式儲存,系統定義了一種特殊的檔案---目錄檔案,其內容是一個檔案列表,每個表項是一個檔案的PCB,在目錄裡成為目錄項,因此目錄可以作為另一個目錄的目錄項。從而構成目錄的層次結構。目錄的功能主要是實現檔案的按名字存取,即使用者只要提供檔名字就能夠進行各種操作,目錄實現了檔名到檔案物理存放位置 對映,合理的組織了檔案。

檔案的結構


1.檔案的格式

是終端使用者通過應用程式來使用檔案的,從他們角度看到的檔案的格式,比如doc對應word,根據結構的格式分為結構化檔案,如列表檔案,資料庫檔案。半結構化檔案,如web文件,圖片,影象,無結構化檔案,如純文字檔案。

2.檔案的邏輯結構

邏輯結構是檔案系統的直接使用者應用程式,所看到的檔案結構,邏輯結構取決與檔案系統介面的設計,它決定了檔案的儲存方式,應用程式按照邏輯結構訪問檔案系統的檔案,並且在此基礎上,構造出各種應用結構呈現給應用程式使用者,應用程式負責檔案的格式和邏輯結構之間的對映,檔案的邏輯結構有記錄式檔案和流式檔案。記錄式檔案不好,只介紹流檔案

流式檔案

安裝位元組序列組成的檔案,是無結構檔案,使用者程式訪問檔案的時候只要指定檔案的偏移位置和要讀寫的位元組數,檔案系統可以很方便的存取指定部分的檔案內容,流式檔案就像一張白紙,沒有任何格式上的限制,寫檔案的時候使用者程式按照自己定義的結構組織資料,然後把他們組織成位元組流寫入檔案,讀取的時候,在按照自己的結構解釋檔案的內容就可以了。和記錄式檔案不同的是,流式檔案將和檔案格式有關的結構交給了使用者程式
由使用者程式按照自己結構解釋給人。而不必按照預先規定的格式讀取存取了。

3.檔案的物理結構

檔案的物理結構是儲存結構,是檔案在外存上的儲存組織形式,檔案系統負責檔案的邏輯結構和物理結構之間的對映。 根據磁碟的結構,確定磁碟扇區的引數有三個,柱面號,磁頭號,扇區號。訪問磁碟時,先將磁頭移動到指定的柱面上,等待要訪問的扇區移動到磁頭下面,然後由指定的磁頭 訪問指定的扇區,由於磁碟是高速裝置,一次讀寫可同時訪問多個相鄰的扇區,因此檔案系統訪問磁碟的時候是以塊為單位來傳輸資料的,塊由若干個相鄰的扇區構成,塊的大小取決於檔案系統的設定和磁碟容量。必須是磁碟扇區大小的2的整數倍。為了便於磁碟的管理,磁碟的儲存空間被分成幾個分割槽,每個分割槽由一個檔案系統管理,檔案系統只能看到自己所在的分割槽內的空間,從檔案系統來看磁碟分割槽的儲存空間是許多邏輯上連續的塊組成,檔案系統以塊為單位儲存資料,訪問檔案的時候只要指定塊號就可以了,遮蔽了扇區的結構。

連續檔案 

將檔案的內容按照邏輯順序放在連續的儲存塊。假設磁碟空間採用4kb大小的塊,檔案A的大小是25K,系統為它分配了連續的7塊,起始塊號和佔用的塊號記錄在FCB裡面。 優點:因為連續,磁頭移動較少,儲存效能號 缺點:限制了檔案的動態增長,會產生磁碟碎片。 連續檔案主要用於順序儲存裝置,如磁帶或者只讀儲存裝置--光碟。

連結檔案

主要就是檔案不必放在連續的塊,可以用指標連起來,造成磁頭移動較多,順序存取方便,但是隨機存取緩慢,指標佔據了一些位元組,每個塊的位元組數不是2的冪,因為很多程式都是按照2的冪為長度讀寫的,所以增加了讀寫的複雜讀。 對連結檔案的改進就是把指標提取出來,單獨放在一個連結串列裡面,連結表裡面對應的每一項都是下一個儲存塊,連結表佔用的空間小可以放在記憶體裡。需要訪問檔案的時候只要訪問連結串列就可以了,WINDOWS 下的FAT就是這樣的。 連結檔案允許檔案動態變化,外存利用空間高,缺點是儲存效率低,尤其是直接儲存,適合小檔案,檔案越大效率越低。為了解決長時間的動態增長或者縮減操作後效率低下問題,Windows FAT採用磁碟整理的方法。

索引檔案

索引檔案類似與頁分配記憶體,索引表類似與頁表,索引檔案有連結檔案的優點,定位快,順序儲存和隨即儲存效率高,缺點是佔用儲存空間多,對於小檔案較多的系統來說優點體現的不明顯,空間浪費明顯,適合大中型檔案系統。

Linux檔案系統的結構


磁碟檔案系統

位於磁碟上的檔案系統,每個磁碟分割槽由一個檔案系統管理,所有針對檔案的操作都要通過磁碟檔案系統,整個檔案系統體系結構中,磁碟檔案系統是一個對映層,上層的檔案系統利用它將使用者請求的檔案操作對映到磁碟上去。

虛擬檔案系統

硬碟檔案系統通常是為不同的作業系統設計和使用的,它們具有不同的組織結構和檔案操作介面函式,相互之間差別往往很大,VFS遮蔽了這些檔案系統的差異,為訪問檔案提供了統一的介面。Linux/Unix風格的檔案系統與VFS有這相同的概念和很好的對應關係,可以直接從他們對應的結構構造出VFS檔案系統的物件,但FAT和NTFS這樣的非Unix風格的系統必須經過封裝 同記憶體管理中描述的類似,VFS也採用了面向物件的描述方式。VFS將檔案系統看作由一些物件構成,每個物件是一個結構體,結構體包含了物件的屬性資料,包含了物件操作集。 VFS超級塊:代表一個已經掛載的檔案系統 VFS目錄項:代表檔案目錄的一個分量 VFS索引節點:代表一個實際的檔案 VFS檔案 :代表程序開啟的一個檔案 VFS物件的例項以結構體形式存在記憶體,在適當的時候被建立起來,建立的時候結構體的資料由實際檔案系統相應資料填充,或由VFS現場生成,結構體的操作集被設定為一組函式指標,指向實際檔案系統中設定的物件的操作函式,VFS依靠這些物件提供的資訊和操作函式完成所有的檔案操作。

VFS超級塊

VFS超級塊代表一個特定的檔案系統,與實際檔案系統的超級塊對應,包含了所有操作該檔案系統的資訊。VFS為每個已掛載的檔案系統建立一個VFS超級塊,通過它來訪問和管理實際的檔案系統,在掛載檔案系統時建立,檔案系統解除安裝後撤銷。在此期間,檔案操作會修改VFS超級塊的內容,造成磁碟上的內容和超級塊內容不一致,所以會週期性檢驗,把改變的寫會磁碟保證一致性。

VFS索引節點

VFS索引節點物件代表了實際檔案系統的一個具體的檔案,與實際檔案系統的INODE點相對應,包含了操作檔案所需要的全部資訊。VFS用inode結構表示索引節點, inode包含了實際的磁碟的i節點的資訊,如節點號,訪問許可權,硬連結數,屬主,大小,時間戳等,另外還包含了VFS用到的資訊,如i節點的引用計數,i節點操作指標i_op,檔案操作集指標i_fop,地址空間對映以及構成結構的各種指標。 i節點的操作集用inode_operations結構描述,包含了一組檔案操作函式指標,i節點的主要操作函式是針對檔案整體進行操作的函式,建立,查詢,連結,刪除,建立目錄,刪除目錄等。另外一個檔案操作集file_operations包含了對檔案內容的各種操作,系統中每開啟一個檔案,對應一個inode,在檔案被開啟時,VFS讀入該檔案的磁碟i節點的資訊,為它在記憶體建立了inode,檔案關閉後inode也被撤銷。與超級塊相同,inode也存在同步更新問題。

VFS目錄項

定位一個檔案時需要沿檔案的路徑名逐級訪問路徑中的各個目錄,如果每次都從磁碟讀取目錄檔案的話,訪問效率很低,所以VFS引入了dentry的概念,dentry代表了一個路徑分量路徑由一系列分量構成,每個分量都是一個目錄或者檔案,當VFS首次解析一個路徑名的時候,依次讀取路徑中的每個目錄或者檔案,為他們逐一建立相應的dentry結構, 並將檔案或目錄的inode關聯起來,VFS將這些已經建立的dentry安裝目錄結構關係連結在一起,以後VFS查詢時候主要沿著dentry的連結結構查詢就可以了。 dentry並不存在實際檔案系統的任何成分,而是根據路徑名字的字串在記憶體現場建立的,所以並不存在同步更新的問題。

VFS檔案

從使用者程序的角度來說看VFS,直接看到的是檔案,而不是超級塊,索引節點,目錄項,程序關係的只是檔案的訪問模式,讀寫位置,檔案屬性,以及讀寫操作,VFS用一個file物件來描述程序關心的檔案,每當程序開啟一個檔案,VFS都將為它建立一個結構。 檔案操作集用file_operations結構描述,由一組對檔案內容進行操作的函式指標,函式指標包括open,read,write,llseek操作,檔案操作集中包含的函式指標是VFS定義的,但是這些指標指向哪些操作函式則由具體的檔案系統定義,核心提供了通用操作函式,具體的操作函式可以具體使用這些通用函式,也可以專門的實現,另外操作集的設定也和檔案型別有關,普通檔案,目錄檔案,裝置和特殊檔案所帶有的檔案操作函式均有不同。file物件也沒有對應的磁碟資料,不需要提供寫會磁碟的操作。

VFS物件的關聯結構


VFS與程序的介面


檔案系統的註冊,掛載和解除安裝

為了使得VFS能夠支援某個型別的檔案系統,檔案系統必須想VFS註冊,Linux核心內在的支援一些檔案系統型別,這些支援的在系統啟動的時候自動註冊到VFS,其他型別採用可載入模組的方式動態的載入到系統上,在模組載入時進行註冊,一個檔案系統必須先掛載才能用,掛載的作用是建立它的VFS超級塊,系統在初始化的時候掛載到‘/'目錄下,其餘的掛載在根檔案系統的某個目錄下,VFS用file_system_type描述每個已註冊的檔案系統,檔案系統掛載的時候,VFS根據檔案系統型別找到相應的註冊結構,然後呼叫get_sb函式為它建立VFS超級塊,再將它的根目錄掛載到 掛載點目錄下。VFS用vfsmount描述每個掛載的檔案系統,記錄了檔案系統所在的裝置名字,掛載點目錄的dentry指標,超級塊的指標資訊,VFS通過vfsmount找到檔案系統的超級塊,然後就可以對該檔案系統操作了。

檔案的操作

1.檔案的開啟和關閉

系統函式open,開啟檔案就是在記憶體中構建檔案的VFS物件,建立他們和程序之間的聯絡,並用檔案描述符來標識這個連線,具體細節是:根據檔案的路徑名找到或者建立該檔案的dentry,inode,file物件,在程序的file_struct結構找到一個空閒的fd陣列項,填入file的物件指標,然後返回陣列下標,就是檔案描述符。若開啟一個已經被開啟的檔案,則file結構已經存在,只需要找到該檔案的file結構,並將其連線到該程序的fd陣列項,然後file裡面的引用次數加一,返回陣列下標就行。關閉檔案就是斷開連線,釋放檔案描述符,如果file結構的引用次數為0,還要釋放file結構。

2.檔案的讀寫

讀寫檔案的read和write,檔案的讀寫前必須是開啟的,系統根據fd的值,在程序的file_struct中檢索fd陣列,得到檔案的file結構,根據file.f_mode,檢查檔案的訪問許可權,然後執行file.f_op->read或者file_op->write操作函式,完成讀寫操作,讀寫操作的起始位置是,當前檔案的file.f_pos,檔案開啟的時候,值為0,讀寫結束後,會相應的更新,可以用lseek函式定位。 讀檔案過程:首先通過address_space在快取中查詢,命中就從快取讀資料,傳送到使用者程序的buf,不命中就呼叫address_space的readpage()函式,觸發一次真正的磁碟操作,此時讀資料的程序被阻塞,等待磁碟上資料到來的時候傳送到快取頁面,資料讀入快取後,再從快取複製到使用者程序的buf,喚醒等待的程序。 寫檔案操作:通過address_space將資料直接寫到快取頁,之後就返回了,當然也會適當的時候呼叫address_space的writepage,觸發一次真正的寫盤操作。

磁碟快取記憶體

加快了檔案的訪問速度,減少了磁碟訪問次數,提高了I/O效能。

I/O系統

I/O系統由通用塊層,I/O呼叫層和裝置驅動層組成組成,通用塊層是檔案系統與I/O系統的介面,隱藏不同裝置的差異,為檔案系統提供一個統一的關於塊裝置的檔案抽象,需要讀寫裝置時,檔案系統向通用塊層的抽象塊裝置發出檔案I/O請求,交給I/O排程層處理,I/O排程層負責對塊裝置的I/O請求傳達給裝置驅動,裝置驅動直接控制裝置完成具體的I/O請求。

EXT檔案系統

EXT檔案的邏輯結構是無結構的流式檔案。

Ext檔案描述

採用了改進的FCB描述,考慮到目錄下檔案很多時。目錄檔案就會很大,往往需要多個儲存塊,將FCB分為主部和次部。主部包含除檔名字之外的所有的資訊,成為Inode(索引節點),次部只包含檔名和主部的標識(節點號),檔案目錄由檔案的次部組成,主要實現按名檢索的目的,次部(目錄項)很小,目錄檔案也很小,檢索速度快。

Ext檔案的定位

按名查詢是檔案系統提供的基本功能,檔案系統根據路徑名,從根目錄或者當前目錄開始逐級查詢檔案所在的目錄,查詢下一級目錄的時候要根據上一級目錄的資料塊內容,目錄檔案的資料塊記錄的就是下一級目錄名字或者檔名字,最終找到目標檔案的Inode,就可以通過Inode訪問資料塊內容就可以操作檔案了。

檔案的連結

建立連結檔案的命令是:
ln -[選項] 目標檔案 連結檔案

符號連結

符號連結檔案是一類特殊的檔案,其存放的內容是另一個檔案的路徑名字。訪問符號連結檔案時,系統根據記載內容去跳轉。符號連結檔案和目標檔案是兩個對應的檔案,有各自的目錄項,Inode和資料塊。路徑比較短的時候目標路徑在Inode,長的時候才在資料塊裡面。符合連結檔案的優點是靈活,可以 跨越檔案系統和目錄,缺點是空間開銷大,每個符號連結都建立一個新的檔案,通過連結檔案訪問目標檔案要兩次檔案訪問。

硬連結

將兩個或者多個檔案的Inode節點物理的連線在一起,硬連結檔案具有不同的檔案路徑名和同一個Inode,通過其中任何一個訪問得到的都是同一個內容,造成一個檔案具有多個別名的效果。硬連結不能跨越檔案系統。(因為對應的同一個Inode必然是在同一個檔案系統的),硬連結是Linux系統整合檔案系統結構的基本機制,允許一個檔案具有多個 訪問路徑,節省空間且效率高,但是受檔案系統範圍的限制,不能對目錄進行連結操作。

EXT檔案系統的磁碟佈局

為了方便管理大型磁碟的儲存塊,Ext3檔案系統將它們分為若干塊組,每個塊組包含一定數量的連續的儲存塊,塊組包含的塊數取決於塊的大小,限制來源於塊點陣圖.  塊點陣圖 用來標識組中所有塊佔用情況,必須放在一個單獨的塊裡面,如果快的大小是4K,則塊點陣圖可以描述32K個塊,對應的塊組大小就是128M(相乘),塊組的數目取決於 分割槽的大小和塊組的大小(被除數和商)

儲存分配策略

分配方法是根據位檢視中的記錄找到空閒的inoed節點,和資料塊分配給檔案。儘量把同一個檔案所使用的塊,同一個目錄相關聯的節點存放在相鄰的單元裡面,至少是一個塊組,總之就是儘量的好。

相關推薦

理解作業系統4--檔案管理疑惑總結

檔案和檔案系統 檔案系統是作業系統的一個重要組成部分,負責管理系統裡面的檔案,為使用者提供檔案操作介面,檔案系統由實施檔案管理的軟體和被管理的檔案組成,為使用者提供使用檔案的操作介面,檔案系統軟體屬於系統核心程式碼,檔案按照特定的格式存放在磁碟分割槽。檔案系統通常安裝磁碟分

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.4 檔案管理/3.4.1 檔案的組織結構

檔案的組織結構 概念:指的是檔案的構造方式,從使用者角度是檔案的邏輯組織,從系統角度是檔案的物理組織 檔案的邏輯結構 概念:使用者概念中的檔案,不依賴於物理儲存 無結構的流式檔案 指的是資訊項的組合,單位是位元組,系統不

易學筆記-系統分析師考試-第3章 作業系統基本原理/3.4 檔案管理/3.4.2 儲存空間管理

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

作業系統 學習筆記4-檔案管理

第四章 檔案管理 4.1檔案系統基礎 4.1.1檔案的概念 計算機以程序為基本單位進行資源的排程和分配;而在使用者進行的輸入、輸出中,則以檔案為基本單位。大多數應用程式的輸入都是通過檔案來實現的,其輸

2019年王道計算機考研作業系統筆記---檔案管理

文章目錄 名詞解釋 檔案型別 檔案的邏輯結構 無結構檔案(流式檔案) 有結構檔案(記錄式檔案) 順序檔案 索引檔案

作業系統檔案管理

  一 檔案和檔案系統           檔案管理:把所管理的程式和資料組織成一系列的檔案,並能進行合理的儲存、使用等操作。          1 基本概念            資料項:描述物件某種屬性的字符集;是資料組織中可以命名的最小邏輯資料單位。      記錄:一組相關資料項集合,描述物件

作業系統-10——檔案管理

檔案和檔案系統1.檔案(File)    1.1 定義:儲存在外存上具有標識名的一組相關字元流或記錄的集合。可長期儲存和共享。    1.2 分類:記錄式檔案、流式檔案。(按檔案結構劃分)            #記錄式檔案:資料有4個結構層次:域(欄位)、記錄、檔案、資料庫

作業系統總結四(檔案管理

檔案的屬性 檔案有一定的屬性,這根據系統的不同而有所不同,但是通常都包括如下屬性: ①名稱:檔名稱唯一,以容易讀取的形式儲存。 ②識別符號:標識檔案系統內檔案的唯一標籤,通常為數字,它是對人不可讀的一種內部名稱。 ③型別:被支援不同型別的檔案系統所使用。 ④位置:指向裝置和裝置上檔案的指標。 ⑤大小:檔案當

Linux作業系統基礎操作總結 Linux作業系統基礎操作之基礎知識 Linux作業系統之基礎命令介紹 Linux作業系統基礎操作之目錄操作 linux作業系統基礎操作之檔案操作 Linux作業系統之許可權管理

Linux作業系統基礎操作之基礎知識 Linux的組成 Linux核心:系統心臟,是作業系統的核心,實現作業系統的基本功能。 Linux shell:系統的使用者介面,提供使用者與核心互動的一種介面,解釋使用者輸入的命令並將其送入核心執行。 Linux應用程式:Linux作業系統中應用程式集合,包括:

計算機作業系統-檔案管理 知識點歸納

1.在作業系統的引論部分介紹過作業系統的主要功能有:處理機管理功能、儲存器管理功能、裝置管理功能、檔案管理功能。 2.檔案管理功能:專門管理在外存上的檔案,並把對檔案的存取、共享和保護等手段提供給使用者。檔案系統的功能大多在中間層-對物件操縱和管理的軟體集合上實現,包括:①對檔案儲存空間的管理

檔案管理 作業系統

  檔案結構: 邏輯結構檔案:從使用者觀點出發所觀察到的檔案組織形式。                         邏輯結構檔案又可分為:有結構檔案

作業系統檔案管理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Linux作業系統知識點五:作業系統的功能——檔案管理

檔案是具有符號名的一組相關元素的有序序列,是一段程式或資料的集合。 檔案是儲存資訊的基本結構。 資訊包括相關記錄或者字元流。 檔案通過檔名標識。 檔案分類 (1)按檔案的資料形式分:原始檔、目標檔案、可執行檔案。 (2)按用途分:系統檔案、庫檔案、使用者檔案。 (3)按存

Linux作業系統知識點六:作業系統的功能——檔案管理(程序管理

回顧:作業系統的功能 1.處理器管理 2.儲存管理 3.裝置管理 4.檔案管理 5.作業管理 程序 概念 可併發執行、具有獨立功能的程式(program)關於某個資料集合的一次執行活動。是作業系統進行資源分配和排程執行的基本單位。 程序的特性: 動態性(程序的最基

linux上檔案管理類命令總結

Linux上的檔案管理類命令有三個,分別是:cp、mv、rm命令。 cp:  複製檔案和目錄的命令。cp命令分為兩種,分別是:單源複製和多源複製:  單源複製:    如果目標檔案和目錄(DEST)不存在,則實現建立此檔案,並複製原始檔的資料流至DEST中。

作業系統知識點總結(十七)檔案系統知識點總結

磁碟結構 引導控制塊(Boot Control Block)包括系統從該分割槽引導作業系統所需要的資訊。如果 磁碟沒有作業系統,那麼這塊的內容為空。它通常為分割槽的第一塊。UFS稱之為引導塊(Boot Block); NTFS 稱之為分割槽引導扇區(Partition B

linux-4-檔案與目錄管理

目錄與路徑 . : 代表此層目錄 .. :代表上一層目錄 - :代表前一個工作目錄 ~ :代表目錄使用者所在的家的目錄 ~user:代表user這個使用者的加的目錄 目錄的相關操

深入理解作業系統原理之檔案系統

一、概述 作業系統對系統的軟體資源(不論是應用軟體和系統軟體)的管理都以檔案方式進行,承擔這部分功能的作業系統稱為檔案系統。 1、檔案 計算機系統對系統中軟體資源:無論是程式或資料、系統軟體或應用軟體都以檔案方式來管理。檔案是存貯在某種介質上的(如磁碟

理解UNDO-4 總結

寫了前面3章後,感覺還魚尾,感覺不完整樣!有魚頭和魚尾的問題沒有得到解決. 好像吃了一條魚,只吃了魚身,沒有看到魚頭和 魚頭之疑惑是 讀一致性: 當一個查詢找到該塊,如何通過行來發現該行的是否被修改提交過. 怎麼樣找到ITL裡面 哪個事務槽影響了該行? 實際上它不需要通過行來判斷

運維基礎知識總結檔案管理、許可權)

檔案系統與目錄結構 Linux下的檔案型別 -:普通檔案 d: 目錄檔案 b: 塊裝置 c: 字元裝置 l: 符號連結檔案 p: 管道檔案pipe s: 套接字檔案socket 列出目錄內容  列出當前目錄的內容或指定目錄  用法:ls [opt