天天看點

作業系統核心原理-6.外存管理(下)檔案系統

作業系統核心原理-6.外存管理(下)檔案系統

作業系統是一個魔術師,其提供給使用者的就是各種幻想:抽象。程序抽象的是CPU,虛拟記憶體抽象的是記憶體,對于磁盤來說,作業系統提供給使用者的幫助就是在磁盤外面包裹一層容易使用的抽象,使用者直接與這層抽象打交道,而無需了解磁盤的技術細節。在作業系統中,這層為磁盤提供的抽象就是:檔案系統。

一、為何需要檔案系統?

  磁盤具有大容量、低成本以及持久化的特點,即使發生斷電,磁盤上的資料也不會丢失。但是,對于一般使用者而言,使用磁盤是非常苦難的,因為他們不知道如何驅動一個磁盤,以及計算資料在磁盤上的存放位置。從上一篇《磁盤基礎》可以知道,了解磁盤的各項技術細節将使使用者不堪重負。

  作業系統是一個魔術師,其提供給使用者的就是各種幻想:抽象。程序抽象的是CPU,虛拟記憶體抽象的是記憶體,對于磁盤來說,作業系統提供給使用者的幫助就是在磁盤外面包裹一層容易使用的抽象,使用者直接與這層抽象打交道,而無需了解磁盤的技術細節。在作業系統中,這層為磁盤提供的抽象就是:檔案系統。

二、檔案系統的基本概念

2.1 檔案系統是什麼

  檔案系統是作業系統為磁盤和使用者之間提供的一個抽象,它是一個子虛烏有的,看不見摸不着的接口,如下圖所示:

作業系統核心原理-6.外存管理(下)檔案系統

  (1)檔案系統使得使用者能夠很友善的使用磁盤:将使用者從資料存放的細節中解放出來,使用者不需要知道内容存放在什麼地方,也不需要知道如何存放,更不需要知道磁盤到底是如何工作的。

  (2)簡單地說,檔案系統将其接觸的磁盤實體特性轉換為使用者看到的路徑名和檔案名。使用者對磁盤進行通路隻需要給出檔案名和路徑名即可,而無需知道磁柱、磁道、扇面、資料塊等資訊。

  (3)檔案系統的主要特性就是存儲大量的資訊,多個程序可以同時通路一個檔案,程序結束也不會影響檔案的持續存在。

2.2 檔案系統的目标

  (1)位址獨立

  一個檔案在産生的時候無需擔心其存放的磁盤位址,即檔案資料的産生與檔案将來存放的磁盤位址互相獨立。

  (2)位址保護

  位址保護需要對檔案的通路進行一定的限制,即不是任何人都可以通路任何檔案。

Difference:檔案系統的位址保護與記憶體管理下的位址保護不同,記憶體管理下位址保護指的是一個程序不能通路另一個程序空間,而檔案系統下的位址保護不是一個檔案不能通路另一個檔案空間,而是一個檔案的通路時有限制的。

2.3 檔案的基本知識

  (1)檔案命名

  檔案名可以便于通路一個檔案,這個檔案名既可以是英語名、中文名,也可以是圖像名。當使用者給出一個檔案名,作業系統就可以根據這個名字找到對應檔案的内容。具體來說,就是找到該檔案存放在磁盤上的所有資料塊。

  作業系統将檔案名翻譯為其資料塊在磁盤上存放的位址,由于磁盤的尋址機關是扇面,而這些磁盤位址實際上就是一個個的扇面号。

  (2)擴充名

  擴充名通常用來表明檔案的類型,如何文本檔案、二進制檔案等等。例如:file.c 表明該檔案是一個C語言的源檔案。擴充名對檔案類别的訓示僅僅是訓示性的,并不具有強制性。

  (3)内容尋址

  除了給出檔案名外,還可以給出檔案的内容,供作業系統查找使用。資料庫系統是這種實作方式的典型應用。

  (4)檔案通路

  ①順序通路:從開頭開始通路,按照先來後到的順序讀取資料。

  ②随機通路:可以按照任意順序讀取資料記錄,就像我們看DVD一樣可以随機選擇想要觀看的段落。

  (5)檔案屬性

  每個檔案除了一個檔案名外,還有許多資訊也是我們感興趣的,是以,檔案還擁有一些屬性。不同的作業系統,檔案的屬性種類和數量都不同,但每一種屬性都有自己的用途,下表列出了常見的檔案屬性:

作業系統核心原理-6.外存管理(下)檔案系統

  (6)檔案操作

  可以對檔案進行操作有:建立/删除、打開/關閉、讀寫添加、尋找通路位置、讀取屬性/設定屬性、重命名等等。

三、檔案夾實作位址獨立

3.1 為何要有檔案夾

  我們可以對檔案進行讀寫操作,那麼給一個檔案名,作業系統是如何知道從什麼地方讀取檔案内容的呢?換句話說,檔案在磁盤上的什麼位置,作業系統是如何知道的呢?這需要一個資料結構來記錄每個檔案在磁盤上的位址,這個資料結構就是檔案夾。

  檔案夾也稱為目錄夾(Folder),它的角色就是跟蹤檔案,裡面存放的是從檔案到檔案所在磁盤的位址的映射,即“檔案名→檔案所在磁盤上的位址”。檔案夾對于檔案來說,就相當于從虛拟位址到實際位址的一種翻譯機制。

3.2 檔案夾結構

  由于檔案夾裡面可以有子檔案夾,是以就形成了一個層次結構,這個層次結構的頂端就是根檔案夾(也稱為根目錄),如下圖所示:

作業系統核心原理-6.外存管理(下)檔案系統

  根目錄是一個檔案系統的總起點,它在作業系統啟動的時候加載到記憶體。從根目錄開始,該檔案系統裡面的所有檔案都可以找出來。

四、檔案系統的調用

4.1 作業系統提供的“接口”

  作業系統為使用者提供的檔案系統接口就是檔案系統調用,使用者可以在程式中通過這些系統調用來對檔案系統進行讀寫操作。這些系統調用包括:打開檔案、關閉檔案、讀檔案内容、寫檔案内容等等。

4.2 檔案系統調用執行個體

  下圖展示了一個C語言編寫的使用檔案系統調用實作檔案拷貝的簡單執行個體程式:

作業系統核心原理-6.外存管理(下)檔案系統

  上述檔案拷貝程式實作的是打開源檔案和目标檔案,然後循環往複地将源檔案内容讀取到一個緩沖區,然後将緩沖區的内容寫到輸出目标檔案裡。當拷貝結束後,關閉源檔案和目标檔案。

參考資料

作業系統核心原理-6.外存管理(下)檔案系統

鄒恒明,《作業系統之哲學原理》,機械工業出版社

作者:周旭龍

出處:http://edisonchou.cnblogs.com

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結。

繼續閱讀