国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

The File System(文件系統(tǒng))

2019-11-17 05:37:53
字體:
來源:轉載
供稿:網(wǎng)友

  本章描述linux如何維護它支持的文件系統(tǒng)中的文件。描述了虛擬文件系統(tǒng)(Virtual File System VFS)并解釋了Linux核心中真實的文件系統(tǒng)如何被支持

 

Linux的一個最重要的特點之一使它可以支持許多不同的文件系統(tǒng)。這讓它非常靈活,可以和許多其他操作系統(tǒng)共存。在寫作本章的時候,Linux可一直支持15種文件系統(tǒng):ext、ext2、xia、minix、umsdos、msdos、vfat、PRoc、smb、ncp、iso9660、sysv、hpfs、affs和ufs,而且不容置疑,隨著時間流逝,會加入更多的文件系統(tǒng)。

 

在Linux中,象Unix一樣,系統(tǒng)可以使用的不同的文件系統(tǒng)不是通過設備標識符(例如驅動器編號或設備名稱)訪問,而是連接成一個單一的樹型的結構,用一個統(tǒng)一的單個實體表示文件系統(tǒng)。Linux在文件系統(tǒng)安裝的時候把它加到這個單一的文件系統(tǒng)樹上。所有的文件系統(tǒng),不管什么類型,都安裝在一個目錄,安裝的文件系統(tǒng)的文件掩蓋了這個目錄原來存在的內(nèi)容。這個目錄叫做安裝目錄或安裝點。當這個文件系統(tǒng)卸載的時候,安裝目錄自己的文件又可以顯現(xiàn)出來。

 

當磁盤初始化的時候(比如用fdisk),利用一個分區(qū)結構把物理磁盤劃分成一組邏輯分區(qū)。每一個分區(qū)可以放一個文件系統(tǒng),例如一個EXT2文件系統(tǒng)。文件系統(tǒng)在物理設備的塊上通過目錄、軟鏈接等把文件組織成邏輯的樹型結構。可以包括文件系統(tǒng)的設備是塊設備。系統(tǒng)中的第一個IDE磁盤驅動器的第一個分區(qū),IDE磁盤分區(qū)/dev/hda1,是一個塊設備。Linux文件系統(tǒng)把這些塊設備看成簡單的線性的塊的組合,不知道也不去關心底層的物理磁盤的尺寸。把對設備的特定的塊的讀的請求映射到對于設備有意義的術語:這個塊保存在硬盤上的磁道、扇區(qū)和柱面,這是每一個塊設備驅動程序的任務。一個文件系統(tǒng)不管它保存在什么設備上,都應該用同樣的方式工作,有同樣的觀感。另外,使用Linux的文件系統(tǒng),是否這些不同的文件系統(tǒng)在不同的硬件控制器的控制下的不同的物理介質(zhì)上都是無關緊要的(至少對于系統(tǒng)用戶是這樣)。文件系統(tǒng)甚至可能不在本地系統(tǒng)上,它可能是通過網(wǎng)絡連接遠程安裝的。考慮以下的例子,一個Linux系統(tǒng)的根文件系統(tǒng)在一個SCSI磁盤上。

 

A E boot etc lib opt tmp usr

C F cdrom fd proc root var sbin

D bin dev home mnt lost+found

 

不管是操作這些文件的用戶還是程序都不需要知道/C實際上是在系統(tǒng)的第一個IDE磁盤上的一個安裝的VFAT文件系統(tǒng)。本例中(實際是我家中的Linux系統(tǒng)),/E是次IDE控制器上的master IDE磁盤。第一個IDE控制器是PCI控制器,而第二個是ISA控制器,也控制著IDE CDROM,這些也都無關緊要。我可以用一個modem和PPP網(wǎng)絡協(xié)議撥號到我工作的網(wǎng)絡,這時,我可以遠程安裝我的Alpha AXP Linux系統(tǒng)的文件系統(tǒng)到/mnt/remote。

 

文件系統(tǒng)中的文件包含了數(shù)據(jù)的集合:包含本章源的文件是一個ASCII文件,叫做filesystems.tex。一個文件系統(tǒng)不僅保存它包括的文件的數(shù)據(jù),也保存文件系統(tǒng)的結構。它保存了Linux用戶和進程看到的所有的信息,例如文件、目錄、軟鏈接、文件保護信息等等。另外,它必須安全地保存這些信息,操作系統(tǒng)的基本的一致性依靠于它的文件系統(tǒng)。沒有人可以使用一個隨機丟失數(shù)據(jù)和文件的操作系統(tǒng)(不知道是否有,雖然我曾經(jīng)被擁有的律師比Linux開發(fā)者還多的操作系統(tǒng)傷害過)。

 

Minix是Linux的第一個文件系統(tǒng),有相當?shù)木窒蓿阅鼙容^差。它的文件名不能長于14個字符(這仍然比8.3文件名要好),最大的文集大小是64M字節(jié)。第一眼看去,64M字節(jié)似乎足夠大,但是設置中等的數(shù)據(jù)庫需要更大的文件大小。第一個專為Linux設計的文件系統(tǒng),擴展文件系統(tǒng)或EXT(Extend File System),在1992年4月引入,解決了許多問題,但是仍然感到性能低。所以,1993年,增加了擴展文件系統(tǒng)第二版,或EXT2。這種文件系統(tǒng)在本章稍后具體描述。

 

當EXT文件系統(tǒng)增加到Linux的時候進行了一個重要的開發(fā)。真實的文件系統(tǒng)通過一個接口層從操作系統(tǒng)和系統(tǒng)服務中分離出來,這個接口叫做虛擬文件系統(tǒng)或VFS。VFS答應Linux支持許多(通常是不同的)文件系統(tǒng),每一個都向VFS表現(xiàn)一個通用的軟件接口。Linux文件系統(tǒng)的所有細節(jié)都通過軟件進行轉換,所以所有的文件系統(tǒng)對于Linux核心的其余部分和系統(tǒng)中運行的程序顯得一樣。Linux的虛擬文件系統(tǒng)層答應你同時透明地安裝許多不同的文件系統(tǒng)。



Linux虛擬文件系統(tǒng)的實現(xiàn)使得對于它的文件的訪問盡可能的快速和有效。它也必須保證文件和文件數(shù)據(jù)正確地存放。這兩個要求相互可能不平等。Linux VFS在安裝和使用每一個文件系統(tǒng)的時候都在內(nèi)存中高速緩存信息。在文件和目錄創(chuàng)建、寫和刪除的時候這些高速緩存的數(shù)據(jù)被改動,必須非常小心才能正確地更新文件系統(tǒng)。假如你能看到運行的核心中的文件系統(tǒng)的數(shù)據(jù)結構,你就能夠看到文件系統(tǒng)讀寫數(shù)據(jù)塊,描述正在訪問的文件和目錄的數(shù)據(jù)結構會被創(chuàng)建和破壞,同時設備驅動程序會不停地運轉,獲取和保存數(shù)據(jù)。這些高速緩存中最重要的是Buffer Cache,在文件系統(tǒng)訪問它們底層的塊設備的時候結合進來。當塊被訪問的時候它們被放到Buffer Cache,根據(jù)它們的狀態(tài)放在不同的隊列中。Buffer Cache不僅緩存數(shù)據(jù)緩沖區(qū),它也幫助治理塊設備驅動程序的異步接口。


 

9.1 The Second Extended File System (EXT2)

 

EXT2被發(fā)明(Remy Card)作為Linux一個可擴展和強大的文件系統(tǒng)。它至少在Linux社區(qū)中是最成功的文件系統(tǒng),是所有當前的Linux發(fā)布版的基礎。EXT2文件系統(tǒng),象所有多數(shù)文件系統(tǒng)一樣,建立在文件的數(shù)據(jù)存放在數(shù)據(jù)塊中的前提下。這些數(shù)據(jù)塊都是相同長度,雖然不同的EXT2文件系統(tǒng)的塊長度可以不同,但是對于一個特定的EXT2文件系統(tǒng),它的塊長度在創(chuàng)建的時候就確定了(使用mke2fs)。每一個文件的長度都按照塊取整。假如塊大小是1024字節(jié),一個1025字節(jié)的文件會占用兩個1024字節(jié)的塊。不幸的是這一意味著平均你每一個文件浪費半個塊。通常計算中你會用磁盤利用來交換CPU對于內(nèi)存的使用,這種情況下,Linux象大多數(shù)操作系統(tǒng)一樣,為了較少CPU的負載,使用相對低效率的磁盤利用率來交換。不是文件系統(tǒng)中所有的塊都包含數(shù)據(jù),一些塊必須用于放置描述文件系統(tǒng)結構的信息。EXT2用一個inode數(shù)據(jù)結構描述系統(tǒng)中的每一個文件,定義了系統(tǒng)的拓撲結構。一個inode描述了一個文件中的數(shù)據(jù)占用了哪些塊以及文件的訪問權限、文件的修改時間和文件的類型。EXT2文件系統(tǒng)中的每一個文件都用一個inode描述,而每一個inode都用一個獨一無二的數(shù)字標識。文件系統(tǒng)的inode都放在一起,在inode表中。EXT2的目錄是簡單的非凡文件(它們也使用inode描述),包括它們目錄條目的inode的指針。

 

圖9.1顯示了一個EXT2文件系統(tǒng)占用了一個塊結構的設備上一系列的塊。只要提到文件系統(tǒng),塊設備都可以看作一系列能夠讀寫的塊。文件系統(tǒng)不需要關心自身要放在物理介質(zhì)的哪一個塊上,這是設備驅動程序的工作。當一個文件系統(tǒng)需要從包括它的塊設備上讀取信息或數(shù)據(jù)的時候,它請求對它支撐的設備驅動程序讀取整數(shù)數(shù)目的塊。EXT2文件系統(tǒng)把它占用的邏輯分區(qū)劃分成塊組(Block Group)。每一個組除了當作信息和數(shù)據(jù)塊來存放真實的文件和目錄之外,還復制對于文件系統(tǒng)一致性至關重要的信息。這種復制的信息對于發(fā)生災難,文件系統(tǒng)需要恢復的時候是必要的。下面對于每一個塊組的內(nèi)容進行了具體的描述。

 

9.1.1 The EXT2 Inode(EXT2 I節(jié)點)

 



在EXT2文件系統(tǒng)中,I節(jié)點是建設的基石:文件系統(tǒng)中的每一個文件和目錄都用一個且只用一個inode描述。每一個塊組的EXT2的inode都放在inode表中,還有一個位圖,讓系統(tǒng)跟蹤分配和未分配的I節(jié)點。圖9.2顯示了一個EXT2 inode的格式,在其他信息中,它包括一些域:

參見include/linux/ext2_fs_i.h

 

mode 包括兩組信息:這個inode描述了什么和用戶對于它的權限。對于EXT2,一個inode可以描述一個文件、目錄、符號鏈接、塊設備、字符設備或FIFO。

Owner Information 這個文件或目錄的數(shù)據(jù)的用戶和組標識符。這答應文件系統(tǒng)正確地進行文件訪問權限控制

Size 文件的大小(字節(jié))

Timestamps 這個inode創(chuàng)建的時間和它上次被修改的時間。

Datablocks 指向這個inode描述的數(shù)據(jù)的塊的指針。最初的12個是指向這個inode描述的數(shù)據(jù)的物理塊,最后的3個指針包括更多級的間接的數(shù)據(jù)塊。例如,兩級的間接塊指針指向一個指向數(shù)據(jù)塊的塊指針的塊指針。的這意味著小于或等于12數(shù)據(jù)塊大小的文件比更大的文件的訪問更快。

 

你應該注重EXT2 inode可以描述非凡設備文件。這些不是真正的文件,程序可以用于訪問設備。/dev下所有的設備文件都是為了答應程序訪問Linux的設備。例如mount程序用它希望安裝的設備文件作為參數(shù)。

 

9.1.2 The EXT2 Superblock(EXT2超級塊)

 

超級塊包括這個文件系統(tǒng)基本大小和外形的描述。它里面的信息答應文件系統(tǒng)治理程序用于維護文件系統(tǒng)。通常文件系統(tǒng)安裝時只有塊組0中的超級塊被讀取,但是每一個塊組中都包含一個復制的拷貝,用于系統(tǒng)崩潰的時候。除了其他一些信息,它包括:

參見include/linux/ext2_fs_sb.h
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 洪洞县| 株洲市| 平顶山市| 玉树县| 正镶白旗| 师宗县| 琼结县| 西贡区| 湘阴县| 五家渠市| 晋宁县| 乌苏市| 锡林郭勒盟| 北安市| 中宁县| 博湖县| 陇川县| 云梦县| 武平县| 弥渡县| 阜南县| 息烽县| 辽阳县| 昭平县| 普兰县| 瓮安县| 安宁市| 麻江县| 平谷区| 额尔古纳市| 阿城市| 怀宁县| 武汉市| 泗阳县| 临西县| 阿图什市| 修武县| 寿宁县| 巨野县| 开江县| 济南市|