操作系统汤子英课件第二章进程管理 高中信息技术ppt课件教案 人教版_第1页
操作系统汤子英课件第二章进程管理 高中信息技术ppt课件教案 人教版_第2页
操作系统汤子英课件第二章进程管理 高中信息技术ppt课件教案 人教版_第3页
操作系统汤子英课件第二章进程管理 高中信息技术ppt课件教案 人教版_第4页
操作系统汤子英课件第二章进程管理 高中信息技术ppt课件教案 人教版_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第三章,进程管理,概述 进程的描述 进程控制 线程,进程互斥和同步 进程间通信 死锁问题 进程其他方面的举例,为了描述程序在并发执行时对系统资源的共享,需要一个描述程序执行时动态特征的概念,这就是进程。本章将讨论进程概念、进程控制和进程间关系。,前趋图:是一个有向无循环图。,前趋图用于描述进程之间执行的前后关系。,图中的每个结点可用于描述一个程序段或进程,乃至一条语句; 结点间的有向边则用于表示两个结点之间存在的偏序或前趋关系“”。,节点,概述:,图21(a) 中存在着这样的前趋关系: P1P2, P1P3, P1P4, P2P5, P3P5, P4P6, P4P7, P5P8, P6P8, P7P9, P8P9,图 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)中却有着下述的前趋关系: S2S3, S3S2,图 2-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) 封闭性(运行时候独占处理机资源,运行结果不受外界影响)程序可再现性: (3) 可再现性(初始条件相同,结果相同),3.1.2程序的并发执行及其特征,3.1.2 程序的并发执行 程序并发执行的目的: 提高计算机的处理能力 提高资源利用率 分为两种形式: 多道程序环境下的多道程序的并发执行 在某道程序的几个程序段中,包含可同时执行或可颠倒顺序执行的代码。,3.1.2 程序的并发执行 定义:程序的并发执行是指一组在逻辑上互相独立的程序或程序段在执行时间上客观上互相重叠,即一个程序或程序段的执行尚未结束,另一个程序(段)的执行已经开始的执行方式。 并发:在一段时间内的同时并行 并行:在同一物理时刻的同时,3.1.2 程序的并发执行,3.1.2程序的并发执行,图 2-3 并发执行时的前趋图,在该例中存在下述前趋关系: IiCi,IiIi+1, CiPi, CiCi+1,PiPi+1 而Ii+1和Ci及Pi-1是重迭的,亦即在Pi-1和Ci以及Ii+1之间,可以并发执行。,如何实现并发执行?,对于具有下述四条语句的程序段: S1: a=x+2 S2: b=y+4 S3: c=a+b S4: d=c+b 请画出前趋关系图。,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。,结论:程序在并发执行时,由于失去了封闭性,其计算结果已经和并发执行速度有关, 从而使程序失去了可再现性,亦即,程序经过多次执行后,虽然他们执行时的环境和初始条件相同,但得到的结果却不相同。,顺序执行: 并发执行: 程序具有封闭性 程序失去封闭性 独享资源 共享资源(互为存在条件) 可再现性 程序与“计算”不再一一对应 有相互制约,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.1 程序的顺序执行和并发执行 程序的并发执行,程序活动不再处于一个封闭系统中,呈现了独立性、并发性、动态性以及它们之间的相互制约性。“程序”这个静态概念已经不能如实地反映程序活动的这些特征,为此,引入“进程”这一动态概念来描述系统和用户的程序活动。,3.1 概述 3.1.2 进程的定义 进程是程序的一次执行; 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。简言之,进程是程序的一次执行活动 进程是程序在一个数据集合上运行的过程,它是系统进 行资源分配和调度的一个独立单位; 进程是一个程序及其数据在处理机上顺序执行时所发生的活动;,3.1 概述 3.1.2 进程的定义 进程的特征 动态性: 进程对应程序的执行 进程是动态产生:创建运行消亡 进程在其生命周期内,在三种基本状态之间转换 独立性:各进程的地址空间相互独立,除非采用进程间通信手段; 并发性:指多个进程实体同存于内存中,且能在一段时间内同时运行; 异步性:每个进程都以其相对独立的不可预知的速度向前推进; 结构化:进程 = 代码段 + 数据段 + PCB;,3.1 概述 3.1.2 进程与程序的区别 进程是动态的,程序是静态的:炒菜菜谱 进程是暂时的,程序的永久的:进程是一个状态变化的过程,程序可长久保存。 进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。 进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。 进程具有并行特征,程序没有。 进程是竞争计算机资源的基本单位。,程序与进程的类比,1、判断题:进程是一个程序在某数据集上的一次执行,所以不同进程对应不同的程序。,分析:进程是程序在某数据集上得一次执行,但是不同进程可以对应同一程序。,2、程序顺序执行与并发执行有什么不同?,3、用户程序必须在进程中运行。,正确,4、判断题:两次打开Word字处理程序,编辑同一篇文章,因为程序 一样(Word 2003),数据一样(同一篇文章),所以系统中运行的这两个Word字处理程序是同一个进程。,错误,运行的是2个不同的进程,3.1 概述 3.1.2 进程的定义进程与程序的区别,3.2.1 进程的组成 进程 = 程序 + 数据 + 进程控制块PCB 有人把这三部分称为”进程映像”. 程序是进程的不可缺少的组成部分;如果一个程序段允许被共享,则它应该是可重入的,或纯代码段 数据是进程处理的对象 进程控制块是进程的控制结构,包含了进程的描述信息、控制信息和资源信息以及现场保护区,是进程的唯一标识,系统通过PCB管理和控制进程。 通常的程序是不能并发执行的,为使程序能并发执行,应为之配置一进程控制块,即PCB; 所谓创建进程是指创建进程实体中的PCB,撤销亦如此。,3.2 进程的描述 3.2.2进程控制块PCB (Process Control Block) 进程控制块是由OS维护的用来记录进程相关信息和管理进程而设置的一个专门的数据结构 包含了进程的描述信息、控制信息和资源信息以及现场保护区 PCB是进程动态特性的集中反映 系统通过PCB感知进程的存在,通过PCB中所包含的各项变量的变化,掌握进程的状态以达到控制进程活动的目的,3.2 进程的描述 3.2.2进程控制块PCB (Process Control Block) PCB结构的全部或部分常驻内存; PCB随进程的创建而填写,随进程的撤消而释放,有生命周期; 系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志 进程与PCB是一一对应的,3.2.3进程控制块的内容(数据结构很复杂),进程标识符: 内部进程标识符(process ID),唯一,通常是一个整数; 进程名(外部标识符),通常基于可执行文件名(不唯一); 用户标识符(user ID);进程组关系(process group) 进程控制信息: 当前状态; 优先级(priority); 代码执行入口地址; 程序的外存地址; 运行统计信息(执行时间、页面调度); 进程间同步和通信;阻塞原因 进程调度信息:进程状态、进程优先级、资源信息等 处理机状态:寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针),3.2.4 PCB的组织方式,链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表 各状态的进程形成不同的链表:就绪链表、阻塞链表 索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index表 各状态的进行形成不同的索引表:就绪索引表、阻塞索引表,OS是根据PCB来对并发执行的进程进行控制和管理的。 简单题:进程控制块的作用(要扩展)? 判断题:进程控制块是进程存在的唯一标志。,3.2 进程的描述 3.2.5 进程的状态及其转换进程的三种基本状态,基本状态间的转换,图 2-5 进程的三种基本状态及其转换 (教材讲5种),结束,新进程,接纳,完成,作业后备队列,进程就绪队列,外存,内存,作业调度,一些,处理器 (CPU),阻塞队列,阻塞队列,处理机调度器(进程调度): 是操作系统中的一段代码,它完成如下功能: 1)把处理机从一个进程切换到另一个进程; 2)防止某进程独占处理机,3.2.5 进程的三种基本状态,1)就绪(Ready)状态:已分配到除CPU以外的所有必要的资源,只要能再获得处理机,便可立即执行的状态。多个排成一队称为就绪队列。 2) 执行状态:指进程已获得处理机,其程序正在执行; 在单处理机系统中,只能有一个进程处于执行状态; 在多处理机系统中,则可能多个进程处于执行状态。 3) 阻塞状态 :进程因发生某事件(如请求IO、申请缓冲空间等)而暂停执行时的状态,亦即进程的执行受到阻塞,故称这种暂停状态为阻塞状态,有时也称为“等待”状态或“睡眠”状态。 通常将处于阻塞状态的进程排成一个队列,称为阻塞队列。在有的系统中,按阻塞原因的不同而将处于阻塞状态的进程排成多个队列。,3.2 进程的描述 3.2.5 进程的状态及其转换进程的三种基本状态 在进程运行过程中,由于进程自身进展情况及外界环境的变化,这三种基本状态可以依据一定的条件相互转换 就绪运行:调度程序选择一个新的进程运行 运行就绪: 运行进程用完了时间片 运行进程被中断,因为一高优先级进程处于就绪状态 运行等待:当一进程等待某一事件的发生时,如 请求系统服务 无新工作可做 等待就绪:当所等待的事件发生时,初始化I/O 且必须等待结果 等待某一进程提供输入 (IPC),3.2 进程的描述 3.2.5 进程的状态及其转换五状态进程模型,五状态进程模型(单队列结构),五状态进程模型(多队列结构),3.2 进程的描述 3.2.5 进程的状态及其转换其它状态 创建状态:创建( 新new)状态 OS 已完成为创建一进程所必要的工作 已构造了进程标识符 已创建了管理进程所需的表格 终止状态(Exit) 终止后进程移入该状态 它不再有执行资格 表格和其它信息暂时保留 实用程序为了分析性能和利用率,可能要提取程序的历史信息 挂起状态:把一个进程从内存转到外存,3.2 进程的描述 3.2.5 进程的状态及其转换其它状态 导致进程创建的原因 批处理环境中,选择一新作业即将进入内存执行 交互环境中,新用户登录到系统 操作系统因提供一项服务而创建。如:用户请求打印一个文件,OS可创建严格管理打印的进程,使请求进程可继续执行,与完成打印任务的时间无关 由现有进程生成,父进程-子进程,3.2 进程的描述 3.2.5 进程的状态及其转换其它状态 导致终止进程的原因 含一个HALT指令或用于终止的OS显式服务调用 分时系统中,用户的行为可指示终止,如:用户退出系统或关闭自己的终端,该用户的进程将被终止 PC机环境中,用户结束一应用程序 出现某些错误时,如,I/O失败,无效指令等 父进程可请求它的某个子进程终止 父进程终止,OS自动终止所有后代进程,3.2.5 挂起进程模型 这个问题的引入是由于进程优先级的引入,一些低优先级进程可能等待较长时间,从而被对换至外存。目的是: 提高处理机效率:就绪进程表为空时,OS将阻塞进程从内存中“挂起”到磁盘的“挂起队列”,再从该队列选另一进程进入内存,或接受一个新进程的请求。 为运行进程提供足够内存:资源紧张时,暂停某些进程,如:CPU繁忙(或实时任务执行),内存紧张 用于调试:在调试时,挂起被调试进程(从而对其地址空间进行读写),3.2 进程的描述 3.2.5 进程的状态及其转换单挂起进程模型,3.2.5 进程的状态及其转换双挂起进程模型,外存,内存,3.2 进程的描述 3.2.5进程的状态及其转换挂起进程模型 挂起进程模型的状态需考虑二方面:是否就绪,是否在内存 就绪状态(Ready):进程在内存且可立即进入运行状态; 阻塞状态(Blocked):进程在内存,并等待某事件的出现; 就绪挂起状态(Ready, suspend):进程在外存,但只要进入内存,即可运行; 阻塞挂起状态(Blocked, suspend):进程在外存并等待某事件的出现;,3.2 进程的描述 3.2.5 进程的状态及其转换挂起进程模型 状态间的转换 挂起(Suspend):把一个进程从内存转到外存;可能有以下几种情况: 阻塞到阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以纳入新进程或运行就绪进程; 就绪到就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程; 运行到就绪挂起:对抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态;,3.2 进程的描述 3.2.5 进程的状态及其转换挂起进程模型 状态间的转换 激活(Activate):把一个进程从外存转到内存;可能有以下几种情况: 就绪挂起到就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进行这种转换; 阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起(系统认为会很快出现所等待的事件)进程转为阻塞状态;较少出现。,3.2 进程的描述 3.2.5 进程的状态及其转换挂起进程模型 状态间的转换 事件出现(Event Occurs):进程等待的事件出现;如:操作完成、申请成功等;可能的情况有: 阻塞到就绪:针对内存进程的事件出现; 阻塞挂起到就绪挂起:针对外存进程的事件出现; 收容(Admit):收容一个新进程,进入就绪状态或就绪挂起状态。 各种状态-退出:被父进程终止或父进程本身终止。,练习思考题 如果系统中有N个进程,运行的进程最多几个,最少几个;就绪进程最多几个最少几个;等待进程最多几个,最少几个? 有没有这样的状态转换,为什么? 等待运行; 就绪等待,自主设计题 进程的3个基本状态:执行、就绪、等待,其转换标识分别为1、2、3、4(如图)。编程模拟进程状态转换过程,要求:分别建立等待队列和就绪队列(单队列、结构不限),初始状态时,1个进程处于执行状态,7个进程在等待队列中,7个进程在就绪队列中。手工触发任意一种转换,显示转换发生后的执行进程和两个队列的进程。,执行,1,2,3,4,等待,就绪,3.3 进程控制的功能:完成进程状态的转换。,原语(primitive):由若干条指令构成的“原子操作(atomic operation)”过程,作为一个整体而不可分割要么全都完成,要么全都不做。许多系统调用就是原语。,注意:系统调用并不都是原语。进程A调用read(),因无数据而阻塞,在read()里未返回。然后进程B调用read(),此时read()被重入。系统调用不一定一次执行完并返回该进程,有可能在特定的点暂停,而转入到其他进程。,3.3 进程控制 3.3.2 进程控制的主要原语进程创建原语 进程树,进程树是有向树 父子关系表示创建与被创建的关系 父子关系不表示执行的先后关系,3.3 进程控制 3.3.2 进程控制的主要原语进程创建原语 子进程的创建的3种形式,3.3 进程控制 3.3.2 进程控制的主要原语进程创建原语 创建原语描述,Procedure Create(n, S0, P0, M0, R0) Begin i :=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 进程控制 3.3.2 进程控制的主要原语进程创建原语 进程创建需要的参数: 被创建进程的外部标识符n 处理机的初始状态S0(包括CPU的工作方式、进程起始地址及屏蔽码等); 进程优先级P0; 初始内存数M0; 其它所需资源清单R0 i.sdata是一个与进程状态有关的指针。,3.3 进程控制 3.3.2 进程控制的主要原语进程撤销原语Destroy,也称为“终止”或主程序返回:调用exit()可终止进程。 释放资源: 释放内外存空间 关闭所有打开文件 释放共享内存段和各种锁定lock,3.3 进程控制 3.3.2 进程控制的主要原语进程撤销原语Destroy 撤消原语的描述,Procedure Destroy(n) Begin Sched := false; i :=GetInternalName(n); Kill(i); if Sched then Scheduler else continue; End;,Procedure Kill(i) Begin if i.status = “Running” then stop(i); Sched := True; remove(i.sdata, i); for all Sgeny do Kill(S); for all rMain store i.resources do Release(r); Release (PCB(i) End;(Kill是可递归的),调用者提供的进程的外部标识,如果进程正在运行,则立即停止其运行,并设置调度标志为真,3.3 进程控制 3.3.2 进程控制的主要原语进程阻塞原语Block 阻塞原因:当进程期待的某事件尚未出现时,该进程调用阻塞原语把自己阻塞起来。 具体事件如下: 请求系统服务 启动某种操作 新数据尚未到达 无新工作可做 注意:由自己阻塞自己,但该进程的唤醒则是在该进程所期待的事件发生后,由“发现者”进程调用唤醒原语实现,3.3.2. 进程阻塞过程 正在执行的进程,当发现上述某事件时,无法继续执行,于是进程调用阻塞原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为。进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。如果系统中设置了因不同事件而阻塞的多个阻塞队列,则应将本进程插入到具有相同事件的阻塞(等待)队列。 最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换。,3.3 进程控制 3.3.2 进程控制的主要原语进程阻塞原语Block 阻塞进程的描述,Procedure block(r) Begin i := EP; stop(i); i.status := “blocked”; i.sdata := WQ(r); insert(WQ(r), i); scheduler; End;,r 为指向等待原因的对应等待队列的指针,从执行进程的指针获得进程的内部标识符i,停止进程i,进程调度程序,3.3 进程控制 3.3.2 进程控制的主要原语 进程唤醒原语Wakeup 唤醒原因: 进程等待的事件发生,等待队列中的进程唤醒。 唤醒进程的两种方法: 由系统进程唤醒。系统进程统一控制事件的发生,并将“事件发生”这一消息通知等待进程。等待的是公共资源。 由事件发生进程唤醒。事件发生进程与被唤醒的进程是合作关系, 等待私有资源。,3.3 进程控制 3.3.2 进程控制的主要原语 进程唤醒原语Wakeup) 唤醒原语的描述,Procedure wakeup(n) Begin i := GetInternalName(n); remove( WQ(r), i ); i.status := “Ready”; i.sdata := RQ; insert( RQ, i); continue; End;,从相应的等待队列中摘下被唤醒的进程,状态置为“就绪态ready”,插入就绪队列,唤醒进程返回或转进程调度,3.3.2 进程控制的主要原语挂起原语Suspend,引起进程挂起的事件:,挂起原语的执行过程是:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞。 最后,若被挂起的进程正在执行,则转向调度程序重新调度。,-或父进程请求将自己的某个子进程挂起,,-系统将利用挂起原语suspend( )将指定进程或处于阻塞状态的进程挂起。,-用户进程请求将自己挂起;,3.3 进程控制 3.3.2 进程控制的主要原语挂起原语Suspend Primitive 挂起原语的描述,procedure Suspend(n, a) /* 挂起指定标识符n的 Begin 进程的进程原语*/ i := GetInternalName(n); /* 参数a是用于保存该 S := i.status; 进程PCB副本的内存区*/ if S=“Running” then stop(i); a := copy PCB(i); if S=“blockeda” then i.status := “blockeds” else i.status := “readys” if S= “Running” then Scheduler else continue; End;,3.3 进程控制 3.3.2 进程控制的主要原语激活原语 Active,进程的激活过程 系统将利用激活原语active( )将指定进程激活。 激活原语先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞便将之改为活动阻塞。,3.3 进程控制 3.3.2 进程控制的主要原语激活原语 Active Primitive 激活原语的描述,procedure active(n) /*n为进程标志符*/ begin i := GetInternalName(n); i.status := if i.status=“readys” then “readya” else “blockeda”; if i.status = “readya” then scheduler; else continue End;,例: NT线程的挂起和激活,NT中处理机的分配对象为线程,一个线程可被多次挂起和多次激活。在线程内有一个挂起计数(suspend count),挂起操作使该计数加1,激活操作将该计数减1;当挂起计数为0时,线程恢复执行。,(1) 挂起:Windows NT中的SuspendThread可挂起指定的线程; DWORD SuspendThread( HANDLE hThread / handle to the thread ); (2) 激活:Windows NT中的ResumeThread可恢复指定线程的执行; DWORD ResumeThread( HANDLE hThread / identifies thread to restart );,例子NT_thread.cpp,#include #include #include #include void SubThread(void) int i; for (i=0;i5;i+) cout “SubThread“ i endl; Sleep(2000); ,void main(void) cout “CreateThread“ endl; / Create a thread; DWORD IDThread; HANDLE hThread; hThread = CreateThread(NULL, / no security attributes 0, / use default stack size (LPTHREAD_START_ROUTINE) SubThread, / thread function NULL, / no thread function argument 0, / use default creation flags ,int i; for (i=0;i5;i+) cout “MainThread“ i endl; if (i=1) if (SuspendThread(hThread)=0xFFFFFFFF) cout “Suspend thread error.“ endl; else cout “Suspend thread is ok.“ endl; if (i=3) if (ResumeThread(hThread)=0xFFFFFFFF) cout “Resume thread error.“ endl; else cout “Resume thread is ok.“ endl; Sleep(4000); ,运行结果,CreateThread MainThread0 SubThread0 SubThread1 MainThread1 Suspend thread is ok. MainThread2 MainThread3 Resume thread is ok. SubThread2 SubThread3 MainThread4 SubThread4,例子 NT_thread.cpp,#include #include #include #include void SubThread(void) int i; for (i=0;i5;i+) cout “SubThread“ i endl; Sleep(2000);/改一下时间,输出顺序会有变化 ,此处是用户自己的函数,完成指定功能,void main(void) cout “CreateThread“ endl; / Create a thread; DWORD IDThread; HANDLE hThread; hThread = CreateThread(NULL, / no security attributes 0, / use default stack size (LPTHREAD_START_ROUTINE) SubThread, / thread function NULL, / no thread function argument 0, / use default creation flags ,int i; for (i=0;i5;i+) cout “MainThread“ i endl; if (i=1) if (SuspendThread(hThread)=0xFFFFFFFF) cout “Suspend thread error.“ endl; else cout “Suspend thread is ok.“ endl; if (i=3) if (ResumeThread(hThread)=0xFFFFFFFF) cout “Resume thread error.“ endl; else cout “Resume thread is ok.“ endl; Sleep(4000);/改一下结果会有变化。 ,运行结果,CreateThread MainThread0/输出后。 Sleep(4000) SubThread0/输出后,Sleep(2000) SubThread1 /输出后,Sleep(2000) MainThread1/输出后。 Sleep(4000) Suspend thread is ok. MainThread2 MainThread3 Resume thread is ok. /输出后。 Sleep(4000) SubThread2 SubThread3 MainThread4 SubThread4,进程创建后只要通过进程调度获得cpu,就自动执行!,3.4 线程(THREAD),引入线程的目的是简化进程间的通信,以小的开销来提高进程内的并发程度。,3.4.1 线程的引入,进程:资源分配单位(存储器、文件)和CPU调度(分派)单位-未引入线程时。又称为“任务(task)“ 线程:作为CPU调度单位,而引入线程后进程只作为其他资源分配单位。 只拥有必不可少的资源,如:线程状态、寄存器上下文和栈 同样具有就绪、阻塞和执行三种基本状态 线程的优点:减小并发执行的时间和空间开销(线程的创建、退出和调度),因此容许在系统中建立更多的线程来提高并发程度。 线程的创建时间比进程短; 线程的终止时间比进程短; 同进程内的线程切换时间比进程短; 由于同进程内线程间共享内存和文件资源,可直接进行不通过内核的通信;,进程与线程的关系,3.4.2 线程的属性,线程具有许多传统进程所具有的特征,故又称为轻型进程,(1)轻型实体。(线程是进程中的一个实体 ) (2) 独立调度和分派的基本单位。在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。而把进程作为资源拥有的单位。由于线程很“轻,故线程的切换非常迅速且开销小。 (3) 可并发执行。 (4) 共享进程资源。,3.4.3 OS对线程的实现方式,内核维护进程和线程的上下文信息; 线程切换由内核完成; 一个线程发起系统调用而阻塞,不会影响其他线程的运行。 时间片分配给线程,所以多线程的进程获得更多CPU时间。,依赖于OS核心,由内核的内部需求进行创建和撤销,用来执行一个指定的函数。Windows NT和OS/2支持内核线程;,1)内核线程(kernel-level thread),2)用户线程(user-level thread),用户线程的维护由应用进程完成; 内核不了解用户线程的存在; 用户线程切换不需要内核特权; 用户线程调度算法可针对应用优化;,不依赖于OS核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。如:数据库系统informix,图形处理Aldus PageMaker。调度由应用软件内部进行,通常采用非抢先式和更简单的规则,也无需用户态/核心态切换,所以速度特别快。一个线程发起系统调用而阻塞,则整个进程在等待。时间片分配给进程,多线程则每个线程就慢。,例:线程执行时间 对于只设置了用户级线程的系统,调度是以进程为单位的,在采用轮转调度算法时,各个进程轮流执行一个时间片,这对诸进程而言,看似公平的,但假如在A进程中包含了一个用户级线程,而在另一个进程B中含有100个线程,这样,进程A中线

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论