第3章 用戶接口_第1頁
第3章 用戶接口_第2頁
第3章 用戶接口_第3頁
第3章 用戶接口_第4頁
第3章 用戶接口_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第3章操作系統(tǒng)的用戶接口操作系統(tǒng)的用戶接口用戶工作環(huán)境運行一個應(yīng)用程序的過程操作系統(tǒng)用戶界面系統(tǒng)功能調(diào)用Linux系統(tǒng)功能調(diào)用1操作系統(tǒng)的用戶接口——主要內(nèi)容用戶工作環(huán)境操作系統(tǒng)的用戶接口——用戶工作環(huán)境2用戶身份合法性檢查用戶工作區(qū):操作命令語言操作系統(tǒng)的用戶接口——用戶工作環(huán)境1.如何形成用戶工作環(huán)境(1)系統(tǒng)提供各種硬件、軟件資源(2)設(shè)計并提供使用方便的命令集合(3)將OS裝入計算機并初始化,形成可供使用的工作環(huán)境2.兩種形式的用戶工作環(huán)境(1)交互工作環(huán)境(2)批量工作環(huán)境作業(yè)控制語言3將操作系統(tǒng)的必要部分裝入主存并對系統(tǒng)進行初始化工作,最終使系統(tǒng)處于命令接收狀態(tài)。操作系統(tǒng)的用戶接口——用戶工作環(huán)境3.系統(tǒng)生成(1)系統(tǒng)生成是指在一臺裸機上(或者安裝新的操作系統(tǒng))安裝操作系統(tǒng)的過程。(2)一般情況下,系統(tǒng)生成的工作是由系統(tǒng)程序員來完成的,在系統(tǒng)生成的過程中涉及到機器的硬件配置和操作系統(tǒng)核心參數(shù)的設(shè)置。還涉及軟件系統(tǒng)的版權(quán)的問題(3)在微機上的系統(tǒng)生成是用戶自己完成的,比如安裝WINDOWS98、LINUX、MINIX、UNIX。4.操作系統(tǒng)的初啟(1)系統(tǒng)引導(dǎo)的任務(wù)4OS核心文件存儲在系統(tǒng)本身的存儲設(shè)備中,由系統(tǒng)自己將OS核心程序讀入主存并運行,建立一個操作環(huán)境。適用于微機和大多數(shù)系統(tǒng)OS主要文件不放在系統(tǒng)本身的存儲設(shè)備中,在系統(tǒng)啟動后執(zhí)行下裝操作,從另外的計算機系統(tǒng)中將操作系統(tǒng)常駐部分傳送到該計算機中,使它形成一個操作環(huán)境。適用于多計算機系統(tǒng)、由主控機與前端機構(gòu)成的系統(tǒng)以及分布式系統(tǒng)。①現(xiàn)場獨立引導(dǎo)方式(滾雪球方式、bootup)

②輔助下裝方式

(download)(2)系統(tǒng)引導(dǎo)的方式操作系統(tǒng)的用戶接口——用戶工作環(huán)境5①初始引導(dǎo)系統(tǒng)加電,執(zhí)行系統(tǒng)初啟程序。(該程序存在非易失內(nèi)存中的指定位置。PC:0xffff:0000);初啟程序?qū)ο到y(tǒng)硬件和配置進行自檢,保證系統(tǒng)沒有硬件錯誤;從硬盤中讀入操作系統(tǒng)引導(dǎo)程序,并將控制權(quán)交給該程序模塊。0X7C00(3)獨立引導(dǎo)方式(滾雪球方式)的過程操作系統(tǒng)的用戶接口——用戶工作環(huán)境6主引導(dǎo)塊

磁盤的第一個物理塊。512byte的程序和數(shù)據(jù),確定活動磁盤分區(qū)。這一部分代碼也可以是只負責裝入引導(dǎo)裝入程序(如lilo),再由后者裝入OS。引導(dǎo)塊

每個邏輯磁盤的第一個物理塊。②引導(dǎo)程序執(zhí)行引導(dǎo)程序執(zhí)行,將操作系統(tǒng)核心文件讀入內(nèi)存,并將控制交給核心的初始化程序。

操作系統(tǒng)引導(dǎo)程序操作系統(tǒng)的用戶接口——用戶工作環(huán)境7③核心初始化

初始化系統(tǒng)數(shù)據(jù)結(jié)構(gòu)及參數(shù)系統(tǒng)加電建立進程有關(guān)的數(shù)據(jù)結(jié)構(gòu);獲得自由存儲空間的容量,建立存儲管理的數(shù)據(jù)結(jié)構(gòu)

;建立系統(tǒng)設(shè)備和文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu);初始化時鐘。④系統(tǒng)初始化完善OS的操作環(huán)境,裝載命令處理程序(或圖形用戶界面),并初始化;在多用戶系統(tǒng)中,為每個終端建立命令解釋進程,使系統(tǒng)處于命令接收狀態(tài)。操作系統(tǒng)的用戶接口——用戶工作環(huán)境8ROMBIOS自檢運行裝入系統(tǒng)盤中的主引導(dǎo)塊裝入活動OS引導(dǎo)塊裝入OSOS初始化形成用戶界面(4)PC初啟操作系統(tǒng)的用戶接口——用戶工作環(huán)境9BIOS引導(dǎo)程序主引導(dǎo)塊IO.SYS(I/O初始化)DOS.SYS(文件系統(tǒng),簡單內(nèi)存初始化)COMMAND.COM(簡單任務(wù)管理)C:\>(5)DOS啟動操作系統(tǒng)的用戶接口——用戶工作環(huán)境10Linux系統(tǒng)是以滾雪球的方式啟動加電或復(fù)位→BIOS的啟動→BootLoader→OS初始化①系統(tǒng)加電或復(fù)位上電自檢;對硬件設(shè)備進行檢測和連接,并將測得的數(shù)據(jù)送入BIOS數(shù)據(jù)區(qū);對主存中所有的數(shù)據(jù)清零,對內(nèi)存進行校驗,若無錯,BIOS入口→CS:IP。(6)Linux系統(tǒng)初啟操作系統(tǒng)的用戶接口——用戶工作環(huán)境11②BIOS啟動

在ROM中的引導(dǎo)程序放在固定位置:FFFF:0000CPU從這里開始執(zhí)行。從盤中讀入BootLoader(引導(dǎo)程序)。從硬盤啟動時,讀入零柱面零磁道1扇區(qū)MBR(MasterBootRecord),將控制權(quán)交BootLoader。③Loader(引導(dǎo)程序)功能:將OS讀入內(nèi)存,并將控制權(quán)交給OS的初始化程序。grub/lilo等操作系統(tǒng)的用戶接口——用戶工作環(huán)境12④系統(tǒng)核心初始化(Setup.s)

Setup的工作檢查調(diào)入內(nèi)存中的代碼;獲取內(nèi)存容量信息,設(shè)置設(shè)備模式;屏蔽中斷,準備進入保護模式;設(shè)置中斷描述符表(idt),全局描述符表(gdt);控制權(quán)交給Heads。Heads的工作對中斷向量表作準備工作;檢查CPU類型;調(diào)用Setup_paging進行頁面初始化;調(diào)用main.c中的Start_kernel()。操作系統(tǒng)的用戶接口——用戶工作環(huán)境13Start_kernel()的工作對與CPU、內(nèi)存等最基本硬件相關(guān)部分進行初始化;對中斷向量表進行初始化;為進程調(diào)度程序作準備;設(shè)置基準時鐘;內(nèi)核的內(nèi)存分配;對文件系統(tǒng)進行初始化;建立init進程。init進程對每一個聯(lián)機終端建立“getty”進程,getty在終端上顯示“l(fā)ogin”,等待用戶登錄。操作系統(tǒng)的用戶接口——用戶工作環(huán)境應(yīng)用程序的處理操作系統(tǒng)的用戶接口——應(yīng)用程序的處理141.作業(yè)、作業(yè)步

(1)作業(yè)計算機系統(tǒng)按指定步驟對初始數(shù)據(jù)進行處理并得到計算結(jié)果的加工工作。

(2)作業(yè)步加工工作中的一個步驟稱為作業(yè)步。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理152.處理應(yīng)用程序的步驟

(1)編輯建立一個新文件,或?qū)σ延械奈募械腻e誤進行修改。

(2)編譯將源程序翻譯成浮動的目標代碼。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理(3)連接主程序和其他所需要的子程序和例行程序連接裝配在一起,使之成為一個可執(zhí)行的、完整的主存映像文件。(4)運行將主存映像文件調(diào)入主存,啟動運行,得出計算結(jié)果。16編譯器或匯編器目標模塊源程序其他目標模塊主存中運行動態(tài)裝入的系統(tǒng)庫編譯時間連接裝配時間動態(tài)鏈接加載運行時間連接裝配程序主存映像文件應(yīng)用程序處理步驟示意圖應(yīng)用程序處理步驟操作系統(tǒng)的用戶接口——應(yīng)用程序的處理172.連接類型(1)靜態(tài)連接一個源程序經(jīng)編譯后,生成一個可重定位的目標模塊,并產(chǎn)生內(nèi)部符號表和外部符號表,供連接程序(Link)使用。①內(nèi)部符號表本模塊可以被其他程序調(diào)用的入口點。②外部調(diào)用表本模塊要調(diào)用的外部的程序模塊名。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理18③連接需要做的工作將各模塊連接成為一個整體;構(gòu)造全程符號表,在其中填寫模塊的邏輯地址;查找各程序段的外部調(diào)用表,填入對應(yīng)調(diào)用函數(shù)的地址。④靜態(tài)連接的缺點靜態(tài)連接將所需的外部函數(shù)鏈接到目標文件中形成為一個可執(zhí)行文件。若多個應(yīng)用程序都調(diào)用了同一個庫中的外部函數(shù),那么,多個應(yīng)用程序的目標文件中都會包含這個外部函數(shù)對應(yīng)的代碼。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理19(2)動態(tài)連接

動態(tài)連接不需要將外部函數(shù)鏈接到目標文件中。而是在應(yīng)用程序中需要調(diào)用外部函數(shù)的地方作記錄,并說明要使用的外部函數(shù)名和引用入口號?!纬珊瘮?shù)調(diào)用鏈表

所需支持——DLL(動態(tài)鏈接庫)當Windows的裝載程序?qū)?yīng)用程序和DLL裝入主存后,裝載程序會遍歷函數(shù)調(diào)用鏈表,將DLL中函數(shù)在主存的入口(段:偏移)填入鏈表中的每個結(jié)點。操作系統(tǒng)的用戶接口——應(yīng)用程序的處理用戶接口操作系統(tǒng)的用戶接口——用戶接口201.什么是操作系統(tǒng)的用戶界面操作系統(tǒng)的用戶界面(或稱接口)是操作系統(tǒng)提供給用戶與計算機打交道的外部機制。用戶能夠借助這種機制和系統(tǒng)提供的手段來控制用戶所在的系統(tǒng)。

操作系統(tǒng)的用戶接口——用戶接口

操作系統(tǒng)用戶通過操作系統(tǒng)使用計算機示意圖212.操作系統(tǒng)提供的用戶界面(1)操作界面(命令接口)用戶使用操作界面來組織工作流程和控制程序的運行。

(2)

系統(tǒng)功能服務(wù)界面(程序接口)用戶程序在其運行過程中,使用系統(tǒng)功能調(diào)用來請求操作系統(tǒng)的服務(wù)。

操作命令:

作業(yè)控制語言鍵盤命令圖形界面

操作系統(tǒng)系統(tǒng)功能調(diào)用操作系統(tǒng)提供的用戶接口示意圖操作系統(tǒng)的用戶接口——用戶接口223.操作命令與操作系統(tǒng)類型的關(guān)系(1)作業(yè)控制語言──

批處理操作系統(tǒng)(2)鍵盤命令──

分時操作系統(tǒng)

個人計算機操作系統(tǒng)(3)圖形用戶界面──

分時操作系統(tǒng)

個人計算機操作系統(tǒng)

實際操作系統(tǒng):MS-DOSWindowsLinux(UNIX)提供什么樣的用戶界面?操作系統(tǒng)的用戶接口——用戶接口234.實例操作系統(tǒng)提供的用戶界面

(1)MS-DOS──

鍵盤命令系統(tǒng)功能調(diào)用

(2)Windows

──

圖形用戶界面系統(tǒng)功能調(diào)用

(3)Linux(UNIX)─

鍵盤命令(XWindow)系統(tǒng)功能調(diào)用操作系統(tǒng)的用戶接口——用戶接口系統(tǒng)功能調(diào)用操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用241.什么是系統(tǒng)功能調(diào)用(1)操作如何為用戶提供服務(wù)

操作系統(tǒng)提供實現(xiàn)各種功能的例行子程序。應(yīng)用程序i

系統(tǒng)調(diào)用

中央處理機存儲器外部設(shè)備應(yīng)用程序計算機系統(tǒng)部件系統(tǒng)功能調(diào)用示意圖操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用25(2)如何調(diào)用操作服務(wù)功能

①采用統(tǒng)一進管方式——

系統(tǒng)提供訪管指令、訪管中斷

顯示一個字符串讀文件

應(yīng)用程序j

read();

操作系統(tǒng)統(tǒng)功能模塊②訪管指令(自愿進管指令)

svcn

svc表示機器訪管指令的操作碼記憶符,n為地址碼(功能號)系統(tǒng)功能調(diào)用示意圖操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用26③訪管中斷

當處理機執(zhí)行到訪管指令時發(fā)生中斷,該中斷稱為訪管中斷,它表示正在運行的程序?qū)Σ僮飨到y(tǒng)的某種需求。

操作系統(tǒng)提供實現(xiàn)各種功能的例行子程序,其中的每一個功能對應(yīng)訪管指令的一個功能號。例如:

svc0顯示一個字符

svc1打印一個字符串

(3)什么是系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用是用戶在程序一級請求操作系統(tǒng)服務(wù)的一種手段,它是帶有一定功能號的“訪管指令”。其功能是由操作系統(tǒng)中的程序完成的,即由軟件方法實現(xiàn)的。操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用274.系統(tǒng)調(diào)用的實現(xiàn)

a1a0┇ai例行子程序入口地址表A+0A+1┇A+i保護現(xiàn)場;取i值;按i值轉(zhuǎn)移;

恢復(fù)現(xiàn)場;訪管中斷處理程序

svci

用戶程序+ASubmam例行子程序Sub0Sub1Subi┇a0a1ai┇系統(tǒng)調(diào)用的執(zhí)行過程操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用(1)實現(xiàn)系統(tǒng)調(diào)用必須完成的工作

編寫各服務(wù)功能的例行子程序訪管中斷處理程序:保護現(xiàn)場、調(diào)用例行子程序、恢復(fù)現(xiàn)場構(gòu)造例行子程序的入口地址表

:功能號與例行服務(wù)子程序一一對應(yīng)。用戶程序中安排訪管指令

:intn

(2)參數(shù)傳遞問題由陷入指令自帶參數(shù):陷入指令的長度有限,且還要攜帶系統(tǒng)調(diào)用功能號,只能自帶有限的參數(shù)通過有關(guān)通用寄存器來傳遞參數(shù):這些寄存器應(yīng)是系統(tǒng)程序和用戶程序都能訪問的,由于寄存器個數(shù)限制,無法傳遞較多的參數(shù)在內(nèi)存中開辟專用堆棧區(qū)來傳遞參數(shù)28操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用(3)系統(tǒng)調(diào)用與一般過程調(diào)用的區(qū)別

系統(tǒng)調(diào)用方式(INT)與程序中一般的調(diào)用方式的相同點改變指令流程重復(fù)執(zhí)行和公用改變指令流程后需要返回原處系統(tǒng)調(diào)用方式(INT)與程序中一般的調(diào)用方式的不同點運行在不同的系統(tǒng)狀態(tài) 過程調(diào)用:調(diào)用前后狀態(tài)相同,用戶態(tài)或核態(tài) 系統(tǒng)調(diào)用:INT指令,用戶態(tài)→核態(tài)返回問題

過程調(diào)用:正常返回調(diào)用過程 系統(tǒng)調(diào)用:可能引起進程調(diào)度系統(tǒng)調(diào)用命令中,同一程序中不包含被調(diào)用代碼:好處?系統(tǒng)調(diào)用涉及到PSW:狀態(tài)管理、標志寄存器29操作系統(tǒng)的用戶接口——系統(tǒng)功能調(diào)用(4)系統(tǒng)調(diào)用與庫函數(shù)

系統(tǒng)調(diào)用代碼屬于OS,庫函數(shù)由軟件開發(fā)商提供,由編譯工具鏈入用戶程序。系統(tǒng)調(diào)用代碼的執(zhí)行引起CPU狀態(tài)的變化:用戶態(tài)核心態(tài)庫函數(shù)的執(zhí)行不會引起CPU狀態(tài)的變化:用戶態(tài)30Linux的系統(tǒng)功能調(diào)用Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用311.Linux系統(tǒng)功能調(diào)用的過程在Linux系統(tǒng)中,系統(tǒng)調(diào)用通過異常類型實現(xiàn);當執(zhí)行了int0x80指令而發(fā)生的軟件中斷;系統(tǒng)自動將用戶態(tài)切換為核心態(tài)來處理該事件,執(zhí)行自陷處理程序(系統(tǒng)調(diào)用處理程序)。Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用32(1)系統(tǒng)功能調(diào)用過程abc();

abc();

{syscall;

}system_call:sys_abc

SYSEXITsysabc(){

}用戶態(tài)核心態(tài)用戶程序系統(tǒng)調(diào)用

在libc標準庫中的封裝例程系統(tǒng)調(diào)用處理程序系統(tǒng)調(diào)用服務(wù)例程Linux系統(tǒng)調(diào)用過程Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用33(2)例:getuid系統(tǒng)調(diào)用過程intmain(){getuid();

}intgetuid(void)

{long_res;int$0x80;

}ENTRY(system_call)pushl%esxSAVE_ALLGET_CURRENT(%ebx)

callsys_getuid16

RESTORE_ALLasmlinkagelongsys_getuid16(void){returnhigh2lowuid(current_uid);}用戶程序系統(tǒng)調(diào)用處理程序標準C庫內(nèi)核例程getuid系統(tǒng)調(diào)用過程Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用例:sethostname函數(shù)原型:

sethostname(constchar*name,size_tlen);功能:設(shè)置計算機的主機名。參數(shù):

name:主機名

len:name字符串的長度

返回:0,成功;-1,失敗。

副作用34用戶空間調(diào)用情況

sethostname是libc庫中的一個庫函數(shù),實際的系統(tǒng)調(diào)用在該函數(shù)中發(fā)出。libc.a反匯編35進入函數(shù)sethostname后堆棧指針%esp情況:指向返回地址%esp+8:參數(shù)name %esp+4:參數(shù)len0x4a:sethostname的系統(tǒng)調(diào)用號36系統(tǒng)內(nèi)核情況

通過寄存器傳送參數(shù)

INT80執(zhí)行時引出中斷處理程序system_call();

代碼在arch/i386/kernel/entry.S中37

ENTRY(system_call) pushl%eax#saveorig_eax系統(tǒng)調(diào)用號進堆棧 SAVE_ALL #保留現(xiàn)場 GET_CURRENT(%ebx)#%ebx指向當前PCB testb$0x02,tsk_ptrace(%ebx)#檢查標志位 jnetracesys cmpl$(NR_syscalls),%eax #功能號是否合法? jaebadsys callSYMBOL_NAME(sys_call_table)(,%eax,4) #調(diào)用跳轉(zhuǎn)表中相應(yīng)函數(shù) movl%eax,EAX(%esp)#savethereturnvalue38392.Linux系統(tǒng)功能調(diào)用的實現(xiàn)機制(1)Linux系統(tǒng)調(diào)用的進入 ①Linux系統(tǒng)的軟中斷指令是int0x80匯編語言指令②該指令的執(zhí)行會發(fā)生中斷③處理機的狀態(tài)由用戶態(tài)自陷到內(nèi)核態(tài)④從system_call()開始執(zhí)行系統(tǒng)調(diào)用處理程序。⑤當系統(tǒng)調(diào)用處理完畢后,通過iret匯編語言指令返回到用戶態(tài)。Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用40(2)系統(tǒng)調(diào)用號 ①linux中,每個系統(tǒng)調(diào)用被賦予一個唯一的系統(tǒng)調(diào)用號

②系統(tǒng)調(diào)用號定義在include/asm-i386/unistd.h頭文件中

③系統(tǒng)調(diào)用號格式如下

#define__NR_restart_syscall0#define__NR_exit 1#define__NR_fork 2#define__NR_read 3#define__NR_write 4#define__NR_open 5……………………#define__NR_mq_getsetattr282

Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用41(3)系統(tǒng)調(diào)用表 ①

系統(tǒng)調(diào)用表記錄了內(nèi)核中所有已注冊過的系統(tǒng)調(diào)用,它是系統(tǒng)調(diào)用的跳轉(zhuǎn)表。

系統(tǒng)調(diào)用表是一個函數(shù)指針數(shù)組,表中依次保存所有系統(tǒng)調(diào)用的函數(shù)指針③

Linux系統(tǒng)調(diào)用表保存在arch/i386/kernel/下的entry.S中或arch/x86/kernel/syscall_table_32.s中Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用42④

系統(tǒng)調(diào)用表格式如下

ENTRY(sys_call_table) .longsys_restart_syscall/*0*/ .longsys_exit/*1*/ .longsys_fork /*2*/ .longsys_read /*3*/ .longsys_write /*4*/ .longsys_open /*5*/…………………… .longsys_mq_getsetattr/*282*/Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用43(4)系統(tǒng)調(diào)用處理程序

系統(tǒng)調(diào)用處理程序是system_call(),主要工作如下宏SAVE_ALL保護現(xiàn)場;正確性檢查;依eax中所包含的系統(tǒng)調(diào)用號,調(diào)用其對應(yīng)的服務(wù)例程;系統(tǒng)服務(wù)例程結(jié)束時,通過宏RESTORE_ALL恢復(fù)寄存器;最后通過iret指令返回。Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用443.增加一個新的系統(tǒng)功能調(diào)用的方法(1)添加新的服務(wù)例程

在/usr/src/linux/kernel/sys.c文件中增加一個新的函數(shù),該函數(shù)的名字是sys_mysyscall②例:一個簡單的系統(tǒng)調(diào)用,其功能是返回一個整型值asmlinkageintsys_mycall(intnumber){returnnumber;}Linux系統(tǒng)——Linux系統(tǒng)功能調(diào)用45(2)增加新的系統(tǒng)功能調(diào)用號

①在文件include/asm-i386/unistd.h中添加一項#define__NR_mysyscallXX②XX為新增加的系統(tǒng)調(diào)用號,此數(shù)字選一未用值。③例#define__NR_restart_syscall0#define__NR_exit 1……………………#define__NR_mq_ge

溫馨提示

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

評論

0/150

提交評論