淺談儲存一個檔案操作內部發生了什麼
比如新建一個word,寫了一行字,然後點選儲存。
發生了什麼?這個資料會不會馬上寫到磁碟上?
1 檔案系統:
檔案系統是一套實現了資料的儲存、分級組織、訪問和獲取等操作的抽象資料型別(Abstract data type)。
檔案系統是一種用於向使用者提供底層資料訪問的機制。它將裝置中的空間劃分為特定大小的塊(扇區),一般每塊512位元組。資料儲存在這些塊中,大小被修正為佔用整數個塊。由檔案系統軟體來負責將這些塊組織為檔案和目錄,並記錄哪些塊被分配給了哪個檔案,以及哪些塊沒有被使用。檔案系統各式各樣,如fat,ntfs,ext2,ext3等。
核心中檔案系統會將虛擬檔案系統中的檔案操作,轉換成塊IO操作。
2 虛擬檔案系統:
為了向使用者空間提供一個統一的檔案系統介面。出現了虛擬檔案系統。Linux中的虛擬檔案系統由四個資料結構來表示,其中最主要的是表示檔案的索引節點inode。inode描述了操作檔案和目錄所需的所有屬性資訊以及方法。其方法對應於核心中檔案系統的系統呼叫。比如你的終端(或者英語程式)中使用mkdir命令,這個命令會呼叫system call是symlik(),然後這個系統呼叫會呼叫inode節點的mkdir(struct inode *dir,struct dentry, int mode)方法來真正建立一個檔案。
3 塊裝置驅動:
塊裝置驅動只處理塊IO操作。
一個塊IO操作請求由很多bio組成,bio又是由bio_vec段陣列組成,bio_vec是記憶體中的“片段”。
有了上面知識,我們就可以知道這樣一個大概流程:
(1) 首先新建word檔案,寫了一行字,點選儲存,會呼叫對應的檔案建立,資料讀寫等使用者空間的API。
(2) 這些application的API會呼叫核心空間的系統呼叫system call。
(3) 這些system call會呼叫虛擬檔案系統的統一的檔案操作介面。如mkdir,create,readlink等函式。
(4) 核心中具體的檔案系統EX2,EX3等會將虛擬檔案系統的檔案操作轉換成對應的塊IO操作。
(5) 這些塊IO操作請求會先在cache中檢視對應的塊是否在cache中,如果在的話,直接讀取/修改cache中的塊即可。否則將告知驅動程式處理這個快IO請求,真正將資料寫到磁碟,或者從磁碟讀取資料。
相關文章
- 關於ORACLE組合索引內部儲存淺談Oracle索引
- 淺談Android的檔案儲存Android
- 研發內部控制淺談(一)(轉)
- 通過瀏覽器訪問一個 PHP 檔案時發生了什麼?瀏覽器PHP
- 當我呼叫了$().append()後,jQuery內部發生了什麼?APPjQuery
- 研發內部控制淺談(二)(轉)
- 研發內部控制淺談(三)(轉)
- 研發內部控制淺談(四)(轉)
- Android 檔案儲存淺析Android
- 淺談java內部類Java
- 儲存文字到一個檔案裡
- 一個完整的 Web 請求到底發生了什麼Web
- [譯文]請求一個URL時發生了什麼
- 一分鐘之內網際網路發生了什麼內網
- 一分鐘之內 網際網路發生了什麼?
- 物件儲存、檔案儲存、塊儲存這三者之間有什麼區別?物件
- Android-內部儲存和外部儲存Android
- 物件儲存 vs 檔案儲存 vs 塊儲存,選哪個?物件
- HDU-安卓程式開發之簡單儲存/內部儲存/外部儲存 & 捉蟲安卓
- 啟動vue專案時發生了什麼Vue
- 淺談Java中的內部類Java
- 塊儲存 檔案儲存 物件儲存物件
- new Vue發生了什麼Vue
- Android內部儲存和外部儲存,以及讀取Android讀取RAM,ROM內部儲存和外部儲存卡容量Android
- 杉巖:淺談物件儲存和塊儲存區別物件
- MongoDB 儲存引擎與內部原理MongoDB儲存引擎
- 檔案儲存
- 資料儲存--檔案儲存
- 這個春節假期,遊戲市場發生了什麼?遊戲
- 來,開開眼界,新一代飛機黑匣子內部儲存長什麼樣?「領存研製」
- 淺談hosts檔案
- HTML檔案HEAD內部標記淺析(轉)HTML
- 行連線的一點內部儲存測試!
- 三測一週就直播道歉,這個遊戲到底發生了什麼?遊戲
- [作業系統]訪問一個邏輯地址發生了什麼作業系統
- 淺談瀏覽器本地儲存-indexedDB瀏覽器Index
- 淺談 MySQL 的儲存引擎(表型別)MySql儲存引擎型別
- perl 實現shell 命令的檔案儲存操作