Linux發展到現今,在fs目錄下我們可以看到形形色色的文件系統,眼花繚亂的同時首先需要回答的問題是,為什么會有文件系統這個東西呢?我想如果能搞清楚這個問題,會幫助大家更好的理解文件系統,那么我就嘗試著來模擬一次文件系統的演進過程,于是,我們來到了那一天,那天之前,人們還沒有文件系統的概念。
友情提示 : 下面將在荒誕的場景下演進人類合理的訴求
神說,要有光,于是,光照大地
神說,要有風,于是,風動四方
神說,人類要記住神,于是,有了傳說
神說,怕你們忘了,得記下來,于是,有了文字,信息被存儲在石板上,竹片上,紙張上,硬盤里,flash中
當信息能存在硬盤中的時候,人類如獲至寶,如此大的存儲量,我們能裝下全世界圖書館的館藏,于是,我們想先放一套盜墓筆記進去。
好嘞,于是,我一個字一個字的將精彩的內容順序存儲在硬盤中,終于,全套的盜墓筆記被存儲在硬盤中了,還沒來得及高興,就傻眼了,我不想看秦嶺神樹,怎么辦,這并難不倒我,略加思索,就能想到解決方案,因為是順序存儲的,從開始的地方一直讀下去,當恰好跳過秦嶺神樹章節內容的時候,就做一個標記,記錄已經跳過的字節數,下次再看的時候,就直接讀到硬盤對應的位置即可,經過一番努力,我找到了并把這個字節數寫在了一張紙條上,以便下次可以直接讀取,避免一次次的遍歷。
后來,我開始有點不耐煩了,因為這張紙條里面的內容越來越多,比如最后一章的位置,終極第一次出現的位置等等,有時我甚至記不住我需要尋找的標記是否在紙條中了,終于有一天,這張紙條丟了,我只能呵呵并且從心底認為,僅僅是順序存儲無法滿足我的需求,我需要管理這些內容。
我想,最起碼我需要能把全套的盜墓筆記分為8本書吧,只要根據書名,比如邛樓石影,我就立刻能找到對應的內容,我立刻想到了最簡單的解決方案,仍然使用順序存儲,只不過在內容錄入的時候,給每本書分100MB的存儲空間,這樣我如果想看第7本,那么直接從600MB偏移開始即可,那么一套盜墓筆記只需要800MB就可以存儲,但是,我很快又有了一個更優的方案,在每本書的100MB可用空間內,再進行細分,給每章節進行劃分,假設每本書有50章,那么每章節就是2MB空間,這樣每章節按照2MB對齊,我要找第6本書的第30章節,就是(500 + 29 * 2)MB 偏移,我甚至都有點洋洋自得了,簡單的設計一下就可以再也不用依賴那張小紙條(已遺失)了。
但是,很快我又遇到了新的挑戰,因為這塊硬盤不是我的,開始說好的800MB沒有了,我被要求只能使用8MB來存儲全套的盜墓筆記,原先的設計繼續使用,每章只能分到20KB,這樣有些內容多的章節會越界,而有些內容少的章節又不夠飽滿,那些沒有被利用起來的空間此時顯得的是那么的珍貴,于是我開始了小心翼翼字斟句酌的重新設計。
看起來,順序存儲是最節約空間的,那么只有將小紙條(已遺失)的內容也存儲在硬盤中了。于是,喝下一罐可樂后,我發覺將章節抽象成一個章節類是一個不錯的注意,每個章節是該類的一個對象實例,類成員包括章節名稱,章節起始位置,章節字數,每個對象都64字節對齊,這樣400章的索引信息只需要25KB即可完成存儲,我大大方方的將全部的章節類對象存儲在8MB的前32KB區域,后面剩余的全部順序存儲內容,就這樣,隨著需求的不斷增加,我的設計也漸漸開始有文件系統的影子了,盡管我并不知道,但是一切就這樣發生了,是那么的自然。
-
Linux
+關注
關注
87文章
11310瀏覽量
209600 -
文件系統
+關注
關注
0文章
285瀏覽量
19912
發布評論請先 登錄
相關推薦
評論