乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      LINUX文件系統(tǒng)詳解

       qweertt4747 2017-01-23

      LINUX文件系統(tǒng)詳解

       

      LINUX系統(tǒng)中有一個重要的概念:一切都是文件。其實這是UNIX哲學(xué)的一個體現(xiàn),而Linux是重寫UNIX而來,所以這個概念也就傳承了下來。在UNIX系統(tǒng)中,把一切資源都看作是文件,包括硬件設(shè)備。UNIX系統(tǒng)把每個硬件都看成是一個文件,通常稱為設(shè)備文件,這樣用戶就可以用讀寫文件的方式實現(xiàn)對硬件的訪問。這樣帶來優(yōu)勢也是顯而易見的:

      l         實現(xiàn)了設(shè)備無關(guān)性。

      l         UNIX 權(quán)限模型也是圍繞文件的概念來建立的,所以對設(shè)備也就可以同樣處理了。

        下面我們來詳細(xì)的了解Linux文件系統(tǒng)的幾個要點。

      一、             物理磁盤到文件系統(tǒng)

      我們知道文件最終是保存在硬盤上的。硬盤最基本的組成部分是由堅硬金屬材料制成的涂以磁性介質(zhì)的盤片,不同容量硬盤的盤片數(shù)不等。每個盤片有兩面,都可記錄信息。盤片被分成許多扇形的區(qū)域,每個區(qū)域叫一個扇區(qū),每個扇區(qū)可存儲128×2N次方(N0.1.2.3)字節(jié)信息。在DOS中每扇區(qū)是128×22次方=512字節(jié),盤片表面上以盤片中心為圓心,不同半徑的同心圓稱為磁道。硬盤中,不同盤片相同半徑的磁道所組成的圓柱稱為柱面。磁道與柱面都是表示不同半徑的圓,在許多場合,磁道和柱面可以互換使用,我們知道,每個磁盤有兩個面,每個面都有一個磁頭,習(xí)慣用磁頭號來區(qū)分。扇區(qū),磁道(或柱面)和磁頭數(shù)構(gòu)成了硬盤結(jié)構(gòu)的基本參數(shù),幫這些參數(shù)可以得到硬盤的容量,基計算公式為:

      存儲容量=磁頭數(shù)×磁道(柱面)數(shù)×每道扇區(qū)數(shù)×每扇區(qū)字節(jié)數(shù)

      要點:

      1)硬盤有數(shù)個盤片,每盤片兩個面,每個面一個磁頭

      2)盤片被劃分為多個扇形區(qū)域即扇區(qū)

      3)同一盤片不同半徑的同心圓為磁道

      4)不同盤片相同半徑構(gòu)成的圓柱面即柱面

      5)公式: 存儲容量=磁頭數(shù)×磁道(柱面)數(shù)×每道扇區(qū)數(shù)×每扇區(qū)字節(jié)數(shù)

      6)信息記錄可表示為:××磁道(柱面),××磁頭,××扇區(qū)

      那么這些空間又是怎么管理起來的呢?unix/linux使用了一個簡單的方法。如圖所示。

      1

      它將磁盤塊分為以下三個部分:

      1)        超級塊,文件系統(tǒng)中第一個塊被稱為超級塊。這個塊存放文件系統(tǒng)本身的結(jié)構(gòu)信息。比如,超級塊記錄了每個區(qū)域的大小,超級塊也存放未被使用的磁盤塊的信息。

      2)        I-切點表。超級塊的下一個部分就是i-節(jié)點表。每個i-節(jié)點就是一個對應(yīng)一個文件/目錄的結(jié)構(gòu),這個結(jié)構(gòu)它包含了一個文件的長度、創(chuàng)建及修改時間、權(quán)限、所屬關(guān)系、磁盤中的位置等信息。一個文件系統(tǒng)維護(hù)了一個索引節(jié)點的數(shù)組,每個文件或目錄都與索引節(jié)點數(shù)組中的唯一一個元素對應(yīng)。系統(tǒng)給每個索引節(jié)點分配了一個號碼,也就是該節(jié)點在數(shù)組中的索引號,稱為索引節(jié)點號

      3)        數(shù)據(jù)區(qū)。文件系統(tǒng)的第3個部分是數(shù)據(jù)區(qū)。文件的內(nèi)容保存在這個區(qū)域。磁盤上所有塊的大小都一樣。如果文件包含了超過一個塊的內(nèi)容,則文件內(nèi)容會存放在多個磁盤塊中。一個較大的文件很容易分布上千個獨產(chǎn)的磁盤塊中。

       

      二、             創(chuàng)建一個文件的過程

       

      我們從前面可以知道文件的內(nèi)容和屬性是分開存放的,那么又是如何管理它們的呢?現(xiàn)在我們以創(chuàng)建一個文件為例來講解。

      在命令行輸入命令:

      $ who > userlist

      我們可以通過系統(tǒng)命令ls來查看新建文件userlist的信息:(ls 命令后的i就表示打印i節(jié)點信息)

      2

      當(dāng)完成這個命令時。文件系統(tǒng)中增加了一個存放命令who輸出內(nèi)容的新文件userlist,那么這整個過程到底是怎么回事呢?

      文件主要有屬性、內(nèi)容以及文件名三項。內(nèi)核將文件內(nèi)容存放在數(shù)據(jù)區(qū),文件屬性存放在i-節(jié)點,文件名存放在目錄中。圖2顯示了創(chuàng)建一個文件的例子,假如這個新文件要3 個存儲塊來存放內(nèi)容。那么整個個程大概如下:

      3

      創(chuàng)建成功一個文件主要有以下四個步驟:

      1)        存儲屬性 也就是文件屬性的存儲,內(nèi)核先找到一塊空的i-節(jié)點。圖3中。內(nèi)核找到i-節(jié)點號921130。內(nèi)核把文件的信息記錄其中。如文件的大小、文件所有者、和創(chuàng)建時間等

      2)        存儲數(shù)據(jù) 即文件內(nèi)容的存儲,由于該文件需要3個數(shù)據(jù)塊。因此內(nèi)核從自由塊的列表中找到3個自由塊。圖3中分別為600、200、992,內(nèi)核緩沖區(qū)的第一塊數(shù)據(jù)復(fù)制到塊600,第二和第三分別復(fù)制到922600.

      3)        記錄分配情況,數(shù)據(jù)保存到了三個數(shù)據(jù)塊中。所以必須要記錄起來,以后再找到正確的數(shù)據(jù)。分配情況記錄在文件的i-節(jié)點中的磁盤序號列表里。這3個編號分別放在最開始的3個位置。

      4)        添加文件名到目錄,新文件的名字是userlist 內(nèi)核將文件的入口(47,userlist)添加到目錄文件里。文件名和i-節(jié)點號之間的對應(yīng)關(guān)系將文件名和文件和文件的內(nèi)容屬性連接起來,找到文件名就找到文件的i-節(jié)點號,通過i-節(jié)點號就能找到文件的屬性和內(nèi)容。

       

      三、             創(chuàng)建一個目錄的過程

       

      前面說了創(chuàng)建一個文件的大概過程,也了解文件內(nèi)容、屬性以及入口的保存方式,那么創(chuàng)建一個目錄時又是怎么回事呢?

      我現(xiàn)在test目錄使用命令mkdir 新增一個子目錄child

      4

      從用戶的角度看,目錄child是目錄test的一個子目錄,那么在系統(tǒng)中這層關(guān)系是怎么實現(xiàn)的呢?實際上test目錄包含一個指向子目錄childi-節(jié)點的鏈接,原理跟普通文件一樣,因為目錄也是文件。目錄在系統(tǒng)中的保存方式和結(jié)構(gòu)大概如下:

      5

       

      目錄其實也是文件,只是它的內(nèi)容比較特殊。所以它的創(chuàng)建過程和文件創(chuàng)建過程一樣,只是第二步寫的內(nèi)容不同。

      1)      系統(tǒng)找到空閑的i-節(jié)點號887220,寫入目錄的屬性

      2)      找到空閑的數(shù)據(jù)塊1002來存儲目錄的內(nèi)容,只是目錄的內(nèi)容比較特殊,包含文件名字列表,列表一般包含兩個部分:i-節(jié)點號和文件名,這個列表其實也就是文件的入口,新建的目錄至少包含三個目錄”.””..”其中”.”指向自己,”..”指向上級目錄,我們可以通過比較對應(yīng)的i-節(jié)點號來驗證,887270 對應(yīng)著上級目錄中的child對應(yīng)的i-節(jié)點號

      3)      記錄分配情況。這個和創(chuàng)建文件完全不樣

      4)      添加目錄的入口到父目錄,即在父目錄中的child入口。

       

      一般都說文件存放在某個目錄中,其實目錄中存入的只是文件在i-節(jié)點表的入口,而文件的內(nèi)容則存儲在數(shù)據(jù)區(qū)。圖3中,我們一般會說“文件userlist在目錄test中”,其實這意味著目錄test中有一個指向i-節(jié)點921130的鏈接,這個鏈接所附加的文件名為userlist,這也可以這樣理解:目錄包含的是文件的引用,每個引用被稱為鏈接。文件的內(nèi)容存儲在數(shù)據(jù)塊。文件的屬性被記錄在一個被稱為i-節(jié)點的結(jié)構(gòu)中。I-節(jié)點的編號和文件名關(guān)聯(lián)起來存在目錄中。

      注意:其中“.”表示是當(dāng)前目錄。而“..”是當(dāng)前目錄的父目錄。但也有特殊情況:如我們查看根目錄/的情況:

      6

      發(fā)現(xiàn)“.”和“..”都指向i-節(jié)點2。實際上當(dāng)我們用mkfs創(chuàng)建一個文件系統(tǒng)時,mkfs都會將根目錄的父目錄指向自己。所以根目錄下...指向同一個i-節(jié)點也不奇怪了。

       

      四、             理解鏈接

       

      鏈接分為兩種,1是硬鏈接,2是符號鏈接(也稱為軟鏈接)

      1、 硬鏈接

      硬鏈接(had link),是將目錄鏈接到文件樹的指針,硬鏈接同時也是將文件名和文件本身鏈接起來的指針

      我們現(xiàn)在進(jìn)入目錄child:并輸入法以下命令

      7

       我們發(fā)現(xiàn)通過ln建立的鏈接文件mylink對應(yīng)的i-節(jié)點也是921130.和上一級目錄下的userlist指向的i-節(jié)點號是一樣的。由此我們可以知道mylink../userlist其實是指向同一個i-節(jié)點號,也可以理解為這兩者其實是同一個文件。

      8

      創(chuàng)建一個鏈接的步驟大概如下:

      1)  通過原文件的文件名找到文件的i-節(jié)點號

      2)  添加文件名關(guān)聯(lián)到目錄,新文件的名字是mylink 內(nèi)核將文件的入口(921130,mylink)添加到目錄文件里。

      和創(chuàng)建文件的過程比較發(fā)現(xiàn),鏈接少了寫文件內(nèi)容的步驟,完全相同的是把文件名關(guān)聯(lián)到目錄這一步

      現(xiàn)在.i- 節(jié)點號921130對應(yīng)了兩個文件名。鏈接數(shù)也會變成2個,文件的內(nèi)容并不會發(fā)生任何變化。前面我們已經(jīng)講了:目錄包含的是文件的引用,每個引用被稱為鏈接。所以鏈接文件和原始文件本質(zhì)上是一樣的,因為它們都是指向同一個i-節(jié)點。由于此原因也就可以理解鏈接的下列特性:你改變其中任何一個文件的內(nèi)容,別的鏈接文件也一樣是變化;另外如果你刪除某一個文件,系統(tǒng)只會在所指向的i-節(jié)點上把鏈接數(shù)減1,只有當(dāng)鏈接數(shù)減為零時才會真正釋放i-節(jié)點。

      硬鏈接有兩個特點:

      1)不能跨文件系統(tǒng)

      2)不能對目錄

      2、符號鏈接

      另外還有一種符號鏈接,也稱“軟鏈接”,符號鏈接是通過文件名引用文件,而不是i-節(jié)點號,這和硬鏈接的原理完全是不同的,我們先看屬性:

      9

      發(fā)現(xiàn)通過ln –s 創(chuàng)建的軟鏈接mylink2i-節(jié)點是1574059,和../userlist的不相同。軟鏈接的好處就是可以跨不同的文件系統(tǒng),而且可以鏈接目錄

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多