《Linux操作系統(tǒng)原理與應(yīng)用》課件第6章_第1頁(yè)
《Linux操作系統(tǒng)原理與應(yīng)用》課件第6章_第2頁(yè)
《Linux操作系統(tǒng)原理與應(yīng)用》課件第6章_第3頁(yè)
《Linux操作系統(tǒng)原理與應(yīng)用》課件第6章_第4頁(yè)
《Linux操作系統(tǒng)原理與應(yīng)用》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩110頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章文件管理6.1文件管理概述6.2Linux文件系統(tǒng)6.3Ext2文件系統(tǒng)6.4虛擬文件系統(tǒng)習(xí)題

6.1文件管理概述

6.1.1文件與文件系統(tǒng)

1.文件

文件是具有名字的一組相關(guān)信息的有序集合,存放在外部存儲(chǔ)器中。文件的名字稱為文件名,它是文件的標(biāo)識(shí)。文件的信息可以是各種各樣的,一個(gè)程序、一批數(shù)據(jù)、一張圖片、一段視頻等都可以作為文件的內(nèi)容。文件的存儲(chǔ)空間是具有長(zhǎng)久記憶特性的外部存儲(chǔ)器(如磁盤、磁帶等),因而文件是可以長(zhǎng)久保存的信息形式。所有需要在系統(tǒng)關(guān)機(jī)后仍能保留的信息都應(yīng)以文件的形式存在。

2.文件系統(tǒng)

文件系統(tǒng)是操作系統(tǒng)的一個(gè)重要組成部分,它負(fù)責(zé)管理系統(tǒng)中的文件,為用戶提供使用文件的操作接口。文件系統(tǒng)由實(shí)施文件管理的軟件和被管理的文件組成。文件系統(tǒng)軟件屬于系統(tǒng)內(nèi)核代碼,文件則按特定的格式存放在磁盤分區(qū)中。文件系統(tǒng)通常以磁盤分區(qū)劃分,每個(gè)分區(qū)對(duì)應(yīng)一個(gè)獨(dú)立的文件系統(tǒng)。

歸納起來,文件系統(tǒng)的功能包括以下幾項(xiàng):

●實(shí)現(xiàn)文件的“按名存取”,包括按名建立、讀/寫、檢索、修改、刪除文件等操作。

●管理分區(qū)存儲(chǔ)空間,實(shí)施存儲(chǔ)空間的分配、回收與重組。

●實(shí)現(xiàn)對(duì)文件的共享、保密和保護(hù)措施。

●提供文件訪問接口。

3.文件的描述

為了實(shí)施和控制對(duì)文件的各種訪問操作,文件系統(tǒng)為每個(gè)文件都建立了一個(gè)文件控制塊(FileControlBlock,F(xiàn)CB)。文件的FCB的作用類似于進(jìn)程的PCB,它記錄了文件的使用者和管理者所關(guān)心的所有信息,包括文件名、屬主、文件大小、物理存儲(chǔ)位置、修改和訪問時(shí)間、存取權(quán)限等。當(dāng)用戶創(chuàng)建一個(gè)新文件時(shí),文件系統(tǒng)就為這個(gè)文件建立起一個(gè)FCB。隨著文件的操作,F(xiàn)CB的內(nèi)容也相應(yīng)地變化。當(dāng)文件被刪除時(shí),它的FCB也就消失了。

4.文件目錄

計(jì)算機(jī)系統(tǒng)中通常存有大量的文件,系統(tǒng)須采用某種有效的形式來組織和管理這些文件。由于文件與文件的FCB一一對(duì)應(yīng),因此,管理文件就是管理文件的FCB。

文件系統(tǒng)采用目錄來組織文件。目錄是FCB的有序集合,通過目錄將所有的FCB分層分類地組織在一起,方便了文件的檢索操作。由于目錄的信息是需要長(zhǎng)久保存的,所以目錄也需以文件的形式存在。為此,系統(tǒng)定義了一種特殊的文件——目錄文件,其內(nèi)容是一組FCB構(gòu)成的文件列表,每個(gè)表項(xiàng)是一個(gè)文件的FCB,在目錄里就稱為目錄項(xiàng)了。由于目錄本身也是文件,因此目錄的FCB也可以作為另一個(gè)目錄中的目錄項(xiàng),從而構(gòu)成目錄的層次關(guān)系。目錄的主要功能是實(shí)現(xiàn)文件的“按名存取”,即用戶只需提供文件名就可以對(duì)文件進(jìn)行各種操作。目錄實(shí)現(xiàn)了文件名到文件物理存放位置的映射。

目錄的另一個(gè)功能是合理地組織文件。現(xiàn)在,幾乎所有的操作系統(tǒng)都采用樹形目錄結(jié)構(gòu),就是將文件分層分類地組織成一個(gè)樹狀結(jié)構(gòu),從根目錄開始向下延伸。樹形目錄結(jié)構(gòu)的特點(diǎn)是層次清楚,便于文件分類管理,可加快文件的檢索速度。另外,樹形目錄還允許文件重名,即只要文件不在同一目錄下便可以使用相同的名字。

5.文件的結(jié)構(gòu)

文件結(jié)構(gòu)是文件內(nèi)容的組織方式。從不同層面上看到的文件結(jié)構(gòu)有所不同。圖6-1所示是文件在三個(gè)不同抽象層次上的結(jié)構(gòu)。圖6-1文件的結(jié)構(gòu)

1)文件的格式

終端用戶是通過應(yīng)用程序來使用文件的,從他們的角度看到的是文件的應(yīng)用結(jié)構(gòu),也就是文件的格式。文件的格式由處理文件的應(yīng)用程序定義和使用,通常以后綴名相區(qū)分。如“.doc”文件是由Word程序使用的格式,“.bmp”是圖片處理程序使用的格式。

根據(jù)文件格式的結(jié)構(gòu)類型,文件大致可分為結(jié)構(gòu)化文件(如列表文件、數(shù)據(jù)庫(kù)文件等)、半結(jié)構(gòu)化文件(如Web文檔、圖片、圖像等)和無結(jié)構(gòu)文件(如純文本文件等)。

2)文件的邏輯結(jié)構(gòu)

文件的邏輯結(jié)構(gòu)是文件系統(tǒng)的直接用戶(也就是應(yīng)用程序)所看到的文件結(jié)構(gòu)。文件的邏輯結(jié)構(gòu)取決于文件系統(tǒng)接口的設(shè)計(jì),它決定了文件存取的方式。應(yīng)用程序按邏輯結(jié)構(gòu)訪問文件系統(tǒng)中的文件,并在此基礎(chǔ)上構(gòu)造出各種應(yīng)用結(jié)構(gòu)呈現(xiàn)給應(yīng)用程序的用戶。也就是說,應(yīng)用程序負(fù)責(zé)文件的格式與邏輯結(jié)構(gòu)之間的映射。

文件的邏輯結(jié)構(gòu)有記錄式文件和流式文件兩種,具體介紹見6.1.2小節(jié)。

3)文件的物理結(jié)構(gòu)

文件的物理結(jié)構(gòu)又稱為存儲(chǔ)結(jié)構(gòu),是指文件在外存上的存儲(chǔ)組織形式。文件系統(tǒng)負(fù)責(zé)文件的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)之間的映射。

文件的物理結(jié)構(gòu)分為連續(xù)文件、鏈接文件和索引文件3種,具體介紹見6.1.3小節(jié)。

操作系統(tǒng)所關(guān)心的是文件的邏輯結(jié)構(gòu)與物理結(jié)構(gòu)。邏輯結(jié)構(gòu)是供文件系統(tǒng)的用戶使用的,物理結(jié)構(gòu)是文件系統(tǒng)內(nèi)部使用的。將邏輯結(jié)構(gòu)與物理結(jié)構(gòu)相區(qū)分,是為了向用戶屏蔽有關(guān)文件存儲(chǔ)的細(xì)節(jié),使用戶可以只憑簡(jiǎn)單的邏輯結(jié)構(gòu)來使用文件。6.1.2文件的邏輯結(jié)構(gòu)與存取方式

1.文件的邏輯結(jié)構(gòu)

文件的邏輯結(jié)構(gòu)是從文件的使用者角度所看到的文件信息的組織形式,它獨(dú)立于文件的物理存儲(chǔ)特性。

文件的邏輯結(jié)構(gòu)主要分為兩種類型:一種是記錄式文件,另一種是流式文件。

1)記錄式文件

記錄式文件由若干記錄組成,記錄具有固定的長(zhǎng)度和一致的內(nèi)部結(jié)構(gòu),其中有一個(gè)用于標(biāo)識(shí)記錄的記錄號(hào)字段。用戶程序預(yù)先定義好文件記錄的格式,文件系統(tǒng)就按此格式創(chuàng)建文件。訪問文件時(shí)要向文件系統(tǒng)提供記錄號(hào),文件系統(tǒng)則以記錄為單位進(jìn)行文件的定位和讀/寫。

記錄式文件是結(jié)構(gòu)化的文件,它就像一張表格,用戶程序要按預(yù)先規(guī)定的格式填寫數(shù)據(jù)和讀取數(shù)據(jù),使用起來不夠靈活,也不便于構(gòu)造不規(guī)則的應(yīng)用格式。另外,記錄的大小與存儲(chǔ)塊的大小難以匹配,讀/寫操作的復(fù)雜度較高。由于這些原因,記錄式文件已漸被淘汰。

2)流式文件

流式文件是由字節(jié)序列組成的文件,是無結(jié)構(gòu)的文件。用戶程序訪問文件時(shí)只要指定文件的偏移位置和要讀/寫的字節(jié)數(shù),文件系統(tǒng)即可方便地存取指定部分的文件內(nèi)容。

流式文件就像一張白紙,沒有任何格式上的限制。用戶程序可任意地在字節(jié)流上構(gòu)造自己的應(yīng)用格式。寫文件時(shí),用戶程序按自己定義的結(jié)構(gòu)來組織數(shù)據(jù),然后把它們作為字節(jié)流寫入文件;讀文件時(shí),將讀出的字節(jié)流再解釋成自己使用的結(jié)構(gòu)。因此說,無結(jié)構(gòu)實(shí)際上就是不限制結(jié)構(gòu)的意思,這為應(yīng)用程序提供了很大的靈活性,同時(shí)又簡(jiǎn)化了文件系統(tǒng)的操作。所以現(xiàn)代流行的操作系統(tǒng),如Unix、Linux、Windows、OS/2等均采用流式文件作為文件的邏輯結(jié)構(gòu)。

2.文件的操作

對(duì)文件的操作主要有建立/刪除、打開/關(guān)閉、讀/寫、修改屬性等。

建立文件時(shí)用戶要為文件指定一個(gè)文件名,文件系統(tǒng)以文件名為標(biāo)識(shí)建立文件的FCB,并為文件分配存儲(chǔ)空間等資源。刪除文件的操作與此相反,用戶指定要?jiǎng)h除的文件名,文件系統(tǒng)刪除該文件的FCB,并釋放其占用的存儲(chǔ)空間等資源。

對(duì)文件的讀/寫操作都要經(jīng)過文件的FCB來進(jìn)行。由于FCB存放在外存空間中,如果每次讀/寫文件都要訪問外存FCB的話,存取速度將很低。因此在對(duì)文件進(jìn)行任何讀/寫操作前,需要先打開文件。打開文件就是在內(nèi)存中生成文件的FCB,并返回一個(gè)標(biāo)識(shí)其內(nèi)存FCB的文件標(biāo)識(shí)符,隨后的讀/寫操作將通過此文件標(biāo)識(shí)符進(jìn)行。所有讀/寫完成后應(yīng)關(guān)閉文件。關(guān)閉文件操作將內(nèi)存FCB的內(nèi)容寫回外存FCB,回收文件描述符,并刪除內(nèi)存中的文件FCB。

3.文件的存取方式

不論是記錄式文件還是流式文件,其邏輯結(jié)構(gòu)都是一維的,但存取方式有所不同。這里針對(duì)流式文件的存取方式介紹如何根據(jù)邏輯結(jié)構(gòu)存取文件。

存取文件指的是對(duì)文件的讀/寫操作。每個(gè)打開的文件都有一個(gè)指示讀/寫位置的指針offset,如圖6-2所示。文件剛打開時(shí),讀/寫位置位于文件頭0字節(jié)處。每次讀/寫文件時(shí)(比如用C函數(shù)read()和write()等),根據(jù)給定的長(zhǎng)度參數(shù)讀/寫count個(gè)字節(jié),完成后位置指針會(huì)自動(dòng)移到讀/寫完的位置之后,這樣下次讀/寫就接著本次的位置順序地進(jìn)行下去。必要時(shí),也可以通過設(shè)置讀/寫位置指針來改變讀/寫的次序。例如,需要追加寫入時(shí),需先將位置指針定位到文件尾。

應(yīng)用程序?qū)α魇轿募拇嫒》绞接袃煞N,即順序存取和隨機(jī)存取。圖6?2流式文件的存取

1)順序存取

順序存取就是從文件頭開始順序地訪問文件的每一段信息,直到文件尾。應(yīng)用程序在加載、保存、傳輸文件時(shí),或?qū)ξ募瞿承┻^濾性處理時(shí),都要對(duì)文件進(jìn)行順序存取操作。

順序存取的通常做法是在一個(gè)循環(huán)中調(diào)用文件讀/寫函數(shù),直到遇到文件結(jié)束符(EOF)。

2)隨機(jī)存取

隨機(jī)存取也稱為直接存取,就是從文件的指定位置開始存取一段數(shù)據(jù)。很多應(yīng)用場(chǎng)合需要隨機(jī)存取,例如,數(shù)據(jù)庫(kù)管理程序從數(shù)據(jù)庫(kù)表文件中讀取或修改一個(gè)記錄就是一種隨機(jī)存取。

隨機(jī)存取的方法是:先將讀/寫指針定位到文件的指定位移處(比如用C函數(shù)lseek()等),然后從此位置開始存取指定字節(jié)數(shù)的一段數(shù)據(jù)。6.1.3文件的物理結(jié)構(gòu)與存儲(chǔ)方式

文件的物理結(jié)構(gòu)是文件在外存中的組織和存放形式,是文件系統(tǒng)底層所使用的文件結(jié)構(gòu)。文件的物理結(jié)構(gòu)與存儲(chǔ)介質(zhì)的物理特性有關(guān)。在介紹文件的物理結(jié)構(gòu)之前有必要了解一些存儲(chǔ)設(shè)備的知識(shí)和存儲(chǔ)空間的結(jié)構(gòu)。

文件的存儲(chǔ)設(shè)備包括磁帶、磁盤、閃存、光盤等,典型的存儲(chǔ)設(shè)備是磁盤。下面簡(jiǎn)單介紹磁盤的物理結(jié)構(gòu)及磁盤空間的邏輯結(jié)構(gòu)。

1.磁盤的物理結(jié)構(gòu)

磁盤的結(jié)構(gòu)如圖6-3所示。磁盤由一組盤片組成,每個(gè)盤片有兩個(gè)盤面,在對(duì)磁盤進(jìn)行物理格式化時(shí),在盤面上劃分出多個(gè)同心圓,稱為磁道(track)。所有盤面的相同位置的磁道組成的圓柱體,稱為柱面(cylinder)。每個(gè)磁道又劃分為多個(gè)弧段,稱為扇區(qū)(sector),通常的大小是512字節(jié)。扇區(qū)是磁盤的物理塊,是磁盤上可尋址的最小存儲(chǔ)單位。文件的數(shù)據(jù)就存儲(chǔ)在一系列扇區(qū)中。圖6-3磁盤結(jié)構(gòu)示意圖(上為俯視圖,下為側(cè)視圖)磁盤在啟動(dòng)后高速旋轉(zhuǎn)。每個(gè)磁面上有一個(gè)磁頭,可以在不同磁道之間來回移動(dòng)。扇區(qū)的定位參數(shù)有三個(gè),即柱面號(hào)、磁頭號(hào)和扇區(qū)號(hào)。訪問磁盤時(shí),先將磁頭移動(dòng)到指定的柱面上,等待要訪問的扇區(qū)轉(zhuǎn)到磁頭下,然后指定的磁頭開始讀/寫數(shù)據(jù)。

2.磁盤空間的邏輯結(jié)構(gòu)

由于磁盤是高速設(shè)備,一次讀/寫操作可以同時(shí)訪問多個(gè)相鄰的扇區(qū)(通常是在同一柱面上)。因此,文件系統(tǒng)在讀/寫磁盤時(shí)不是以扇區(qū)為單位,而是以塊為單位的。塊(block)由若干個(gè)相鄰的扇區(qū)組成,它是對(duì)存儲(chǔ)空間的邏輯劃分。塊的大小依賴于文件系統(tǒng)的設(shè)置和磁盤容量,但必須是扇區(qū)大小的2的整數(shù)倍,并且要小于內(nèi)存頁(yè)幀的大小。通常塊的大小是512?B、1?KB或4?KB。

在文件系統(tǒng)看來,磁盤的存儲(chǔ)空間是由許多在邏輯上連續(xù)的塊組成的,它們從0到n編號(hào),如圖6-4所示。文件系統(tǒng)以塊為單位保存文件數(shù)據(jù),也以塊為單位傳輸數(shù)據(jù)。所以稱這類存儲(chǔ)設(shè)備為塊設(shè)備。訪問文件時(shí),只要指定塊號(hào)即可,不必關(guān)心它對(duì)應(yīng)的扇區(qū)的位置,磁盤驅(qū)動(dòng)程序會(huì)進(jìn)行邏輯塊到物理塊(扇區(qū))的轉(zhuǎn)換。圖6-4磁盤存儲(chǔ)空間的邏輯結(jié)構(gòu)

3.文件的物理結(jié)構(gòu)

文件的物理結(jié)構(gòu)主要有3種:連續(xù)文件、鏈接文件和索引文件。

1)連續(xù)文件

連續(xù)文件的存儲(chǔ)方案是將文件的內(nèi)容按邏輯順序存放在連續(xù)的存儲(chǔ)塊中,這是最簡(jiǎn)單的存儲(chǔ)分配方案,如圖6-5所示。假設(shè)磁盤空間采用4K大小的塊,文件A的大小為25K,系統(tǒng)為它分配了連續(xù)的7塊。文件B的大小為10K,系統(tǒng)為它分配了連續(xù)的3塊。它們的存儲(chǔ)空間是連續(xù)的,起始?jí)K號(hào)和占用的塊數(shù)都記錄在它們各自的目錄項(xiàng)中。圖6-5連續(xù)文件的存儲(chǔ)結(jié)構(gòu)示意圖連續(xù)存儲(chǔ)方案的優(yōu)點(diǎn)是簡(jiǎn)單、存取速度快。由于文件內(nèi)容是連續(xù)存放的,訪問時(shí)磁頭移動(dòng)較少,因而無論順序存取還是隨機(jī)存取,其性能都很好。它的缺點(diǎn)之一是限制了文件的動(dòng)態(tài)增長(zhǎng)。另一個(gè)缺點(diǎn)是磁盤碎片問題,即經(jīng)過一系列的文件空間分配和回收操作后,空閑空間逐漸變得支離破碎,無法容納新文件。磁盤碎片降低了外存空間的利用率,需要經(jīng)常進(jìn)行磁盤壓縮整理。由于這些缺點(diǎn),連續(xù)文件不適合用于磁盤等直接存取設(shè)備。它主要用于在順序存取設(shè)備(如磁帶)或只讀存儲(chǔ)設(shè)備(如只讀光盤)上存儲(chǔ)文件。

2)鏈接文件

鏈接文件的存儲(chǔ)思想是:文件內(nèi)容可以存放在彼此不連續(xù)的存儲(chǔ)塊中,用指針拉鏈的方式表示文件內(nèi)容的邏輯順序。做法是:每個(gè)塊留出一個(gè)空間來存放指向下一塊地址的指針。在目錄項(xiàng)中記錄了文件首塊的磁盤地址,從首塊出發(fā)可以依次找到其他各塊,如圖6-6所示。圖中,文件A占用了4個(gè)存儲(chǔ)塊,依次是1→2→9→11;文件B占用了5個(gè)存儲(chǔ)塊,依次是5→6→3→15→18。與連續(xù)存儲(chǔ)方案相比,鏈接存儲(chǔ)中不再有磁盤碎片問題,因?yàn)槊總€(gè)塊都可以被利用。然而,鏈接文件的主要缺點(diǎn)是存取效率問題。由于不是連續(xù)存放,造成訪問時(shí)磁頭移動(dòng)次數(shù)較多,順序存取還算方便,但直接存取就相當(dāng)緩慢了。另外,由于指針占去了一些字節(jié),每個(gè)塊的字節(jié)數(shù)不再是2的冪,增加了讀/寫操作的復(fù)雜度。因?yàn)榇蠖鄶?shù)程序都是以2的冪為長(zhǎng)度來讀/寫塊的。圖6-6鏈接文件的存儲(chǔ)結(jié)構(gòu)示意圖目前,實(shí)際使用的鏈接文件是針對(duì)以上問題進(jìn)行了改進(jìn)的方案。改進(jìn)的思想是將指針部分從存儲(chǔ)塊中提出來,單獨(dú)存放在一個(gè)鏈接表中。鏈接表的每一項(xiàng)對(duì)應(yīng)一個(gè)存儲(chǔ)塊,其內(nèi)容是該塊所鏈接的下一個(gè)塊的塊號(hào)。圖6-7所示是文件分配鏈接表方案的示意圖。圖中描述了與圖的分配情形相同的兩條塊號(hào)鏈,一條是文件A的鏈,從表項(xiàng)1開始;另一條是文件B的鏈,從表項(xiàng)5開始。圖6-7文件分配鏈接表示意圖鏈接表占用的空間小,可以放在內(nèi)存中。當(dāng)需要訪問文件時(shí),只要在表中順著鏈進(jìn)行查找即可,不需要訪問磁盤,因而提高了文件定位的速度。Windows的FAT文件系統(tǒng)采用的就是這種改進(jìn)的鏈接文件結(jié)構(gòu)。

鏈接文件的優(yōu)點(diǎn)是允許文件長(zhǎng)度動(dòng)態(tài)變化,外存空間利用率高;缺點(diǎn)是存取效率(尤其是直接存取的效率)較連續(xù)文件低。對(duì)小文件來說沒有問題,但文件越大存取效率就越低。因此,鏈接文件更適合于小型文件系統(tǒng)。雖然在建立文件時(shí)文件系統(tǒng)會(huì)盡量為文件分配連續(xù)的區(qū)域,但經(jīng)過一段時(shí)間的文件動(dòng)態(tài)增長(zhǎng)或縮減操作后,文件的各存儲(chǔ)塊可能會(huì)變得過度分散,各文件的塊鏈穿插交錯(cuò),使存取效率大大降低。為解決這個(gè)問題,Windows的FAT文件系統(tǒng)采用了磁盤整理的方法。當(dāng)文件訪問效率下降時(shí),通過磁盤整理來重新調(diào)整文件在存儲(chǔ)空間中的分布,使其盡可能連續(xù)。

3)索引文件

索引文件的存儲(chǔ)方案也是允許將文件內(nèi)容存放在不連續(xù)的存儲(chǔ)塊中,但它是用索引表來建立文件內(nèi)容與存儲(chǔ)塊之間的聯(lián)系的。索引文件的分配思想與頁(yè)式內(nèi)存分配很相似,索引表就如同頁(yè)表的作用。圖6-8所示為索引文件的存儲(chǔ)結(jié)構(gòu)示意圖,文件A占用了4塊,依次是第7、0、9、14塊。通過文件的索引表可以直接找到各塊。圖6-8索引文件的存儲(chǔ)結(jié)構(gòu)示意圖索引文件具有鏈接文件的優(yōu)點(diǎn),文件定位速度更快,順序存取和隨機(jī)存取效率都比較高。索引文件的缺點(diǎn)是占用的存儲(chǔ)空間較多,因?yàn)樗饕肀旧硇枵加靡欢ǖ拇鎯?chǔ)空間。對(duì)于只有1~2塊的小文件來說,雖然其索引表很小,但也要占用同樣的存儲(chǔ)空間。因此,對(duì)于小文件較多的系統(tǒng)來說,空間的浪費(fèi)比較明顯,索引表的查找速度優(yōu)勢(shì)也并不明顯??偟恼f來,索引文件更適合于追求性能的大中型文件系統(tǒng),如Unix、Linux的文件系統(tǒng)都采用了一種多重索引的文件結(jié)構(gòu),具體介紹見6.3.1小節(jié)。6.1.4文件的共享與保護(hù)

1.文件共享

在多用戶系統(tǒng)中,有時(shí)會(huì)有多個(gè)用戶需要使用同一個(gè)文件的情況,比如一個(gè)項(xiàng)目組成員都要用到某些項(xiàng)目文件。如果每個(gè)用戶都保存一個(gè)文件副本則會(huì)浪費(fèi)很多的存儲(chǔ)空間。文件共享是指允許一個(gè)文件被多個(gè)用戶或進(jìn)程共同使用。這樣可以節(jié)省存儲(chǔ)空間和傳輸時(shí)間,并可避免因存在多個(gè)文件副本而可能發(fā)生的不一致的現(xiàn)像。實(shí)現(xiàn)文件共享的方法是鏈接法。當(dāng)需要共享某個(gè)已存在的文件時(shí),可以建立一個(gè)特殊的文件,稱為鏈接文件。這個(gè)文件有獨(dú)立的文件名,但并無實(shí)際的文件內(nèi)容,它的作用是建立一條到共享文件的通路。因此,鏈接文件名可以看做原共享文件的別名,它們都指向相同的文件內(nèi)容,訪問鏈接文件就是在訪問共享文件本身。在Linux系統(tǒng)中,鏈接文件被作為一種特殊的文件類型來對(duì)待,關(guān)于鏈接法的更詳細(xì)的介紹見6.3.1小節(jié)。

對(duì)于共享文件,可能會(huì)發(fā)生多個(gè)進(jìn)程同時(shí)存取同一文件的情況,文件系統(tǒng)必須提供同步控制機(jī)制,以保證文件內(nèi)容的完整性。

2.文件的保護(hù)

文件保護(hù)的目的是防止文件被未授權(quán)的用戶訪問,造成泄密或意外的破壞。在多用戶系統(tǒng)環(huán)境下,文件保護(hù)特重要。

保護(hù)文件的主要手段是控制用戶對(duì)文件的存取權(quán)限。文件的存取權(quán)限包括讀、寫和執(zhí)行權(quán)。適當(dāng)?shù)卦O(shè)置存取權(quán)限可以防止文件泄密、毀壞和被非法使用。

不同的用戶對(duì)文件的權(quán)限要求也是不同的,因此在權(quán)限分配時(shí)要根據(jù)用戶的性質(zhì)、職能、需求等對(duì)用戶進(jìn)行分類,對(duì)不同種類的用戶分別授權(quán)。當(dāng)用戶進(jìn)行文件操作時(shí),系統(tǒng)根據(jù)用戶的身份和文件的權(quán)限設(shè)置判斷用戶是否有權(quán)執(zhí)行這個(gè)操作。符合存取權(quán)限的操作將被執(zhí)行,違反權(quán)限的操作系統(tǒng)將拒絕執(zhí)行。通常有兩種用戶分類方法:一是將用戶分為系統(tǒng)管理員和普通用戶兩類,所有普通用戶具有相同的訪問權(quán)限。這是一種比較粗糙的分類,一般用于個(gè)人操作系統(tǒng)。另一種是Unix/Linux采用的分類方法,將用戶分為超級(jí)用戶、文件屬主、組用戶和其他用戶4類??梢詾槊款愑脩粼O(shè)置不同的訪問權(quán)限,從而實(shí)現(xiàn)了細(xì)粒度的權(quán)限控制。6.1.5文件存儲(chǔ)空間的管理

文件系統(tǒng)要對(duì)文件的存儲(chǔ)空間進(jìn)行管理,管理工作包括:建立文件時(shí)為文件分配存儲(chǔ)空間;刪除文件時(shí)回收文件占用的存儲(chǔ)空間;修改文件時(shí)動(dòng)態(tài)地分配和回收文件的存儲(chǔ)空間。不同的文件系統(tǒng)對(duì)文件存儲(chǔ)空間的管理方案也不同,常用的管理方案有以下3種:

1.位示圖

位示圖是由若干個(gè)字節(jié)組成的一張表,如圖6-9所示。每個(gè)字節(jié)的每一位對(duì)應(yīng)一個(gè)存儲(chǔ)塊的狀態(tài),為“1”表示該塊已被占用,“0”表示該塊空閑。

位示圖法適合于索引文件。分配時(shí),先掃描位示圖,找到足夠的空閑塊(對(duì)應(yīng)位為“0”),分配給文件,并將對(duì)應(yīng)的位改為“1”;回收時(shí),將對(duì)應(yīng)的位改為“0”即可。

由于位示圖的體積較小,可以全部或部分保存的內(nèi)存中,因此可實(shí)現(xiàn)高速的分配算法。圖6-9位示圖

2.空閑區(qū)表

空閑區(qū)表是記錄連續(xù)的空閑區(qū)域的表格,表格中的每一項(xiàng)記錄一個(gè)空閑區(qū)的起始?jí)K號(hào)和塊數(shù),如圖6-10所示。

空閑塊表法適合于連續(xù)文件。分配時(shí),依次掃描空閑區(qū)表,查找大小合適的空閑區(qū),分配給文件。如果空閑區(qū)大小正好是文件需要的塊數(shù),則刪去該表項(xiàng);否則修改該表項(xiàng),扣除被文件占用的區(qū)域?;厥諘r(shí),將文件釋放的區(qū)域填入空閑區(qū)表。如果與其他空閑區(qū)發(fā)生鄰接,則將鄰接區(qū)域的表項(xiàng)合并。圖6-10空閑塊表

3.空閑塊鏈表

將所有空閑塊的塊號(hào)用鏈表形式鏈在一起就形成了一個(gè)空閑塊鏈表,如圖6-11所示。

空閑塊鏈表法適合于鏈?zhǔn)轿募7峙鋾r(shí),從鏈表頭取下若干鏈表節(jié)點(diǎn),將對(duì)應(yīng)的空閑塊分配給文件使用;回收時(shí),將文件釋放的空閑塊的塊號(hào)鏈入鏈表中。圖6-11空閑塊鏈表

6.2Linux文件系統(tǒng)

6.2.1Linux文件系統(tǒng)的特點(diǎn)

Linux繼承了Unix文件系統(tǒng)的優(yōu)秀設(shè)計(jì),并結(jié)合了一些現(xiàn)代文件系統(tǒng)的先進(jìn)技術(shù),在開放性、可擴(kuò)展性和性能方面都十分出色。以下介紹Linux文件系統(tǒng)的幾個(gè)主要特征。

1.支持多種文件系統(tǒng)

許多操作系統(tǒng)(如DOS、Windows等)只支持一種或幾種專用的文件系統(tǒng),而Linux系統(tǒng)則可以支持幾乎所有流行的文件系統(tǒng)。這使得Linux可以和許多其他操作系統(tǒng)共存,允許用戶訪問其他操作系統(tǒng)分區(qū)中的文件。用戶可以使用標(biāo)準(zhǔn)的系統(tǒng)調(diào)用操作各個(gè)文件系統(tǒng)中的文件,并可在它們之間自由地復(fù)制和移動(dòng)文件。這種兼容性帶來的另一個(gè)好處是Linux用戶可以根據(jù)應(yīng)用需要選擇最適合的文件系統(tǒng),并可體驗(yàn)眾多文件系統(tǒng)新產(chǎn)品的先進(jìn)特色。

2.樹型可掛裝目錄結(jié)構(gòu)

Linux系統(tǒng)采用了樹型目錄和分區(qū)掛裝的概念,系統(tǒng)分區(qū)上的文件系統(tǒng)稱為根文件系統(tǒng),其他所有分區(qū)的文件系統(tǒng)都要掛裝(mount)到根文件系統(tǒng)下的某個(gè)目錄下,然后通過根目錄來訪問。因此,與Windows系統(tǒng)將每個(gè)分區(qū)獨(dú)立為一棵樹不同,Linux文件系統(tǒng)總是只有一棵樹,不管掛入的是本地磁盤分區(qū)還是網(wǎng)絡(luò)上的文件系統(tǒng),它們都與根文件系統(tǒng)無縫結(jié)合,用戶訪問這些分區(qū)就如同訪問根文件系統(tǒng)所在分區(qū)一樣。另外,Linux支持動(dòng)態(tài)地掛裝和卸載文件系統(tǒng),允許用戶靈活地組織和擴(kuò)充存儲(chǔ)空間。

3.文件、設(shè)備統(tǒng)一管理

Linux將設(shè)備也抽象為文件來處理,使用戶可以像讀/寫文件一樣地操作設(shè)備進(jìn)行I/O操作。這樣做既簡(jiǎn)化了系統(tǒng)結(jié)構(gòu)和代碼,又方便了用戶對(duì)設(shè)備的使用。在第7章中將介紹Linux如何通過文件系統(tǒng)來管理設(shè)備。6.2.2Linux文件系統(tǒng)的結(jié)構(gòu)

Linux文件系統(tǒng)采用了分層結(jié)構(gòu)的設(shè)計(jì),如圖6-12所示。

Linux文件系統(tǒng)由以下幾個(gè)主要部分組成:圖6-12Linux文件系統(tǒng)的結(jié)構(gòu)

1.設(shè)備驅(qū)動(dòng)程序

文件系統(tǒng)需要利用存儲(chǔ)設(shè)備來存儲(chǔ)文件,因此,存儲(chǔ)設(shè)備是文件系統(tǒng)的物質(zhì)基礎(chǔ)。除此之外,Linux系統(tǒng)中的其他設(shè)備也是作為文件由文件系統(tǒng)統(tǒng)一管理的。所有這些設(shè)備都由特定的設(shè)備驅(qū)動(dòng)程序直接控制,它們負(fù)責(zé)設(shè)備的啟動(dòng)、數(shù)據(jù)傳輸控制和中斷處理等工作。

Linux的各種設(shè)備驅(qū)動(dòng)程序都通過統(tǒng)一的接口與文件系統(tǒng)連接。文件系統(tǒng)向用戶提供使用文件的接口,設(shè)備驅(qū)動(dòng)程序則控制設(shè)備實(shí)現(xiàn)具體的文件I/O操作。

2.實(shí)際文件系統(tǒng)

文件系統(tǒng)是以磁盤分區(qū)來劃分的,每個(gè)磁盤分區(qū)由一個(gè)具體的文件系統(tǒng)管理,不同分區(qū)的文件系統(tǒng)可以不同。Linux系統(tǒng)支持多種不同格式的文件系統(tǒng),除了專為L(zhǎng)inux設(shè)計(jì)的Ext2/Ext3、JFS、XFS、ReiserFS和NFS之外,還支持Unix系統(tǒng)的sysv、ufs、bfs,Minix系統(tǒng)的minx、XIA,Windows系統(tǒng)的FAT32、NTFS,DOS系統(tǒng)的FAT16,以及OS/2系統(tǒng)的hpfs等。這些文件系統(tǒng)都可以在Linux系統(tǒng)中工作。Linux默認(rèn)使用的文件系統(tǒng)是Ext2/Ext3。

3.虛擬文件系統(tǒng)

實(shí)際文件系統(tǒng)通常是為不同的操作系統(tǒng)設(shè)計(jì)和使用的,它們具有不同的組織結(jié)構(gòu)和文件操作接口函數(shù),相互之間往往差別很大。為了屏蔽各個(gè)文件系統(tǒng)之間的差異,為用戶提供訪問文件的統(tǒng)一接口,Linux在具體的文件系統(tǒng)上增加了一個(gè)稱為虛擬文件系統(tǒng)(VirtualFileSystem,VFS)的抽象層。

虛擬文件系統(tǒng)運(yùn)行在最上層,它采用一致的文件描述結(jié)構(gòu)和文件操作函數(shù),使得不同的文件系統(tǒng)按照同樣的模式呈現(xiàn)在用戶面前。有了VFS,用戶覺察不到文件系統(tǒng)之間的差異,可以使用同樣的命令和系統(tǒng)調(diào)用來操作不同文件系統(tǒng),并可以在它們之間自由地復(fù)制文件。

4.緩存機(jī)制

文件系統(tǒng)和存儲(chǔ)設(shè)備進(jìn)行數(shù)據(jù)傳輸時(shí)采用了緩存技術(shù)來提高外存數(shù)據(jù)的訪問效率。緩存區(qū)是在內(nèi)存中劃分的特定區(qū)域。每次從外設(shè)讀取的數(shù)據(jù)都暫時(shí)存放在這里。下次讀取數(shù)據(jù)時(shí),首先搜索緩存區(qū),如果有需要的數(shù)據(jù),則直接從這里讀?。蝗绻彺鎱^(qū)中沒有,則再啟動(dòng)設(shè)備讀取相應(yīng)的數(shù)據(jù)。對(duì)于寫入磁盤的數(shù)據(jù),也先放入到緩存區(qū)中,然后再分批寫出到磁盤中。使用緩存技術(shù)使得大多數(shù)數(shù)據(jù)傳輸都直接在進(jìn)程的內(nèi)存空間和緩存區(qū)之間進(jìn)行,減少了外部設(shè)備的訪問次數(shù),提高了系統(tǒng)的整體性能。

VFS文件系統(tǒng)使用了緩沖區(qū)緩存、目錄項(xiàng)緩存以及i節(jié)點(diǎn)緩存等技術(shù),使得整個(gè)文件系統(tǒng)具有相當(dāng)高的效率。

6.3Ext2文件系統(tǒng)

Ext2(Extended-2)文件系統(tǒng)是專為L(zhǎng)inux系統(tǒng)設(shè)計(jì)的一種文件系統(tǒng)。它采用的是Unix文件系統(tǒng)的設(shè)計(jì)思想,運(yùn)行穩(wěn)定,存取效率也很高,可支持最大4?TB(1T=1024G)的磁盤分區(qū)。2000年以前,它一直是幾乎所有的Linux發(fā)行版的默認(rèn)的文件系統(tǒng)。

Ext2的弱點(diǎn)在于它是一個(gè)非日志文件系統(tǒng)。日志文件系統(tǒng)可以在系統(tǒng)發(fā)生斷電或者其他系統(tǒng)故障時(shí)保證文件數(shù)據(jù)的完整性,這對(duì)關(guān)鍵行業(yè)的應(yīng)用是十分重要的。近年來Ext2已逐漸被它的升級(jí)版Ext3取代。Ext3是一個(gè)基于Ext2開發(fā)的日志文件系統(tǒng)。它具有健全的日志功能,可靠性很高。在非正常關(guān)機(jī)后,文件系統(tǒng)可在數(shù)十秒鐘內(nèi)自行修復(fù)。另外,Ext3文件系統(tǒng)的容量有了很大的提高,可以支持最大32?TB的文件系統(tǒng)和最大2?TB的文件。目前Ext3已被許多Linux發(fā)行版作為默認(rèn)安裝的文件系統(tǒng)。目前,第4代Ext文件系統(tǒng)Ext4正處于試用階段。Ext4最為顯著的改進(jìn)是文件和文件系統(tǒng)的大小。Ext4文件系統(tǒng)的容量達(dá)到1024?PB(1P=1024T),而文件大小則可達(dá)到16?TB。

本節(jié)對(duì)Ext2文件系統(tǒng)進(jìn)行分析和介紹,其基本結(jié)構(gòu)和操作同樣也適用于Ext3和Ext4。6.3.1Ext2文件的結(jié)構(gòu)

Ext2文件的邏輯結(jié)構(gòu)是無結(jié)構(gòu)的流式文件?;谧止?jié)流的概念,使得Linux系統(tǒng)可以把目錄、設(shè)備等都當(dāng)作文件來統(tǒng)一對(duì)待。Ext2文件的物理結(jié)構(gòu)采用易于擴(kuò)展的多重索引方式,便于文件動(dòng)態(tài)增長(zhǎng),同時(shí)也可以方便地實(shí)現(xiàn)順序和隨機(jī)訪問。

1.Ext2文件的描述

Ext2文件系統(tǒng)采用了改進(jìn)的FCB結(jié)構(gòu)來描述文件。

FCB要描述的信息比較多,所以一般要占較多的空間。當(dāng)目錄下的文件很多時(shí),目錄文件(其內(nèi)容是目錄項(xiàng)列表)就會(huì)很大,往往需要占用多個(gè)存儲(chǔ)塊,這將導(dǎo)致目錄檢索的效率下降。改進(jìn)的方法是將FCB分解為兩個(gè)部分:主部和次部。FCB主部包含除文件名之外的全部信息,稱為索引節(jié)點(diǎn)或i節(jié)點(diǎn)。次部只包含文件名和主部的標(biāo)識(shí)號(hào)碼(即i節(jié)點(diǎn)號(hào))。文件目錄由各文件的FCB次部組成,主要實(shí)現(xiàn)按名檢索的目的。由于目錄項(xiàng)(即FCB次部)很小,目錄文件也就很小,按文件名檢索的速度很快,檢索到后就可以立即找到文件的i節(jié)點(diǎn)了。

Ext2目錄項(xiàng)(directoryentry)主要包括文件名和i節(jié)點(diǎn)號(hào)兩部分。i節(jié)點(diǎn)號(hào)用于指示i節(jié)點(diǎn)的存放位置,文件名用于文件檢索。Ext2文件系統(tǒng)支持最長(zhǎng)255個(gè)字符的長(zhǎng)文件名。

Ext2文件系統(tǒng)采用索引節(jié)點(diǎn)(inode)方式來描述文件,系統(tǒng)中的所有文件(包括目錄和設(shè)備)都對(duì)應(yīng)一個(gè)唯一的i節(jié)點(diǎn)。i節(jié)點(diǎn)的內(nèi)容包含文件說明信息和索引表兩部分,文件說明信息部分包括模式(訪問權(quán)限與類型)、所有者(屬主和屬組)、長(zhǎng)度、時(shí)間戳、連接數(shù)等信息。索引表部分是指向文件存儲(chǔ)塊的索引指針。

圖6-13是Ext2文件的目錄項(xiàng)和索引節(jié)點(diǎn)的結(jié)構(gòu)。圖6-13Ext2文件的描述

2.?Ext2索引結(jié)構(gòu)

Ext2文件采用了多重索引的物理結(jié)構(gòu),用i節(jié)點(diǎn)中的索引表描述,見圖6-14。

索引表中前12個(gè)表項(xiàng)是直接指針,直接指向文件的數(shù)據(jù)塊。這些塊稱為直接塊。第13個(gè)表項(xiàng)是一個(gè)一級(jí)間接指針,它指向一個(gè)索引塊。索引塊中存放的是間接索引表,通過間接索引表中的指針再指向數(shù)據(jù)塊。這些由間接指針指向的塊稱為間接塊。類似的,索引表的第14項(xiàng)和第15項(xiàng)提供了一個(gè)二次間接和一個(gè)三次間接指針,可提供對(duì)更多的間接塊的索引。提供多級(jí)間接指針的目的是為了表達(dá)大型文件的結(jié)構(gòu)。圖6-14Ext2文件的多重索引結(jié)構(gòu)

Ext2文件系統(tǒng)的默認(rèn)塊大小是1?KB。對(duì)于12K以下的小文件,不需要使用間接索引,所有信息均在i節(jié)點(diǎn)中,因此訪問的速度非???。大一些的文件,需要用到一個(gè)間接索引塊。

一個(gè)間接索引表含有256個(gè)間接指針(每個(gè)指針占4字節(jié),則1K大的塊可容納256個(gè)指針),可以索引256個(gè)間接塊。因此,大小在12K~268K的文件需要一次間接,訪問速度會(huì)有所降低。而對(duì)于大型的文件,可以使用二次間接甚至三次間接指針,得到最大約16?GB的文件。

3.Ext2目錄文件的描述

目錄文件的描述結(jié)構(gòu)與普通文件一樣,每個(gè)目錄文件對(duì)應(yīng)一個(gè)目錄項(xiàng)(在其父目錄中)以及一個(gè)i節(jié)點(diǎn)。不同之處在于目錄文件的內(nèi)容數(shù)據(jù)塊中存放的是一個(gè)目錄項(xiàng)列表,包含了該目錄下的所有文件的目錄項(xiàng),頭兩個(gè)目錄項(xiàng)是“.”和“..”。Ext2目錄結(jié)構(gòu)如圖6-15所示。圖6-15

Ext2目錄結(jié)構(gòu)目錄文件A的內(nèi)容是一個(gè)含有6個(gè)目錄項(xiàng)的列表,其中“.”文件就是本文件的別名,它的i節(jié)點(diǎn)域指向了本文件的i節(jié)點(diǎn),“..”文件是父目錄文件的別名,它的i節(jié)點(diǎn)域指向了父目錄文件的i節(jié)點(diǎn)(根目錄的“..”就是其自身)。其余4個(gè)表項(xiàng)分別對(duì)應(yīng)了目錄A下的B、C、D、E子文件,其中文件B是一個(gè)子目錄,文件C是一個(gè)普通文件。文件D和E是一個(gè)共享文件。

4.?Ext2文件的定位

按名查找是文件系統(tǒng)要提供的一項(xiàng)重要功能。當(dāng)用戶需要打開某個(gè)文件時(shí),只要指定文件的路徑和名稱即可。文件系統(tǒng)根據(jù)路徑和文件名,從根目錄開始逐級(jí)向下找到文件所在的目錄,再找到文件的索引節(jié)點(diǎn),然后就可以通過索引節(jié)點(diǎn)訪問文件中的數(shù)據(jù)了。這個(gè)過程就是文件的定位。例如,要查找文件/home/zhuge/memo文件,定位過程如下:

(1)在超級(jí)塊中找到根目錄“/”的索引節(jié)點(diǎn)(1號(hào)i節(jié)點(diǎn)),通過它找到根目錄文件的內(nèi)容,即根目錄項(xiàng)列表,如圖6-16(a)所示。

(2)在根目錄項(xiàng)列表中查找home目錄文件的索引節(jié)點(diǎn)(6號(hào)i節(jié)點(diǎn)),通過它找到/home目錄的目錄項(xiàng)列表,如圖6-16(b)所示。

(3)在/home目錄項(xiàng)列表中查找zhuge目錄文件的索引節(jié)點(diǎn)(17號(hào)i節(jié)點(diǎn)),通過它找到/home/zhuge目錄的目錄項(xiàng)列表,如圖6-16(c)所示。

(4)在/home/zhuge目錄項(xiàng)列表中查找memo文件的索引節(jié)點(diǎn)(60號(hào)i節(jié)點(diǎn)),這就是目標(biāo)文件的索引節(jié)點(diǎn)。通過它找到/home/zhuge/memo文件的內(nèi)容,如圖6-16(d)所示。

隨后的文件訪問操作都將通過這個(gè)索引節(jié)點(diǎn)進(jìn)行。圖6-16文件的定位過程

5.文件的鏈接

文件鏈接是實(shí)現(xiàn)文件共享的主要方式。Linux系統(tǒng)提供了兩種文件鏈接方式,即符號(hào)鏈接和硬鏈接,用link()系統(tǒng)調(diào)用實(shí)現(xiàn)。用戶可以用ln命令建立文件鏈接。

符號(hào)鏈接(symboliclink)很像Windows系統(tǒng)中的快捷方式,即建立一個(gè)符號(hào)鏈接文件,其內(nèi)容是到一個(gè)實(shí)際存在的文件的路徑描述。訪問符號(hào)鏈接文件時(shí),系統(tǒng)將根據(jù)其記載的內(nèi)容轉(zhuǎn)去訪問那個(gè)實(shí)際文件。符號(hào)鏈接文件與目標(biāo)文件是兩個(gè)獨(dú)立的文件,有著各自的i節(jié)點(diǎn)和數(shù)據(jù)塊。它們之間通過文件內(nèi)容而邏輯地鏈接在一起。硬鏈接(hardlink)則是將兩個(gè)或多個(gè)文件通過i節(jié)點(diǎn)物理地鏈接在一起。硬鏈接的文件具有不同的文件名和同一個(gè)i節(jié)點(diǎn),通過其中任何一個(gè)文件名訪問得到的都是同一內(nèi)容,這就如同是一個(gè)文件具有多個(gè)別名。圖中的文件D和E就是硬鏈接的一個(gè)例子。硬鏈接文件的目錄項(xiàng)可以在同一目錄下,也可以在不同的目錄下,但不能跨越文件系統(tǒng)(即分區(qū))。

文件的i節(jié)點(diǎn)中記錄了該文件的連接數(shù),用ls-l命令可以顯示出文件的連接數(shù)。連接數(shù)表示連接到該i節(jié)點(diǎn)的文件目錄項(xiàng)的數(shù)目。新建的普通文件的連接數(shù)為1,每建立一個(gè)與它相連的硬鏈接文件時(shí)其連接數(shù)就增1。圖中的文件C的連接數(shù)是1,文件D和E的連接數(shù)都是2。刪除一個(gè)文件時(shí),實(shí)際是刪除它的目錄項(xiàng)并將其i節(jié)點(diǎn)的連接數(shù)減1,若連接數(shù)為0才真正釋放文件的i節(jié)點(diǎn)和數(shù)據(jù)塊。新建目錄的連接數(shù)為2,對(duì)應(yīng)了兩個(gè)文件名,即本目錄名與“.”。每當(dāng)在其下建立一個(gè)子目錄時(shí),它的連接數(shù)就增1,因?yàn)樗谧幽夸浵掠钟辛怂牧硪粋€(gè)文件名,即“..”。例如,圖中的目錄A的連接數(shù)為3,目錄B的連接數(shù)為2。

6.3.2Ext2文件系統(tǒng)的格式

Ext2文件系統(tǒng)在格式化時(shí)把它所占用的磁盤分區(qū)分為一個(gè)引導(dǎo)塊和若干個(gè)塊組。每一個(gè)塊組都由超級(jí)塊、組描述符表、塊位圖、i節(jié)點(diǎn)位圖、i節(jié)點(diǎn)區(qū)和數(shù)據(jù)塊區(qū)組成,如圖6-17所示。圖6-17Ext2文件系統(tǒng)的物理布局

1.引導(dǎo)塊與塊組

引導(dǎo)塊位于磁盤主分區(qū)的頭部,一般占用一個(gè)扇區(qū),用來存放引導(dǎo)程序。引導(dǎo)程序負(fù)責(zé)加載操作系統(tǒng),它不是文件系統(tǒng)的組成部分。

除引導(dǎo)塊外,分區(qū)的其他存儲(chǔ)空間以存儲(chǔ)塊為單位劃分。Ext2文件系統(tǒng)的存儲(chǔ)塊大小可以是1?KB、2?KB或4?KB,在創(chuàng)建文件系統(tǒng)的時(shí)候指定。塊大小的選取要合適,過大會(huì)降低存儲(chǔ)空間的利用率,過小則會(huì)降低文件系統(tǒng)的時(shí)間效率,默認(rèn)值是1?KB。大型磁盤分區(qū)包含的存儲(chǔ)塊數(shù)量眾多,為便于管理,Ext2文件系統(tǒng)它們劃分為若干個(gè)塊組(blockgroup),每個(gè)塊組中包含一定數(shù)量的連續(xù)的存儲(chǔ)塊。塊組的大小取決于磁盤分區(qū)的大小。在軟盤等一些小容量分區(qū)里一般只使用一個(gè)塊組,它包含了文件系統(tǒng)里所有的塊。而在大磁盤分區(qū)里通常會(huì)劃分出許多個(gè)塊組。

每個(gè)塊組中有一部分塊是用來保存該塊組的管理信息的,包括超級(jí)塊、組描述符、塊位圖和i節(jié)點(diǎn)位圖。其余的塊是用于保存文件的,包括i節(jié)點(diǎn)區(qū)和數(shù)據(jù)塊區(qū)。

2.超級(jí)塊和組描述符

每個(gè)Ext2的磁盤分區(qū)有一個(gè)超級(jí)塊(superblock),它占用一個(gè)存儲(chǔ)塊,用來記錄整個(gè)文件系統(tǒng)的基本管理信息,如文件系統(tǒng)類型標(biāo)識(shí)、數(shù)據(jù)塊大小、塊組大小、空閑塊和空閑i節(jié)點(diǎn)數(shù)量、第一個(gè)i節(jié)點(diǎn)(即根目錄的i節(jié)點(diǎn))的塊號(hào)等。這些都是文件系統(tǒng)掛裝、檢查、分配、檢索等操作的基本參數(shù),是文件系統(tǒng)中最重要的數(shù)據(jù)。若超級(jí)塊損壞則整個(gè)分區(qū)的文件系統(tǒng)不再可用。

Ext2文件系統(tǒng)的每個(gè)塊組都有一個(gè)組描述符(groupdescriptor),用來記錄該塊組的使用信息,包括塊組中的塊位圖、i節(jié)點(diǎn)位圖和i節(jié)點(diǎn)區(qū)的位置、塊組內(nèi)存儲(chǔ)塊的分配情況等。所有塊組的組描述符集中在一起就形成了組描述符表,它是文件系統(tǒng)管理和訪問各塊組的依據(jù)。組描述符表位于超級(jí)塊之后,可能占用多個(gè)存儲(chǔ)塊。

為提高文件系統(tǒng)的可靠性,每個(gè)塊組中都保存有超級(jí)塊和組描述符表的一個(gè)副本。文件系統(tǒng)只使用第一個(gè)塊組中的超級(jí)塊和組描述符表,其他塊組中的則作為冗余備份,以便在系統(tǒng)崩潰時(shí)用來恢復(fù)文件系統(tǒng)。

3.i節(jié)點(diǎn)區(qū)

塊組中所有可用的i節(jié)點(diǎn)都集中存放在一起,形成i節(jié)點(diǎn)區(qū),或稱為索引節(jié)點(diǎn)表。塊組中的每個(gè)文件都在此表中占有一個(gè)i節(jié)點(diǎn),通過i節(jié)點(diǎn)號(hào)檢索。索引節(jié)點(diǎn)表要占用多個(gè)連續(xù)的存儲(chǔ)塊。

4.數(shù)據(jù)塊區(qū)

數(shù)據(jù)塊區(qū)包含了大量的存儲(chǔ)塊,用于存放文件的內(nèi)容以及各級(jí)間接索引表。每個(gè)文件根據(jù)大小不同在數(shù)據(jù)塊區(qū)占有1至多個(gè)存儲(chǔ)塊。

5.位示圖

Ext2系統(tǒng)采用位示圖方式來管理空閑空間,一個(gè)位示圖用于記錄數(shù)據(jù)塊的分配情況,稱為“塊位圖”;另一個(gè)位示圖用于記錄i節(jié)點(diǎn)的分配情況,稱為“i節(jié)點(diǎn)位圖”。它們各占用1個(gè)存儲(chǔ)塊。位示圖中每一位代表一個(gè)塊的使用情況,為“0”表示相應(yīng)的塊或i節(jié)點(diǎn)空閑,為“1”則表示已經(jīng)分配。6.3.3Ext2文件存儲(chǔ)分配策略

當(dāng)建立一個(gè)新的文件時(shí),文件系統(tǒng)要為它分配一個(gè)i節(jié)點(diǎn)和一定數(shù)目的數(shù)據(jù)塊。當(dāng)該文件被刪除時(shí),文件系統(tǒng)將回收其占有的i節(jié)點(diǎn)和數(shù)據(jù)塊。當(dāng)文件在讀/寫過程中擴(kuò)充或縮減了內(nèi)容時(shí),文件系統(tǒng)也需要?jiǎng)討B(tài)地為它分配或回收數(shù)據(jù)塊。

分配時(shí)根據(jù)位示圖的記錄為文件分配i節(jié)點(diǎn)和數(shù)據(jù)塊。分配策略在一定程度上決定著文件系統(tǒng)的整體效率。系統(tǒng)會(huì)盡可能把同一個(gè)文件所使用的塊、同一個(gè)目錄所關(guān)聯(lián)的i節(jié)點(diǎn)存放在相鄰的單元中,至少是在同一個(gè)塊組內(nèi),以提高文件的訪問效率。另外,Ext2文件系統(tǒng)還采用稱為預(yù)分配的機(jī)制來保證文件內(nèi)容擴(kuò)展時(shí)塊的分配效率和效果。在文件建立的時(shí)候,如果有足夠的空閑塊,就在相鄰的位置為文件分配多于當(dāng)前使用的塊,稱為預(yù)分配塊。當(dāng)文件內(nèi)容擴(kuò)展時(shí),優(yōu)先使用這些塊,可以提高分配效率,也可以保證這些塊具有連續(xù)關(guān)系。如果預(yù)分配的塊用完或者是根本沒有啟動(dòng)預(yù)分配機(jī)制,分配新塊時(shí)也要盡可能保證與原有塊相鄰。

6.4虛擬文件系統(tǒng)

虛擬文件系統(tǒng)(VFS)位于整個(gè)文件系統(tǒng)的最上層。向下,它與實(shí)際的文件系統(tǒng)接口,通過它們實(shí)現(xiàn)具體的文件操作;向上,它為用戶進(jìn)程及內(nèi)核其他模塊提供使用文件系統(tǒng)的統(tǒng)一接口。VFS接受來自上層的有關(guān)文件系統(tǒng)的系統(tǒng)調(diào)用,把用戶所請(qǐng)求的文件操作進(jìn)行適當(dāng)?shù)霓D(zhuǎn)換,轉(zhuǎn)交給具體的文件系統(tǒng)進(jìn)行處理,然后再把具體的操作結(jié)果返回給上層的調(diào)用者。此外,VFS還要負(fù)責(zé)管理文件系統(tǒng)的各種緩沖區(qū),保證文件系統(tǒng)的整體效率。虛擬文件系統(tǒng)之所以稱為虛擬,是因?yàn)樗淮嬖谟趦?nèi)存中,在系統(tǒng)啟動(dòng)時(shí)建立起來,在系統(tǒng)關(guān)閉時(shí)消失。VFS不能直接操作文件,所有對(duì)文件的實(shí)際操作都要通過實(shí)際存在于磁盤分區(qū)的文件系統(tǒng)來完成。因此,虛擬文件系統(tǒng)必須和某個(gè)或某些實(shí)際的文件系統(tǒng)一起才能實(shí)現(xiàn)完整的文件管理功能。

引入虛擬文件系統(tǒng)的目的是為了屏蔽各種文件系統(tǒng)的差異。它對(duì)實(shí)際文件系統(tǒng)進(jìn)行抽像,采用統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)在內(nèi)存中描述所有實(shí)際的文件系統(tǒng),向用戶提供一組標(biāo)準(zhǔn)的文件操作函數(shù)。VFS負(fù)責(zé)將標(biāo)準(zhǔn)文件操作映射到實(shí)際文件系統(tǒng)的操作。正是這種抽像和映射,保證了Linux系統(tǒng)可以支持多種不同的文件系統(tǒng),使所有文件系統(tǒng)都具有基本相同的外部表現(xiàn)。6.4.1VFS的文件對(duì)象

VFS雖然是用C語言寫成的,但它其實(shí)是采用了面向?qū)ο蟮脑O(shè)計(jì)思想。VFS使用一族數(shù)據(jù)結(jié)構(gòu)來描述通用的文件對(duì)象,這些結(jié)構(gòu)體除了包含有一些數(shù)據(jù)外還包含了操作這些數(shù)據(jù)的函數(shù)指針。構(gòu)成VFS文件系統(tǒng)的基本對(duì)象有以下4類:

VFS超級(jí)塊(superblock),描述一個(gè)文件系統(tǒng);

VFS目錄項(xiàng)(dentry),描述一個(gè)文件的邏輯屬性;

VFS索引節(jié)點(diǎn)(inode),描述一個(gè)文件的物理屬性;

VFS文件(file),描述一個(gè)文件的當(dāng)前使用信息。

VFS的對(duì)象存在于內(nèi)存。它們?cè)谶m當(dāng)?shù)臅r(shí)候被建立起來。建立時(shí),結(jié)構(gòu)體的數(shù)據(jù)由實(shí)際文件系統(tǒng)的相應(yīng)的數(shù)據(jù)來填充,操作函數(shù)由實(shí)際的文件系統(tǒng)實(shí)現(xiàn)。VFS依據(jù)這些對(duì)象提供的信息和操作函數(shù)來完成將用戶的文件請(qǐng)求映射到實(shí)際文件系統(tǒng)的操作。

Unix/Linux風(fēng)格的文件系統(tǒng)與VFS文件系統(tǒng)有著相同的概念和很好的對(duì)應(yīng)關(guān)系,可以直接從它們的對(duì)應(yīng)結(jié)構(gòu)中構(gòu)造出VFS文件系統(tǒng)的對(duì)象。但像FAT或NTFS這樣的非Unix風(fēng)格的文件系統(tǒng)則必須經(jīng)過封裝,使其符合Unix文件系統(tǒng)的概念結(jié)構(gòu)并滿足VFS的要求,這樣它們就可以像Ext2文件系統(tǒng)那樣和VFS一起工作了,只是在性能上多少會(huì)受些影響。

1.?VFS超級(jí)塊

VFS超級(jí)塊對(duì)應(yīng)實(shí)際文件系統(tǒng)的超級(jí)塊,它代表一個(gè)實(shí)際的文件系統(tǒng)。VFS超級(jí)塊的內(nèi)容包括:設(shè)備標(biāo)識(shí)符、文件系統(tǒng)標(biāo)志、數(shù)據(jù)塊大小、文件系統(tǒng)的特殊信息、文件系統(tǒng)的使用信息以及超級(jí)塊操作集等。設(shè)備標(biāo)識(shí)符用來標(biāo)識(shí)一個(gè)文件系統(tǒng);文件系統(tǒng)類型和數(shù)據(jù)塊大小用來描述這個(gè)文件系統(tǒng)的基本特征;文件系統(tǒng)的特殊信息對(duì)應(yīng)著該文件系統(tǒng)的實(shí)際超級(jí)塊,在掛裝時(shí)被復(fù)制過來;文件系統(tǒng)的使用信息描述文件系統(tǒng)的當(dāng)前狀態(tài)和緩沖區(qū)指針等;超級(jí)塊操作集由一組函數(shù)指針組成,主要實(shí)現(xiàn)對(duì)文件系統(tǒng)和i節(jié)點(diǎn)的各種管理操作。

VFS為每個(gè)已掛裝的文件系統(tǒng)建立一個(gè)VFS超級(jí)塊,通過它來訪問和管理實(shí)際文件系統(tǒng)。VFS超級(jí)塊在掛裝文件系統(tǒng)時(shí)建立,在文件系統(tǒng)卸載后撤銷。在此期間,由于文件操作會(huì)修改VFS超級(jí)塊的內(nèi)容,造成與磁盤上的超級(jí)塊內(nèi)容不一致,VFS通過周期性地將所有發(fā)生改變的超級(jí)塊寫回磁盤來實(shí)現(xiàn)超級(jí)塊的同步更新。

2.?VFS索引節(jié)點(diǎn)

VFSi節(jié)點(diǎn)對(duì)應(yīng)于實(shí)際文件系統(tǒng)中的i節(jié)點(diǎn),它代表虛擬文件系統(tǒng)中的一個(gè)具體的文件。VFSi節(jié)點(diǎn)的內(nèi)容包括了實(shí)際的磁盤i節(jié)點(diǎn)的信息,如i節(jié)點(diǎn)號(hào)(i_no)、訪問權(quán)限(i_mode)等,另外還包括了當(dāng)前文件打開狀態(tài)(i_state)以及i節(jié)點(diǎn)操作集指針(i_op)等信息。i節(jié)點(diǎn)操作集用inode_operations結(jié)構(gòu)描述,它由一組函數(shù)指針組成,包含了針對(duì)具體文件的各種操作,如建立和打開文件(create)、鏈接文件(link)等。系統(tǒng)為每個(gè)打開的文件都建立一個(gè)VFSi節(jié)點(diǎn)。在一個(gè)文件被打開時(shí),VFS讀入該文件的磁盤i節(jié)點(diǎn)的信息,為它在內(nèi)存建立一個(gè)VFSi節(jié)點(diǎn),并通過它來訪問這個(gè)文件。文件關(guān)閉后它的VFSi節(jié)點(diǎn)被撤銷。與超級(jí)塊相同,i節(jié)點(diǎn)也存在同步更新的問題,所以,VFS也會(huì)周期性地將所有發(fā)生改變的i節(jié)點(diǎn)寫回磁盤。

3.?VFS目錄項(xiàng)

從圖6-16所示例子可以看出,在定位一個(gè)文件時(shí)需要沿該文件的路徑逐級(jí)訪問路徑中的各個(gè)目錄。如果每次都要從磁盤讀取目錄文件的話,訪問文件的效率就會(huì)很低。為了方便查找操作,VFS引入了目錄項(xiàng)(dentry)的概念。目錄項(xiàng)代表的是一個(gè)路徑分量。路徑由一系列的分量組成,每個(gè)分量都是一個(gè)目錄或文件。例如,路徑名/home/zhuge/memo中包含了“/”、“home”、“zhuge”和“memo”4個(gè)分量。當(dāng)VFS首次解析一個(gè)路徑名時(shí),它依次讀取路徑中的每個(gè)目錄或文件,為它建立一個(gè)dentry結(jié)構(gòu),每個(gè)dentry結(jié)構(gòu)都與一個(gè)VFSi節(jié)點(diǎn)相連。VFS將這些已建立的dentry結(jié)構(gòu)按目錄關(guān)系鏈接在一起,在后續(xù)的文件查找操作中,VFS只需沿dentry的鏈接結(jié)構(gòu)進(jìn)行查找,可以很快地找到目標(biāo)文件的dentry結(jié)構(gòu),然后得到它的VFSi節(jié)點(diǎn)。

dentry的內(nèi)容包含目錄項(xiàng)的文件名(d_name)以及構(gòu)成結(jié)構(gòu)關(guān)系的各種指針,還有指向i節(jié)點(diǎn)的指針(d_inode)和目錄項(xiàng)操作集的指針(d_op)等。目錄項(xiàng)操作集用dentry_operations結(jié)構(gòu)描述,它包含了對(duì)目錄項(xiàng)的各種操作,如文件名比較(d_compare)、刪除(d_delete)、釋放(d_release)等。

概括地講,目錄項(xiàng)是對(duì)文件的邏輯描述,它描述的是文件的邏輯標(biāo)識(shí)(文件名)以及該文件與其他文件的邏輯關(guān)系(其在目錄樹中的位置),而關(guān)于該文件的物理描述則包含在它所指向的VFSi節(jié)點(diǎn)中。目錄項(xiàng)與VFSi節(jié)點(diǎn)合起來才能完整地表示一個(gè)文件。目錄項(xiàng)可以看作是訪問一個(gè)文件的入口,查找文件就是在目錄項(xiàng)鏈表中沿路徑找到目標(biāo)目錄項(xiàng)的過程。

目錄項(xiàng)并不對(duì)應(yīng)實(shí)際文件系統(tǒng)中的任何成分,因此也不存在同步更新的問題。

4.?VFS文件

從用戶(也就是進(jìn)程)的角度來看,它們直接處理的是文件,它們關(guān)心的是文件的訪問模式、讀/寫位置等屬性以及讀、寫等操作,而不是超級(jí)塊和i節(jié)點(diǎn)。VFS用file對(duì)象來描述進(jìn)程所關(guān)心的文件,每當(dāng)進(jìn)程打開一個(gè)文件,VFS都將為它建立一個(gè)file結(jié)構(gòu)。file結(jié)構(gòu)的內(nèi)容包括文件打開模式(f_mode)、讀/寫位置指針(f_pos)、文件訪問計(jì)數(shù)(f_count)、文件的目錄項(xiàng)指針(f_dentry)和文件操作集指針(f_op)等。打開模式、讀/寫位置和訪問記數(shù)描述了文件的當(dāng)前使用狀態(tài),目錄項(xiàng)指針用于連接文件的目錄項(xiàng)。文件操作集用file_operations結(jié)構(gòu)描述,它由一組對(duì)文件內(nèi)容進(jìn)行操作的函數(shù)指針組成,包含了標(biāo)準(zhǔn)系統(tǒng)調(diào)用的那些函數(shù),如read()、wirte()、lseek()等。

VFS的i節(jié)點(diǎn)、目錄項(xiàng)和文件對(duì)象的結(jié)構(gòu)關(guān)系如圖6-18所示。圖6-18VFS文件的描述結(jié)構(gòu)圖中3個(gè)對(duì)象完整地表示了一個(gè)進(jìn)程可用的文件。各個(gè)對(duì)象都帶有自己的操作集,它們的作用是將對(duì)該文件執(zhí)行的標(biāo)準(zhǔn)操作映射到實(shí)際文件系統(tǒng)的具體操作函數(shù)上。這也是VFS實(shí)現(xiàn)標(biāo)準(zhǔn)接口功能的關(guān)鍵。6.4.2VFS緩存

為了提高文件訪問的速度,VFS使用了一些復(fù)雜的緩存技術(shù)。VFS系統(tǒng)設(shè)置了目錄項(xiàng)緩存(dcache)、i節(jié)點(diǎn)緩存(icache)和緩沖區(qū)緩存(buffercache),見圖。這些緩存都是由VFS管理的。設(shè)置緩存的目的是為了減少訪問磁盤的次數(shù),提高文件的查找和讀/寫效率。

文件系統(tǒng)經(jīng)常會(huì)訪問某些常用的文件和目錄(比如/usr目錄等),為避免重復(fù)創(chuàng)建i節(jié)點(diǎn)和目錄項(xiàng)的操作,VFS設(shè)置了i節(jié)點(diǎn)緩存和目錄項(xiàng)緩存,用于保留已創(chuàng)建的VFSi節(jié)點(diǎn)和dentry結(jié)構(gòu)。每當(dāng)需要訪問一個(gè)i節(jié)點(diǎn)時(shí),系統(tǒng)先在i節(jié)點(diǎn)緩存區(qū)中找,如果找到就直接使用,否則再?gòu)拇疟P讀入i節(jié)點(diǎn)并構(gòu)造VFSi節(jié)點(diǎn)。同樣,每當(dāng)需要訪問一個(gè)目錄項(xiàng)時(shí),VFS先在目錄項(xiàng)緩存中查找,如果有就直接使用,沒有時(shí)再去創(chuàng)建它的dentry結(jié)構(gòu)。文件內(nèi)容的讀/寫是一件耗時(shí)的操作。為減少實(shí)際訪問磁盤的次數(shù),VFS設(shè)置了緩沖區(qū)緩存。當(dāng)文件系統(tǒng)與磁盤設(shè)備交換文件數(shù)據(jù)時(shí),它們通過緩沖區(qū)緩存對(duì)I/O操作進(jìn)行緩沖,同時(shí)將傳輸?shù)臄?shù)據(jù)緩存起來。當(dāng)下一次讀/寫文件時(shí),VFS先在緩存區(qū)中查找,若命中則直接使用,否則再啟動(dòng)設(shè)備傳輸數(shù)據(jù)。有關(guān)緩沖與緩存技術(shù)的進(jìn)一步介紹見7.2.2小節(jié)。6.4.3VFS與進(jìn)程的接口

VFS為進(jìn)程提供了訪問文件系統(tǒng)的統(tǒng)一接口。接口由fs_struct和file_struct結(jié)構(gòu)構(gòu)成。

fs_struct結(jié)構(gòu)描述進(jìn)程與文件系統(tǒng)的關(guān)系,主要內(nèi)容包括進(jìn)程使用的創(chuàng)建文件掩碼(umask)、根目錄的目錄項(xiàng)指針(root)和當(dāng)前目錄的目錄項(xiàng)指針(pwd)等。

file_struct結(jié)構(gòu)體包含了該進(jìn)程已經(jīng)打開的所有文件的信息,主要是一個(gè)fd數(shù)組,數(shù)組的每一項(xiàng)fd[i]是一個(gè)指向一個(gè)file結(jié)構(gòu)的指針。fd[i]的下標(biāo)i稱為文件描述符。進(jìn)程初啟時(shí),自動(dòng)打開stdin、stdout和stderr三個(gè)文件,文件描述符分別為0、1和2。以后每當(dāng)進(jìn)程打開一個(gè)新文件,系統(tǒng)就在fd數(shù)組中選定第一個(gè)空閑的單元來存放指向該文件的file結(jié)構(gòu)的指針,并返回對(duì)應(yīng)的數(shù)組下標(biāo)作為文件描述符。圖描述了進(jìn)程和文件系統(tǒng)的接口結(jié)構(gòu)。進(jìn)程控制塊task_struct中包括兩個(gè)指針,一個(gè)是fs,指向進(jìn)程的fs_struct;另一個(gè)是files,指向進(jìn)程的file_struct。進(jìn)程通過這兩個(gè)指針得到有關(guān)文件系統(tǒng)和打開文件的信息,再通過它們獲得文件的目錄項(xiàng)、i節(jié)點(diǎn)以及它們的操作集。

圖6-19中右側(cè)3列是VFS系統(tǒng)部分,包括系統(tǒng)打開文件表、目錄項(xiàng)表和i節(jié)點(diǎn)表。它們分別是由系統(tǒng)中所有打開文件的file結(jié)構(gòu)、dentry結(jié)構(gòu)和inode結(jié)構(gòu)形成的鏈表。最左側(cè)是進(jìn)程PCB。中間的fs_struct結(jié)構(gòu)和file_struct結(jié)構(gòu)起到進(jìn)程與VFS接口的作用。

fd[0]、fd[1]和fd[2]所連接的file結(jié)構(gòu)是系統(tǒng)為進(jìn)程自動(dòng)打開的文件,通常是終端設(shè)備的file結(jié)構(gòu)。如果進(jìn)程的I/O環(huán)境被重定向,則相應(yīng)的fd項(xiàng)就改為連接其他文件的file結(jié)構(gòu)。圖6-19進(jìn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論