虛擬,緩存蛮放,分層:計算機科學(xué)思維在文件系統(tǒng)中的體現(xiàn)

正如解決數(shù)學(xué)問題通常我們會談“思想”缩抡,諸如反證法、化繁為簡等包颁,解決計算機問題也有很多非常出色的思想瞻想。思想之所以稱為思想,是因為“思想”有拓展性與引導(dǎo)性娩嚼,可以解決一系列問題蘑险。根據(jù)我自己的學(xué)習(xí)體驗,解決計算機科學(xué)問題有三個非常重要的思想:虛擬岳悟、緩存佃迄、分層。

這些思想的應(yīng)用可以在計算機科學(xué)的各個方面找到贵少。計算機科學(xué)的文件系統(tǒng)的構(gòu)成充分體現(xiàn)了這三個思想的應(yīng)用呵俏;這篇文章以小見大,來說明文件系統(tǒng)是如何體現(xiàn)這三個思想的滔灶。

虛擬

虛擬的思想很像數(shù)學(xué)中的“抽象”的思想普碎。虛擬通過將結(jié)構(gòu)、性質(zhì)不同的底層實現(xiàn)進行封裝录平,向上提供統(tǒng)一的API接口麻车,讓使用者覺得就是在使用一個統(tǒng)一的資源,或者讓使用者覺得自己在使用一個本來底層不直接提供萄涯、“虛擬”出來的資源绪氛。

虛擬文件系統(tǒng)(VFS, Virtual File System)是一個分層結(jié)構(gòu)。向下統(tǒng)一設(shè)備I/O等硬件資源涝影,向上提供統(tǒng)一的文件/文件系統(tǒng)API枣察,讓用戶覺得自己用的就是一套統(tǒng)一的文件系統(tǒng)。例如燃逻,在unix系統(tǒng)中序目,“一切都是文件”就是這種虛擬文件系統(tǒng)思想的體現(xiàn)。

虛擬文件系統(tǒng)主要由三部分構(gòu)成:

  • 文件卷控制塊
  • 文件控制塊
  • 目錄項

其結(jié)構(gòu)如下圖所示:

當(dāng)文件系統(tǒng)掛載的時候伯襟,文件卷控制塊就加載到掛載點猿涨;當(dāng)訪問某個文件時,文件控制塊就被加載到內(nèi)存姆怪;目錄項只會在做遍歷等操作時才會加載叛赚。這些信息都會被持久存在外存中澡绩。(磁盤中有一部分空間用來儲存這些信息)

在這個統(tǒng)一的框架下,不通類型的文件系統(tǒng)(例如磁盤文件系統(tǒng)FAT,NTFS,數(shù)據(jù)庫文件系統(tǒng)WinFS,日志文件系統(tǒng)俺附,網(wǎng)絡(luò)文件系統(tǒng)等)與不同結(jié)構(gòu)的文件(字節(jié)序列肥卡、簡單記錄結(jié)構(gòu)、復(fù)雜結(jié)構(gòu)如word等)就成為了這個虛擬文件系統(tǒng)的一個實例事镣。例如步鉴,網(wǎng)絡(luò)文件系統(tǒng)可能被掛載在/net/下,當(dāng)我們插入USB時璃哟,在/Volumns中就掛載了USB介質(zhì)氛琢。

緩存

緩存這個機制,非常巧妙地解決了讀速度與寫速度不一致的問題随闪。計算機的虛擬內(nèi)存阳似、路由器的數(shù)據(jù)接收與發(fā)送等,都可以看成緩存思想的應(yīng)用蕴掏。

在文件系統(tǒng)中障般,由于從磁盤上讀取是機械過程,速度比較慢盛杰,解決讀寫速度不一致問題的一個有效方案是緩存∶晔基本思想是將磁盤中的數(shù)據(jù)讀如磁盤控制器(扇區(qū)緩存)即供,在一定條件下,將數(shù)據(jù)緩存到內(nèi)存于微。

通常緩存數(shù)據(jù)塊的情景有兩種:

  • 對數(shù)據(jù)有需求逗嫡。因此計算機會將后面的數(shù)據(jù)塊預(yù)先讀如緩存。
  • 數(shù)據(jù)塊使用后將來還可能被用到株依。

緩存從方式上分可以分為兩種:數(shù)據(jù)塊緩存與頁緩存驱证。

在數(shù)據(jù)塊緩存中,文件并不是直接緩存到內(nèi)存中恋腕,而是被緩存到數(shù)據(jù)緩存塊抹锄,頁緩存也被緩存到數(shù)據(jù)緩存塊,文件讀寫操作從數(shù)據(jù)緩存塊讀取文件數(shù)據(jù)荠藤;在頁緩存中伙单,文件緩存在內(nèi)存中(可能是虛擬內(nèi)存),文件的讀寫操作被緩存成對內(nèi)存的訪問哈肖。

通過這種方式吻育,可以大大提高文件的讀寫速度。

分層

當(dāng)一個問題比較復(fù)雜是淤井,通常通過分層布疼,每層利用下層API摊趾,實現(xiàn)一定功能,向上層提供更高級的API游两。這種思想有點類似數(shù)學(xué)中的多尺度(multiscale)严就;許多問題在一個尺度下解決比較困難,但是通過多尺度器罐,可以綜合細網(wǎng)格與粗網(wǎng)格的優(yōu)點梢为,達到解決問題的目的。一個例子是網(wǎng)絡(luò)的7層結(jié)構(gòu)轰坊,通過不穩(wěn)定的硬件铸董,一層層封裝,最終可以提供穩(wěn)定的網(wǎng)絡(luò)服務(wù)肴沫。

文件系統(tǒng)中粟害,文件分配是一個典型應(yīng)用分層思想的文件儲存解決方案。由于一個文件系統(tǒng)中颤芬,文件的大小不相同悲幅,大多數(shù)文件都很小,分配的塊空間不能太大站蝠,同時也要支持一些大文件(64位文件偏移)汰具,并且訪問這些大小不同的文件時我們希望是高效的。

文件分配一般有三種方式:

  • 連續(xù)分配

在這種方式中菱魔,文件被分配到一個連續(xù)的物理數(shù)據(jù)塊空間留荔。這種方式支持高效的隨機訪問,但是由于分配的是連續(xù)的磁盤空間澜倦,可能導(dǎo)致磁盤碎片聚蝶。而且由于空間較為固定,增長文件也會出現(xiàn)問題藻治。

  • 鏈?zhǔn)椒峙?/li>

文件以數(shù)據(jù)塊鏈表方式儲存碘勉。這種方式下,創(chuàng)建桩卵、增大验靡、減小文件很容易,但是隨機訪問代價比較高吸占。穩(wěn)定性也是一個問題:破壞一個鏈晴叨,可能導(dǎo)致其后的數(shù)據(jù)都丟失。

  • 索引分配

索引分配的基本結(jié)構(gòu)是

文件指針 --> 索引 --> 數(shù)據(jù)塊1矾屯,數(shù)據(jù)塊2兼蕊,……

索引分配綜合了上面兩種分配方式的優(yōu)點,但是如果文件比較小件蚕,儲存索引的開銷相比文件大小可能比較昂貴孙技,如果文件比較大产禾,索引可能無法放到一個索引塊中,需要多個索引塊牵啦,這增加了訪問的難度亚情。

Unix系統(tǒng)采用了UFS多級索引分配的方式

UFS有很好的尺度適應(yīng)性:當(dāng)文件比較小時,文件指針inode直接指向文件數(shù)據(jù)塊哈雏,當(dāng)文件比較大時楞件,索引塊的數(shù)量增加的量級只是log(n)的量級。

通過分層的方式裳瘪,UFS大大提高了文件大小的限制域值土浸,動態(tài)分配數(shù)據(jù)塊,小文件開銷小彭羹,支持大文件黄伊。

另一種思想:分布式

上面的三種思想在計算機科學(xué)的許多方面都有體現(xiàn),除了這些思想派殷,另外還有一種常見的思想是分布式还最。談及分布式,讓人想起Hadoop等現(xiàn)在研究非痴毕В火熱的分布式技術(shù)拓轻,事實上,分布式在文件系統(tǒng)中也有自己的體現(xiàn)虱黄。

分布式的基本思想是:

通過并行提高吞吐量悦即,通過冗余來提高可靠性與可用性。

在文件系統(tǒng)中橱乱,磁盤陣列通過多磁盤管理來實現(xiàn)分布式。我們以RAID-0為例粱甫,文件系統(tǒng)將數(shù)據(jù)塊分為多個字塊泳叠,存儲到獨立的磁盤中,當(dāng)讀取數(shù)據(jù)的時候茶宵,可以同時讀取這些磁盤的數(shù)據(jù)危纫,從而通過并行提高了吞吐量。

RAID-1的方案是將數(shù)據(jù)同時寫入兩個磁盤乌庶,讀數(shù)據(jù)時從任何一個讀取种蝶,這樣某個磁盤的數(shù)據(jù)丟失后,可以從另一個磁盤獲得瞒大,這種方式是通過冗余來提高可靠性與可用性螃征。

還有很多其他的RAID方案,其核心就是通過分布式來獲得吞吐量透敌、可靠性或兩者盯滚。

總結(jié)

我們通過文件系統(tǒng)的一些方面說明了虛擬踢械,緩存,分層思想在計算機科學(xué)中的應(yīng)用魄藕,同時提及了分布式的思想内列。思想是各中計算機問題甚至各個學(xué)科共通的解決問題的利刃,我相信這些思想可以在更多的計算機科學(xué)問題甚至其他學(xué)科問題中發(fā)揮巨大的作用背率。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末话瞧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寝姿,更是在濱河造成了極大的恐慌交排,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件会油,死亡現(xiàn)場離奇詭異个粱,居然都是意外死亡,警方通過查閱死者的電腦和手機翻翩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門都许,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫂冻,你說我怎么就攤上這事胶征。” “怎么了桨仿?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵睛低,是天一觀的道長。 經(jīng)常有香客問我服傍,道長钱雷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任吹零,我火速辦了婚禮罩抗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灿椅。我一直安慰自己套蒂,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布茫蛹。 她就那樣靜靜地躺著操刀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪婴洼。 梳的紋絲不亂的頭發(fā)上骨坑,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音窃蹋,去河邊找鬼卡啰。 笑死静稻,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的匈辱。 我是一名探鬼主播振湾,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亡脸!你這毒婦竟也來了押搪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤浅碾,失蹤者是張志新(化名)和其女友劉穎大州,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垂谢,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡厦画,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滥朱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片根暑。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖徙邻,靈堂內(nèi)的尸體忽然破棺而出苇经,到底是詐尸還是另有隱情捎迫,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布累颂,位于F島的核電站瞪醋,受9級特大地震影響迅腔,放射性物質(zhì)發(fā)生泄漏牍帚。R本人自食惡果不足惜银伟,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望并徘。 院中可真熱鬧夯到,春花似錦、人聲如沸饮亏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽路幸。三九已至,卻和暖如春付翁,著一層夾襖步出監(jiān)牢的瞬間简肴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工百侧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砰识,地道東北人能扒。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像辫狼,于是被迫代替她去往敵國和親初斑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容