實用linux編程白皮書_第1頁
實用linux編程白皮書_第2頁
實用linux編程白皮書_第3頁
實用linux編程白皮書_第4頁
實用linux編程白皮書_第5頁
免費預覽已結束,剩余10頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第1系統(tǒng)結Linux內核本身作為一個獨立的東西是沒有什么用的;它只是參與了一個更大的系統(tǒng),成為那個系統(tǒng)的一部分,而該系統(tǒng)從整體上看是非常有用的。因此,在整個系統(tǒng)的上下文中介4-1-1顯示了整個Linux操作系統(tǒng)的結構分析。用戶應用程序在某個特定的Linux系統(tǒng)上運行的應用程序集合,它將隨著該計算機 eb用戶應用程O/S服Linnx內用戶應用程O/S服Linnx內硬件控制圖4-1-1 Linux系統(tǒng)可分為4個子系Linux內核 這是本文的關注焦點;包括內核抽象和對硬件資源(如CPU)的間接。、,、,這個系統(tǒng)劃分方法是照搬Garlan和Shaw在 Garlan 194只能與跟它相鄰的層通信。此外,

2、子系統(tǒng)之間的依賴關系是從上到下的:靠上的層依賴于靠下的層因為本文的重點是LinuxLinux內核向用戶進程提供了一個虛擬機器接口。編寫進程的時候并不需要知道計算機上安裝了哪些物理件Linux內核會把所有的硬件象成的虛擬接口。此外, Linux用戶透明的方式支持多任務:每個進程工作時就象它是計算機上唯一的進程,好象是獨占使用了主存和其他硬件資源一樣。內核實際上同時運行許多個進程,并負責對硬件資源的間接 ,這樣可以保證各個進程的公平性,進程間的安全性。進程調度程序( SCHED)負責控制進程 CPU。調度程序所使用的策略可以保證進程能夠公平地 CPU,同時保證內核可以準時執(zhí)行一些必需的硬件操作。內

3、核管理程序( MM)使多個進程可以安全地共享機器的主存系統(tǒng)。此外,內核管理程序支持虛擬內存。虛擬內存使得Linux可以支持進程使用超過系統(tǒng)中的內存數(shù)量的內存。暫時用不著的 信息可以交換出內存,存放到使用文件系統(tǒng)的性 器上,然后在需要它們的時候再交換回來。虛擬文件系統(tǒng)( VFS)。通過提供一個所有設備的公共文件接口, VFS抽象了不同硬件VFS支持與其他操作系統(tǒng)兼容的不同的文件系統(tǒng)格式。網絡接口( NET)提供了對許多建網標準和網絡硬件的 進程間通信( IPC)子系統(tǒng)為單個 Linux圖4-1-說明子系依賴網絡進程間通進程調度程虛擬文件系內存管理程,。圖4 -1 -2是,。,從圖中可以看出,最中

4、心最重要的子系統(tǒng)是進程調度程序:其他所有的子系統(tǒng)都依賴于進程調度程序,這是因為所有的子系統(tǒng)都需要中斷和恢復進程的執(zhí)行。一般來說,子系統(tǒng)會中斷那些等待硬件操作完成的進程同時恢復那些操作已經完成了的進程例如,當某進程試圖通過網絡發(fā)送消息時,網絡接口可能需要中斷該進程直到硬件成功完成了消息的發(fā)送。當,消息發(fā)送完以后(或者硬件返回出錯信號,則網絡接口將用返回碼來恢復該進程。返回碼顯示了操作是成功完成還是失敗。別的子系統(tǒng)(內存管理程序、虛擬文件系統(tǒng)、以及進程間通信)都是由于相似的原因而必須依賴于進程調度程序。 進程間通信子系統(tǒng)依賴于內存管理程序來支持共享內存通信機制。進程除了可以 它們通常的私有內存外,

5、共享內存通信機制將使它們可以 一個公共的內存區(qū)。內存管理程序使用虛擬文件系統(tǒng)來支持交換。這是內存管理程序之所以依賴于進程調度程序的唯一原因。當某進程的內存當前已經被換出內存時,內存管理程序請求文件系統(tǒng)從性 設備中去取該內存,并中斷該進程。除了顯式的依賴關系以外,內核中所有的子系統(tǒng)還依賴于一些在任何子系統(tǒng)中都沒有顯示出來的公共資源。它們包括:所有內核子系統(tǒng)用于分配和內核所使用內存的過程,打印警告或錯誤信息的過程,以及系統(tǒng)調試過程等等。這些資源之所以稱之為非顯式的,是因為它們只能在圖1-1所示的內核層中使用。這一級別的系統(tǒng)結構類型類似于Garlan和Shaw在Garlan 1994中所的數(shù)據(jù)抽象類

6、型。這里描述的每一個系統(tǒng)都包含狀態(tài)信息,這些狀態(tài)信息可以使用過程接口來 ,而每個子系統(tǒng)都需要它們所管理的資源的完整性。 說 子系進程調度程內存管理程實 現(xiàn)文件設備動程網絡設備動程邏輯文件系進程間通邏輯網絡接圖4-1-3 開發(fā)職責劃分Linux系統(tǒng)是由大量的 所開發(fā)的(當前 CREDITS文件列舉出了 196個曾經進行過 Linux系統(tǒng)開發(fā)的開發(fā) 。開發(fā) 非常多,而且他們都是 ,這勢必會影響到系統(tǒng)的構造。因為開發(fā) 在地域上分布上很廣泛,所以很難開發(fā)出一個緊耦合的系統(tǒng)來 開發(fā) 常常需要閱讀別人的代碼。因此, Linux系統(tǒng)系統(tǒng)結構的原則是:把那些可需要作很大修改的子系統(tǒng)文件系統(tǒng)、硬件接口和網絡系統(tǒng)

7、設計成高度模塊化的系統(tǒng)。例如,一個 Linux實現(xiàn)可能需要支持具有不同接口的許多硬件設備,一種樸實的系統(tǒng)結構是把所有硬件設備的實現(xiàn)做在一個子系統(tǒng)中。而一種支持多個開發(fā)的更好的方法是:把每個硬件設備的代碼分離成一個設備驅動程序,這些驅動程序是文件系統(tǒng)中獨立的圖4-1-3列出了曾經在Linux內核開發(fā)方面作出了貢獻的大部分開發(fā),以及他們已經實現(xiàn)了的區(qū)域。一些開發(fā)修改了內核的很多部分。為了描述方便,沒有列出這些開發(fā) Linus Torvald是大部分內核子系統(tǒng)的實現(xiàn)者,盡管后續(xù)的開發(fā)是由其他人完成的。該圖不能做到十分精確,因為在內核開發(fā)過程中,開發(fā)的組成經常變動,但從圖中基本可以看出哪些系統(tǒng)是開發(fā)花

8、費了大量精力去實現(xiàn)的。該圖重新確認了前面描述過的內核的大規(guī)模結構。很有趣的是,很少有開發(fā)曾經在多個系統(tǒng)上工作過,但這樣的人的確存在,它主要發(fā)生在那些存在子系統(tǒng)依賴性的多個子系統(tǒng)上。這種組織方式符合Melvin Conway所拇指規(guī)則(參見Raymond 1993,即系統(tǒng)的組織應該反映開發(fā)的組織。大部分開發(fā)都在開發(fā)硬件設備驅動程序、邏輯文件系統(tǒng)模塊、網絡設備驅動程序以及網絡協(xié)議模塊。內核的這4個區(qū)域的系統(tǒng)結構是最具有擴展性的,這一點也不奇怪。進程調度程序為每個活躍的進程 一塊數(shù)據(jù)。這些數(shù)據(jù)塊是 在鏈表中的,該鏈表稱為任務列表。進程調度程序常常一個當前指針,該指針顯示當前的活躍進程。內存內存管理程

9、序為每個進程都 了一個從虛擬地址到物理地址的 表,它還 了一些有關如何取和替換特定頁面的其他信息。這一信息存放在內存數(shù)據(jù)結構中,該結構存放在進程調度程序的任務列表中。在邏輯文件系統(tǒng)上,虛擬文件系統(tǒng)使用索引節(jié)點來表示文件。索引節(jié)點數(shù)據(jù)結構存放著從文件塊到物理設備地址的 。如果兩個進程打開了同一個文件,則這兩個進程可以共享索引節(jié)點數(shù)據(jù)結構。這一共享是通過指向同一個索引節(jié)點的任務數(shù)據(jù)塊來完成的。所有的數(shù)據(jù)結構都保存在進程調度程序的任務列表中。系統(tǒng)的每個進程都會有一個數(shù)據(jù)結構,該數(shù)據(jù)結構中包含著指向內存 信息的指針,以及指向代表所有打開文件的索引節(jié)點的指針。最后,任務數(shù)據(jù)結構還包含著指向一些數(shù)據(jù)結構的

10、指針,這些數(shù)據(jù)結構代表了與每個任務相聯(lián)系的打開的網絡連接。第2目進程調度程序是Linux內核中最重要的子系統(tǒng)。它的目標是控制對計算機CPU的,這模調度策略模塊負責判定哪個進程對 CPU有 權;策略的設計應該使進程可以公平 CPU。系統(tǒng)結構相關的模塊一般使用公共接口設計而成,這樣可以抽象出任意特定的計算機 CPU的通信,以中斷或者恢復進程的執(zhí)行。這些操作包括需要為每個進程保留哪些寄存器和狀態(tài)信息,以及執(zhí)行匯編代碼來影響中斷或者恢復操作。獨立于系統(tǒng)結構的模塊與策略模塊互相通信,來確定接下來執(zhí)行哪個進程,然后調用系統(tǒng)結構相關的模塊來恢復適當?shù)倪M程。此外,這個模塊調用內存管理程序,來確保已經為 4-2

11、-1編編程調度程序接O/S 說非內核理程進程調度程 系統(tǒng)調用接 模網系系統(tǒng)結構相關的度程 調度策多個模內依賴硬數(shù)據(jù)控制獨立于系統(tǒng)結構的調度程圖4-2-1 上下文中的進程調度程度子系系統(tǒng)調用接口模塊只允許用戶進程 由內核顯式打開的那些資源。這就決定了用戶進程必須依賴于內核能提供一個很少變動的且定義良好的用戶接口,而不管其他的內核模塊在調度程序一個數(shù)據(jù)結構任務列表。其中每個項目對應一個活躍進程,這個數(shù)據(jù)結構包含足夠的信息,可以中斷和恢復進程的執(zhí)行,但同時也包含了一些記帳和狀態(tài)信息。在整個內核層中都可以用到這個數(shù)據(jù)結構。依賴性、數(shù)據(jù)流和控制流正如前面所說的那樣,進程調度程序調用內存管理程序子系統(tǒng)。因

12、此,進程調度程序依賴于內存管理子系統(tǒng)。此外,其他所有的內核子系統(tǒng)也都依賴于進程調度程序,在等待硬件請求完成時,可以中斷和恢復進程。這些依賴性是通過函數(shù)調用以及對共享任務列表數(shù)據(jù)結構的 來體現(xiàn)的。所有的內核子系統(tǒng)都會讀寫代表當前任務的數(shù)據(jù)結構,這導致了整個系統(tǒng)中數(shù)據(jù)的單向流動。O/S服務層為用戶進程提供了一個接口,以登錄定時器通知。這對應于Garlan 1994中所描述的隱式執(zhí)行系統(tǒng)結構類型。它會引起從調度程序到用戶進程的控制流。類似恢復 進程這樣普通的例子不應看作是普通意義上的控制流,因為用戶進程不能檢測出這個操作。最后,調度程序與 CPU通信,以便中斷和恢復進程,這會導致數(shù)據(jù)流和控制流。CP

13、U負責中斷當前執(zhí)行的進程,并允許內核調度其他的進程。目內存管理程序子系統(tǒng)負責控制進程對硬件內存資源的。這是通過硬件內存管理系統(tǒng)來完成的,該系統(tǒng)提供進程內存與計算機的物理內存之間的。內存管理程序子系統(tǒng)為個進程都一個這樣的關系,這樣,兩個進程就可以同一個虛擬內存地址,而實際使用的是不同的物理內存位置。此外,內存管理程序子系統(tǒng)支持交換,它把暫時不使用的內存頁面移出內存,存放到性器中,樣計算機可以支持比物理內存要的虛擬內存。模系統(tǒng)結構無關的管理程序執(zhí)行每個進程的工作和虛擬內存的交換工作。當出現(xiàn)頁面錯時,該模塊負責判定應該把哪個內存頁面移出內存這里不存在獨立的策略模塊,這是因為這個策略不太可能會有變化。

14、內存管理程序子系統(tǒng)還提供了一個系統(tǒng)調用接口,以提供對用戶進程的約束。該接口允許用戶進程分配,并可執(zhí)行內存文件 I/O。務列表數(shù)據(jù)結構中,這一關系是以的方式 的。除了這一關系以外,數(shù)據(jù)塊中的其他細節(jié)也將告訴內存管理程序如何取頁面及 頁面。例如,可執(zhí)行代碼可以使用可執(zhí)行映象作為后援 ,但動態(tài)分配的數(shù)據(jù)必須備份到系統(tǒng)分頁文件中。最后,內存管理程序這數(shù)結中了息計息以保系安性如圖 4-2-2所。編編程內存接O/S說非內核內存管系統(tǒng)調用接立于系統(tǒng)結構的管理程模多個模系統(tǒng)結構相關的管理程內依賴數(shù)據(jù)內存硬硬控制圖4-2-2 上下文中的內存管理程序子系數(shù)據(jù)流、控制流和依賴性4-2-3編編程文件系統(tǒng)接O/S 說非

15、內核虛擬文件系內存系統(tǒng)調用接理程獨立于系統(tǒng)的接度程模多個模網絡接邏輯系依賴獨立于設備的接數(shù)據(jù)控制設備驅動程內設備硬硬圖4-2-3 上下文中的虛擬文這意味著在內存管理程序模塊和內存管理程序硬件之間存在單向的數(shù)據(jù)流和控制流。此外,內存管理程序使用文件系統(tǒng)來支持交換和內存 I/O。這就意味著內存管理程序需要向文件系統(tǒng)作過程調用,以便把頁面 到性 器中,或者從性 器中頁面。因為文件系統(tǒng)請求不能立即完成,所以內存管理程序需要中斷某個進程的執(zhí)行,直到該內存頁面被交換回來。這就導致了內存管理程序必須向進程調度程序作過程調用。此外,因為每個進程的內存 信息是 在進程調度程序的數(shù)據(jù)結構中的,所以在內存管理程序和

16、進程調度程序之間存在單向的數(shù)據(jù)流。用戶進程可以在進程的地址空間中建立起新的內存 關系,并在新映射的區(qū)域登記它們,以便發(fā)出頁錯誤通知。這又導致了一個從內存管理程序通過系統(tǒng)調用接口模塊到用戶進程的控制流。用戶進程不會發(fā)出傳統(tǒng)意義上的數(shù)據(jù)流,但是用戶進程使用系統(tǒng)調用接口模塊中的系統(tǒng)調用select,可以從內存管理程序獲取一些信息。目虛擬文件系統(tǒng)設計的目的是為了提供一個 在硬件設備上的數(shù)據(jù)的視圖。幾乎計算機中的所有設備都是使用通用設備驅動程序接口來表示的。而虛擬文件系統(tǒng)則更進一步,允許系統(tǒng)管理員在任意物理設備上掛裝任意一個邏輯文件系統(tǒng)的集合,邏輯文件系統(tǒng)提高了與其他操作系統(tǒng)標準的兼容性,并允許開發(fā)用不

17、同的策略來實現(xiàn)文件系統(tǒng)。這個虛擬文件系統(tǒng)抽象了物理設備和邏輯文件系統(tǒng)的細節(jié),允許用戶進程使用公共接口 文件,而無需知道文件實際駐留在哪個物理或邏輯系統(tǒng)上。除了傳統(tǒng)的文件系統(tǒng)目標以外,虛擬文件系統(tǒng)還負責裝入新的可執(zhí)行程序。這個任務是由邏輯文件系統(tǒng)模塊完成的,這就使得Linux模每個硬件控制器都對應一個設備驅動程序模塊。因為存在大量不兼容的硬件設備,所以設備驅動程序的數(shù)量也很多。Linux系統(tǒng)的大多數(shù)通用擴展都是增加了新的設備驅動程序。獨立于設備的接口模塊提供了所有設備的 視圖獨立于系統(tǒng)的接口提供了硬件資源的視圖,該視圖與硬件和邏輯文件系統(tǒng)無關。這一模塊使用面向塊的或面向字符的文件接口來表示所有資

18、源。最后,系統(tǒng)調用接口為用戶進程提供了對文件系統(tǒng)的受控制的 。這個虛擬文件系統(tǒng)只把特定的功能導出給用戶進程。所有的文件都是使用索引節(jié)點來表示的,每個索引結點結構都包含著位置信息,以指定文件塊在物理設備上的位置。此外,索引節(jié)點 了指向邏輯文件系統(tǒng)中過程的指針,還存儲了指向將要執(zhí)行所需讀寫操作的設備驅動程序的指針。通過以這種方式 函數(shù)指針,邏輯文件系統(tǒng)和設備驅動程序在內核中自己時,就不需要內核依賴于任何特定的模塊。數(shù)據(jù)流、控制流和依賴性有個特定的設備驅動程序,它就是ramdisk,這個設備分配主存的一個區(qū)域,并把它當作 性 設備來對待。這個設備驅動程序使用內存管理程序來完成它的任務,所以在文件系統(tǒng)

19、設備驅動程序和內存管理程序之間存在依賴性,控制流和數(shù)據(jù)流。網絡文件系統(tǒng)是受支持的一個特定的邏輯文件系統(tǒng)僅作為一個客戶,該文件系統(tǒng)可以 另一臺計算機的文件,就好象它們是本地計算機的一部分。為了完成這個任務,邏輯文件系統(tǒng)模塊需要使用網絡子系統(tǒng)來完成它的任務。這就導致在兩個子系統(tǒng)之間存在依賴性、數(shù)據(jù)流和控制流。正如前面在2.2節(jié)中所說的那樣,內存管理程序使用虛擬文件系統(tǒng)來完成內存交換和內存 I/O。此外,在進程等待硬件請求完成時,虛擬文件系統(tǒng)使用進程調度程序來中斷進程,而一旦請求完成則立刻恢復它們的執(zhí)行。最后,系統(tǒng)調用接口允許用戶進程調用虛擬文件系統(tǒng),以便 或者獲取數(shù)據(jù)。與前一個子系統(tǒng)不同的是,這里

20、沒有為用戶提供隱式調用的注冊機制,所以在虛擬文件系統(tǒng)到用戶進程之間沒有控制流(恢復進程并不認為是控制流。目網絡子系統(tǒng)允許Linux系統(tǒng)通過網絡與其他系統(tǒng)相連接。因為它支持大量的硬件設備,所以相應地也需要使用大量的網絡協(xié)議。網絡子系統(tǒng)抽象了這兩者在實現(xiàn)上的細節(jié),這樣用戶進程和其他內核子系統(tǒng)在網絡時就無需知道使用的是什么物理設備和協(xié)議了。模4-2-4編編程網絡接O/S說非內核網絡接虛擬件系系統(tǒng)調用接獨立于協(xié)議的接模多個模網絡協(xié)獨立于設備的接依賴數(shù)據(jù)控制 網絡設備驅動程 內設備硬硬度程進程圖4-2-4 上下文中的網絡接口子系獨立于設備的接口模塊為所有的硬件設備提供了一個的視圖,這樣在子系統(tǒng)的高級別上

21、就不需要關于所使用的硬件的特定知識了。獨立于協(xié)議的接口模塊提供了一個獨立于硬件設備和網絡協(xié)議的接口。其他內核子系統(tǒng)可以通過該接口模塊來網絡,而無需依賴于特定的協(xié)議或硬件。每個網絡對象都表示成一個套接字。套接字與進程的關系類似于索引節(jié)點與進程的關系。通過使兩個任務數(shù)據(jù)結構指向同一個套接字數(shù)據(jù)結構,進程之間可以共享套接字。數(shù)據(jù)流、控制流和依賴性在等待硬件請求完成時,網絡子系統(tǒng)使用進程調度程序中斷和恢復進程的執(zhí)行(這導致了依賴性、控制流和數(shù)據(jù)流。此絡子系統(tǒng)為擬文件系統(tǒng)提供了邏輯文件系統(tǒng)( NF的實現(xiàn),這導致了虛擬文件系統(tǒng)依賴于網絡接口,并與它之間存在數(shù)據(jù)流和控制流。第3Linux內核是整個Linux

22、系統(tǒng)的系統(tǒng)結構中的一層。在概念上內核是由5個主要的子系統(tǒng)組成的:進程調度程度、內存管理程序、虛擬文件系統(tǒng)、網絡接口和進程間通口。這些子系統(tǒng)之間是通過函數(shù)調用和共享數(shù)據(jù)結構相互通信的。上, Linux內核的系統(tǒng)結構類型與Garlan和Shaw在Garlan 1994中所描述的數(shù)據(jù)抽象類型十分接近。內核是由子系統(tǒng)所組成的,而子系統(tǒng)通過使用特定的過程接口來保持 表示的一致性。通過對每個子系統(tǒng)進行認真的解剖分析,可以看出它的系統(tǒng)結構類型與Garlan和Shaw的分層類型十分相似。每一個子系統(tǒng)都是由模塊組成的,這些模塊只能與相鄰層相通信。Linux內核的概念系統(tǒng)結構已經被證明是非常成功的;而它之所以成功

23、,關鍵在于它規(guī)定了開發(fā)的組織和系統(tǒng)擴展性。 Linux內核系統(tǒng)結構必須支持大量獨立的志愿開發(fā)這就要求投入工作量最大的系統(tǒng)分區(qū)(如硬件設備驅動程序和文件以及網絡協(xié)議)以一種可擴展的方式來實現(xiàn)。Linux系統(tǒng)結構者為了使這些系統(tǒng)可以擴展,使用了一種數(shù)據(jù)抽象技術:每個硬件設備驅動程序都是作為一個獨立的模塊來實現(xiàn)的,而這些模塊又都支持一個通用接口。通過這種方式,單個的發(fā)可以加入個新的設驅動程序,并且不需要與 Linux內的其他開發(fā)進行很多交互。內核由大量的志愿開發(fā)實現(xiàn)成功,這個事實已經證明了這個策略的正確性。Linux內核的另一個重要展是加入了受支持件平臺。通過把與硬件相關的所有代碼分離到每個子系統(tǒng)各

24、自的模塊中,系統(tǒng)的系統(tǒng)結構支持了這種擴展性。通過這種方式,一小群發(fā)通過新實內核機器關部,可以把 Linux內核移植到新的硬件系統(tǒng)結構下。術語定設備驅動程序(Device 設備驅動程序是與特定的硬件設備交互所需要的所有代碼。設備驅動程序實際上是內核的一部分,但是Linux內核提供了一種機制,它允許動態(tài)裝入設備驅動程序。索引節(jié)點即index node,可以被文件系統(tǒng)用來文件系統(tǒng)數(shù)據(jù)所的硬件地址。每索引節(jié)點 了一個文件塊到物理塊的關系,以及安全性方面以及計帳方面的其他一些信息。網絡文件系統(tǒng)(Network File System, 網絡文件系統(tǒng)是一個文件系統(tǒng)接口,它把 計算機上 的文件表示成本地計算

25、機上進程進程(也稱為任務)就是執(zhí)行中的程序,它由可執(zhí)行代碼和動態(tài)數(shù)據(jù)所組成。內核為每個進程都保留了足夠多的信息,以便停止或恢復它的執(zhí)行。Ramdisk是一個設備驅動程序,它把主存的一塊區(qū)域用作文件系統(tǒng)設備。它允許把經常訪問的文能隨提供效的區(qū)中,使用 Linux支持硬實時的需時,這個特征非常有用。對于一般的情況而言,普通的文件系統(tǒng)高速緩存機制將高效地使用內存,以提供對文件的高效。Linux支持進程使用超過計算機上物理內存數(shù)量的內存。要做到這一點,內存管理程序必須把暫時不使用的內存頁面交換到性 設備中。當以后 該內存時,再把它交換回主存(這時可能會導致其他頁面被交換出去。參考文Garlan David Garlan和Mary Shaw, An Introduction to Software Architecture, Advances in Software Engineering and Knowledge Engineering, 第1卷,World Scientific Publishing Company, 1993。Monroe Robert T.Monroe, Andrew Kompanek, Ralph Melton和David Garlan Architectural

溫馨提示

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

評論

0/150

提交評論