




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11/18/2022第三章
进程管理11/10/2022第三章进程管理概述进程的描述进程控制线程进程互斥和同步进程间通信死锁问题进程其他方面的举例为了描述程序在并发执行时对系统资源的共享,需要一个描述程序执行时动态特征的概念,这就是进程。本章将讨论进程概念、进程控制和进程间关系。概述进程互前趋图:是一个有向无循环图。
前趋图用于描述进程之间执行的前后关系。
图中的每个结点可用于描述一个程序段或进程,乃至一条语句;结点间的有向边则用于表示两个结点之间存在的偏序或前趋关系“→”。节点概述:前趋图:是一个有向无循环图。前趋图用于描述进程之间执行的前图2-1(a)中存在着这样的前趋关系:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9图2-1前趋图图2-1(a)中存在着这样的前趋关系:图2-1前趋图或表示为:P={P1,P2,P3,P4,P5,P6,P7,P8,P9}→={(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P4,P7),(P5,P8),(P6,P8),(P7,P9),(P8,P9)}应当注意,前趋图中必须不存在循环,但在图2-1(b)中却有着下述的前趋关系:S2→S3,S3→S2
图2-1前趋图或表示为:应当注意,前趋图中必须不存在循环,但在图2-1(3.1.1程序的顺序执行3.1.1程序的顺序执行图2-2程序的顺序执行S1:a∶=x+y;S2:b∶=a-5;S3:c∶=b+1;试想S1、S2、S3三条语句以何顺序执行?3.1.1程序的顺序执行图2-2程序的顺序执行S1:a∶=x+y;试想S程序顺序执行时的特征
顺序性:按照程序结构所指定的次序(2)封闭性(运行时候独占处理机资源,运行结果不受外界影响)-程序可再现性:(3)可再现性(初始条件相同,结果相同)程序顺序执行时的特征顺序性:按照程序结构所指定的次序3.1.2程序的并发执行及其特征
3.1.2程序的并发执行及其特征3.1.2程序的并发执行程序并发执行的目的:提高计算机的处理能力提高资源利用率分为两种形式:多道程序环境下的多道程序的并发执行在某道程序的几个程序段中,包含可同时执行或可颠倒顺序执行的代码。3.1.2程序的并发执行3.1.2程序的并发执行定义:程序的并发执行是指一组在逻辑上互相独立的程序或程序段在执行时间上客观上互相重叠,即一个程序或程序段的执行尚未结束,另一个程序(段)的执行已经开始的执行方式。并发:在一段时间内的同时并行并行:在同一物理时刻的同时3.1.2程序的并发执行3.1.2程序的并发执行CPU外设请求带输入启动带磁带输入结束中断中断处理请求磁盘输入启动盘结束中断中断处理CPU外设请求盘输入启动盘,调度B请求带输入启动带结束中断中断处理调度A结束中断中断处理调度B时间t用户程序监督程序磁盘设备磁带设备用户程序A用户程序B监督程序磁盘设备磁带设备3.1.2程序的并发执行CPU外设请求带输入启动带磁带输入3.1.2程序的并发执行图2-3并发执行时的前趋图在该例中存在下述前趋关系:Ii→Ci,Ii→Ii+1,Ci→Pi,Ci→Ci+1,Pi→Pi+1而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之间,可以并发执行。如何实现并发执行?3.1.2程序的并发执行图2-3并发执行时的前趋图在对于具有下述四条语句的程序段:S1:a∶=x+2S2:b∶=y+4S3:c∶=a+bS4:d∶=c+b请画出前趋关系图。对于具有下述四条语句的程序段:3.1.2程序并发执行时的特征
间断性(相互制约性)-“走走停停”,一个程序可能走到中途停下来,失去原有的时序关系;失去封闭性:多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行已失去了封闭性。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。不可再现性:程序在并发执行时,由于失去了封闭性,也将导致失去其可再现性下面看个小例子:3.1.2程序并发执行时的特征间断性(相互制约性)-“例如,有两个循环程序A和B,它们共享一个变量N。程序A每执行一次时,都要做N∶=N+1操作;程序B每执行一次时,都要执行Print(N)操作,然后再将N置成“0”。程序A和B以不同的速度运行。(1)N∶=N+1在Print(N)和N∶=0之前,此时得到的N值分别为n+1,n+1,0。(2)N∶=N+1在Print(N)和N∶=0之后,此时得到的N值分别为n,0,1。(3)N∶=N+1在Print(N)和N∶=0之间,此时得到的N值分别为n,n+1,0。例如,有两个循环程序A和B,它们共享一个变量N结论:程序在并发执行时,由于失去了封闭性,其计算结果已经和并发执行速度有关,从而使程序失去了可再现性,亦即,程序经过多次执行后,虽然他们执行时的环境和初始条件相同,但得到的结果却不相同。结论:程序在并发执行时,由于失去了封闭性,其计算结果已经和并
顺序执行:并发执行:程序具有封闭性程序失去封闭性独享资源共享资源(互为存在条件)可再现性程序与“计算”不再一一对应有相互制约操作系统汤子英课件第二章进程管理高中信息技术课件教案人教版3.1概述3.1.1程序的顺序执行和并发执行
——程序的并发执行并发执行的条件:达到封闭性和可再现性
并发执行失去封闭性的原因是共享资源的影响,去掉这种影响即可。1966年,由Bernstein给出并发执行的条件。(这里没有考虑执行速度的影响。)。程序P(i)针对的读变量集和写变量集为R(i)和W(i)。任意两个程序P(i)和P(j)可并发的条件:R(i)W(j)=W(i)R(j)=保证一个程序的两次读之间数据不变化W(i)W(j)=保证写的结果不丢掉现在的问题是这个条件不好检查。怎么办?3.1概述3.1概述3.1.1程序的顺序执行和并发执行
——程序的并发执行程序活动不再处于一个封闭系统中,呈现了独立性、并发性、动态性以及它们之间的相互制约性。“程序”这个静态概念已经不能如实地反映程序活动的这些特征,为此,引入“进程”这一动态概念来描述系统和用户的程序活动。程序进程3.1概述程序活动不再处于一个封闭系统中,呈现了独立性、并3.1概述3.1.2进程的定义进程是程序的一次执行;一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。简言之,进程是程序的一次执行活动进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位;进程是一个程序及其数据在处理机上顺序执行时所发生的活动;3.1概述3.1概述3.1.2进程的定义——进程的特征动态性:进程对应程序的执行进程是动态产生:创建运行消亡进程在其生命周期内,在三种基本状态之间转换独立性:各进程的地址空间相互独立,除非采用进程间通信手段;并发性:指多个进程实体同存于内存中,且能在一段时间内同时运行;异步性:每个进程都以其相对独立的不可预知的速度向前推进;结构化:进程=代码段+数据段+PCB;3.1概述3.1概述3.1.2进程与程序的区别进程是动态的,程序是静态的:炒菜菜谱进程是暂时的,程序的永久的:进程是一个状态变化的过程,程序可长久保存。进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。进程具有并行特征,程序没有。进程是竞争计算机资源的基本单位。3.1概述程序与进程的类比
程序进程唱歌的曲谱或音乐乐器的乐谱
演出或演奏
剧本
演出
火车
列车
程序与进程的类比
程序进程唱歌的1、判断题:进程是一个程序在某数据集上的一次执行,所以不同进程对应不同的程序。分析:进程是程序在某数据集上得一次执行,但是不同进程可以对应同一程序。2、程序顺序执行与并发执行有什么不同?3、用户程序必须在进程中运行。正确4、判断题:两次打开Word字处理程序,编辑同一篇文章,因为程序一样(Word2003),数据一样(同一篇文章),所以系统中运行的这两个Word字处理程序是同一个进程。错误,运行的是2个不同的进程1、判断题:进程是一个程序在某数据集上的一次执行,所以不同进3.1概述3.1.2进程的定义——进程与程序的区别用户作业由用户创建由用户指定由系统创建作业步作业步…..线程线程…..进程进程…..3.1概述用户作业由用户创建由用户指定由系统创建作业步作业3.2.1进程的组成
进程=程序+数据+进程控制块PCB
有人把这三部分称为”进程映像”.程序是进程的不可缺少的组成部分;如果一个程序段允许被共享,则它应该是可重入的,或纯代码段数据是进程处理的对象进程控制块是进程的控制结构,包含了进程的描述信息、控制信息和资源信息以及现场保护区,是进程的唯一标识,系统通过PCB管理和控制进程。
通常的程序是不能并发执行的,为使程序能并发执行,应为之配置一进程控制块,即PCB;所谓创建进程是指创建进程实体中的PCB,撤销亦如此。3.2.1进程的组成3.2进程的描述3.2.2进程控制块PCB
(ProcessControlBlock)进程控制块是由OS维护的用来记录进程相关信息和管理进程而设置的一个专门的数据结构包含了进程的描述信息、控制信息和资源信息以及现场保护区PCB是进程动态特性的集中反映系统通过PCB感知进程的存在,通过PCB中所包含的各项变量的变化,掌握进程的状态以达到控制进程活动的目的3.2进程的描述3.2进程的描述3.2.2进程控制块PCB
(ProcessControlBlock)PCB结构的全部或部分常驻内存;PCB随进程的创建而填写,随进程的撤消而释放,有生命周期;系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志进程与PCB是一一对应的3.2进程的描述3.2.3进程控制块的内容(数据结构很复杂)进程标识符:内部进程标识符(processID),唯一,通常是一个整数;进程名(外部标识符),通常基于可执行文件名(不唯一);用户标识符(userID);进程组关系(processgroup)进程控制信息:当前状态;优先级(priority);代码执行入口地址;程序的外存地址;运行统计信息(执行时间、页面调度);进程间同步和通信;阻塞原因进程调度信息:进程状态、进程优先级、资源信息等处理机状态:寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针)3.2.3进程控制块的内容(数据结构很复杂)进程标识符:3.2.4PCB的组织方式链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表各状态的进程形成不同的链表:就绪链表、阻塞链表索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index表各状态的进行形成不同的索引表:就绪索引表、阻塞索引表3.2.4PCB的组织方式链表:同一状态的进程其PCB成OS是根据PCB来对并发执行的进程进行控制和管理的。简单题:进程控制块的作用(要扩展)?判断题:进程控制块是进程存在的唯一标志。OS是根据PCB来对并发执行的进程进行控制和管理的。运行Running就绪Ready等待BlockedDispatchTimeoutEventWaitEventOccurs3.2进程的描述3.2.5进程的状态及其转换——进程的三种基本状态基本状态间的转换运行就绪等待DispatchTimeoutEventW图2-5进程的三种基本状态及其转换(教材讲5种)
结束新进程接纳完成图2-5进程的三种基本状态及其转换结束新进程接纳完成作业后备队列进程就绪队列外存内存作业调度一些处理器(CPU)阻塞队列阻塞队列处理机调度器(进程调度):是操作系统中的一段代码,它完成如下功能:1)把处理机从一个进程切换到另一个进程;2)防止某进程独占处理机作业后备队列进程就绪队列外存内存作业调度3.2.5进程的三种基本状态
1)就绪(Ready)状态:已分配到除CPU以外的所有必要的资源,只要能再获得处理机,便可立即执行的状态。多个排成一队称为就绪队列。2)执行状态:指进程已获得处理机,其程序正在执行;在单处理机系统中,只能有一个进程处于执行状态;在多处理机系统中,则可能多个进程处于执行状态。3)阻塞状态:进程因发生某事件(如请求I/O、申请缓冲空间等)而暂停执行时的状态,亦即进程的执行受到阻塞,故称这种暂停状态为阻塞状态,有时也称为“等待”状态或“睡眠”状态。通常将处于阻塞状态的进程排成一个队列,称为阻塞队列。在有的系统中,按阻塞原因的不同而将处于阻塞状态的进程排成多个队列。3.2.5进程的三种基本状态1)就绪(Ready)状态:3.2进程的描述3.2.5进程的状态及其转换——进程的三种基本状态
在进程运行过程中,由于进程自身进展情况及外界环境的变化,这三种基本状态可以依据一定的条件相互转换
就绪运行:调度程序选择一个新的进程运行
运行就绪:运行进程用完了时间片运行进程被中断,因为一高优先级进程处于就绪状态
运行等待:当一进程等待某一事件的发生时,如请求系统服务无新工作可做
等待就绪:当所等待的事件发生时初始化I/O且必须等待结果等待某一进程提供输入(IPC)3.2进程的描述初始化I/O且必须等待结果3.2进程的描述3.2.5进程的状态及其转换——五状态进程模型RunningNewExitReadyBlockedCreateAdmitDispatchTimeoutReleaseEventWaitEventOccurs3.2进程的描述RunningNewExitReadyBl五状态进程模型(单队列结构)AdmitReadyQueue就绪队列
DispatchTime-out超时EventWaitReleaseCPUBlockedQueue等待队列EventOccurs提交调度Processor释放等待事件事件发生AdmitReadyQueue就绪队列Dispatc五状态进程模型(多队列结构)AdmitReadyQueueDispatchTime-outReleaseProcessorEvent1WaitEvent1QueueEvent1OccursEvent2WaitEvent2QueueEvent2OccursAdmitReadyQueueDispatchTime-o3.2进程的描述3.2.5进程的状态及其转换——其它状态创建状态:创建(新new)状态
OS已完成为创建一进程所必要的工作已构造了进程标识符已创建了管理进程所需的表格终止状态(Exit)终止后进程移入该状态它不再有执行资格表格和其它信息暂时保留实用程序为了分析性能和利用率,可能要提取程序的历史信息挂起状态:把一个进程从内存转到外存3.2进程的描述3.2进程的描述3.2.5进程的状态及其转换——其它状态导致进程创建的原因批处理环境中,选择一新作业即将进入内存执行交互环境中,新用户登录到系统操作系统因提供一项服务而创建。如:用户请求打印一个文件,OS可创建严格管理打印的进程,使请求进程可继续执行,与完成打印任务的时间无关由现有进程生成,父进程子进程3.2进程的描述3.2进程的描述3.2.5进程的状态及其转换——其它状态导致终止进程的原因含一个HALT指令或用于终止的OS显式服务调用分时系统中,用户的行为可指示终止,如:用户退出系统或关闭自己的终端,该用户的进程将被终止PC机环境中,用户结束一应用程序出现某些错误时,如,I/O失败,无效指令等父进程可请求它的某个子进程终止父进程终止,OS自动终止所有后代进程3.2进程的描述3.2.5挂起进程模型
这个问题的引入是由于进程优先级的引入,一些低优先级进程可能等待较长时间,从而被对换至外存。目的是:提高处理机效率:就绪进程表为空时,OS将阻塞进程从内存中“挂起”到磁盘的“挂起队列”,再从该队列选另一进程进入内存,或接受一个新进程的请求。为运行进程提供足够内存:资源紧张时,暂停某些进程,如:CPU繁忙(或实时任务执行),内存紧张用于调试:在调试时,挂起被调试进程(从而对其地址空间进行读写)3.2.5挂起进程模型3.2进程的描述3.2.5进程的状态及其转换——单挂起进程模型RunningNewExitReadyBlockedBlockedSuspendAdmitDispatchTimeoutReleaseEventWaitSuspendActivateEventOccurs3.2进程的描述RunningNewExitReadyBl3.2.5进程的状态及其转换——双挂起进程模型RunningReadySuspendExitReadyBlockedBlockedSuspendNewAdmitAdmitSuspendReleaseDispatchTimeoutActivateSuspendEventWaitActivateSuspendEventOccursEventOccurs外存内存3.2.5进程的状态及其转换——双挂起进程模型Runnin3.2进程的描述3.2.5进程的状态及其转换——挂起进程模型
挂起进程模型的状态需考虑二方面:是否就绪,是否在内存就绪状态(Ready):进程在内存且可立即进入运行状态;阻塞状态(Blocked):进程在内存,并等待某事件的出现;就绪挂起状态(Ready,suspend):进程在外存,但只要进入内存,即可运行;阻塞挂起状态(Blocked,suspend):进程在外存并等待某事件的出现;3.2进程的描述3.2进程的描述3.2.5进程的状态及其转换——挂起进程模型状态间的转换挂起(Suspend):把一个进程从内存转到外存;可能有以下几种情况:阻塞到阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以纳入新进程或运行就绪进程;就绪到就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程;运行到就绪挂起:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态;3.2进程的描述3.2进程的描述3.2.5进程的状态及其转换——挂起进程模型状态间的转换激活(Activate):把一个进程从外存转到内存;可能有以下几种情况:就绪挂起到就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进行这种转换;阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起(系统认为会很快出现所等待的事件)进程转为阻塞状态;较少出现。3.2进程的描述3.2进程的描述3.2.5进程的状态及其转换——挂起进程模型状态间的转换事件出现(EventOccurs):进程等待的事件出现;如:操作完成、申请成功等;可能的情况有:阻塞到就绪:针对内存进程的事件出现;阻塞挂起到就绪挂起:针对外存进程的事件出现;收容(Admit):收容一个新进程,进入就绪状态或就绪挂起状态。各种状态退出:被父进程终止或父进程本身终止。3.2进程的描述练习思考题如果系统中有N个进程,运行的进程最多几个,最少几个;就绪进程最多几个最少几个;等待进程最多几个,最少几个?有没有这样的状态转换,为什么? 等待—运行;就绪—等待练习思考题自主设计题进程的3个基本状态:执行、就绪、等待,其转换标识分别为1、2、3、4(如图)。编程模拟进程状态转换过程,要求:分别建立等待队列和就绪队列(单队列、结构不限),初始状态时,1个进程处于执行状态,7个进程在等待队列中,7个进程在就绪队列中。手工触发任意一种转换,显示转换发生后的执行进程和两个队列的进程。执行1234等待就绪自主设计题执行1234等待就绪3.3进程控制的功能:完成进程状态的转换。原语(primitive)※:由若干条指令构成的“原子操作(atomicoperation)”过程,作为一个整体而不可分割--要么全都完成,要么全都不做。许多系统调用就是原语。注意:系统调用并不都是原语。进程A调用read(),因无数据而阻塞,在read()里未返回。然后进程B调用read(),此时read()被重入。系统调用不一定一次执行完并返回该进程,有可能在特定的点暂停,而转入到其他进程。3.3进程控制的功能:完成进程状态的转换。原语(primi3.3进程控制3.3.2进程控制的主要原语——进程创建原语进程树ABCDJFGHIEKLM进程树是有向树父子关系表示创建与被创建的关系父子关系不表示执行的先后关系3.3进程控制ABCDJFGHIEKLM进程树是有向树3.3进程控制3.3.2进程控制的主要原语——进程创建原语子进程的创建的3种形式产生新进程不产生新进程复制现有进程的上下文fork(新进程的系统上下文会有不同)加载程序spawn(创建新进程并加载新程序)exec(加载新程序并覆盖自身)3.3进程控制产生新进程不产生新进程复制现有进程的上下文f3.3进程控制3.3.2进程控制的主要原语——进程创建原语创建原语描述ProcedureCreate(n,S0,P0,M0,R0)Begini:=GetInternalName(n);i.id:=n;i.priority:=P0;/*初始化PCB*/i.CPU_State:=S0;i.Mainstore:=M0;i.resources:=R0;i.status:=Ready;j:=EP;i.parent:=j;/*插入家族队列*/geny:=∧;geny:=i;i.sdata:=RQ;insert(RQ,i);/*插入就绪队列*/End;查找PCB集合,返回PCB的内部标识符i被创建进程的外部标识符处理机的初始状态进程优先级初始内存数所需资源清单进程状态有关的指针3.3进程控制ProcedureCreate(n,S03.3进程控制3.3.2进程控制的主要原语——进程创建原语进程创建需要的参数:被创建进程的外部标识符n处理机的初始状态S0(包括CPU的工作方式、进程起始地址及屏蔽码等);进程优先级P0;初始内存数M0;其它所需资源清单R0
i.sdata是一个与进程状态有关的指针。3.3进程控制3.3进程控制3.3.2进程控制的主要原语——进程撤销原语Destroy也称为“终止”或主程序返回:调用exit()可终止进程。释放资源:释放内外存空间关闭所有打开文件释放共享内存段和各种锁定lock3.3进程控制也称为“终止”或主程序返回:调用exit()3.3进程控制3.3.2进程控制的主要原语——进程撤销原语Destroy撤消原语的描述ProcedureDestroy(n)BeginSched:=false;i:=GetInternalName(n);Kill(i);ifSchedthenScheduler
elsecontinue;End;ProcedureKill(i)Beginifi.status=“Running”thenstop(i);Sched:=True;remove(i.sdata,i);forallS∈genydoKill(S);forallr∈Mainstore∪
i.resourcesdoRelease(r);Release(PCB(i))End;(Kill是可递归的)调用者提供的进程的外部标识如果进程正在运行,则立即停止其运行,并设置调度标志为真3.3进程控制ProcedureDestroy(n)Pr3.3进程控制3.3.2进程控制的主要原语——进程阻塞原语Block
阻塞原因:当进程期待的某事件尚未出现时,该进程调用阻塞原语把自己阻塞起来。具体事件如下:请求系统服务启动某种操作新数据尚未到达无新工作可做注意:由自己阻塞自己,但该进程的唤醒则是在该进程所期待的事件发生后,由“发现者”进程调用唤醒原语实现3.3进程控制3.3.2.进程阻塞过程
正在执行的进程,当发现上述某事件时,无法继续执行,于是进程调用阻塞原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换。
3.3.2.进程阻塞过程3.3进程控制3.3.2进程控制的主要原语——进程阻塞原语Block阻塞进程的描述Procedureblock(r)Begini:=EP;stop(i);i.status:=“blocked”;i.sdata:=WQ(r);insert(WQ(r),i);scheduler;End;r为指向等待原因的对应等待队列的指针从执行进程的指针获得进程的内部标识符i停止进程i进程调度程序3.3进程控制Procedureblock(r)r为指3.3进程控制3.3.2进程控制的主要原语——
进程唤醒原语Wakeup唤醒原因:进程等待的事件发生,等待队列中的进程唤醒。唤醒进程的两种方法:由系统进程唤醒。系统进程统一控制事件的发生,并将“事件发生”这一消息通知等待进程。等待的是公共资源。由事件发生进程唤醒。事件发生进程与被唤醒的进程是合作关系,等待私有资源。3.3进程控制3.3进程控制3.3.2进程控制的主要原语——进程唤醒原语Wakeup)唤醒原语的描述Procedurewakeup(n)Begini:=GetInternalName(n);remove(WQ(r),i);i.status:=“Ready”;i.sdata:=RQ;insert(RQ,i);continue;End;从相应的等待队列中摘下被唤醒的进程状态置为“就绪态ready”插入就绪队列唤醒进程返回或转进程调度3.3进程控制Procedurewakeup(n)从相应3.3.2进程控制的主要原语——挂起原语Suspend引起进程挂起的事件:挂起原语的执行过程是:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞。最后,若被挂起的进程正在执行,则转向调度程序重新调度。-或父进程请求将自己的某个子进程挂起,-系统将利用挂起原语suspend()将指定进程或处于阻塞状态的进程挂起。-用户进程请求将自己挂起;3.3.2进程控制的主要原语——挂起原语Suspend引3.3进程控制3.3.2进程控制的主要原语——挂起原语SuspendPrimitive挂起原语的描述procedureSuspend(n,a)/*挂起指定标识符n的Begin进程的进程原语*/i:=GetInternalName(n);/*参数a是用于保存该S:=i.status;进程PCB副本的内存区*/ifS=“Running”thenstop(i);a:=copyPCB(i);ifS=“blockeda”theni.status:=“blockeds”elsei.status:=“readys”ifS=“Running”thenSchedulerelsecontinue;End;3.3进程控制procedureSuspend(n,a3.3进程控制3.3.2进程控制的主要原语——激活原语
Active进程的激活过程系统将利用激活原语active()将指定进程激活。激活原语先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞便将之改为活动阻塞。3.3进程控制进程的激活过程3.3进程控制3.3.2进程控制的主要原语——激活原语
ActivePrimitive激活原语的描述procedureactive(n)/*n为进程标志符*/begini:=GetInternalName(n);i.status:=ifi.status=“readys”then“readya”else“blockeda”;ifi.status=“readya”thenscheduler;elsecontinueEnd;3.3进程控制procedureactive(n)例:NT线程的挂起和激活 NT中处理机的分配对象为线程,一个线程可被多次挂起和多次激活。在线程内有一个挂起计数(suspendcount),挂起操作使该计数加1,激活操作将该计数减1;当挂起计数为0时,线程恢复执行。(1)挂起:WindowsNT中的SuspendThread可挂起指定的线程;DWORDSuspendThread(HANDLEhThread//handletothethread);(2)激活:WindowsNT中的ResumeThread可恢复指定线程的执行;DWORDResumeThread(HANDLEhThread//identifiesthreadtorestart);例:NT线程的挂起和激活 NT中处理机的分配对象为线程,一例子NT_thread.cpp#include<stdio.h>#include<windows.h>#include<iostream.h>#include<winbase.h>voidSubThread(void){ inti; for(i=0;i<5;i++) { cout<<"SubThread"<<i<<endl; Sleep(2000); }}例子NT_thread.cpp#include<stdiovoidmain(void){cout<<"CreateThread"<<endl; //Createathread; DWORDIDThread; HANDLEhThread; hThread=CreateThread(NULL,//nosecurityattributes0,//usedefaultstacksize(LPTHREAD_START_ROUTINE)SubThread,//threadfunctionNULL,//nothreadfunctionargument0,//usedefaultcreationflags&IDThread);//returnsthreadidentifier
//Checkthereturnvalueforsuccess. if(hThread==NULL) cout<<"CreateThreaderror"<<endl;voidmain(void)
inti; for(i=0;i<5;i++) { cout<<"MainThread"<<i<<endl; if(i==1) {if(SuspendThread(hThread)==0xFFFFFFFF) {cout<<"Suspendthreaderror."<<endl; } else {cout<<"Suspendthreadisok."<<endl; } } if(i==3) { if(ResumeThread(hThread)==0xFFFFFFFF) {cout<<"Resumethreaderror."<<endl;} else {cout<<"Resumethreadisok."<<endl; } }Sleep(4000); }} inti;运行结果CreateThreadMainThread0SubThread0SubThread1MainThread1Suspendthreadisok.MainThread2MainThread3Resumethreadisok.SubThread2SubThread3MainThread4SubThread4运行结果CreateThread例子NT_thread.cpp#include<stdio.h>#include<windows.h>#include<iostream.h>#include<winbase.h>voidSubThread(void){ inti; for(i=0;i<5;i++) { cout<<"SubThread"<<i<<endl; Sleep(2000);//改一下时间,输出顺序会有变化 }}此处是用户自己的函数,完成指定功能例子NT_thread.cpp#include<stvoidmain(void){cout<<"CreateThread"<<endl; //Createathread; DWORDIDThread; HANDLEhThread; hThread=CreateThread(NULL,//nosecurityattributes0,//usedefaultstacksize(LPTHREAD_START_ROUTINE)SubThread,//threadfunctionNULL,//nothreadfunctionargument0,//usedefaultcreationflags&IDThread);//returnsthreadidentifier
//Checkthereturnvalueforsuccess. if(hThread==NULL) cout<<"CreateThreaderror"<<endl;voidmain(void)
inti; for(i=0;i<5;i++) { cout<<"MainThread"<<i<<endl; if(i==1) {if(SuspendThread(hThread)==0xFFFFFFFF) {cout<<"Suspendthreaderror."<<endl; } else {cout<<"Suspendthreadisok."<<endl; } } if(i==3) { if(ResumeThread(hThread)==0xFFFFFFFF) {cout<<"Resumethreaderror."<<endl;} else {cout<<"Resumethreadisok."<<endl; } }Sleep(4000);//改一下结果会有变化。 }} inti;运行结果CreateThreadMainThread0//输出后。Sleep(4000)SubThread0//输出后,Sleep(2000)SubThread1//输出后,Sleep(2000)MainThread1//输出后。Sleep(4000)Suspendthreadisok.MainThread2MainThread3Resumethreadisok.//输出后。Sleep(4000)SubThread2SubThread3MainThread4SubThread4进程创建后只要通过进程调度获得cpu,就自动执行!运行结果CreateThread进程创建后只要通过进程调度获3.4线程(THREAD)
引入线程的目的是简化进程间的通信,以小的开销来提高进程内的并发程度。3.4线程(THREAD)引入线程的目的是简化进程间的通信3.4.1线程的引入进程:资源分配单位(存储器、文件)和CPU调度(分派)单位-未引入线程时。又称为“任务(task)“线程:作为CPU调度单位,而引入线程后进程只作为其他资源分配单位。只拥有必不可少的资源,如:线程状态、寄存器上下文和栈同样具有就绪、阻塞和执行三种基本状态线程的优点:减小并发执行的时间和空间开销(线程的创建、退出和调度),因此容许在系统中建立更多的线程来提高并发程度。线程的创建时间比进程短;线程的终止时间比进程短;同进程内的线程切换时间比进程短;由于同进程内线程间共享内存和文件资源,可直接进行不通过内核的通信;3.4.1线程的引入进程:资源分配单位(存储器、文件)和C进程与线程的关系进程与线程的关系3.4.2线程的属性
线程具有许多传统进程所具有的特征,故又称为轻型进程(1)轻型实体。(线程是进程中的一个实体)(2)独立调度和分派的基本单位。在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。而把进程作为资源拥有的单位。由于线程很“轻’’,故线程的切换非常迅速且开销小。(3)可并发执行。
(4)共享进程资源。3.4.2线程的属性线程具有许多传统进程所具有的特征,故3.4.3OS对线程的实现方式内核维护进程和线程的上下文信息;线程切换由内核完成;一个线程发起系统调用而阻塞,不会影响其他线程的运行。时间片分配给线程,所以多线程的进程获得更多CPU时间。依赖于OS核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。WindowsNT和OS/2支持内核线程;1)内核线程(kernel-levelthread)3.4.3OS对线程的实现方式内核维护进程和线程的上下文信2)用户线程(user-levelthread)用户线程的维护由应用进程完成;内核不了解用户线程的存在;用户线程切换不需要内核特权;用户线程调度算法可针对应用优化;不依赖于OS核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。如:数据库系统informix,图形处理AldusPageMaker。调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态/核心态切换,所以速度特别快。一个线程发起系统调用而阻塞,则整个进程在等待。时间片分配给进程,多线程则每个线程就慢。2)用户线程(user-levelthread)用户线程的
例:线程执行时间对于只设置了用户级线程的系统,调度是以进程为单位的,在采用轮转调度算法时,各个进程轮流执行一个时间片,这对诸进程而言,看似公平的,但假如在A进程中包含了一个用户级线程,而在另一个进程B中含有100个线程,这样,进程A中线程的运行时间,将是进程B中线程运行时间的100倍;相应地,速度就快100倍。假如系统中是设置的内核支持线程,其调度是以线程为单位进行的,这样,进程B可以获得的CPU时间是进程A的100倍,进程B可使100个系统调用并发工作。例:线程执行时间3.4.4Solaris操作系统中的线程同时实现了用户级线程与内核支持线程。
SUN
SolarisOS在用户级线程和内核级线程之间,定义了一种轻型进程LWP(内核控制线程,也称为轻权进程),一个进程中至少有一个LWP。3.4.4Solaris操作系统中的线程同时实现了用户级线Solaris支持内核线程(Kernelthreads)、轻权进程(LightweightProcesses)和用户线程(UserLevelThreads)。一个进程可有大量用户线程;大量用户线程复用少量的轻权进程,不同的轻权进程分别对应不同的内核线程。Solaris支持内核线程(Kernelthreads)、用户级线程在使用系统调用时(如文件读写),需要“捆绑(bound)”在一个LWP上,用户级线程可通过LWP访问内核,但内核所看到的总是多个LWP,而看不到用户级线程。永久捆绑:一个LWP固定被一个用户级线程占用,该LWP移到LWP池之外临时捆绑:从LWP池中临时分配一个未被占用的LWP在使用系统调用时,如果所有LWP已被其他用户级线程所占用(捆绑),则该线程阻塞直到有可用的LWP--例如6个用户级线程,而LWP池中有4个LWP如果LWP执行系统调用时阻塞(如read()调用),则当前捆绑在LWP上的用户级线程也阻塞。每个要通信的用户级线程都需要一个LWP用户级线程在使用系统调用时(如文件读写),需要“捆绑(bouSolaris用户线程和轻权进程Solaris用户线程和轻权进程用户线程、轻权进程LWP和核心线程的关系同时有4个用户级线程发出对文件的读写请求,而任务中只有3个LPW,则3个用户级线程可执行读写请求,余下的必须等用户线程、轻权进程LWP和核心线程的关系同时有4个用户级线程有关的C库函数/*创建用户级线程 */intthr_create(void*stack_base,size_tstack_size,void*(*start_routine)(void*),void*arg,longflags,thread_t*new_thread_id); 其中flags包括:THR_BOUND(永久捆绑),THR_NEW_LWP(创建新LWP放入LWP池),若两者同时指定则创建两个新LWP,一个永久捆绑而另一个放入LWP池有关的系统调用/*在当前进程中创建LWP */int_lwp_create(ucontext_t*contextp,unsignedlongflags,lwpid_t*new_lwp_id);/*构造LWP上下文 */void_lwp_makecontext(ucontext_t*ucp,void(*start_routine)(void*),void*arg,void*private,caddr_tstack_base,size_tstack_size);/*注意:没有进行"捆绑"操作的系统调用*/有关的C库函数/*创建用户级线程 */有关的系统调用3.4.5进程和线程的关系(1)线程是进程的一个组成部分。每个进程在创建时通常只有一个线程,需要时这个线程可以创建其它线程。(2)进程的多线程都在进程的地址空间活动。-某进程内的线程在其他进程不可见。(3)资源是分给进程的,而不是分给线程的,线程在执行中需要资源时,系统从进程的资源配额中扣除并分配给它。(4)处理机调度的基本单位是线程,线程之间竞争处理机,真正在处理机上运行的是线程。(5)线程在执行过程中,需要同步。3.4.5进程和线程的关系11/18/2022第三章
进程管理11/10/2022第三章进程管理概述进程的描述进程控制线程进程互斥和同步进程间通信死锁问题进程其他方面的举例为了描述程序在并发执行时对系统资源的共享,需要一个描述程序执行时动态特征的概念,这就是进程。本章将讨论进程概念、进程控制和进程间关系。概述进程互前趋图:是一个有向无循环图。
前趋图用于描述进程之间执行的前后关系。
图中的每个结点可用于描述一个程序段或进程,乃至一条语句;结点间的有向边则用于表示两个结点之间存在的偏序或前趋关系“→”。节点概述:前趋图:是一个有向无循环图。前趋图用于描述进程之间执行的前图2-1(a)中存在着这样的前趋关系:P1→P2,P1→P3,P1→P4,P2→P5,P3→P5,P4→P6,P4→P7,P5→P8,P6→P8,P7→P9,P8→P9图2-1前趋图图2-1(a)中存在着这样的前趋关系:图2-1前趋图或表示为:P={P1,P2,P3,P4,P5,P6,P7,P8,P9}→={(P1,P2),(P1,P3),(P1,P4),(P2,P5),(P3,P5),(P4,P6),(P4,P7),(P5,P8),(P6,P8),(P7,P9),(P8,P9)}应当注意,前趋图中必须不存在循环,但在图2-1(b)中却有着下述的前趋关系:S2→S3,S3→S2
图2-1前趋图或表示为:应当注意,前趋图中必须不存在循环,但在图2-1(3.1.1程序的顺序执行3.1.1程序的顺序执行图2-2程序的顺序执行S1:a∶=x+y;S2:b∶=a-5;S3:c∶=b+1;试想S1、S2、S3三条语句以何顺序执行?3.1.1程序的顺序执行图2-2程序的顺序执行S1:a∶=x+y;试想S程序顺序执行时的特征
顺序性:按照程序结构所指定的次序(2)封闭性(运行时候独占处理机资源,运行结果不受外界影响)-程序可再现性:(3)可再现性(初始条件相同,结果相同)程序顺序执行时的特征顺序性:按照程序结构所指定的次序3.1.2程序的并发执行及其特征
3.1.2程序的并发执行及其特征3.1.2程序的并发执行程序并发执行的目的:提高计算机的处理能力提高资源利用率分为两种形式:多道程序环境下的多道程序的并发执行在某道程序的几个程序段中,包含可同时执行或可颠倒顺序执行的代码。3.1.2程序的并发执行3.1.2程序的并发执行定义:程序的并发执行是指一组在逻辑上互相独立的程序或程序段在执行时间上客观上互相重叠,即一个程序或程序段的执行尚未结束,另一个程序(段)的执行已经开始的执行方式。并发:在一段时间内的同时并行并行:在同一物理时刻的同时3.1.2程序的并发执行3.1.2程序的并发执行CPU外设请求带输入启动带磁带输入结束中断中断处理请求磁盘输入启动盘结束中断中断处理CPU外设请求盘输入启动盘,调度B请求带输入启动带结束中断中断处理调度A结束中断中断处理调度B时间t用户程序监督程序磁盘设备磁带设备用户程序A用户程序B监督程序磁盘设备磁带设备3.1.2程序的并发执行CPU外设请求带输入启动带磁带输入3.1.2程序的并发执行图2-3并发执行时的前趋图在该例中存在下述前趋关系:Ii→Ci,Ii→Ii+1,Ci→Pi,Ci→Ci+1,Pi→Pi+1而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之间,可以并发执行。如何实现并发执行?3.1.2程序的并发执行图2-3并发执行时的前趋图在对于具有下述四条语句的程序段:S1:a∶=x+2S2:b∶=y+4S3:c∶=a+bS4:d∶=c+b请画出前趋关系图。对于具有下述四条语句的程序段:3.1.2程序并发执行时的特征
间断性(相互制约性)-“走走停停”,一个程序可能走到中途停下来,失去原有的时序关系;失去封闭性:多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行已失去了封闭性。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。不可再现性:程序在并发执行时,由于失去了封闭性,也将导致失去其可再现性下面看个小例子:3.1.2程序并发执行时的特征间断性(相互制约性)-“例如,有两个循环程序A和B,它们共享一个变量N。程序A每执行一次时,都要做N∶=N+1操作;程序B每执行一次时,都要执行Print(N)操作,然后再将N置成“0”。程序A和B以不同的速度运行。(1)N∶=N+1在Print(N)和N∶=0之前,此时得到的N值分别为n+1,n+1,0。(2)N∶=N+1在Print(N)和N∶=0之后,此时得到的N值分别为n,0,1。(3)N∶=N+1在Print(N)和N∶=0之间,此时得到的N值分别为n,n+1,0。例如,有两个循环程序A和B,它们共享一个变量N结论:程序在并发执行时,由于失去了封闭性,其计算结果已经和并发执行速度有关,从而使程序失去了可再现性,亦即,程序经过多次执行后,虽然他们执行时的环境和初始条件相同,但得到的结果却不相同。结论:程序在并发执行时,由于失去了封闭性,其计算结果已经和并
顺序执行:并发执行:程序具有封闭性程序失去封闭性独享资源共享资源(互为存在条件)可再现性程序与“计算”不再一一对应有相互制约操作系统汤子英课件第二章进程管理高中信息技术课件教案人教版3.1概述3.1.1程序的顺序执行和并发执行
——程序的并发执行并发执行的条件:达到封闭性和可再现性
并发执行失去封闭性的原因是共享资源的影响,去掉这种影响即可。1966年,由Bernstein给出并发执行的条件。(这里没有考虑执行速度的影响。)。程序P(i)针对的读变量集和写变量集为R(i)和W(i)。任意两个程序P(i)和P(j)可并发的条件:R(i)W(j)=W(i)R(j)=保证一个程序的两次读之间数据不变化W(i)W(j)=保证写的结果不丢掉现在的问题是这个条件不好检查。怎么办?3.1概述3.1概述3.1.1程序的顺序执行和并发执行
——程序的并发执行程序活动不再处于一个封闭系统中,呈现了独立性、并发性、动态性以及它们之间的相互制约性。“程序”这个静态概念已经不能如实地反映程序活动的这些特征,为此,引入“进程”这一动态概念来描述系统和用户的程序活动。程序进程3.1概述程序活动不再处于一个封闭系统中,呈现了独立性、并3.1概述3.1.2进程的定义进程是程序的一次执行;一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。简言之,进程是程序的一次执行活动进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位;进程是一个程序及其数据在处理机上顺序执行时所发生的活动;3.1概述3.1概述3.1.2进程的定义——进程的特征动态性:进程对应程序的执行进程是动态产生:创建运行消亡进程在其生命周期内,在三种基本状态之间转换独立性:各进程的地址空间相互独立,除非采用进程间通信手段;并发性:指多个进程实体同存于内存中,且能在一段时间内同时运行;异步性:每个进程都以其相对独立的不可预知的速度向前推进;结构化:进程=代码段+数据段+PCB;3.1概述3.1概述3.1.2进程与程序的区别进程是动态的,程序是静态的:炒菜菜谱进程是暂时的,程序的永久的:进程是一个状态变化的过程,程序可长久保存。进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。进程具有并行特征,程序没有。进程是竞争计算机资源的基本单位。3.1概述程序与进程的类比
程序进程唱歌的曲谱或音乐乐器的乐谱
演出或演奏
剧本
演出
火车
列车
程序与进程的类比
程序进程唱歌的1、判断题:进程是一个程序在某数据集上的一次执行,所以不同进程对应不同的程序。分析:进程是程序在某数据集上得一次执行,但是不同进程可以对应同一程序。2、程序顺序执行与并发执行有什么不同?3、用户程序必须在进程中运行。正确4、判断题:两次打开Word字处理程序,编辑同一篇文章,因为程序一样(Word2003),数据一样(同一篇文章),所以系统中运行的这两个Word字处理程序是同一个进程。错误,运行的是2个不同的进程1、判断题:进程是一个程序在某数据集上的一次执行,所以不同进3.1概述3.1.2进程的定义——进程与程序的区别用户作业由用户创建由用户指定由系统创建作业步作业步…..线程线程…..进程进程…..3.1概述用户作业由用户创建由用户指定由系统创建作业步作业3.2.1进程的组成
进程=程序+数据+进程控制块PCB
有人把这三部分称为”进程映像”.程序是进程的不可缺少的组成部分;如果一个程序段允许被共享,则它应该是可重入的,或纯代码段数据是进程处理的对象进程控制块是进程的控制结构,包含了进程的描述信息、控制信息和资源信息以及现场保护区,是进程的唯一标识,系统通过PCB管理和控制进程。
通常的程序是不能并发执行的,为使程序能并发执行,应为之配置一进程控制块,即PCB;所谓创建进程是指创建进程实体中的PCB,撤销亦如此。3.2.1进程的组成3.2进程的描述3.2.2进程控制块PCB
(ProcessControlBlock)进程控制块是由OS维护的用来记录进程相关信息和管理进程而设置的一个专门的数据结构包含了进程的描述信息、控制信息和资源信息以及现场保护区PCB是进程动态特性的集中反映系统通过PCB感知进程的存在,通过PCB中所包含的各项变量的变化,掌握进程的状态以达到控制进程活动的目的3.2进程的描述3.2进程的描述3.2.2进程控制块PCB
(ProcessControlBlock)PCB结构的全部或部分常驻内存;PCB随进程的创建而填写,随进程的撤消而释放,有生命周期;系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志进程与PCB是一一对应的3.2进程的描述3.2.3进程控制块的内容(数据结构很复杂)进程标识符:内部进程标识符(processID),唯一,通常是一个整数;进程名(外部标识符),通常基于可执行文件名(不唯一);用户标识符(userID);进程组关系(processgroup)进程控制信息:当前状态;优先级(priority);代码执行入口地址;程序的外存地址;运行统计信息(执行时间、页面调度);进程间同步和通信;阻塞原因进程调度信息:进程状态、进程优先级、资源信息等处理机状态:寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针)3.2.3进程控制块的内容(数据结构很复杂)进程标识符:3.2.4PCB的组织方式链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表各状态的进程形成不同的链表:就绪链表、阻塞链表索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index表各状态的进行形成不同的索引表:就绪索引表、阻塞索引表3.2.4PCB的组织方式链表:同一状态的进程其PCB成OS是根据PCB来对并发执行的进程进行控制和管理的。简单题:进程控制块的作用(要扩展)?判断题:进程控制块是进程存在的唯一标志。OS是根据PCB来对并发执行的进程进行控制和管理的。运行Running就绪Ready等待BlockedDispatchTimeoutEventWaitEventOccurs3.2进程的描述3.2.5进程的状态及其转换——进程的三种基本状态基本状态间的转换运行就绪等待DispatchTimeoutEventW图2-5进程的三种基本状态及其转换(教材讲5种)
结束新进程接纳完成图2-5进程的三种基本状态及其转换结束新进程接纳完成作业后备队列进程就绪队列外存内存作业调度一些处理器(CPU)阻塞队列阻塞队列处理机调度器(进程调度):是操作系统中的一段代码,它完成如下功能:1)把处理机从一个进程切换到另一个进程;2)防止某进程独占处理机作业后备队列进程就绪队列外存内存作业调度3.2.5进程的三种基本状态
1)就绪(Ready)状态:已分配到除CPU以外的所有必要的资源,只要能再获得处理机,便可立即执行的状态。多个排成一队称为就绪队列。2)执行状态:指进程已获得处理机,其程序正在执行;在单处理机系统中,只能有一个进程处于执行状态;在多处理机系统中,则可能多个进程处于执行状态。3)阻塞状态:进程因发生某事件(如请求I/O、申请缓冲空间等)而暂停执行时的状态,亦即进程的执行受到阻塞,故称这种暂停状态为阻塞状态,有时也称为“等待”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药品追回找回管理制度
- 药库药品库存管理制度
- 药店安全隔离管理制度
- 药店设备设施管理制度
- 营业现金收入管理制度
- 设备场地清扫管理制度
- 设备投放运营管理制度
- 设备检修日常管理制度
- 设备程序备份管理制度
- 设备设施奖惩管理制度
- 期末试卷(五)(含答案含听力原文无听力音频)-2024-2025学年人教PEP版英语(新教材)三年级下册
- 湖南2024生地会考试卷及答案
- 广东省深圳市2024年中考英语真题(含答案)
- 奇瑞入职在线测评题库
- 四害密度监测工作实施方案
- 石家庄桥东污水处理厂三沟式氧化沟工艺设计
- 单相桥式整流电路通用课件
- 部编版六年级语文下册词语表(看拼音写词语)
- 血液制品发展制约因素分析:基础薄弱起步晚
- 半自动点胶机作业指导书
- 设计加热炉推料机传动装置
评论
0/150
提交评论