1. 程式人生 > >檔案系統實現概念

檔案系統實現概念

檔案系統永遠在外存中,儲存大量資料。
檔案能夠原地改寫,即能夠讀出一塊,並修改,再寫回。
外存和記憶體的傳輸的最小單位為block。
磁碟是隨機儲存器。
檔案系統設計也是分層設計思想。從最底層開始講起。
(1)I/O控制層,包括裝置驅動程式(翻譯高層命令控制硬體控制器)+中斷處理程式。
(2)基本檔案系統:傳送高層命令給裝置驅動程式用以對磁碟進行讀寫。
(3)檔案組織模組:從邏輯塊-->物理塊,給基本檔案系統使用。
(4)邏輯檔案系統:管理元資料。元資料就是一些檔案屬性+檔名。
分層設計在計算機網路裡也有提到,TCP/IP協議等。好處當然是能夠清晰的劃分各自的功能。
linux檔案系統:ext3,4.
windows檔案系統:FAT,NTFS.
一個檔案系統包括:
(1)引導控制塊(boot control block)是一個卷的第一塊,如果該卷沒有作業系統,則為空。
(2)卷控制塊:卷的詳細資訊包括有多少塊可以用、塊大小等。
(3)目錄:檔名+FCB(inode 索引節點)。
FCB在另一篇部落格中已經講到,包括一些檔案的屬性但是不包括檔名。
FCB==inode==Master File Table
記憶體中有一些資訊是在檔案系統被mount的時候載入進去的,比如目錄,整個系統的開啟檔案表、單個程序的開啟檔案表。
檔案系統被mount時可能就已經把所有FCB都分配好了,存在pool中。
UNIX中目錄和檔案是一起處理的,windows中目錄和檔案有不同的系統呼叫。
比如open一個新的檔案,則建立一個FCB,在單個程序開啟檔案表,系統開啟檔案表等中適當加入記錄,並返回一個控制代碼。
UNIX中稱為檔案描述符,windows中稱為檔案控制代碼。

一個磁碟能有多個分割槽,如果一個分割槽沒有檔案系統,則稱為生的。
引導區如果有多個作業系統和多個檔案系統,則通過啟動載入器能夠定位一個作業系統。
根分割槽包括作業系統和系統檔案,在引導時匯入記憶體。
當裝入檔案系統時,可以自動或手動裝入。當裝入檔案系統時,作業系統需要判定是否有效,如果有效,則在裝入表中填入檔案系統的型別。

為了在不同檔案系統中無縫移動,引入了VFS。
(1)VFS把檔案系統的介面和具體實現分開。
(2)在NFS中,也要有一個唯一標識遠端檔案的識別符號,因此vnode類似inode,儲存遠端檔案屬性。
因此通過vnode還是inode能區分本地和遠端檔案,再是通過特定檔案型別來區分檔案,因此我們可以正確的呼叫特定的操作。
VFS定義的4個主要物件型別:
(1)inode object。單獨的檔案。
(2)file object。開啟的檔案。
(3)superblock object。整個檔案系統。
(4)dentry object。單獨的目錄條目。
對於每個物件型別都有一系列的操作。

目錄實現有很多種,
(1)線性列表。
儲存檔名和指向FCB的線性連結串列。
可以使用軟體快取來儲存最近使用過的目錄。
(2)雜湊表。
給定一個檔名,通過雜湊函式,快速找到指定目錄。
缺點:雜湊函式及雜湊值都是預先給定,不能靈活變換。
解決方案:動態雜湊即可擴充套件雜湊、線性雜湊等。或者使用溢位桶。

檔案分配空間方法:
一、連續分配。
每個檔案都是連續分配。分配時遵循首次適應方法。
目錄是由(檔名,開始位置,長度)組成。
優點:直接訪問。
缺點:
(1)外部碎片。
(2)確定檔案大小。
解決方法:
(1)對於外部碎片,重新打包即把所有檔案系統都複製到磁帶上,清空整個磁碟,並重新分配連續空間。
(2)對於無法確定檔案大小,則重新分配孔,但是費時;或者使用擴充套件連續空間。那麼目錄就是(檔名,開始位置,塊數,第二個開始位置)組成。
二、連結分配。
目錄為(檔名,檔案起始指標,檔案結尾指標)組成。
檔案由連結串列組成。
優點:分配時只要有空閒塊即可。沒有外部碎片。
缺點:
(1)順序訪問而不能隨機訪問。
(2)指標需要空間。
(3)內部碎片。
(4)可靠性問題。因為由指標連結,只要有一個指標丟失,則檔案就崩潰。
解決方法:
對於指標佔用空間問題,需要利用更少的指標,則引入了cluster(簇),即一個簇由多個塊組成。但是會加劇內部碎片問題。
對於可靠性,我們可以用FAT(檔案分配表),目錄為(檔名,開始塊)組成。先在FAT找到指定塊,再指向塊的具體位置。
採用FAT會導致磁頭尋道時間過長。
三、索引分配。
把所有索引放在一起,可以支援直接訪問。
但是索引可能會在一個塊不夠存放,因此有了幾種方法:
(1)連結方案:通過將索引塊連結起來。
(2)多層索引。
(3)組合方案。例如Unix中的inode,在inode中有15個指標存在檔案中,頭12個指標為直接塊。其他三個為間接索引塊。第一個為一級間接塊。依次類推,第三個為三級間接塊。
如果檔案不大,則可以直接訪問。

對於空閒空間,我們也需要維護一個空閒空間連結串列。下面介紹幾種方法實現。
(1)位向量。
通過已分配的塊記為0,未分配的塊記為1,則只需要簡單的位運算就能得出第一個空閒塊或者連續空閒塊大小等結論。
缺點:所佔空間太大。
(2)連結串列。
空閒空間通過連結串列連起來,第一個空閒塊的地址快取在記憶體中。
缺點:效率不高。
(3)組。
將n個空閒塊的地址存在第一個空閒塊中。
(4)計數。
空閒空間表中每個條目記錄(起始,長度)的記錄。

注:本人正在學作業系統,發現此篇部落格是原創者對《作業系統概念》書中的一些總結,結合書本看效率更高。

相關推薦

檔案系統實現概念

檔案系統永遠在外存中,儲存大量資料。 檔案能夠原地改寫,即能夠讀出一塊,並修改,再寫回。 外存和記憶體的傳輸的最小單位為block。 磁碟是隨機儲存器。 檔案系統設計也是分層設計思想。從最底層開始講起。 (1)I/O控制層,包括裝置驅動程式(翻譯高層命令控制硬體控制器)+

作業系統概念(高等教育出版社,第七版)複習——第十一章:檔案系統實現

第十一章 檔案系統實現 基礎知識 檔案系統實現(超重點) 一個磁碟可分為多個分割槽,或者一個卷可橫跨多個磁碟上的數個分割槽。分割槽可以是“生的”,即沒有檔案系統,也可以是“熟的”,即含有檔案系統。 目

檔案系統實現

檔案系統實現 檔案系統結構 磁碟提供大量的外部空間來維持檔案系統。磁碟的下述兩個特點,使其成為儲存多個檔案的方便介質: 可以原地重寫,可以從磁碟上讀一塊,修改該快,並將它寫回到原來的位置。 可以直接訪問磁碟上的任意一塊資訊。因此,可以簡單地順序或隨機地

基於檔案系統實現可追加的資料集市

一 問題背景 絕大多數的應用系統中,一開始資料的儲存和計算基本都是由資料庫來完成的,同時服務於業務交易和報表查詢;不過在經過幾年資訊化建設和資料積累後,常常都會遇到資料庫壓力變大,從而導致效能瓶頸的問題。 究其原因,往往發現針對歷史資料查詢的報表在其中佔了很大比重。進

Linux檔案系統實現

作者:Vamei 出處:http://www.cnblogs.com/vamei 歡迎轉載,也請保留這段宣告。謝謝! Linux檔案管理從使用者的層面介紹了Linux管理檔案的方式。Linux有一個樹狀結構來組織檔案。樹的頂端為根目錄(/),節點為目錄,而末端的葉子為包含資料的檔案。當我們給出一個檔案的完

Hadoop分散式檔案系統——HDFS概念以及hdfs讀寫資料

HDFS一流式資料訪問模式來儲存超大檔案,運行於商用硬體叢集上。 一、HDFS 的概念 1、資料塊: (1) 每個磁碟都有預設的資料塊大小,這是磁碟進行資料讀/寫的最小單位 (2) HDFS有資料塊的概念,預設是64M,hadoop2中是

EXT2檔案系統實現原理

目錄 二    塊快取    6 EXT2檔案系統結構概覽 1.1 EXT2檔案系統結構框圖 每一個檔案或者目錄在磁碟上都有一個inode用於管理檔案本身屬性資訊,還有資料塊用於存放檔案內容。其inode'和資料塊關係如下圖:   如果檔案比較小,其資料

UNIX檔案系統相關概念

主要包含四項:檔案,目錄項,索引節點,安裝節點。 檔案系統是一個特殊的資料分層資料結構。使用它時,必須先格式化。 檔案:有序資料串,可以進行讀寫,開啟,建立,關閉,刪除等操作 目錄項:就是個資料夾而已,來包含檔案。實質上是跟檔案一樣的東西,找到裡面的檔案通過索引節點。 索引

Linux虛擬檔案系統基礎概念

參考:《Linux核心設計與實現》第13章 虛擬檔案系統 虛擬檔案系統(VFS)作為核心子作業系統,為使用者空間程式提供了檔案和檔案系統相關的介面。程式可以利用標準的Unix系統呼叫(如:open()、read()、write())對不同的檔案系統,甚至不同的介質上的

Laravel使用自帶的檔案系統實現檔案上傳

這算是觀看慕課網是的視訊然後寫的一篇筆記 介紹:Laravel自己的檔案系統 Laravel的檔案系統是基於Frank de Jonge的Flysystem擴充套件包 提供了簡單的介面,可以操作本地端空間,Amazon S3 、Rackspace Cloud S

檔案系統基本概念彙總

1---         檔案系統=檔案+目錄結構; 2---          從使用者的角度而言,檔案是邏輯外存的最小分配單元,即資料除非在檔案中,否者不能寫到外存。檔案表示程式(源形式和目標形式

Linux kernel FAT32檔案系統實現

1.     FAT表操作 FAT檔案系統中,使用FAT表標記哪個cluster被佔用,哪個沒被佔用。在Linux核心程式碼中,與FAT表操作對應的是fat_entry,fatent_ops結構和fat_cache_id快取等。 1.1 fat_entry fat中的f

作業系統課程設計 —— 模擬磁碟檔案系統實現 (Java)

這是我前段時間做了一個作業系統課程設計作業,使用java實現了命令列輸入對虛擬檔案進行管理。 下面是課程設計要求: 題目五  模擬磁碟檔案系統實現  一、課程設計目的  瞭解磁碟檔案系統的結構、功能和實現。並可練習合作完成系統的團隊精神和提高 程式設計能力。  二、小組人

MSP430 SD卡SPI讀寫操作(4) —— FatFs檔案系統實現(以MSP430F5438A為例)

本節介紹MSP430F5438A FatFs檔案系統的移植。 FatFs是一個通用的檔案系統模組,用於在小型嵌入式系統中實現FAT檔案系統。FatFs模組與IO是分開的,因此移植時需要實現下面幾個底層函式: DSTATUS disk_initialize (BYTE dr

Ubuntu Linux 菜鳥正在入門學習(四)——檔案系統概念

1.什麼是檔案系統      檔案系統是對一個儲存裝置上的資料和元資料進行組織的機制,其目的是易於實現資料的查詢和存取。Linux檔案系統介面實現為分層的體系結構,從而將使用者介面層 檔案系統實現和操作儲存裝置的驅動程式分開。 1)儲存介質 用以儲存資料的物理裝置,如軟盤

操作系統概念 文件系統實現

指針 中斷 命令 減少 目標 連續分配 外存 提高 sector 磁盤提供大量的外存空間來維持文件系統。磁盤的下述兩個特點使得其成為存儲多個文件的方便介質。 ①可以原地重寫; ②可以直接訪問磁盤上的任意一塊信息。 為了提供對磁盤的高效且便捷的訪問,操作系統通過文件系統來

Linux fsync和fdatasync系統呼叫實現分析(Ext4檔案系統

參考:https://blog.csdn.net/luckyapple1028/article/details/61413724 在Linux系統中,對檔案系統上檔案的讀寫一般是通過頁快取(page cache)進行的(DirectIO除外),這樣設計的可以延時磁碟IO的操作,從而可以減少磁碟讀

linux的檔案系統以及使用者組等概念

一、Linux檔案結構及基本資料夾 目錄 描述 / 根目錄 /bin 做為基礎系統所需要的最基礎的命令就是放在這裡。比如 ls、cp、mkdir等命令;功能和

轉:iTOP-4412實現NFS網路檔案系統

[學習嵌入式開發板]iTOP-4412實現NFS網路檔案系統 <div class="extra ui horizontal list meta-wrap"> <div class="item">

Linux根檔案系統製作與各種掛載方式的實現

Linux根檔案系統的製作 什麼是檔案系統 計算機的檔案系統是一種儲存和組織計算機資料的方法,它使得對其訪問和查詢變得容易,檔案系統使用檔案和樹形目錄的抽象邏輯概念代替了硬碟和光碟等物理裝置使用資料塊的概念,使用者使用檔案系統來儲存資料不必關心資料實際儲存在硬碟(或者光碟)的地址為多少的資料