1. 程式人生 > >檔案系統---檔案系統的基本概念

檔案系統---檔案系統的基本概念

檔案系統

        Linux核心的應用層是以 檔案系統 為核心展開,以檔案系統作為整個核心應用層的核心,理由如下:

--檔案系統本身具有重大作用

    分散式檔案系統的廣泛應用讓檔案系統成為當前核心應用的熱門

--檔案系統在整個核心架構中具有基礎架構性質

    字元裝置、塊裝置 這些裝置驅動 需要依靠檔案系統來實現。裝置管理的基礎架構也要依靠檔案系統(sysfs)。裝置和驅動 是國內當前在核心層面應用,也是國內底層開發中應用最多的方面。

        從檔案系統入手,掌握基本概念實現架構後,可以從穩健系統引出裝置檔案的概念,裝置檔案可以引申到 字元裝置 和 塊裝置,這樣從 檔案系統 過度到 裝置管理。

裝置管理包含 裝置驅動, 裝置驅動要用到中斷,裝置裡面的塊裝置又控制了 通用塊層 和 I/O排程。 

而檔案系統向外引申又和網路的socket聯絡。

        深入檔案系統的的程式碼,可以瞭解到記憶體的頁面管理。

        從檔案系統出發,層次推進基本囊括了核心的應用層的重要概念和架構。

2.1 檔案系統的基本概念

2.1.1 VFS

        VFS------ VIrtual File System 虛擬檔案管理系統

linux核心通過虛擬檔案系統(VFS)管理檔案系統;

VFS是linux核心檔案系統的一個極其重要的基礎設施,VFS為 所有的檔案系統提供統一的介面,對每個檔案系統的訪問都需要通過VFS定義的介面來實現。同時,VFS也是一個極其重要的架構,所有的linux檔案系統都必須按照VFS定義的方式來實現;

VFS存在於記憶體中,將硬碟上的檔案系統抽象到記憶體中。

VFS定義了幾個重要結構:

dentryinodesuper_block,通過這些結構將真實的硬碟檔案系統抽象到記憶體。

通過管理dentry、inode、super_block這幾個物件就可以完成對檔案系統的一些操作-----合適的時候仍需要將記憶體資料寫入到硬碟

2.1.2 超級塊super_block

超級塊suoer_block代表整個檔案系統本身。

超級塊是對應檔案系統本身的控制塊結構【可參考ext2檔案系統的超級塊結構】。

超級塊儲存了檔案系統設定的檔案塊大小超級塊的操作函式檔案系統內所有的inode也要連結到超級塊的表頭

對於一個具體檔案系統的控制塊可能還含有另外的資訊,通過超級塊物件,可以找到這些必要的資訊。

超級快的內容需要讀取具體檔案系統在硬碟上的超級塊獲得,所以超級塊是具體文本系統超級塊的記憶體抽象

超級塊物件整個結構很龐大龐雜,以下是超級塊的簡化後的定義:

---------------------------------------------------------------------------------------
struct super_block{
	unsigned longs_blocksize;
	unsigned chars_blocksize_bit;
......
	unsigned long longs_maxbytes;
	struct file_system_type*s_type;
	struct super_operations*s_op;

	unsigned longs_magic;
	struct dentry*s_root;

	struct list_heads_inodes;
	struct list_heads_dirty;

	struct block_device*s_bdev;
	void*s_fs_info;
}
從兩方面瞭解超級結構快的作用:

1)超級塊結構給出了檔案系統的全域性資訊

*s_blocksize---指定了檔案系統的大小

*s_maxbytes---指定檔案系統中最大檔案的尺寸

*s_type         ---指向file_system_type結構的指標

*s_magic      ---魔術數字,每個檔案系統都有一個魔術數字

*s_root---指向檔案 系統根dentry的指標

超級塊還定義了一些連結串列頭:

*s_inode---指向檔案系統內所有的iNode,通過他可以遍歷inode物件

*s_dirty  ---指向所有dirty的inode物件

*s_block---指向檔案系統存在的塊裝置指標

2)超級塊結構包含一些函式的指標

-------super_operation提供了最重要的超級塊操作

例如super_operation的成員函式read_inode提供讀取inode資訊的功能。

每個具體的檔案系統需要提供這個函式來實現對inode資訊的讀取,例如ext2檔案系統--具體函式是ext2_read_inode

(我們可以理解為‘VFS提供了架構,具體檔案系統按照VFS的架構實現’)


目錄項dentry

----檔案和目錄一般按照樹狀結構儲存。目錄項【dentry】就反應了檔案系統的這種樹狀關係。

---在VFS中,目錄本身就是一個檔案;

---------------------------------------------------------------------------

struct  dentry {

..../省略dentry鎖、標誌等程式碼/

struct inode*d_inode;

struct hlist_noded_hash;

struct dentry*d_parent;

struct qstrd_name;

/*d_child and d_rcu can share memory*/

union {

  struct list_head_dd_child;

  struct rcu_headd_rcu;

} d_u;

structlist_headd_subdirs;

structdentry_operations*d_op;

structsuper_block*d_sb;

intd_mounted;

}

---------------------------------------------------------------------------

對dentry的解釋如下:

索引節點inode

---inode代表一個檔案。inode儲存了一個檔案的大小、建立時間、檔案的塊大小等引數,以及檔案的讀寫函式、檔案的讀寫快取等資訊。

---檔案只有一個inode,可以有多個dentry【指向檔案的路徑可以多個(考慮檔案的連結)】。

inode和dentry分別代表檔案通用的兩個部分

inode結構定義十分龐大,簡化重點的幾個結構成員如下:

--------------------------------------------------------------------------------------

struct inode {

struct list_headi_list;

struct list_headi_sb_list;

struct list_headi_dentry;

unsigned longi_ino;

atomic_ti_count;

loff_ti_size;

unsigned inti_blkbits;

struct inode_operations*i_op;

const struct file_operation*i_fop;

struct address_space*i_mapping;

struct block_device*i_bdev;

......

};

--------------------------------------------------------------------------------------

inode 結構解釋:

--i_list: 連結描述inode當前狀態的連結串列

--i_sb_list:連結到超級塊中的inode連結串列

***當建立一個新的inode的時候,成員i_list連結到inode_in_use這個連結串列【表示inode在使用狀態】,同時成員i_sb_list連結到檔案系統超級塊的s_inode連結串列頭。

--i_dentry:一個檔案有多個dentry,這些dentry都連線到成員i_dentry這個連結串列頭

------i_ino:inode的號

------i_count:inode的引用計數

------i_size:以位元組為單位的檔案長度

-i_blkbits:檔案塊的位數

檔案

檔案物件的作用是描述 程序 和 檔案 互動 的 關係;

硬碟上並不存在一個檔案結構

程序開啟一個檔案,核心就動態建立一個檔案物件

同一個檔案,在不同程序中有不同的檔案物件

檔案的結構定義如下程式碼清單:

-------------------------------------------------------------------------

struct file {

  struct dentry*f_dentry;

  struct vfsmount*f_vfsmnt;

  const struct file_operation*f_op;

.......

  loff_tf_ops;

  struct fown_structf_owner;

  usigned intf_uid,

  struct file_ra_statef_ra;

  struct address_space*f_mapping;

}

-------------------------------------------------------------------------

--f_ra: 用於檔案預讀的設定---在第10章繼續分析檔案

註釋:

檔案預讀:

--對於檔案的預讀,Linux核心提供了預讀策略------比要求讀的長度多讀一些,儲存在page cache裡,後續讀如果是順序的,馬上可以利用page cache的資料返回,不必再次讀硬碟。對於硬碟這種慢速裝置來說,利用快取資料可以大大提升I/O傳輸效率。

核心提供預設的預讀引數,程式碼清單如下:

--------------------------------------------------------------------------------------------------------------

struct  backing_dev_info  default_backing_dev_info = {

.ra_page=(VM_MAX_READAHEAD * 1024)  /  PAGE_CACHE_SIZE,

.state=0,

.capabilities=BDI_CAP_MAP_COPY,

.unplug_io_fn=default_unplug_io_fn,

}

--------------------------------------------------------------------------------------------------------------

linux-2.6.39\mm\backing-dev.c

struct backing_dev_info default_backing_dev_info = {
	.name		= "default",
	.ra_pages	= VM_MAX_READAHEAD * 1024 / PAGE_CACHE_SIZE,
	.state		= 0,
	.capabilities	= BDI_CAP_MAP_COPY,
};

VM_MAX_READAHEAD 預設設定為128KB,即預設讀取頁面是32個4KB的頁面。

Linux核心會根據檔案讀取是否順序啟動預讀引數和設定預讀視窗,對於連續的順序讀,會盡量多讀一些內容填充page cache。

注--這部分的內容在readahead,c檔案裡面。檔案不大,比較孤立,不涉及太多關聯的知識點,可以分析一下預讀程式碼

相關推薦

金萬城平臺扣892118碼是數據系統中的基本概念

概念 管理數據 很多 選擇 data 屬性 數據存儲 就是 所有 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,數據庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型數據庫系統都在各個方面得到了廣泛的應用。 所謂碼就是能唯一標

分散式系統-->(關於系統應用的基本概念)

分散式系統-->(關於系統應用的基本概念) 最近想了一下,個人學習使用了很多很優秀的開源技術,然後也看了一些的書籍,感覺需要去整理一下,然後分享出來,一方面是一個知識總結,第二方面是有一個知識共享,期間會寫一些關於分散式系統的基礎知識,包括分散式系統會遇到的問題,然後是各種分散式應用

訊號系統的一些基本概念

洩露 截斷會使譜分析精度受到影響。如果時域訊號是週期性的,而截斷又按整週期取數,訊號截斷不會產生問題,因為每週期訊號都能代表整個週期訊號變化情況。若不是整週期擷取資料,則截斷將使訊號波形兩端產生突變,所擷取的一段訊號與原訊號有很大不同,對這個被截斷的時域訊號進行譜分析時,本來集中的

資料庫系統概論01-基本概念&特點& 三級模型結構&二級映像

從聯機事務處理(On-Line Transaction Processing,LOTP)到聯機分析處理(On-Line Analysis Processing,OLAP) 從一般企業管理到計算機輔助設計與製作(CAD/CAM)、計算機整合制造系統(CIMS)、電子政務(e-G

核心系統涉及的基本概念

1.1 新契約涉及的基本概念 1.壽險危險保額:某一壽險險種身故給付的最高保險金額,又稱死亡保額。 2.意外險保額:某一意外險險種意外身故給付的最高保險金額。 3.重大疾病責任保額:某一包括重疾保險責任險種因重大疾病給付的最高保險金額。 4.人身險保額:壽險危險保額和意外險保額的合計。 5.

【分析】Ceph系統架構與基本概念

Ceph系統架構與基本概念 Ceph是一種為優秀的效能、可靠性和可擴充套件性而設計的統一的、分散式儲存系統。 “統一”表示Ceph一套儲存系統可以同時提供物件儲存、塊儲存和檔案系統儲存三種功能,以便在滿足不同應用需求的前提下簡化部署和運維。 “分散式”表示C

搞懂分布式技術1:分布式系統的一些基本概念

ble 數量 con 總結 個數 角度 之間 電纜 工作內容 搞懂分布式技術1:分布式系統的一些基本概念 1、分布式 小明的公司又3個系統:系統A,系統B和系統C,這三個系統所做的業務不同,被部署在3個獨立的機器上運行,他們之間互相調用(當然是跨域網絡的),通力合作完成公司

檔案系統---檔案系統基本概念

檔案系統         Linux核心的應用層是以 檔案系統 為核心展開,以檔案系統作為整個核心應用層的核心,理由如下: --檔案系統本身具有重大作用:     分散式檔案系統的廣泛應用讓檔案系統成為當前核心應用的熱門 --檔案系統在整個核心架構中具有基礎架構性質:  

檔案系統基本概念彙總

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

【GlusterFS學習之一】:GlusterFS分散式檔案系統基本概念及搭建

最近因為工作的需要在接觸GlusterFS,在未來的一段時間之內應該都要與之打交道,剛剛接觸分散式檔案系統,對很多概念和機制都不是很清楚,通過一段時間的學習有一點淺顯的認識,那麼就把這段時間的瞭解到的

Java基本概念-檔案系統與流操作

一 file類的介紹    1 檔案系統主要由磁碟分割槽、目錄檔案和檔案組成    2 檔案:流的容器,用file表示    3 流:檔案的內容,用stream表示    考慮跨平臺,用file表示磁碟、目錄、檔案    4 file類的主要常用方法:    

Hadoop分散式檔案系統搭建以及基本操作

1. 環境搭建 jdk-1.8 jdk下載地址 export JAVA_HOME = /usr/lib/java/jdk1.7.0_21 export PATH =$JAVA_HOME/bin:$PATH hadoop-2.7.3 hadoop各個版本

Hadoop分散式檔案系統(HDFS)的基本命令

轉載於:https://blog.csdn.net/zhaojw_420/article/details/531616241、-help[cmd] 顯示命令的幫助資訊./hdfs dfs -help ls12、-ls(r) 顯示當前目錄下的所有檔案 -R層層循出文件夾./hd

檔案系統以及硬碟分割槽概念

更多內容:本人部落格 檔案系統和硬碟分割槽基本概念介紹 檔案系統:是作業系統用於明確儲存裝置(常見的是磁碟,也有基於NAND Flash的固態硬碟)或分割槽上的檔案的方法和資料結構;即在儲存裝置上組織檔案的方法。 從系統角度來看,檔案系統是對檔案儲存裝置的

分散式檔案系統MFS的基本用法以及高可用實現

實驗主機環境(redhat 6.5 x86_64bit) ip hostname softwares to install 192.168.1.8 cobbler1 mfs-master cgi-server keepali

Linux系統檔案I/O程式設計(一)---open()等基本函式

Linux檔案I/O系統概述     虛擬檔案系統(VFS)     Linux系統成功的關鍵因素之一就是具有與其他作業系統和諧共存的能力。Linux系統的檔案系統由兩層結構構建:第一層是虛擬檔案系統(VFS),第二層是各種不同的具體的檔案系統。     VFS就是把各種具

linux系統命令列基本操作——檔案管理

各種二級目錄在linux中的作用 /bin       ##二進位制可執行檔案也就是系統命令 /sbin     ##系統管理命令存放位置 /boot     ##啟動分割槽,負責系統啟動 /dev      ##裝置管理檔案 /etc       ##大多數系統管理檔案 /home   ##普通使用者的家目

文件操作系統入門基本概念

平臺 ext fonts linux文件系統 mark proc文件系統 寫到 write 自動 1、文件管理系統   在大多數應用中,文件是一個核心成分,處理實時應用和一些特殊的應用外,應用程序的輸入都是通過文件的形式來完成的,實際上,所有應用程序的輸出都保存在文件中,這

推薦系統基本概念及其在各個領域的應用

目的 body area 聲音 文章 幫助 們的 當前 電影 初學推薦系統相關內容,寫寫自己讀《推薦系統實踐》的讀書筆記。 推薦系統: 對用戶來說推薦系統幫助用戶發現自己想要的商品,對於商品來說找到對其感興趣的用戶,前者例如電影,歌曲的推薦,後者例如廣告推送。 產生推薦系統

更新系統檔案信息

會員/第一步:插入除了手機的商品信息到檔案/declare @sql varchar(max) set @sql=(select max(FEntryID) FEntryID from PAEZ_t_xsxxxx where FEntryID>1)--INSERT INTO PAEZ_t_xsxxxx(