版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章進程線程模型學(xué)習(xí)目標<2
>掌握進程的定義和組成要素掌握應(yīng)用進程狀態(tài)轉(zhuǎn)換關(guān)系了解進程地址空間掌握進程創(chuàng)建、撤銷、阻塞和喚醒的機制理解進程控制的原語與相關(guān)系統(tǒng)調(diào)用理解資源分配單位和調(diào)度執(zhí)行單位的區(qū)別掌握線程的組成要素理解線程和進程的關(guān)系理解線程的不同實現(xiàn)方式了解PthreadAPI,并能運用其開發(fā)多線程應(yīng)用了解協(xié)程的概念教師導(dǎo)讀<3
>進程是操作系統(tǒng)進行資源分配和調(diào)度的獨立單位,本章內(nèi)容是理解如何創(chuàng)建并管理進程的重要知識單元進程的定義與構(gòu)成進程的狀態(tài)模型與進程隊列父子進程的工作模式:fork/exec、wait線程的引入原因線程的組成及其與進程的關(guān)系線程的三種實現(xiàn)方式及每種方式的優(yōu)缺點Pthread線程包的主要函數(shù)與使用方式3.1進程基本概念3.2進程控制3.3線程引入及基本概念3.4
線程的實現(xiàn)和實例目錄CONTENTSPART3.1進程基本概念3.1.1進程定義<6
>定義:進程是具有一定獨立功能的程序在某個數(shù)據(jù)集合上的一次運行活動,
是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位進程分為系統(tǒng)進程和用戶進程兩類系統(tǒng)進程執(zhí)行操作系統(tǒng)程序用戶進程運行用戶程序系統(tǒng)進程的優(yōu)先級通常高于一般用戶進程的優(yōu)先級進程定義3.1.1進程定義<7
>1.
進程和程序的聯(lián)系程序是構(gòu)成進程的組成部分之一進程是由程序、數(shù)據(jù)和進程控制塊(PCB)三部分組成的一個進程的運行目標是執(zhí)行它所對應(yīng)的程序2.
進程和程序的區(qū)別程序是靜態(tài)的,而進程是動態(tài)的進程是程序的一個執(zhí)行過程程序的存在是永久的,進程存在生命周期,一個程序可以產(chǎn)生多個進程進程與程序的聯(lián)系和區(qū)別可再入程序<8
>一個能夠被多個用戶同時調(diào)用的程序稱作是“可再入”的程序可再入程序在執(zhí)行中不會修改自身的代碼一個程序不是任何條件下都可以產(chǎn)生多個進程的一個能被多個用戶同時調(diào)用的程序,在執(zhí)行中自身不能改變3.1.1進程定義進程的特征<9
>進程的兩個基本屬性:進程是一個可擁有資源的獨立單位進程同時又是一個可以獨立調(diào)度和分派的基本單位進程具有以下特性:
并發(fā)性:一個進程可以同其他進程一道向前推進2.動態(tài)性:進程有其生命周期,且進程的狀態(tài)是不斷變化的3.獨立性:一個進程是一個相對完整的資源分配單位4.交往性:一個進程在運行過程中可能會與其他進程發(fā)生直接的或間接的相互作用5.
異步性:每個進程按照各自獨立的、不可預(yù)知的速度向前推進6.
結(jié)構(gòu)性:一個進程由程序、數(shù)據(jù)和進程控制塊三部分組成3.1.1進程定義<10
>3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換
1.三狀態(tài)進程模型運行中的進程可以處于以下三種狀態(tài)之一:運行、就緒、等待三狀態(tài)模型狀態(tài)定義:(1)運行狀態(tài)(Running)
進程已獲得CPU,并且在CPU上執(zhí)行的狀態(tài)(2)就緒狀態(tài)(Ready)
進程已經(jīng)具備運行條件,但沒有獲得CPU的狀態(tài)(3)阻塞狀態(tài)(Blocked)
進程因等待某種事件發(fā)生而暫時不能運行的狀態(tài)<11
>3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換三狀態(tài)模型的狀態(tài)轉(zhuǎn)換條件:(1)就緒→運行
進程調(diào)度程序把處理機
分配給某個就緒進程(2)運行→就緒
規(guī)定的運行時間片用完(3)運行→阻塞
運行狀態(tài)的進程等待其他資源(4)阻塞→就緒
阻塞進程在其被阻塞的原因獲得時解除阻塞<12
>3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換2.五狀態(tài)進程模型五狀態(tài)模型狀態(tài)定義:(1)運行狀態(tài)(Running):
進程正在占用CPU資源(2)就緒狀態(tài)(Ready):
進程等待分配CPU資源(3)阻塞狀態(tài)(Blocked):
進程因等待I/O操作等條件而暫停運行(4)創(chuàng)建狀態(tài)(New):
進程正在創(chuàng)建過程中,還不能運行(5)結(jié)束狀態(tài)(Exit):
進程已結(jié)束運行,
回收除進程控制塊之外的其他資源,
讓其他進程從進程控制塊中收集有關(guān)信息<13
>3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換五狀態(tài)狀態(tài)轉(zhuǎn)換條件:(1)創(chuàng)建新進程:進入創(chuàng)建狀態(tài)(2)提交(Admit):完成一個新進程的創(chuàng)建過程,進入就緒狀態(tài)(3)調(diào)度運行(Dispatch):進入運行狀態(tài)(4)釋放(Release):進程終止運行,進入退出狀態(tài)(5)超時(Timeout):用完時間片,進程暫停運行,、從運行狀態(tài)進入就緒狀態(tài)(6)事件等待(EventWait):進程要求的事件未出現(xiàn)而進入阻塞狀態(tài)(7)事件出現(xiàn)(EventOccurs):進程等待的事件出現(xiàn),進程從阻塞狀態(tài)進入就緒狀態(tài)<14
>3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換3.七狀態(tài)進程模型七狀態(tài)模型引入原因:五狀態(tài)進程模型沒有區(qū)分進程地址空間位于內(nèi)存還是外存低優(yōu)先級進程對換至外存,這種做法可得到的好處:(1)提高處理機效率(2)可為運行進程提供足夠內(nèi)存(3)有利于調(diào)試<15
>3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換七狀態(tài)模型狀態(tài)定義:與五狀態(tài)進程模型相比,增加了就緒掛起和阻塞掛起兩個狀態(tài)(1)阻塞掛起狀態(tài)(Blocked,suspend):
進程在外存并等待某事件的出現(xiàn)(2)就緒掛起狀態(tài)(Ready,suspend):
進程在外存,但只要進入內(nèi)存,即可運行3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換七狀態(tài)模型狀態(tài)轉(zhuǎn)換條件:(1)掛起(Suspend):
進程從內(nèi)存轉(zhuǎn)到外存
阻塞到阻塞掛起
就緒到就緒掛起
運行到就緒掛起(2)激活(Activate):
進程從外存轉(zhuǎn)到內(nèi)存
就緒掛起到就緒
阻塞掛起到阻塞<16
>3.1.2進程狀態(tài)及狀態(tài)轉(zhuǎn)換<17
>七狀態(tài)模型狀態(tài)轉(zhuǎn)換條件:(3)事件出現(xiàn)(EventOccurs):
等待的事件出現(xiàn)
阻塞到就緒
阻塞掛起到就緒掛起(4)提交(Admit):
完成創(chuàng)建過程
進入就緒狀態(tài)或就緒掛起狀態(tài)3.1.3進程控制塊進程控制塊(PCB:ProcessControlBlock):描述進程的基本情況以及進程的運行變化過程PCB是進程存在的惟一標志當系統(tǒng)創(chuàng)建一個進程時,為進程設(shè)置一個PCB,再利用PCB對進程進行控制和管理撤消進程時,系統(tǒng)收回它的PCB,進程也隨之消亡<18
>3.1.3進程控制塊PCB的內(nèi)容PCB的內(nèi)容可以分成調(diào)度信息和現(xiàn)場信息兩大部分調(diào)度信息:供進程調(diào)度時使用,描述進程當前所處的狀況進程名、進程號、存儲信息、優(yōu)先級、當前狀態(tài)、資源清單、“家族”關(guān)系、消息隊列指針、進程隊列指針和當前打開文件等現(xiàn)場信息:刻畫進程的運行情況程序狀態(tài)字、時鐘、界地址寄存器等一旦中斷進程的運行,必須把中斷時刻的內(nèi)容記入進程控制塊的現(xiàn)場信息<19
>3.1.3進程控制塊
進程的組成進程由程序、數(shù)據(jù)和進程控制塊三部分組成PCB存有進程的地址信息程序描述了進程要實現(xiàn)的功能數(shù)據(jù)是程序操作的對象<20
>3.1.3進程控制塊3.
PCB組織(1)線性方式:
所有PCB不分狀態(tài)組織在一個線性表(稱PCB表)中優(yōu)點:簡單,且不需要額外的開銷缺點:需要掃描整個PCB表,
才能找到需要的PCB(2)索引方式:相同狀態(tài)的進程,分別設(shè)置PCB索引表<21
>3.1.3進程控制塊(3)鏈接方式:對于具有相同狀態(tài)進程的PCB,通過PCB中的鏈接字構(gòu)成一個隊列鏈接字指出本隊列下一PCB在PCB表中的編號(或地址)編號為0表示隊尾隊首由內(nèi)存固定單元中相應(yīng)的隊列指針指示<22
>3.1.3進程控制塊
4.進程的隊列(1)就緒隊列所有就緒狀態(tài)的進程排在一個就緒隊列中(2)等待隊列對每一種等待事件組織一個隊列(3)運行隊列在單CPU系統(tǒng)中,整個系統(tǒng)有一個運行隊列<23
>3.1.3進程控制塊5.
進程隊列的組成單向鏈接:
同一隊列中的進程,通過進程控制塊中的隊列指針聯(lián)系起來
前一進程的進程控制塊中的指針值為它的下一個進程的進程控制塊的地址
隊列中最后一個進程的進程控制塊中的指針值置為“0”雙向鏈接:
設(shè)置兩個指針,前向指針和后向指針
分別指出它的前一個或后一個進程的進程控制塊地址
系統(tǒng)為每個隊列設(shè)置一個隊首指針,指出該隊列的第一個和最后一個進程
的進程控制塊地址,以便進行雙向搜索<24
>背景-2:北京大學(xué)圖書館PART3.2進程控制<26
>3.2.1進程控制進程控制:對進程在整個生命周期中各種狀態(tài)之間的轉(zhuǎn)換進行有效的控制通過進程控制原語來實現(xiàn)原語:
若干條指令所組成的一個指令序列,用來實現(xiàn)某個特定的操作功能
連續(xù)的,具有不可分割性,在執(zhí)行時也不可間斷
必須在管態(tài)下執(zhí)行,并且常駐內(nèi)存用于進程控制的原語:創(chuàng)建進程、撤消進程、掛起進程、激活進程、阻塞進程、喚醒進程以及改變進程優(yōu)先級等<27
>3.2.1進程控制創(chuàng)建原語創(chuàng)建一個新的進程,前者稱為父進程,后者稱為子進程建立進程控制塊PCB2.
撤消原語撤消進程的PCB撤消屬于該進程的一切“子孫進程”,釋放被撤消進程所占用的全部資源
3.
阻塞原語進程從運行狀態(tài)轉(zhuǎn)換為阻塞狀態(tài)中斷CPU的執(zhí)行,把CPU的當前狀態(tài)保存在PCB的現(xiàn)場信息中當前狀態(tài)置為等待狀態(tài),并把它插入到該事件的等待隊列中去
4.
喚醒原語等待狀態(tài)轉(zhuǎn)換為就緒狀態(tài)從等待隊列中撤出并插入到就緒隊列中排隊,等待調(diào)度執(zhí)行<28
>3.2.2Linux操作系統(tǒng)有關(guān)進程控制的系統(tǒng)調(diào)用在Linux操作系統(tǒng)中,常用的有關(guān)進程控制的系統(tǒng)調(diào)用有:fork,exec,wait,exit,getpid,sleep和nice等下表所示為這些系統(tǒng)調(diào)用的功能說明系統(tǒng)調(diào)用功
能fork創(chuàng)建一個子進程getpid返回當前進程的PIDexec更換進程映像,即根據(jù)指定的文件名找到可執(zhí)行文件,并用它來取代調(diào)用進程的內(nèi)容exit終止調(diào)用的程序(用于程序運行出錯)wait等待任何要僵死的子進程sleep使進程掛起指定的時間nice改變進程的優(yōu)先級<29
>3.2.2Linux操作系統(tǒng)有關(guān)進程控制的系統(tǒng)調(diào)用【代碼示例-fork與exec】Linux系統(tǒng)中,父進程創(chuàng)建子進程,以及各自分開活動的情況#include<unistd.h>#include<sys/types.h>#include<stdio.h>#include<sys/wait.h>#include<stdlib.h>intmain(intargc,char*argv[]){intpid;pid=fork();/*創(chuàng)建一個子進程*/if(pid<0){/*出現(xiàn)錯誤。進程ID號不可能小于0*/fprintf(stderr,"ForkFailed");/*輸出出錯消息——ForkFailed*/exit(-1);/*程序終止,返回碼-1*/}<30
>3.2.2Linux操作系統(tǒng)有關(guān)進程控制的系統(tǒng)調(diào)用elseif(pid==0){/*下面是子進程執(zhí)行*/execlp("/bin/ls","ls",NULL);/*執(zhí)行目錄/bin下面的ls命令*/}else{/*下面是父進程執(zhí)行*/wait(NULL);/*父進程等待子進程完成*/printf("ChildComplete");/*輸出子進程完成的信息*/exit(0);/*終止*/}}<31
>3.2.2Linux操作系統(tǒng)有關(guān)進程控制的系統(tǒng)調(diào)用【代碼示例-進程相關(guān)操作】利用fork()創(chuàng)建子進程,利用getpid()和getppid()分別獲得本進程的PID和父進程的PID,使用sleep()將相關(guān)進程掛起幾秒/*proc1.c演示有關(guān)進程操作*/#include<unistd.h>#include<sys/types.h>#include<stdio.h>#include<errno.h>#include<stdlib.h>#include<string.h>
intmain(intargc,char**argv){pid_tpid,old_ppid,new_ppid;pid_tchild,parent;<32
>3.2.2Linux操作系統(tǒng)有關(guān)進程控制的系統(tǒng)調(diào)用parent=getpid(); if((child=fork())<0){fprintf(stderr,"%s:forkofchildfailed:%s\n",argv[0],strerror(errno));exit(1);} elseif(child==0){ /*此時子進程被調(diào)度運行*/old_ppid=getppid();sleep(2);new_ppid=getppid();}else{/*父進程運行*/sleep(1);exit(0);}/*下面僅子進程運行*/printf("Originalparent:%d\n",parent);printf("Child:%d\n",getpid());printf("Child'soldppid:%d\n",old_ppid);printf("Child'snewppid:%d\n",new_ppid);
exit(0);}程序運行的結(jié)果如下:$./proc1Originalparent:2009Child:2010Child'soldppid:2009Child'snewppid:1需要注意的是,進程是并發(fā)執(zhí)行的;當子進程被成功調(diào)度后,調(diào)度程序的返回值是0。如果父進程先終止,則其子進程的父進程就被系統(tǒng)指定為init進程(其PID為1)背景-3:西門華表線程引入及基本概念PART3.3<34
>3.3.1線程的引入為何需要線程?進程活動存在時間和空間的資源開銷,數(shù)目不宜太多,切換頻率不宜過高使多個程序更好地并發(fā)執(zhí)行,盡量減少系統(tǒng)的開銷分離調(diào)度的基本單位和獨立分配資源的單位調(diào)度和分派的基本單位不負責分配資源擁有資源的基本單位,不頻繁地切換<35
>3.3.1線程的引入什么是線程?線程是進程中的一個實體,是CPU調(diào)度和分派的基本單位只擁有少量在運行中必不可少的資源同屬一個進程的其他線程共享進程所擁有的全部資源線程有就緒、等待和運行三種基本狀態(tài)有的系統(tǒng)中線程還有終止狀態(tài)等進程執(zhí)行程序,就如同工人完成工作一個進程內(nèi)的多個線程同時運行,就如同多個工人共同完成一份工作<36
>3.3.1線程的引入2.線程的屬性(1)惟一的標識符和一張線程描述表
線程描述表記錄了線程執(zhí)行的寄存器以及棧等現(xiàn)場狀態(tài)(2)不同的線程可以執(zhí)行相同的程序(3)同一個進程中的各個線程共享該進程的內(nèi)存地址空間(4)線程是處理器的獨立調(diào)度單位,多個線程是可以并發(fā)執(zhí)行的(5)線程在生命周期內(nèi)會經(jīng)歷等待狀態(tài)、就緒態(tài)和運行態(tài)等各種狀態(tài)變化每個線程單獨占有CPU資源,只有在多核CPU上,多線程才可能并行執(zhí)行<37
>3.3.1線程的引入3.引入線程的好處(1)創(chuàng)建一個新線程花費時間少
創(chuàng)建線程的速度比創(chuàng)建進程的速度快,且系統(tǒng)的開銷也少(2)線程之間的切換花費時間少(3)同一個進程內(nèi)的線程共享內(nèi)存和文件,通信更簡便,信息傳送速度也快(4)線程能獨立執(zhí)行,充分利用和發(fā)揮處理器與外部設(shè)備并行工作能力<38
>3.3.2
線程的組成thread結(jié)構(gòu),即線程控制塊,由以下四個基本部分組成:①一個唯一的線程標識符②描述處理器工作情況的一組寄存器的內(nèi)容
如程序計數(shù)器、狀態(tài)寄存器、通用寄存器等③兩個棧指針
一個指向核心棧;另一個指向用戶棧④一個私有存儲區(qū)
用來存放現(xiàn)場保護信息和其他與該線程相關(guān)的統(tǒng)計信息等<39
>3.3.2
線程的組成一個進程可以包含一個線程或多個線程當一個進程包含多個線程時,這些線程除各自私有少量資源以外,共享所屬進程的全部資源<40
>3.3.3
線程與進程的關(guān)系線程又稱為輕量級進程或者進程元傳統(tǒng)的進程稱為重量級進程通常一個進程都有若干個線程調(diào)度傳統(tǒng)的操作系統(tǒng)中擁有資源的基本單位和獨立調(diào)度、分派的基本單位都是進程引入線程的操作系統(tǒng)中線程作為調(diào)度和分派的基本單位,進程作為資源擁有的基本單位<41
>3.3.3
線程與進程的關(guān)系2.并發(fā)性引入線程的操作系統(tǒng)中不僅進程之間可以并發(fā)執(zhí)行一個進程中的多個線程之間也可以并發(fā)執(zhí)行擁有資源不論是傳統(tǒng)的操作系統(tǒng),還有線程的操作系統(tǒng)進程都是擁有資源的一個獨立單位<42
>3.3.3
線程與進程的關(guān)系4.
系統(tǒng)開銷在創(chuàng)建或撤消進程時,操作系統(tǒng)所付出的開銷將顯著地大于在創(chuàng)建或撤消線程時的開銷進程切換的開銷遠大于線程切換的開銷同一進程中的多個線程具有相同的地址空間,同步和通信的實現(xiàn)比較容易<43
>3.3.3
線程與進程的關(guān)系比較概念線程進程基本功能調(diào)度的基本單位資源分配的基本單位系統(tǒng)開銷切換開銷小切換開銷大資源分配線程共享一個進程下的資源進程獨占資源通信方式共享內(nèi)存地址空間使用進程通信的系統(tǒng)調(diào)用并發(fā)性更強更弱背景-4:未名湖PART3.4線程的實現(xiàn)和實例<45
>3.4.1
線程的實現(xiàn)方式1.用戶級線程、核心級線程和混合方式線程已在許多系統(tǒng)中實現(xiàn),但實現(xiàn)的方式并不完全相同用戶級線程(User-LevelThreads),不依賴于內(nèi)核例如:數(shù)據(jù)庫系統(tǒng)中的線程核心級線程(Kernel-SupportedThreads),依賴于內(nèi)核混合方式實現(xiàn)線程,即同時實現(xiàn)了以上兩種類型的線程<46
>3.4.1
線程的實現(xiàn)方式(1)用戶級線程實現(xiàn)方式創(chuàng)建、撤消和切換都不利用系統(tǒng)調(diào)用管理線程的工作全部由應(yīng)用程序完成每個進程都有一個私有的線程表核心空間中有一個進程表,記載系統(tǒng)中各個進程的情況POSIXPthreadsMachC-threadsSolaris2UI-threads<47
>3.4.1
線程的實現(xiàn)方式(1)用戶級線程優(yōu)缺點
優(yōu)點:線程的切換速度快允許采用適合自己要求的不同調(diào)度算法可以運行在任何操作系統(tǒng)上缺點:當一個線程執(zhí)行系統(tǒng)調(diào)用時,在同一個進程內(nèi)的所有線程都被阻塞多線程應(yīng)用程序不具有多處理器的優(yōu)點<48
>3.4.1
線程的實現(xiàn)方式(2)核心級線程實現(xiàn)方式創(chuàng)建、撤消和切換都由核心實現(xiàn)核心保留了一個線程控制塊,根據(jù)該控制塊感知線程的存在并對線程進行控制線程表在核心空間中,記載系統(tǒng)中所有線程的情況核心空間中保存一個進程表,記載系統(tǒng)所有進程的信息核心進行調(diào)度時以線程為基本單位<49
>3.4.1
線程的實現(xiàn)方式(2)核心級線程優(yōu)缺點優(yōu)點:核心可以同時調(diào)度同一進程中的多個線程,真正實現(xiàn)并行操作如果一個進程的某個線程阻塞了,核心可以調(diào)度同一個進程中的另一個線程核心線程本身也可以是多線程的缺點:控制轉(zhuǎn)移開銷大應(yīng)用進程無法影響線程的切換3.4.1
線程的實現(xiàn)方式(3)混合方式
用戶級線程和核心級線程兩種實現(xiàn)方式結(jié)合
同一個進程內(nèi)的多個線程可在多個處理器上
并行運行
阻塞式系統(tǒng)調(diào)用不必將整個進程阻塞
線程創(chuàng)建在用戶空間完成
線程調(diào)度等在核心態(tài)完成<50
>3.4.1
線程的實現(xiàn)方式2.線程實現(xiàn)方式的比較(1)線程的調(diào)度與切換速度
用戶級線程的切換速度更加快(2)系統(tǒng)調(diào)用
用戶級線程調(diào)用一個系統(tǒng)調(diào)用時,把系統(tǒng)調(diào)用看作是整個進程的行為
內(nèi)核支持線程,則調(diào)度是以線程為單位(3)線程執(zhí)行時間
用戶級線程,調(diào)度是以進程為單位進行的
核心級線程,調(diào)度是以線程為單位進行的<51
>3.4.2
Pthread線程包多線程應(yīng)用程序用一組用戶級程序庫來編寫,將所有線程映射到一個單獨的內(nèi)核級進程中其中最著名的是:Pthread(POSIXthread)庫Pthread線程共有特性:
一個標識符
一組寄存器(包括程序計數(shù)器)
一組存儲在結(jié)構(gòu)中的屬性,包括棧大小、調(diào)度參數(shù)以及其它線程需要的項目下表中列舉了幾個主要的Pthread函數(shù)調(diào)用線程調(diào)用描述pthread_create()創(chuàng)建一個新線程pthread_join()等待一個特定的線程退出pthread_exit()結(jié)束調(diào)用的線程pthread_yield()釋放CPU來運行另外一個線程pthread_attr_init()創(chuàng)建并初始化一個線程pthread_attr_destroy()刪除一個線程的屬性結(jié)構(gòu)<52
>3.4.2
Pthread線程包【代碼示例-Pthread庫的簡單應(yīng)用】#inc
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 濱州學(xué)院《聚合物合成工藝設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 畢節(jié)幼兒師范高等專科學(xué)?!毒W(wǎng)絡(luò)管理與維護》2023-2024學(xué)年第一學(xué)期期末試卷
- 北京中醫(yī)藥大學(xué)東方學(xué)院《供配電安全技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 年上海市房屋租賃合同自行成交版
- 2025年度情侶婚禮策劃服務(wù)合同范本2篇
- 房地產(chǎn)項目合同開發(fā)協(xié)議
- 展板制作安裝合同模板
- 空調(diào)清洗保養(yǎng)合同協(xié)議書范本標準版
- 我的樂園作文400字【7篇】
- 產(chǎn)品銷售居間合同書
- DB44-T 2480-2024 鋁及鋁合金深井鑄造安全技術(shù)規(guī)范
- 中醫(yī)適宜技術(shù)發(fā)展現(xiàn)狀
- 部編人教版四年級數(shù)學(xué)上冊期末考試卷(可打印)
- 一例阿爾茨海默病患者的護理查房
- 農(nóng)貿(mào)市場安全生產(chǎn)工作方案
- 咸陽租房合同
- 《鋼筋保護層檢測》課件
- YJ-T 27-2024 應(yīng)急指揮通信保障能力建設(shè)規(guī)范
- 合伙人協(xié)議書決策機制
- 西藏畜牧獸醫(yī)知識培訓(xùn)課件
- 護理專業(yè)人才培養(yǎng)方案論證報告
評論
0/150
提交評論