弄懂linux文件,這一篇就夠了。

1.爲何要學習linux文件系列?

· 學習操作系統是進入中高級程序員的必經之路,而linux作爲最廣泛使用的開源操作系統,是我們學習的最好實例。而文件則是我們瞭解操作系統的第一步。
· 前幾天,我定位了一個故障,系統沒插sd卡沒插卻當做有sd卡使用,結果存東西把flash寫爆了。我簡單用 df 和 du 2個命令就定位了故障,要解決就要在sd卡插上前刪掉誤增加的文件內容,因爲掛載了文件系統之後原先的路徑將被覆蓋,系統將識別它爲一個掛載點,除非卸載這個文件系統,否則你將看不到這個文件夾了。操作系統的知識就存在我們的工作中,如果你懂,你就能快速解決。

2.文件系列總結

· 本片是linux文件系列的總結篇,整個系列從應用層,glibc到內核,最後到yaffs如何寫flash,正如第一篇文章說的那樣,穿透了整個內核。
最終來看,文件作爲linux所有資源的呈現方式,非常精簡。
· 應用層看起來,一切都是文件,都要通過讀寫來操作,但是到了內核就要把這些不同的文件類型分開處理了。設備文件 和 socket文件只是一個標識,是作爲系統運行資源的接口,因此進入內核之後就區分開了,socket文件甚至在應用層就已經不像文件裏,open甚至已經被socket這個調用給替代了。應用層的各個介紹請看我的第一篇;
第一篇:爲何linux一切皆文件
在這裏插入圖片描述· 如果把操作系統看做一個球,最外層的表皮就是系統調用了,調用系統調用有2種方式,一種是shell,一種是C庫,我們介紹的C庫用的就是glibc。glibc內容繁多,我的第二篇就通過層層搜索,找到了系統調用如何和內核銜接起來。

第二篇:系統調用如何進入內核層次,深入glibc尋找open函數真實實現。

· 進入內核之後,驅動文件通過操作函數的不同,和普通文件做了區分。
最後剩下的就是真正的文件,這些文件都被抽象爲了inode對象來管理,要想操作文件,必須先open,open函數要做的就是層層搜索目錄,找到文件所在的目錄,才能找到對應的inode。搜尋的各個細節見我的第三篇;

第三篇:系統調用的內核實現,一文講透open函數內核真實實現。

· inode作爲文件的接口,並不會直接存到介質上,而是要通過文件系統,我們用yaffs2這個嵌入式領域用的比較多的系統作爲例子,介紹了文件系統是如何和內核融合成一體的,這裏有一個註冊的接口給所有文件系統使用。文件系統註冊之後,操作系統就知道了這個文件系統了。我們就能調用mount來掛載它。而文件系統其它信息和操作,都存放在superblock結構中。對於文件系統的基本原理,第四篇做了詳細介紹。

第四篇:文件系統原理 和 VFS架構

· yaffs是針對nand flash這種存儲介質的,而flash存儲容易出現錯誤,因此每個page多了一塊oob區,主要用來校驗錯誤,但是yaffs在oob區存放了ecc,還存放了部分的文件屬性。yaffs用obj作爲文件存儲對象對應於linux的inode,而yaffs文件系統是如何處理文件讀寫和寫入flash的,第五篇做了詳細介紹。

第五篇:yaffs2的Linux架構

最後,如果對yaffs文件系統如何實現空間回收,碎片整理有興趣,可以看這一篇源碼解析。

番外篇:yaffs2源代碼分析(最新版)

3.總結和展望

· 這個系列在這大半年的時間裏耗費了大量的空餘時間,雖然自己仍有些不滿意的地方,但是也算是基本寫完了吧。後續要關注提高質量和效率。
· 後續我會繼續穿透系列,逐步開展地址,進程等系列文章,歡迎老鐵們的關注。

------------------如果有所收穫的話,請幫忙點個贊吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章