




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第三章进程管理3.1进程概述3.2进程控制块3.3调度3.4UNIX系统的进程调度3.5进程控制3.6进程的创建和图像改换3.7线程
3.8Linux进程管理23.1进程概述程序的执行有两种方式:顺序执行和并发执行。顺序执行是单道批处理系统的执行方式,也用于简单的单片机系统;现在的操作系统多为并发执行,具有许多新的特征。引入并发执行的目的是为了提高资源利用率。3程序:是一个在时间上严格有序的指令集合。程序规定了完成某一任务时,计算机所需做的各种操作,以及这些操作的执行时间。程序的顺序执行:具有独立功能的程序独占CPU直至得到最终结果的过程。程序4程序的顺序执行及其特征1.程序的顺序执行仅当前一操作(程序段)执行完后,才能执行后继操作。例如,在进行计算时,总须先输入用户的程序和数据,然后进行计算,最后才能打印计算结果。
S1:a∶=x+y;S2:b∶=a-5;S3:c∶=b+1;56程序顺序执行时的特征(1)顺序性:(执行的顺序性)由于内存中每次只有一道程序,因此各个程序是按次序执行的,即执行完一个以后,再执行下一个。(2)封闭性:独占全部资源,计算机的状态只由于该程序的控制逻辑所决定(3)可再现性:结果的再现性,初始条件相同则结果相同。7程序的并发执行及其特征1.程序的并发执行8程序并发执行时的特征
间断(异步)性:执行的顺序性被打破,“走走停停”,一个程序可能走到中途停下来,失去原有的时序关系;失去封闭性:资源的独占性被打破,共享资源,受其他程序的控制逻辑的影响。如:一个程序写到存储器中的数据可能被另一个程序修改,失去原有的不变特征。失去可再现性:失去封闭性->失去可再现性;外界环境在程序的两次执行期间发生变化,失去原有的可重复特征。9不加控制的并发执行所带来的影响例:为了了解某单行道的交通流量,在路口安放一个监视器,功能是有车通过该路段时,就向计算机发送一个信号。程序A功能:接收到监视器信号时,就在计数单元COUNT上加1;程序B功能:每个半个小时,打印COUNT的值,然后清零。程序A:While(1){A1:收到监视器信号;A2:COUNT=COUNT+1;}程序B:While(1){B1:延迟半小时;B2:打印COUNT的值;B3:COUNT=0;}(w)A1A2B1B2A1A2B3(r)A1A2B1A1A2B2B3103.1.1进程的概念
程序本身完全是个静态的概念(程序是完成某个功能的指令的集合),而系统及其中的各个程序实际上是处于不断变化的状态,程序的概念反映不了这种动态性;其次,程序概念也反映不了系统中的并行特性。综上所述,静态的程序概念已不敷使用,需要引用一个新的概念——“进程”。11进程的概念进程是程序处于一个执行环境中在一个数据集上的运行过程,它是系统进行资源分配和调度的一个可并发执行的独立单位。12进程的特征(1)动态性进程的实质是程序的一次执行过程,因此,动态性是进程的最基本特征。动态性还表现为:“它由创建而产生,由‘调度’而执行,由撤消而消亡”。可见,进程有一定的生命期,而程序只是一组有序指令的集合,并存放于某种介质上,本身并无运动的含义,因此是静态的。(2)并发性这是指多个进程能在一段时间内同时运行,并发性是进程的重要特征。引入进程的目的也正是为了使其程序能和其他进程的程序并发执行,而程序(没有建立进程)是不能并发执行的(由于程序不反映执行过程)。13进程的特征(3)独立性这是指进程是一个能独立运行、独立分配资源和独立调度的基本单位,凡未建立进程的程序,都不能作为一个独立的单位参加运行。只有进程有资格向系统提出申请资源并获得系统提供的服务。(4)异步性这是指进程按各自独立的、不可预知的速度向前推进,或说进程按异步方式运行。(5)结构性为使进程能独立运行,应为之配置一个称为“进程控制块”的数据结构,简称PCB。14
进程和程序的联系与区别:(1)联系。程序是构成进程的组成部分之一,一个进程的运行目标是执行它所对应的程序,如果没有程序,进程就失去了其实际存在的意义。15
进程和程序的联系与区别:(2)区别。进程是程序的一次动态执行活动,而程序是进程运行的静态描述文本。一个进程可以执行一个或多个程序,反之,同一程序也可被多个进程同时执行。程序是一种软件资源,它可以长期保存,而进程是一次执行过程,它是暂时存在的、动态地产生和中止的。163.1.2进程的组成进程是在一个上下文的执行环境中执行的,这个执行环境称为进程的映像,或称图像。它包括处理机中各通用寄存器的值、进程的内存映像、打开文件的状态和进程占用资源的信息等很多部分。进程映像的关键部分是存储器映像。进程存储器映像由以下几部分组成:进程控制块、进程执行的程序(code)、进程执行时所用的数据、进程执行时使用的工作区17进程的组成181.进程控制块进程控制块PCB(ProcessControlBlock)是系统用于查询和控制进程运行的档案,它描述进程的特征,记载进程的历史,决定进程的命运。由于PCB较大,一些系统将其分割成两部分:一部分是进程基本控制块,这部分记录不管进程是否在执行,操作系统都需要访问的进程控制信息,因此,进程基本控制块要常驻内存;另一部分是进程扩充控制块,当进程不处于执行状态时,操作系统就不会访问这部分信息,扩充控制块能对换到盘交换区中。192.共享正文段用高级语言编写的程序一般是可重入的“纯代码”,也即是它可以被多个进程并发地执行的。共享正文段不限于包括程序,还可包括不可修改的常数。用户用C语言所编的程序经编译后产生的代码也是作为共享正文段装入内存的203.数据区进程执行时用到的数据,如C程序中的外部变量和静态变量;如进程执行的程序为非共享程序(如用汇编语言编写,可以在执行时修改执行的代码和其中夹带的数据),则也可构成数据区的一部分。214.工作区进程在核心态运行时的工作区为核心栈;在用户态下运行时的工作区为用户栈;在调用核心的函数或用户函数时,两种栈分别用于传递参数、存放返回地址、保护现场以及为局部动态变量提供存储空间。此外,核心栈还可用于保护中断现场,用户栈还用于向主程序(main函数)传递命令行参数等。223.1.3进程的状态及其变化进程具有生存期,它有一个创建、活动及消亡的过程。进程在其活动期间可以因外部和内部的原因进入“睡眠”阶段。“睡眠”的进程会被“唤醒”而继续先前的活动。为了完成一组特定的任务,进程也可采用“克隆”技术,生成一个或多个子进程,互相配合地工作。进程在其整个生存期间可处于不同的状态,有一些不同的特征 23就绪(Ready)状态:一个进程已经具备运行条件,但由于无CPU暂时不能运行的状态(当调度给其CPU时,立即可以运行)。“万事俱备,只欠东风”。位于“就绪队列”中。2)执行状态(Running):进程占有了包括CPU在内的全部资源,,并在CPU上运行。3)阻塞状态(Blocked)
:也称等待态、睡眠态、封锁态、挂起态等。指进程因等待某种事件的发生而暂时不能运行的状态(即使CPU空闲,该进程也不可运行)。处于阻塞态的进程位于阻塞队列中。 24运行Running就绪Ready阻塞Blocked
DispatchTimeoutEventWaitEventOccurs基本状态间的转换25
在实际的操作系统中,为了管理和调度的便利,还将进程的状态进一步细分,例如,UNIX系统V定义了10种进程的状态:#defineSSLEEP1
睡眠状态#defineSWAIT2
等待状态,该状态已被废弃#defineSRUN3
执行状态或就绪状态#defineSIDL4
创建子进程状态#defineSZOMB5
等待善后处理状态#defineSSTOP6
进程处于被跟踪的暂停状态#defineSXBRK7
因数据段扩展时未满足的换出状态#defineSXSTK8
因栈段扩展时未满足的换出状态#defineSXFRK9
创建子进程时内存不够,父进程锁定在内存的状态#defineSXTXT10
因正文段扩展未满足而被换出的状态26挂起状态
引入挂起状态的原因终端用户的请求。:当终端用户在自己的程序运行期间发现问题,希望暂时使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此进程正处于就绪状态,则暂不接受调度。这种静止状态称为挂起状态。(2)父进程请求。(3)负荷调节的需要。(4)操作系统的需要。27被挂起进程的特征能立即执行,除非首先激活它。被挂起进程可能是等待某事件的阻塞进程,其阻塞条件独立于挂起条件,即使阻塞事件发生,该进程也不能执行。能实施挂起操作的进程包括:进程自身、进程的父进程和操作系统。只有实施挂起操作的进程才能激活被挂起进程。282)进程状态的转换在引入挂起状态后,又将增加从挂起状态(又称为静止状态)到非挂起状态(又称为活动状态)的转换;或者相反。可有一下几种情况:(1)活动就绪→静止就绪。(2)活动阻塞→静止阻塞。(3)静止就绪→活动就绪。(4)静止阻塞→活动阻塞。29具有挂起状态的进程状态图303.2进程控制块为了掌握进程的运行状况和便于管理和控制进程的运行,操作系统为每一个进程设置了一个数据结构——进程控制块(PCB)。进程控制块是进程的控制结构,包含了进程的描述信息、控制信息和资源信息以及现场保护区。311.进程控制块的作用进程控制块是由OS维护的用来记录进程相关信息和管理进程设置的一个专门的数据结构。进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。PCB是进程动态特性的集中反映。系统通过PCB感知进程的存在,通过PCB中所包含的各项变量的变化,掌握进程的状态以达到控制进程活动的目的;32PCB随进程的创建而填写,随进程的撤消而释放;系统利用PCB来控制和管理进程,所以PCB是系统感知进程存在的唯一标志进程与PCB是一一对应的PCB结构常驻内存;系统将所有PCB组织成若干个队列,存放在操作系统中专门开辟的PCB区内。332.进程控制块中的信息1)进程标识符进程标识符用于惟一地标识一个进程。一个进程通常有两种标识符:
(1)内部标识符。在所有的操作系统中,都为每一个进程赋予一个惟一的数字标识符,它通常是一个进程的序号。设置内部标识符主要是为了方便系统使用。
(2)外部标识符。它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。为了描述进程的家族关系,还应设置父进程标识及子进程标识。此外,还可设置用户标识,以指示拥有该进程的用户。342)处理机状态
处理机状态信息主要是由处理机的各种寄存器中的内容组成的。
①通用寄存器,又称为用户可视寄存器,它们是用户程序可以访问的,用于暂存信息,在大多数处理机中,有8~32个通用寄存器,在RISC结构的计算机中可超过100个;②指令计数器,其中存放了要访问的下一条指令的地址;③程序状态字PSW,其中含有状态信息,如条件码、执行方式、中断屏蔽标志等;
④用户栈指针,指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。353)进程调度信息在PCB中还存放一些与进程调度和进程对换有关的信息,包括:
①进程状态,指明进程的当前状态,作为进程调度和对换时的依据;②进程优先级,用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机;③进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待CPU的时间总和、进程已执行的时间总和等;④事件,是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因。364)进程控制信息
①程序和数据的地址,是指进程的程序和数据所在的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据;②进程同步和通信机制,指实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在PCB中;
③资源清单,是一张列出了除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单;④链接指针,它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。37PCB的存放有些系统将进程控制块分成两个部分:一部分是进程无论处于什么状态,系统都可能要查询和处理的PCB成员,这部分就要常驻内存;另一部分是进程不在执行时系统就不需要访问的PCB成员,在内存紧张时可以将它们换到盘交换区,以为其他进程腾出宝贵的内存空间。在UNIX中,常驻内存的进程PCB部分是proc结构;在UNIX中,非常驻内存的PCB部分是进程扩充控制块user结构;383.进程控制块的组织方式早期的UNIX系统将进程的proc结构组成一个顺序存放的线性表,系统中可以存在的最大进程数受表的大小的限制(如50个)。当要对处于某种状态的进程控制或调度时,就要扫描整个proc表,这大大地降低了系统的效率。系统V用链式方式组织PCB队列,不同状态的进程链接成就绪队列、阻塞队列等不同的队列。为了便于系统的调度和控制,对于就绪状态进程,还可以将其分成优先级不同的几个就绪队列。对于阻塞进程,可根据原因不同,组成若干个队列。39403.3调度3.3.1调度概述1.高级调度(HighScheduling)
又称为作业调度或长程调度,用于决定把外存上处于后备队列中的哪些作业调入内存,并为它们创建进程、分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备执行。因此有时也把作业调度称为接纳调度。在每次执行作业调度时,都须做出以下两个决定。
1)接纳多少个作业,取决于多道程序度。
2)接纳哪些作业,取决于调度算法412.中级调度(Intermediate-LevelScheduling)又称中程调度,它决定处于交换区中的就绪进程中哪一个可以调入内存,以便直接参与对CPU的竞争。在内存资源紧张时,为了将进程调入内存,必须将内存中处于阻塞状态的进程调至交换区,以便为调入进程腾出空间。这相当于使处于内存中的进程和处于盘交换区中的进程交换了位置,故中级调度又称为“对换调度”。中级调度是为了缓解内存资源的紧张状态,在多道程序范畴内实现进程动态覆盖和进程级的虚拟存储器技术。一个进程在其运行期间可能需要经过多次中级调度。423.低级调度(LowLevelScheduling)(进程调度或短程调度)
它决定驻在内存中的哪一个就绪进程可以占用CPU,使其获得实实在在的执行权力,故低级调度又可称处理机调度或分派调度。低级调度执行频度很高,调度算法也比较复杂,是操作系统中最活跃、最重要的调度程序,对系统的性能影响也最大。43443.3.2进程调度策略进程调度策略是指在什么情况下用什么方式,在内存中的就绪进程之间进行切换和分配处理机。进程切换的方式有两种:一种是不可剥夺(或不可抢占)方式,即一个进程在获得处理机后,除非因运行结束或进入了阻塞状态等原因自己放弃处理机,否则就可以一直运行下去,不会被其他进程抢占处理机;另一种是可剥夺方式,即在某些条件下系统可以强制剥夺正在运行中进程使用处理机的权利,将其分配给系统中另一个合适的就绪进程45
在设计一个调度算法时,应考虑以下的因素。①针对不同的系统应当考虑不同的设计目标。如对于批处理系统应当以提高计算机系统的运行效率、取得最大的作业吞吐量和减少作业平均周转时间为主要目标;对于交互式分时系统,应当以能及时响应用户的请求为主要目标;对于实时系统,应当能对紧急事件做出及时处理和安全可靠为头等重要的考虑因素。②调度算法应能充分使用系统中各种类型的资源,使多个设备能并行地工作46③应当既能在某一原则下公平地对待系统中的各个进程,使它们能均衡地使用处理机,也能考虑不同类型进程具有不同的优先权利,在一定程度下满足用户对优先级的要求,但也不能造成某些低优先权的进程可能无限期地推迟任务完成的时间。④合理的系统开销473.3.3进程调度算法
在OS中调度的实质是一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的系统和系统目标,通常采用不同的调度算法。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可用于作业调度,也可用于进程调度。481.先来先服务调度算法(FCFS-FirstComeFirstServe
)
按照作业进入系统的先后次序进行调度,先进入系统者先调度;即启动等待时间最长的作业。优点:实现简单、公平缺点:没考虑资源利用率和作业的特殊性,对短作业不公平。49先来先服务调度算法带权周转时间=周转时间/请求服务时间50短作业(进程)优先调度算法
短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法,是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调度。5152SJ(P)F调度算法也存在不容忽视的缺点:
(1)该算法对长作业不利,如作业C的周转时间由10增至16,其带权周转时间由2增至3.1。更严重的是,如果有一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度。
(2)该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理。
(3)由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。53
2.时间片轮转法在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。时间片的大小从几ms到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间。54时间片轮转法比较适合于交互式的分时系统,对于用户输入的每一条命令,系统能保证在一个不太长的时间内对此做出响应。时间片轮转法是剥夺式调度算法,因此系统需要花费额外开销用于各个就绪进程间的切换。系统的效率与时间片大小的设置有关。如时间片设置过大,系统与用户间的交互性就差,会招致用户的埋怨;如时间片设置太小,进程间切换过分频繁,系统开销就增大。55为了适应不同进程的运行特点,在系统中可设置时间片大小不同的n个队列,如时间片长度可分为10ms、50ms和200ms等。调度程序可将运行时间短、交互性强或I/O繁忙的进程安排在时间片小的队列,这样可以提高系统的响应速度和减少周转时间而对于需要连续占用处理机的进程可安排在时间片长的队列中,这样可减少进程切换的开销。一个进程处于哪一个时间片的队列,可以在运行时根据它的先前运行状况加以调整。563.优先级调度算法
为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权(FPF)调度算法。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业,装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。57
对于优先权调度算法,其关键在于:它是使用静态优先权、还是动态优先权,以及如何确定进程的优先权。
1)静态优先权
静态优先权是在创建进程时确定的,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0~7或0~255中的某一整数,又把该整数称为优先数。只是具体用法各异:有的系统用“0”表示最高优先权,当数值愈大时,其优先权愈低;而有的系统恰恰相反。58确定进程优先权的依据有如下几个方面:①系统进程执行和完成的是系统功能,应当赋予它们比用户进程高的优先级。②短作业的进程可以赋予较高的优先级,这样可减少作业的平均等待时间,提高系统的吞吐量。③I/O繁忙的进程只要求较短的处理机时间,让该类进程优先获得CPU。④根据用户作业的申请,系统可以分配一些进程较高的优先级,一般这意味着要提高收费标准。静态优先权法也很适合于实时系统,因为在实时系统中计算机所处理的所有事件是预知的,故其优先级可根据事件的紧迫程度事先设定592)动态优先权
动态优先权是指,在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。例如,我们可以规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高。当采用抢占式优先权调度算法时,如果再规定当前进程的优先权以速率b下降,则可防止一个长作业长期地垄断处理机。604.多级反馈队列调度算法多级反馈队列算法是时间片轮转算法和优先级算法的综合和发展。优点:为提高系统吞吐量和缩短平均周转时间而照顾短进程为获得较好的I/O设备利用率和缩短响应时间而照顾I/O型进程不必估计进程的执行时间,动态调节614.多级反馈队列调度算法
(1)应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。6263(2)当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采取按时间片轮转的方式运行。64(3)仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。65特点短进程优先处理。因此运行时间短的进程在经过前面几个队列之后便已经执行完,而这些队列中的进程被优先调度。设备资源利用率高。因为与设备打交道的进程可能经常会由于下面原因而进入等待状态:所申请的资源被占用,启动了I/O传输。当等待事件发生时,它将进入第一级就绪队列,尽快获得处理机并使用资源。系统开销小.因为运行时间长的进程最后进入低优先级的队列,这些队列的时间片较长,因而进程的调度频率较低。但是,如果高优先级的队列一直不为空,则低优先级队列的进程可能长时间得不到运行机会,可能会发生“饿死”现象。因此,允许采用某种原则将低优先级队列的进程移到高优先级队列中665.实时调度策略在实时系统中,计算机必须响应和控制的事件可分为周期事件和非周期事件;系统可能需要处理多种周期事件流。计算机能不能及时处理所有的事件,取决于事件的到达周期和需要处理的时间。例如,对于m个周期事件,如事件i的到达周期为Pi,所需CPU的处理时间为Ci秒,那么只有当满足:
∑Ci/Pi≤1(i=1,…,m)
时才是可以调度的。67
假如系统中有6个实时任务,它们的周期时间都是50ms,而每次的处理时间为10ms,则不难算出,此时是不能满足上式的,因而系统是不可调度的。解决的方法是提高系统的处理能力,其途径有二:其一仍是采用单处理机系统,但须增强其处理能力,以显著地减少对每一个任务的处理时间;其二是采用多处理机系统。假定系统中的处理机数为N,则应将上述的限制条件改为:68实时调度算法也可分为静态算法和动态算法。前者是在系统开始运行之前就决定了的,而后者是在运行期间才做出调度决定。下面讨论几种动态实时调度算法。①速率单调算法(RateMonotonicAlgorithm),该算法分配给各个进程的优先级正比于要处理触发事件的发生频率。如每隔20ms运行一次的进程优先级为50,每隔100ms运行一次的进程的优先级为10。运行时调度程序总是运行优先级最高的就绪进程,如需要,就抢占当前运行进程的处理机。69②最早截止时间优先算法(EarliestDeadlineFirst),是广泛使用的调度算法。当检测到一个事件时,对应的处理进程就加入就绪进程表中,该表以截止时间排序,调度程序总是使表中最早截止时间的那个进程获得运行权。也就是说,使处理最紧迫事件的进程优先占用处理机。70③最小松弛时间优先(LeastLaxity)算法,该算法先要计算每一个进程的宽余(或称松弛)时间,如果一个进程需要运行200ms,并且必须在250ms内结束,它的松弛时间就是50ms。此算法选择最小宽余时间的进程,使其占用处理机,换句话说,该算法使处理最不能拖延的事件的进程优先占用处理机。假如在一个实时系统中,有两个周期性实时任务A和B,任务A要求每20ms执行一次,执行时间为10ms;任务B只要求每50ms执行一次,执行时间为25ms。71723.4UNIX系统的进程调度3.4.1进程的切换调度算法1.UNIX的切换调度策略
UNIX系统的切换调度采用动态优先权算法,其主要工作是在一个适当的时机,选择一个优先权最高,也即优先数p_pri最小的就绪进程,使其占用处理机。73UNIX系统中的每一个进程在其运行期间可以处于两种状态,即用户态和核心态。系统对在用户态下运行的进程,可以根据优先数的大小,对它们进行切换调度。对在核心态下运行的进程,除非它们完成了所要执行的操作系统功能,即将返回用户态下运行,或它们因为某些原因(如申请资源得不到满足)而进入睡眠状态,或为了同步的需要而自愿暂停执行,否则是不会对它们进行切换调度的,也即UNIX核心从本质上来说,是不可重入的742.优先数的计算与运行状态相对应,UNIX对进程优先数的处理也有两种方法。对用户态的进程,内核程序在适当时机用下列公式计算进程的优先数:
p_pri=p_cpu/2+p_nice+PUSER+NZEROp_cpu是进程占用处理机的量度,内核程序在每次时钟中断(每秒50次或100次)中,使当前执行进程的p_cpu加1,但最多加到80;每一秒钟使所有就绪状态的进程的p_cpu衰减一半,即p_cpu=p_cpu/2。75p_nice是用户可以通过系统调用nice(intpriority)设置的进程优先数偏置值。用户可设置的偏置值范围为0~20(有的系统为0~39),只有超级用户能将p_nice置成负值,以提高进程的优先权。PUSER和NZERO是两个常量,用于分界不同类型的优先数763.优先数的设置正在核心态运行的进程,其优先数对调度是不起作用的,因为它不会被强迫剥夺占用处理机的权利。只有当它因等待系统资源等原因进入睡眠状态时,系统才根据等待事件的轻重缓急程度分配给其一个相应的优先数。只有当它被唤醒之后,才以设置的优先数参与竞争处理机,并在核心态下继续运行下去。77核心态进程根据被设置优先数的大小,可分为可中断和不可中断两类优先级。若进程在可中断的优先级上睡眠,当一个软中断信号(软中断的概念将在下一章叙述)到达时,它就被唤醒,进入就绪队列,以便执行软中断处理程序。若进程在不可中断的优先级上睡眠,它在收到软中断信号后,继续睡眠,以保证它能优先处理所等待的事件78PSWP(0)对换进程(即中级调度0号进程)睡眠的优先数PINOD(10)等待磁盘I/O、管道;申请空闲磁盘块,空闲I节点PRIBIO(20)等待缓冲区NI_PRILEV(25)有关网络机制的睡眠NZERO(25)可中断和不可中断的分界常数PMSG(27)因等待消息而睡眠TTIPRI(28)
等待TTY输入TTOPRI(29)
等待TTY输出PWAIT(30)
等待子进程终止PSLEP(39)
因系统调用pause,sleep而入睡PUSER(60)
核心态与用户态优先级的分界常数若干用户态进程优先级
由计算而得到的优先数PIDLE(127)
计算机空转的最低优先级794.进程切换调度的时机
进程自愿放弃处理机而引起的切换调度,属于这一类的主要有以下几种情况:—进程完成了预定任务而进入了SZOMB(等待善后处理)状态;—进程因等待某种资源进入了睡眠状态;—进程因同步或互斥的需要,暂停执行,放弃了处理机80
系统发现了可能更适合占用处理机的进程,设置了强迫调度标志runrun。属于该类的主要情况有:—在唤醒睡眠进程时,发现该进程的优先数小于现运行进程;—进程由系统调用返回用户态时,重新计算自己的优先数,发现自己的优先数上升了,要选择可能更合适的进程运行;—在时钟中断程序中每一秒对所有优先数大于(PUSER-NZERO)的进程(一般原先在用户态下运行)重新计算优先数,通常总要设置runrun标志。在runrun标志设置后,进行强迫调度的具体时机是在中断或陷入处理末尾。813.4.2切换调度程序
实施进程切换调度的程序是swtch,其主要任务是:—保存现运行进程的现场信息;—在就绪队列中选择一个在内存且优先数p_pri最小的进程,以使其占用处理机,如找不到这样的进程,计算机就空转等待;—为新选中的进程恢复现场823.4.3进程的对换调度为了使更多的进程能进入系统,以使切换调度程序能选择更合适的进程占用处理机,以充分利用系统中的各种资源,UNIX在磁盘开辟一块空间——进程图像的交换区,作为内存的逻辑扩充。UNIX系统中的0号进程的主要任务就是按照换入换出算法在内存和磁盘交换区之间传输进程的图像。83进程图像的换入算法是找在盘交换区的就绪进程(SLOAD为0),按它们在外存驻留时间p_time从长到短的次序逐个将它们换入内存,直至全部调入或内存无足够空闲区为止。有的系统在调入进程的次序上除了考虑进程在交换区驻留时间外,还要考虑进程的大小和优先数的因素;进程优先数小,尺寸小的也优先换入内存。进程图像的换入84进程图像的换出算法是首先将部分图像已换出的进程从内存中完全换出,然后考虑处于睡眠或被跟踪的进程,最后是在内存驻留时间最长的进程,包括就绪状态的进程,但p_flag中包含SSYS或SLOCK位的进程不能换出。进程图像的换出85习题1.若是在单批道处理系统中,已知进入时间和所需计算的时间。忽略作业调度所花的时间。当第一个作业进入系统后就开始调度。
作业
进入时间
所需计算时间
1
8:00
2小时
2
8:30
30分钟
3
9:00
六分钟
4
9:30
12分钟(1)将分别采用先来先服务和短作业优先的调度算法时,各个作业的开始时间,完成时间,周转时间分别计算。
(2)分别求出在这两种算法之下的平均周转时间。86解答:(1)先来先服务调度算法:由于当第一个作业进入系统后就开始调度,所以作业1到达后,因为作业队列中没有其它作业,所有立刻得到调度了。作业进入时间运行时间开始时间完成时间周转时间18:002小时8:0010:002个小时28:3030分钟10:0010:302个小时39:006分钟10:3010:3696分钟49:3012分钟10:3610:4878分钟平均周转时间=(120+120+96+78)/4=103.5分钟87短作业优先调度算法:作业进入时间运行时间开始时间完成时间周转时间18:002小时8:0010:00120分钟28:3030分钟10:1810:48138分钟39:00六分钟10:0010:0666分钟49:3012分钟10:0610:1848分钟平均周转时间=(120+138+66+48)/4=93分钟882.在一个两道的批处理系统中,有六个作业进入系统,他们的进入时刻、估计运行时间和优先级如下表所示:作业号
进入时刻
估计运行时间
优先级job1
8:00
90m
5job2
8:10
30m
6job3
8:30
20m
3job4
8:50
15m
8job5
9:20
10m
2job6
9:40
5m
4
系统采用短作业优先调度算法,作业一旦被调度运行就不再退出,但当有新的作业投入运行时,可以按照优先级的进行进程调度。
(1)试给出各个作业的运行时间序列。
(2)试计算出作业的平均周转时间。89解答:两道的批处理系统,说明内存中只能同时存在两个进程;这个题目要考虑两级调度,作业调度和进程调度。作业调度采用短作业优先调度算法;进程调度采用抢占式优先级调度(假定优先数越大优先级越高)。8:00时刻:job1到达,立即被作业调度程序调入内存,进入内存后立即被进程调度程序调度开始运行8:10时刻:job1运行了10分钟,剩余80分钟,由于优先级低于job2,被进程调度程序调度处于就绪状态。
job2到达,被作业调度程序调入内存,由于优先级高与正在运行的job1,被进程调度程序调度开始运行。908:30时刻:job1在就绪队列中等待了20分钟,剩余80分钟,继续等待;
job2运行了20分钟,剩余10分钟,继续运行;
job3到达,由于内存中已有两道作业,所以等待作业调度程序调度。8:40时刻:job1等待了30分钟,剩余80分钟,由于优先级较高,被进程调度程序调度到处理机上运行;
job2运行30分钟,结束运行;
job3在外存等待了10分钟,被作业调度程序调入内存,但因为优先级低于job1,暂时得不到进程调度程序的调度,处于就绪状态。918:50时刻:job1运行了20分钟,剩余70分钟,继续运行;
job3在就绪队列中等待了10分钟,等待进程调度程序调度;
job4到达,等待作业调度程序调度;9:20时刻:job1运行了50分钟,剩余40分钟,继续运行;
job3在就绪队列中等待了40分钟,等待进程调度程序调度;
job4在外存等待了30分钟,继续等待作业调度程序调度;
job5到达,等待作业调度程序调度;9:40时刻:job1运行了70分钟,剩余20分钟,继续运行;
job3在就绪队列中等待了60分钟,继续等待进程调度程序调度;
job4在外存等待了50分钟,继续等待作业调度程序调度;
job5在外存等待了20分钟,继续等待作业调度程序调度;
job6到达,等待作业调度程序调度9210:00时刻:job1运行了90分钟,结束运行;
job3在就绪队列中等待了80分钟,由于优先级较低,继续等待进程调度程序调度;
job4在外存等待了70分钟,由于估计运行时间较长,继续等待作业调度程序调度;
job5在外存等待了40分钟,由于估计运行时间较长,继续等待作业调度程序调度;
job6在外存等待了20分钟,由于估计运行时间较短,被作业调度程序调入内存;由于优先级为4,高于已在内存的job3,被进程调度程序调度运行。9310:05时刻:job6运行了5分钟,结束运行。
job3在就绪队列中等待了85分钟,由于优先级较高,被进程调度程序调度运行;
job4在外存等待了75分钟,由于估计运行时间较长,继续等待作业调度程序调度;
job5在外存等待了45分钟,由于估计运行时间比job4短,被作业调度程序调入内存;由于优先级低于job3,所以不被进程调度程序调度,在就绪队列中等待;
9410:25时刻:job3运行了20分钟,结束运行;
job4在外存等待了95分钟,被作业调度程序调入内存,由于优先级高于job5,被进程调度程序调度运行;
job5在就绪队列中等待了20分钟,由于优先级低于job4,所以不被进程调度程序调度,仍在就绪队列中等待;10:40时刻:job4运行了15分钟,结束运行;
job5在就绪队列中等待了35分钟,被进程调度程序调度运行。10:50时刻:job5运行了10分钟,结束运行。953、一单道批处理系统中,有如下五个作业,并采用FCFS,SJF调度算法,试计算作业的平均周转时间和平均带权周转时间。(单位:小时)作业提交时间运行时间
17.002.528.002.539.00149.000.50510.001.096答:FCFS作业提交时间运行时间完成时间周转时间带权周转时间
17.002.59:302.5128.002.512:0041.639.00113.004449.000.5013.304.59510.001.014.304.54.5平均周转时间=3.9;平均带权周转时间=4.0297答:SJF作业提交时间运行时间完成时间周转时间带权周转时间
17.002.59:302.5128.002.514:306.52.639.00111:002249.000.5010:0012510.001.012:0022平均周转时间=2.8;平均带权周转时间=1.92983.5进程的控制一个进程可能由于某种原因进入挂起、阻塞或睡眠状态。常见的原因有以下几种。①请求系统服务或请求分配资源时得不到满足,进程暂时不能继续执行下去。②同步等待I/O的完成。③进程间互相配合共同完成一个任务时。④在利用消息实现进程间控制时,一进程在等待某一进程发消息时,也进入了阻塞状态。⑤进程将自己挂起或进程将自己某个子进程挂起。3.5.1进程的挂起993.5.2UNIX系统中的进程睡眠和唤醒1.进程睡眠在UNIX中,阻塞状态称为睡眠状态。核心中,进程通过调用sleep程序自愿地进入睡眠状态。其调用形式是:sleep(caddr_tchan,intdisp);参数chan是睡眠原因,它实际上是与睡眠事件相关的变量或数据结构的地址。如系统用一个标志变量event的值表示一个事件是否发生,那么等待该事件的睡眠原因就是该变量的地址&event。100如一个进程因等待系统分配给它一个缓冲区或等待需缓冲的I/O完成,那么其睡眠原因的值就是相应的缓冲区起始地址。变量disp的低7位是根据睡眠原因的缓急程度对睡眠进程设置的优先数,该优先数是在进程被唤醒后参与竞争处理机时起作用的。第8位为捕获软中断的PCATCH标志。当该标志置位时,若进程收到软中断信号,则恢复进程的运行状态,以执行信号处理程序进程睡眠101进程睡眠UNIX系统V按睡眠原因chan将睡眠进程排列到NHSQUE(64)个睡眠等待队列:struct
proc*hsque[NHSQUE]当正在将一个进程排到睡眠队列中时,核心要提高处理机的优先级来屏蔽所有的中断,以免在操作队列指针时因中断而引起混乱。核心还要将进程proc结构中的p_stat改为睡眠状态,在p_wchan中记录相应的睡眠原因。1022.定时睡眠sleep(chan,disp)是内核函数,用户是不能直接调用的。UNIX向用户另外提供了一个系统调用:sleep(seconds)
intseconds;该系统调用的功能是使调用进程定时睡眠seconds秒,可用于进程间的同步和定时处理事务1033.进程的唤醒当引起进程阻塞的原因消除后,核心就可将阻塞进程唤醒。唤醒的方法是根据睡眠原因先算出对应的阻塞队列。由于不同的原因可能挂在同一个队列中,因此在唤醒因某一原因进入睡眠的进程时,在对应的hash队列中还要核查睡眠原因。但由于采用了数量众多的hash队列,每个队列的长度一般都非常短,故大大减少了搜索的时间。104由于可能有多个进程因同一原因而阻塞,一般的算法是核心将这些进程全部唤醒。唤醒一个进程并不意味着该进程马上可以占用处理机,而是仅将它排到就绪队列中,使其有被调度的资格。因此,由于同一原因而唤醒的进程将先竞争处理机,从而才可获得有关的资源。如其中有一个获得等待的资源后,其他竞争相同资源的进程一旦获得处理机,还得再转入阻塞状态。105唤醒函数UNIX核心的唤醒函数是wakeup(chan),该函数的主要工作是首先提高处理机的优先级,以防止函数的执行被中断,然后在睡眠队列hsqueue[NHSQUE]中查找所有p_wchan等于参数chan的进程,将找到进程的p_stat置为SRUN(就绪状态),消除原睡眠原因(p_wchan置为0),将唤醒的进程送入就绪队列中。1063.5.3进程的终止和等待终止1.进程的终止在UNIX中,一个进程在完成了任务后,可用系统调用exit(intstatus)终止自己。status左移8位后作为传送给父进程的参数。进程调用exit时,关闭所有的打开文件,释放共享正文段、本进程的数据段、用户栈和核心栈的存储空间,暂时保留proc结构和盘交换区的user结构副本,使进程的状态改为SZOMB状态。1073.5.3进程的终止和等待终止进程终止时如有父进程因等待子进程的终止而处于睡眠状态,就唤醒父进程,最后调用swtch程序重新调度。父进程被调度占用处理机时,在对进入SZOMB的子进程作善后处理后,释放该子进程的一切资源,使其生命期最后被终止。1082.父进程等待子进程终止创建子进程的父进程可以通过系统调用pid=wait(&status)等待它的一个子进程终止。通过返回值pid,可获得终止进程的进程标识数。status的高位部分为子进程传给父进程的参数,status的低8位部分为核心设置的系统调用状态码。如父进程在调用wait时,子进程已先期终止了,那么对子进程作善后处理后,立即返回。1093.6进程的创建和图像改换3.6.1进程的创建1.进程创建的目的①在批处理系统中,当部分作业已经运行完毕,退出了系统,操作系统准备运行下一个批作业时,它要创建一个进程,读入作业控制命令,以输入作业和控制作业的运行。②分时系统中的用户在终端上登录时,操作系统需要创建一个进程,为用户建立交互命令的环境,接收、分析并执行用户输入的命令。110③在执行批处理命令时,系统要产生一个进程分析并处理批命令,对于批处理文件中的每一条命令,也要创造一个子进程来执行该命令。④当用户程序需要获得系统服务时,操作系统要创建一个新进程,代表用户程序的利益,完成一种系统的功能。⑤用户程序为了并发执行的需要,可以在运行时创建一系列的进程,各实现一个功能,并互相合作,完成总任务。1112.创建进程的主要步骤①为新进程分配惟一的进程标识数。接着为新进程分配进程控制块的空间,在进程表中加入新项。②为新进程分配进程各部分映像所需的内存空间,因此操作系统必须知道新进程的程序、数据和用户栈的大小。系统也能根据进程的类型为之分配默认的值,或在作业递交时根据用户的要求来分配。如果一个进程由另一进程产生,父进程会将创建子进程所需的存储要求传送给操作系统。如新进程共享已存在内存空间,就建立适当的链接信息。112③初始化进程控制块,如进程标识数、父进程标识数、程序计数器、系统栈指针、进程的状态等,根据进程的性质或默认值初始化进程的控制信息。进程的运行状态一般初始化为就绪状态或就绪挂起。除非进程显式申请较高的优先级,否则优先级设置为较低的级别。④子进程复制父进程扩充控制块。这意味着子进程将共享父进程的全部打开文件、信号处理方式等。子进程复制了父进程的数据区、核心栈和用户栈,这意味着父子进程程序执行的当前位置、状态、数据区、变量的当前值都是相同的。但随着父、子进程的各自独立执行,子进程的映像将会与父进程有明显的差异。113如何使父子进程完成不同的任务?由上可知,当一个子进程刚创建完成,它与父进程共享执行代码,且起始执行位置相同,数据区与栈段也相同。UNIX采用了在调用创建子进程的系统调用后,使父子进程具有不同的返回值,这样就可以采用判断语句,使父子进程可以执行不同的程序段,以便完成不同的任务。在执行系统调用fork后,父进程得到的返回值是所创建子进程的标识数,而子进程的返回值为0。114main(){ intpid; printf("Beforefork\n"); while((pid=fork())==-1); if(pid){ printf("Itisparentprocess:PID=%d\n",getpid()); printf"Producedchild’sPID=%d\n",pid); }else printf("Itischildprocess:PID=%d\n",getpid()); printf("Itisparentorchildprocess:PID=%d\n",getpid());}1153.6.2进程图像的改换fork虽然能产生子进程,将一个进程变成了两个,使它们能执行不同的程序段和完成不同的功能,形成了多进程并发运行的必要条件,但这两个进程的图像基本相同。对子进程来说,fork之前的图像已由父进程执行过了,子进程是不会再从头开始执行的,因而这部分图像的存在对子进程是毫无意义的;fork之后父进程所执行的图像部分的存在对子进程来说也是一个浪费。父进程也有相似的问题。116UNIX为了配合fork,还提供了进程图像改换的exec系列的系统调用。exec的调用进程用一个可执行文件中的程序和数据取代当前正在运行的程序和数据,从而使主调进程的图像改换成新的图像。尽管新执行的程序与原进程的执行程序完全不同,但该调用并不形成新进程,因为原进程的proc结构和user结构并不改换,其进程标识数p_pid与主调进程相同,与父进程的关系也没有改变。进程图像的改换(exec)1173.7线程
本节讨论一些与进程管理有关的新概念,这些概念出现在一些现代的操作系统中。
如更深入地思考一下,可以发现进程实际上包括了两种不同的独立概念:
一是与资源的所有权有关,
二是与执行有关。
这种区别已经导致了操作系统结构的发展,出现了线程这种形式的结构单元。
1183.7.1进程和线程在进程的概述一节中谈到进程包含了下列两个特征。①资源拥有单位:进程的虚址空间用于驻留进程的图像,进程可以分配到主存和控制其他的系统资源,如I/O通道、I/O设备和文件等。②调度单位:进程是可以并发执行的独立单元,它具有各种状态和调度优先级,是操作系统进行调度的一个实体。119
换言之,由于进程是一个资源的拥有者,因而在创建、撤销和切换中,系统必须为之付出较大的时空开销。正因如此,在系统中所设置的进程,其数目不宜过多,进程切换的频率也不宜过高,这也就限制了并发程度的进一步提高。若能将进程的上述两个属性分开,由操作系统分开处理,亦即对于作为调度和分派的基本单位,不同时作为拥有资源的单位,以做到“轻装上阵”;而对于拥有资源的基本单位,又不对之进行频繁的切换。正是在这种思想的指导下,形成了线程概念。1203.7.2多线程多线程指的是操作系统支持在单个进程中执行多个线程的能力。121在多线程环境中,进程被定义为保护单位和资源分配单位。在一个进程内部可以有一至多个线程,每一个线程具有如下特征:线程的执行状态(运行、就绪等);当不处于执行状态时保存的线程上下文环境,可以把线程看成是进程内一个独立的程序计数器的运转;一个执行栈;存取所属进程内的主存和其他资源,在本进程的范围内与所有线程共享这些资源线程描述122123在单线程的进程模式中(这里没有明显的线程概念),进程的表示包括进程控制块、用户地址空间(包括程序和数据)和进程执行时处理调用函数和从函数返回所用的用户栈和核心栈。当进程执行时,处理器中的寄存器由该进程控制,当进程不处于执行状态时,这些寄存器的内容就被保护在进程控制块中。在多线程的环境中,仍然有单个进程控制块和与进程相关联的用户地址空间,但是每个线程有各自的用户栈、核心栈和控制块,在控制块中包含有寄存器图像、优先级和其他与线程有关的状态信息。124这样,一个进程中的所有线程共享进程的状态和资源,它们驻留在相同的地址空间和访问相同的数据。如一个线程修改了存储空间中的一项数据,其他线程访问该数据项时获得了改变了的结果。如一个线程以读方式打开了一个文件,同一进程中的其他线程也能从该文件中读数据125线程的属性
在多线程OS中,通常是在一个进程中包括多个线程,每个线程都是作为利用CPU的基本单位,是花费最小开销的实体。线程具有下述属性。(1)轻型实体。线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源,比如,在每个线程中都应具有一个用于控制线程运行的线程控制块TCB、用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。126线程的属性(2)独立调度和分派的基本单位。在多线程OS中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小。(3)可并发执行。在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中的所有线程都并发执行;同样,不同进程中的线程也能并发执行。(4)共享进程资源。在同一进程中的各个线程,都可以共享该进程所拥有的资源。127线程的性质(1)线程是进程内的一个相对独立的可执行单元。因此不妨把线程看作是应用中的一个子任务的执行。(2)线程是操作系统的基本调度单元,因此线程中应包含有调度所需的必要信息。(3)由于线程是被调度的基本单元,而进程不是调度的单元。所以每个进程在创建时,至少需要同时为该进程创建一个线程。(4)需要时,线程可以创建其它线程。128线程的性质(5)进程是被分给并拥有资源的基本单位,同一进程内的多个线程共享该进程的资源。但线程并不拥有资源,只是使用它们。(6)由于共享资源(包括数据和文件),所以线程间需要通信和同步机制。(7)线程有生命期,在生命期中有状态的变化。129采用线程机制的优点对于多线程机制而言,一个进程可以有多个线程,这些线程共享该进程资源。这些线程驻留在相同的地址空间,共享数据和文件。如果一个线程修改了一个数据项,其它线程可以了解和使用此结果数据。一个线程打开并读一个文件时,同一进程中的其它线程也可以同时读此文件。总而言之,这些线程运行在同一进程的相同的地址空间内,这有以下优点。130采用线程机制的优点(1)首先用于创建和撤销线程的开销比创建和撤销进程的系统开销(CPU时间)要少的多。(2)CPU在线程之间切换的开销也远比进程之间切换的开销小。因为切换的线程都在同一地址空间内,只需修改线程控制表或队列,不涉及地址空间和其它工作。(3)线程机制也增加了通讯的有效性。如果是在进程之间通信,往往要求内核的参与,以提供通讯机制和保护机制。而线程间通信是在同一进程的地址空间内,共享主存和文件,所以非常简单,无需内核参与。(4)方便和简化了用户的程序结构工作。131注意:调度和分派是基于线程的,因此涉及到执行的大多数状态信息是以线程级数据结构维护的。可是,对于一些影响一个进程中所有线程的动作,操作系统必须在进程级管理。例如,挂起涉及到换出主存空间,由于进程中所有的线程共享相同的地址空间,所有的线程必须同时进入挂起状态。同样,进程的终止也终止了该进程中的所有线程。1323.7.3线程的状态与功能1.线程的状态与操作
线程在运行时,也具有下述三种基本状态:①执行状态,表示线程正获得处理机而运行;②就绪状态,指线程已具备了各种执行条件,一旦获得CPU便可执行的状态;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030年中国脲醛树脂市场十三五规划及投资风险评估报告
- 2025-2030年中国翡翠玉镯行业市场需求规模及前景趋势预测报告
- 2025-2030年中国空气净化系统工程行业发展状况及营销战略研究报告
- 2025-2030年中国碳酸氢钠干灭火剂市场运营现状及发展趋势分析报告
- 2025-2030年中国硅钢板行业运行动态与营销策略研究报告
- 广东文艺职业学院《数据描述与可视化》2023-2024学年第二学期期末试卷
- 沈阳职业技术学院《课件设计与微课制作》2023-2024学年第二学期期末试卷
- 四川文化传媒职业学院《汽车数据分析》2023-2024学年第二学期期末试卷
- 山西传媒学院《模式识别》2023-2024学年第二学期期末试卷
- 浙江树人学院《高等有机化学》2023-2024学年第二学期期末试卷
- 2021年中国高尿酸及痛风趋势白皮书
- 2023年甘肃省卷中考英语真题
- 最全-房屋市政工程安全生产标准化指导图册
- 《魅力教师的修炼》读书心得体会4篇
- 2016年百货商城商场超市企划全年活动策划方案模板
- 15 分章专项练习-整本书阅读系列《经典常谈》名著阅读与练习
- 幼儿园卫生保健人员任命书(保健医生)
- 一课一练┃二年级下册:1古诗二首
- 财务报表2019新版-已执行新金融和收入准则(财会〔2019〕6号)
- 2023年湖南食品药品职业学院高职单招(英语)试题库含答案解析
- GB/T 39096-2020石油天然气工业油气井油管用铝合金管
评论
0/150
提交评论