遠(yuǎn)程過(guò)程調(diào)用_第1頁(yè)
遠(yuǎn)程過(guò)程調(diào)用_第2頁(yè)
遠(yuǎn)程過(guò)程調(diào)用_第3頁(yè)
遠(yuǎn)程過(guò)程調(diào)用_第4頁(yè)
遠(yuǎn)程過(guò)程調(diào)用_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、消息傳遞與過(guò)程調(diào)用的類(lèi)似性1遠(yuǎn)程過(guò)程調(diào)用send / receive / reply這種通信形式與大多數(shù)傳統(tǒng)程序設(shè)計(jì)語(yǔ)言中的過(guò)程調(diào)用非常類(lèi)似,見(jiàn)圖,其中,“調(diào)用者 / 源”先掛起,然后把“參數(shù) / 消息”傳遞給“被調(diào)用者 / 宿”,讓它們?nèi)?zhí)行相應(yīng)的任務(wù);當(dāng)任務(wù)執(zhí)行完后返回時(shí),它(們)再把作為結(jié)果的“參數(shù) / 消息”回送給“調(diào)用者 / 源”,后者再繼續(xù)執(zhí)行下去。2遠(yuǎn)程過(guò)程調(diào)用遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call 簡(jiǎn)稱(chēng)RPC)是一個(gè)會(huì)晤層協(xié)議.雖然這種描述不完全對(duì),因?yàn)?允許存在與利用RPC實(shí)現(xiàn)的應(yīng)用層協(xié)議某些混合.RPC原理原先由Xerox的研究人員所開(kāi)發(fā).3遠(yuǎn)程過(guò)程調(diào)用為

2、了實(shí)現(xiàn)NFS,Sun公司的工程師開(kāi)發(fā)了他們自己的RPC技術(shù),通常稱(chēng)為SunRPC或 ONC/RPC. ONC/RPC不僅用于NFS的實(shí)現(xiàn),也用于許多其它網(wǎng)絡(luò)應(yīng)用.存在和ONC/RPC不同的其它RPC技術(shù),例如DEC RPC.雖然它們都遵從同樣的概念途徑,但是它們有不同的內(nèi)部結(jié)構(gòu),因此,無(wú)互操作性.4RPC和本地過(guò)程調(diào)用的比較5遠(yuǎn)程過(guò)程調(diào)用過(guò)程調(diào)用把“數(shù)據(jù)”和“控制”這兩者從調(diào)用者傳遞給被調(diào)用者。過(guò)程是易于理解的,而且已經(jīng)廣泛地用作傳統(tǒng)程序設(shè)計(jì)語(yǔ)言的基本組成成份?;诖嗽?,人們自然想起應(yīng)把這個(gè)概念引入分布式操作系統(tǒng)。6遠(yuǎn)程過(guò)程調(diào)用遠(yuǎn)程過(guò)程調(diào)用(Remote Procedure Call)就是把

3、過(guò)程調(diào)用的概念加以擴(kuò)允后引入分析式環(huán)境中的一種形式。遠(yuǎn)程過(guò)程調(diào)用的形式和行為與傳統(tǒng)的過(guò)程調(diào)用的形式和行為類(lèi)似,主要差別在于被調(diào)用的過(guò)程實(shí)際運(yùn)行在一個(gè)與調(diào)用者所在場(chǎng)點(diǎn)不同的場(chǎng)點(diǎn)上,見(jiàn)圖。因此,需要設(shè)計(jì)相應(yīng)的軟件來(lái)實(shí)現(xiàn)兩者之間的連接和信息溝通。7遠(yuǎn)程過(guò)程調(diào)用示意圖8RPC的通信模型圖9RPC機(jī)制的結(jié)構(gòu)及實(shí)現(xiàn)RPC機(jī)制的結(jié)構(gòu)由下列成份組成:stub:client和server 各一個(gè);約束(binding):使client能夠定位到相應(yīng)的server;控制部分:為追蹤RPC的調(diào)用狀態(tài)所設(shè);傳送部分:確定如何將信息從一個(gè)場(chǎng)點(diǎn)傳送到另一個(gè)場(chǎng)點(diǎn)。10實(shí)現(xiàn)RPC的一般過(guò)程圖11實(shí)現(xiàn)RPC的一般過(guò)程實(shí)現(xiàn)RPC

4、的一般過(guò)程實(shí)現(xiàn)RPC的一般過(guò)程可概括如圖所示:其中,客戶的stub與一個(gè)客戶連接,它對(duì)于該客戶就像一個(gè)“服務(wù)器”。在調(diào)用時(shí),它截取客戶的遠(yuǎn)程過(guò)程調(diào)用命令后,利用通信網(wǎng)絡(luò)向服務(wù)器發(fā)送“請(qǐng)求服務(wù)”的信息。在返回時(shí),它獲取返回消息,并帶返回結(jié)果返回到客戶,然后客戶繼續(xù)執(zhí)行。12實(shí)現(xiàn)RPC的一般過(guò)程Servers stub與一個(gè)server連接,它對(duì)于該server就像一個(gè)“client”。在調(diào)用時(shí),它收到遠(yuǎn)程調(diào)用請(qǐng)求后,產(chǎn)生一個(gè)本地調(diào)用,去執(zhí)行被請(qǐng)求的遠(yuǎn)程過(guò)程。在返回時(shí),它截取遠(yuǎn)程過(guò)程的返回結(jié)果,并形成返回消息發(fā)送出去。13實(shí)現(xiàn)RPC的一般過(guò)程總之,stub包含了一組RPC機(jī)制的操作原話,這些原語(yǔ)構(gòu)

5、成了RPC調(diào)用的實(shí)現(xiàn)細(xì)節(jié),它可獨(dú)立于client和server編程,在編譯時(shí)再連接起來(lái)。14實(shí)現(xiàn)RPC的一般過(guò)程RPC的實(shí)現(xiàn)要考慮兩個(gè)方面的問(wèn)題:第一,當(dāng)進(jìn)行遠(yuǎn)程過(guò)程調(diào)用時(shí),調(diào)用場(chǎng)點(diǎn)必須能定位出被調(diào)用的過(guò)程實(shí)際上運(yùn)行在哪個(gè)場(chǎng)點(diǎn)上;第二,相關(guān)的兩個(gè)場(chǎng)點(diǎn)必須能協(xié)同合作交換信息。所有這些對(duì)用戶都是透明的,這些的工作是依次進(jìn)行的。下面介紹一種實(shí)現(xiàn)RPC的方法其實(shí)現(xiàn)思想已概括在圖中。15RPC的實(shí)現(xiàn)概況圖16RPC的實(shí)現(xiàn)概況如上所述,每個(gè)遠(yuǎn)程過(guò)程由若干成分組成:調(diào)用者(caller)或用戶(user),調(diào)用代碼段,以及被調(diào)用者(callee)或服務(wù)器,被調(diào)用代碼段。這些都可用常規(guī)的程序設(shè)計(jì)語(yǔ)言編寫(xiě),不需

6、要利用特別的設(shè)施,就象它們?cè)谕粓?chǎng)點(diǎn)上執(zhí)行一樣。另一些成分是與調(diào)用者相關(guān)的stub,與被調(diào)用者相關(guān)的stub以及RPC runtime子程序,后者可在系統(tǒng)中所有場(chǎng)點(diǎn)上運(yùn)行。17RPC的實(shí)現(xiàn)概況stub程序的功能是把這種過(guò)程調(diào)用中所帶的參數(shù)組裝和拆卸成消息形式,并進(jìn)行相應(yīng)的類(lèi)型檢查,然后把這些消息傳遞給RPC runtime子程序,后者再把它們發(fā)送到系統(tǒng)中的其它場(chǎng)點(diǎn)。事實(shí)上,程序設(shè)計(jì)者定義了過(guò)程并寫(xiě)好了過(guò)程體,而系統(tǒng)生成了對(duì)應(yīng)的stub。18主要工作環(huán)節(jié)實(shí)現(xiàn)一個(gè)遠(yuǎn)程過(guò)程調(diào)用的主要工作環(huán)節(jié)如下: 調(diào)用者用通常方式調(diào)用對(duì)應(yīng)stub中的一個(gè)過(guò)程;這個(gè)stub過(guò)程把有關(guān)的參數(shù)組裝成一個(gè)消息包或一組消息包

7、,以形成一條消息。運(yùn)行此過(guò)程的那個(gè)場(chǎng)點(diǎn)的“地址”和那個(gè)場(chǎng)點(diǎn)上指稱(chēng)此過(guò)程的“標(biāo)識(shí)符”都應(yīng)包含在這條消息中;19主要工作環(huán)節(jié)將這條消息發(fā)送給對(duì)應(yīng)的RPC runtme子程序,該子程序再把它發(fā)送給指定的場(chǎng)點(diǎn)。在接收此消息時(shí),遠(yuǎn)程runtime子程序引用與被調(diào)用者對(duì)應(yīng)的stub中的一個(gè)子程序,并讓它來(lái)處理這條消息;20主要工作環(huán)節(jié)被調(diào)用者對(duì)應(yīng)的stub中的這個(gè)子程序拆卸有關(guān)的參數(shù)并用通常的過(guò)程調(diào)用方式調(diào)用所需的過(guò)程。返回調(diào)用結(jié)果,整個(gè)遠(yuǎn)程過(guò)程調(diào)用以與調(diào)用者對(duì)應(yīng)的stub程序執(zhí)行“return”語(yǔ)句返回到用戶而終止。21遠(yuǎn)程過(guò)程調(diào)用注意,調(diào)用者產(chǎn)生一個(gè)過(guò)程調(diào)用,而被調(diào)用者由一個(gè)過(guò)程調(diào)用所引用。相應(yīng)的st

8、ub和runtime協(xié)同合作給了我們這種印象,即好像調(diào)用者直接引用了被凋用者,22遠(yuǎn)程過(guò)程調(diào)用不難察覺(jué),在上面的述中,我們回避了一個(gè)重要的問(wèn)題,即與用戶對(duì)應(yīng)的stub如何知道實(shí)際運(yùn)行遠(yuǎn)程過(guò)程的場(chǎng)點(diǎn)之地址呢?例如,給定遠(yuǎn)程過(guò)程調(diào)用procX(pal,pa2),與調(diào)用者對(duì)應(yīng)的stub如何確定procX將運(yùn)行在哪個(gè)場(chǎng)點(diǎn)上呢?已經(jīng)研究出了一些解決這一向題的方法。23遠(yuǎn)程過(guò)程調(diào)用當(dāng)系統(tǒng)生成與調(diào)用者對(duì)應(yīng)的stub時(shí),可把該遠(yuǎn)程場(chǎng)地的地址也一同并入其中,不過(guò)這種做法不太靈活。在進(jìn)行調(diào)用之前,與調(diào)用者對(duì)應(yīng)的stub向系統(tǒng)中的其它場(chǎng)點(diǎn)進(jìn)行廣播,請(qǐng)求有關(guān)的場(chǎng)點(diǎn)通報(bào)其地址,這必然引起一系列的消息傳遞。特別,當(dāng)這種廣

9、播是在若干網(wǎng)絡(luò)之間進(jìn)行時(shí),其傳遞速度是很慢的。24遠(yuǎn)程過(guò)程調(diào)用由系統(tǒng)管理一個(gè)表,其表項(xiàng)的內(nèi)容為:場(chǎng)點(diǎn)地址;該場(chǎng)點(diǎn)上將運(yùn)行的遠(yuǎn)程過(guò)程的名字。“愿意”產(chǎn)生一個(gè)可供其它場(chǎng)點(diǎn)引用的過(guò)程的那些場(chǎng)點(diǎn)就造一個(gè)表項(xiàng)到這個(gè)表中,該表項(xiàng)給出了這些場(chǎng)點(diǎn)的地址和此遠(yuǎn)程過(guò)程的名字。希望引用遠(yuǎn)程過(guò)程的用戶可通過(guò)查詢此表獲取有關(guān)信息。25RPC執(zhí)行時(shí)各部分之間的關(guān)系圖26RPC執(zhí)行時(shí)各部分之間的關(guān)系RPC執(zhí)行時(shí),各部分的關(guān)系如圖所示。其中,傳輸部分是RPC的最低層,其主要功能為:提供對(duì)網(wǎng)絡(luò)傳輸層協(xié)議的選擇。建立 / 釋放邏輯信道,發(fā)送 / 接收消息等;管理RPC中的消息緩沖區(qū)。27控制部分的主要功能控制部分的主要功能是:確

10、定RPC中消息的方向(發(fā)送或接收);當(dāng)client的stub開(kāi)始一次RPC調(diào)用或者server向server的stub返回調(diào)用結(jié)果時(shí),該部分負(fù)責(zé)控制傳輸部分進(jìn)行發(fā)送。28控制部分的主要功能場(chǎng)點(diǎn)間會(huì)合(rendezvous)與進(jìn)程同步;場(chǎng)點(diǎn)間會(huì)合是指為使兩個(gè)場(chǎng)點(diǎn)間進(jìn)程同步,它們必須同意“會(huì)合”,即早到達(dá)的進(jìn)程要等待晚到達(dá)的進(jìn)程。會(huì)話進(jìn)程通過(guò)場(chǎng)點(diǎn)間會(huì)合建立一致的起點(diǎn),并以該起點(diǎn)作為進(jìn)程同步點(diǎn)進(jìn)行對(duì)話。29控制部分的主要功能若干狀態(tài)信息的處理。由上可知,由于client的stub的作用,使得client可用常規(guī)過(guò)程調(diào)用方式去調(diào)用遠(yuǎn)程過(guò)程;由于server的stub的作用,使得server程序可以獨(dú)立

11、于調(diào)用者來(lái)編程,因而比較靈活。30遠(yuǎn)程過(guò)程調(diào)用31RPC的語(yǔ)義本地調(diào)用和遠(yuǎn)程過(guò)程調(diào)用之間存在許多不同之處。如果遠(yuǎn)程調(diào)用是在兩種異型機(jī)器間進(jìn)行,這就存在數(shù)據(jù)表示問(wèn)題,例如,這兩類(lèi)機(jī)器的字長(zhǎng)可能不同。32RPC的語(yǔ)義解決這一向題的方法之一是它在傳遞數(shù)據(jù)之前,讓RPC機(jī)制將有關(guān)的數(shù)據(jù)轉(zhuǎn)換成一種統(tǒng)一的格式,接收?qǐng)鳇c(diǎn)在接收數(shù)據(jù)時(shí),再把它們轉(zhuǎn)換成本地所允許的數(shù)據(jù)格式。33RPC的語(yǔ)義第二個(gè)問(wèn)題是如何解釋指針,更確切地說(shuō),一個(gè)指針到底訪問(wèn)的是什么,在不具有共享地址空間的情況下,RPC不可能允許在網(wǎng)絡(luò)范圍內(nèi)傳遞指針。因此,在RPC中是不可能用“引用(reference)方式”傳遞參數(shù)的。34RPC的語(yǔ)義更嚴(yán)重

12、的問(wèn)題是調(diào)用者和被調(diào)用者都可能在調(diào)用期間發(fā)生故障,而且經(jīng)常是被調(diào)用者故障,留下調(diào)用者掛起。如果發(fā)生這種情況,調(diào)用者可能不得不夭折,這在本地調(diào)用中是決不會(huì)出現(xiàn)的。一個(gè)遠(yuǎn)程過(guò)程調(diào)用故障之后,調(diào)用者很難得知在故障發(fā)生前,該過(guò)程調(diào)用已經(jīng)進(jìn)行到了哪一步。這通常有三種可能:35RPC的語(yǔ)義在被調(diào)用者接收到調(diào)用它的命令之前,它發(fā)生了故障。在執(zhí)行其過(guò)程體時(shí),被調(diào)用者發(fā)生了故障;被調(diào)用者正確地完成了其過(guò)程體的執(zhí)行,但在把結(jié)果返回給調(diào)用者之前發(fā)生了故障。此外,還有調(diào)用者在發(fā)出調(diào)用命令之后并在獲得調(diào)用結(jié)果之前發(fā)生了故障。36RPC語(yǔ)義的規(guī)則由于調(diào)用者無(wú)法知道到底出現(xiàn)哪種情況,因此,系統(tǒng)必須提供一些基本的保護(hù)機(jī)制來(lái)確

13、保RPC正確效果。不過(guò),這個(gè)問(wèn)題由于通信方面也可能出錯(cuò)以及系統(tǒng)試圖進(jìn)行錯(cuò)誤矯正而混雜在一起,使得一個(gè)遠(yuǎn)程過(guò)程在成功地完成其執(zhí)行之前,實(shí)際上可能引用了若干次。不同的RPC實(shí)現(xiàn)方案定義的這種效果或RPC語(yǔ)義是有差別的。37RPC語(yǔ)義的規(guī)則幾種常用的定義RPC語(yǔ)義的規(guī)則是:1ast-of-many 對(duì)執(zhí)行一個(gè)遠(yuǎn)程過(guò)程調(diào)用而言,被調(diào)用的過(guò)程可能執(zhí)行若干次,但規(guī)定其最后一次執(zhí)行的結(jié)果作為返回結(jié)果;38RPC語(yǔ)義的規(guī)則at-most-once 若調(diào)用者收到了回復(fù)消息,則被調(diào)用的過(guò)程正確地完成了它的一次(僅僅一次)執(zhí)行。如果調(diào)用者沒(méi)收到回復(fù)消息,或者,如果調(diào)用者在獲得回復(fù)消息之前發(fā)生故障,那么,這時(shí)的調(diào)用效

14、果就看作是根本就沒(méi)有執(zhí)行相應(yīng)的過(guò)程。39RPC語(yǔ)義的規(guī)則at-1east-once 在場(chǎng)點(diǎn)正常情況下,則遠(yuǎn)程過(guò)程至少執(zhí)行一次,且回復(fù)消息可能返回一次或多次。在場(chǎng)點(diǎn)故障時(shí),就不能保證遠(yuǎn)程過(guò)程是否已被執(zhí)行或曾返回任何回復(fù)消息。40RPC語(yǔ)義的規(guī)則exactly- once 若server正常,則遠(yuǎn)程過(guò)程將恰好執(zhí)行一次,并返回一個(gè)調(diào)用結(jié)果。同send/receive 通信原語(yǔ)有許多變種一樣,RPC也有一些不同的形式。例如可以允許異步遠(yuǎn)程過(guò)程調(diào)用,因此,調(diào)用者和被調(diào)用者可以并行執(zhí)行,調(diào)用者負(fù)責(zé)在稍后某一時(shí)刻執(zhí)行一個(gè)所謂的會(huì)合(rendezvous)來(lái)獲取調(diào)用結(jié)果。41ONC/RPC協(xié)議頭42ONC/R

15、PC協(xié)議頭程序號(hào):實(shí)現(xiàn)該程序的服務(wù)器.版本號(hào):程序的版本.過(guò)程號(hào):辨識(shí)服務(wù)器上的目的過(guò)程.發(fā)送方向:RPC請(qǐng)求為0,響應(yīng)為1.事務(wù)處理標(biāo)識(shí)符:辨識(shí)每個(gè)個(gè)別 RPC請(qǐng)求.43外部數(shù)據(jù)表示(XDR)外部數(shù)據(jù)表示(External Data Representation簡(jiǎn)稱(chēng)XDR)是表示層的一個(gè)協(xié)議,在RFC 1014 (Sun Microsystems, 1987)予以規(guī)定。XDR涉及數(shù)據(jù)編碼格式的定義。XDR沒(méi)有象其它協(xié)議那樣的協(xié)議頭或其它協(xié)議元素。44背景對(duì)于表示層的協(xié)議有良種操作模式:明顯格式(explicit format):個(gè)別元素的描述和數(shù)據(jù)一道傳送,因此,能夠使接收者恢復(fù)數(shù)據(jù)記錄的結(jié)

16、構(gòu)(如ASN.1 Basic Encoding Rules(BER)。隱含格式(implicit format):在數(shù)據(jù)傳送之前,在兩個(gè)通信方之間就元素的結(jié)構(gòu)和 表示包含一個(gè)協(xié)議。45隱含格式在隱含格式中存在兩種不同的數(shù)據(jù)編碼格式:經(jīng)典格式(canonocal format):發(fā)送者總歸把數(shù)據(jù)轉(zhuǎn)換為一個(gè)公共統(tǒng)一的格式,由接收者重新轉(zhuǎn)換回。服務(wù)器使之正確格式(server makes it right format):發(fā)送者將數(shù)據(jù)保留為自己本地的表示格式,并且加一個(gè)標(biāo)識(shí)符到消息,給接收者以發(fā)送者的格式信號(hào)。46外部數(shù)據(jù)表示(XDR)外部數(shù)據(jù)表示(XDR)使用隱含的經(jīng)典格式。47數(shù)據(jù)編碼(Data

17、 encoding)二進(jìn)制整數(shù)表示有兩種形式:低位字節(jié)在最低內(nèi)存地址(little-endian)低位字節(jié)在最高內(nèi)存地址(big-endian)理論上,在一個(gè)字節(jié)中位的次序有同樣的差別,但是,在實(shí)際上所有的處理機(jī)都采用big-endian格式安排在一個(gè)字節(jié)中位的次序。48數(shù)格式49正文的編碼數(shù)值的編碼通常由處理機(jī)硬件決定,而軟件在正文和復(fù)雜的數(shù)據(jù)對(duì)象的編碼中是至關(guān)重要的。有了一個(gè)從代碼到字符的映照,正文簡(jiǎn)單地是一個(gè)無(wú)意義的字節(jié)序列。標(biāo)準(zhǔn)化的聯(lián)結(jié)數(shù)值和字母的映照表包括ASCII和EBCDIC代碼。不幸地,這些具有功能上不同的結(jié)構(gòu)。例如,字母A在EBCDIC中表示為C1(16),在ASCII中表示

18、為41(16)。50復(fù)雜數(shù)據(jù)對(duì)象的編碼聯(lián)合(union)和結(jié)構(gòu)(structure)是由上述基本數(shù)據(jù)類(lèi)型構(gòu)造的復(fù)雜數(shù)據(jù)對(duì)象;它們由程序員或編譯程序確定。程序的說(shuō)明原則上是可互交換的,這些對(duì)象在二進(jìn)制交換中最常見(jiàn)的問(wèn)題是它們所含元素的不同的校準(zhǔn)。51復(fù)雜數(shù)據(jù)對(duì)象的編碼一個(gè)最佳訪問(wèn)在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)通常假定單個(gè)元素位于處理機(jī)字邊界(因此,它們的開(kāi)始地址是偶數(shù)或可被4整除)。大多數(shù)處理機(jī)對(duì)超過(guò)邊界的操作要求一個(gè)附加的周期,某些處理機(jī)(例如大多數(shù)RISC CPU)不能在非校準(zhǔn)的地址上工作。因?yàn)樵诮Y(jié)構(gòu)中的元素不總有字長(zhǎng)的倍數(shù),大多數(shù)編譯程序自動(dòng)地嵌入52復(fù)雜數(shù)據(jù)對(duì)象的編碼4整除)。53復(fù)雜數(shù)據(jù)對(duì)象的編碼一個(gè)最佳訪問(wèn)在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)通常假定單個(gè)元素位于處理機(jī)字邊界(因此,它們的開(kāi)始地址是偶數(shù)或可被4整除)。54復(fù)雜數(shù)據(jù)對(duì)象的編碼一個(gè)最佳訪問(wèn)在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)通常假定單個(gè)元素位于處理機(jī)字邊界(因此,它們的開(kāi)始地址是偶數(shù)或可被4整除)。55復(fù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論