檔案系統基本概念->檔案系統磁碟布局->檔案系統io系統->mq佇列機制->io管控。
下面開始簡單介紹一下檔案系統的一些基本概念,大部分來自於書籍和一些部落格上的內容,相關鏈結如下:
ext4專題文章索引
linux檔案系統詳解
鳥哥 linux 磁碟與檔案系統管理
linux 的虛擬檔案系統(強烈推薦)
1、什麼是檔案系統
檔案系統是一種儲存系統,通過檔案的形式去儲存和管理資料,通常來說在儲存裝置之上搭建一套方面使用者以檔案操作和管理資料的系統。從系統結構的角度看,它屬於作業系統中的一員,同時它又高於硬體裝置。
2、檔案系統操作
檔案系統所有的一切都是圍繞檔案展開的,常見的檔案操作如下:
建立檔案
開啟檔案
刪除檔案
複製檔案
剪下檔案
3、檔案系統的層次
這裡給出了linux檔案系統詳解部落格中的一張圖,這張圖簡單秒回了檔案系統在整個系統結構中的乙個層次。
從這個圖我們可以看到,由上而下主要分為使用者層、vfs層、檔案系統層、快取層、塊裝置層、磁碟驅動層、磁碟物理層。下面對這幾層做個詳細的介紹:
使用者層: 使用者層即是我們平時寫程式會接觸到的一些檔案的操作,主要是檔案的建立、刪除、開啟、關閉、寫、讀等,使用者層由使用者自己定義操作,使用者無法感知底層用的哪樣的儲存裝置,哪些檔案系統。
vfs層: 虛擬檔案系統層,主要功能是提供統一的檔案系統呼叫介面,也就是我們寫程式經常說的系統呼叫。使用者通過system call去呼叫底層資源時候,都會陷入到vfs層由核心託管。
檔案系統層: 這裡給出了不同的檔案系統,但是所有檔案系統的宗旨都是把檔案讀寫命令轉化為對磁碟lba的操作,起了乙個翻譯和磁碟管理的作用。 值得注意的是,不同的檔案系統實現了vfs的這些函式,通過指標註冊到vfs裡面,在檔案系統進行掛載的時候發生。
快取層: 注意這裡說的是page cache,是快取cache而不是緩衝buffer。快取層將使用者下發的資料進行快取起來,加速讀寫效能。
塊裝置層: 即所謂的抽象塊層,和磁碟中的物理塊做乙個邏輯上的呼應,當檔案進行讀寫時,讀寫命令在塊裝置層轉換成為不同的命令組合,然後插入到對應的命令佇列上,塊裝置層會有對io優化的演算法,例如:linux設計了電梯演算法等對很多lba的讀寫進行優化排序,盡量把連續位址放在一起。
磁碟驅動層: 即所謂的硬體驅動層,驅動程式會把對邏輯塊lba的讀寫命令轉換為各層儲存裝置的介面協議,例如sata介面的ata命令,scsi介面的scsi命令,nvme介面的ssd協議。值得注意的是,對於目前openchannel的裝置,它們在塊裝置層和磁碟驅動層實現了ftl,變成對flash晶元的操作,驅動層直接對快閃儲存器進行讀寫即可。
磁碟物理層: 讀寫物理資料到磁碟介質。
4、檔案系統的使用
檔案系統的建立:即是儲存裝置建立檔案系統的過程,一般也被稱為格式化或初始化,通過一些初始化工具來進行。
檔案系統的掛載(mount):將某一裝置(dev_name)上某一檔案系統(file_system_type)安裝到vfs目錄樹上的某一安裝點(dir_name)。
檔案系統的其他操作:目錄操作,目錄建立、目錄刪除等操作,及其檔案操作等。
5、檔案系統的分類
檔案系統一般分為兩類:
一類是索引式檔案系統,例如linux系統中的etx3、ext4這一類;索引式檔案系統最大的特點就是將資料的屬性資訊與資料分開儲存,用乙個專門的innode節點進行儲存,其結構圖如下圖所示:
例如乙個檔案的屬性資訊存放在innode4節點上,該節點存放了資料的真實存放區域,實際為資料塊2、7、13和15,通過讀取innode可以知道資料的存放位置,將資料按照有效塊的順序讀取,提高讀取率。
另外一類是指標式檔案系統,例如u盤常見的fat32系統,。
這類檔案系統資料和屬性存放在一起,那麼資料塊直接的關聯用給乙個指標位址來控制,也就是說通過找到乙個塊才能去讀取第乙個塊,以此類推。其結構如下圖所示:
上圖中我們假設檔案的資料依序寫入1->7->4->15號這四個 block 號碼中, 但這個檔案系統沒有辦法一口氣就知道四個 block 的號碼,他得要乙個乙個的將 block 讀出後,才會知道下乙個 block 在何處。 如果同乙個檔案資料寫入的 block 分散的太過厲害時,則我們的磁碟讀取頭將無法在磁碟轉一圈就讀到所有的資料, 因此磁碟就會多轉好幾圈才能完整的讀取到這個檔案的內容!
這類檔案系統的缺點比較明顯:
通過指標的方式進行,資料的讀取無法優化,導致磁碟可能不停的來回讀取,大大降低讀寫速率。
單個檔案不超過4gb,這是乙個檔案最多分為的塊數量是有限的,也就是用於關聯的指標大小是有限的,一般是4個位元組,所以2^32=4gb,最大檔案不能超過4gb。
Linux IO系統 基本知識
注 本文件主要整理了linux下io系統的基本知識,是整理的網易雲課堂的學習筆記,老師講得很不錯,鏈結如下 linux io系統 1.linux作業系統的基本構成 核心 作業系統的核心,負責管理系統的程序 記憶體 裝置驅動程式 檔案和網路系統 控制系統和硬體之間的相互通訊 決定著系統的效能和穩定性。...
MAC系統的基本知識
作業系統是執行在計算機硬體裝置之上,應用軟體執行在作業系統之上 應用軟體的本質 1.按照順序呼叫介面 2.應用軟體是執行在作業系統上面的乙個軟體 作業系統的作用 1.管理 用來管理計算機的硬體裝置 2.協調 協調計算機硬體之間和諧工作 3.提供介面 因為我們用01操作硬體很不方便,作業系統提供給人 ...
搜尋檔案的基本知識
handle winapi findfirstfile in lpctstr lpfilename,out lpwin32 find data lpfindfiledata bool winapi findnextfile in handle hfindfile,out lpwin32 find d...