操作系统进程管理

进程管理

在这里插入图片描述

进程和线程

进程的概念和特征

  • 进程的概念:多道程序环境下,允许多个程序并发执行,此时他们失去封闭性,并且具有间断性及不可再现性。为此引入了进程的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性。
  • 为了使参与并发执行的程序能独立运行,必须为之配备一个专门的数据结构称为进程控制块PCB,描述进程的基本情况和运行状态,进而控制和管理进程,由程序段,相关数据段和PCB三部分组成了进程映像。所谓创建进程,实质上是创建进程映像中的PCB,而撤销进程实际上也是撤销PCB,即PCB是进程存在的唯一标志。
  • 定义:进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个单位。就是“时间片”分配的独立单位。
  • 特征:进程是由多道程序的并发执行引出的,它和程序完全不同:
    ①动态性:进程是程序的一次执行,有着创建,活动,暂停,终止等过程,有生命周期,动态性是其最基本特征。
    ②并发性:指多个进程同时存在内存中,可以同时运行。
    ③独立性:指进程实体是一个能够独立运行,获得资源和接收调度的基本单位,必须有PCB。
    ④异步性:由于进程相互制约,进程具有执行的间断性,即按照各自独立不可预知的速度前进,异步性导致结果不可再现性,为此必须配置相应的进程同步性。
    ⑤结构性:每个进程都配置一个PCB进行描述,结构上看进程实体由程序段,数据段,PCB组成。

进程的状态与转换

  • 进程动态性,环境动态性,通常5种状态:
    ①运行态:正在运行单处理机环境下,只有一个进程处于运行状态。
    ②就绪态:进程已经获得了除处理机外所有资源,一旦得到处理机可以立即执行,通常有多个就绪进程为就绪队列。
    ③阻塞态/等待态:进程等待某个事件,即使处理机空闲也无法执行。
    ④创建态:正在被创建:首先申请PCB,向PCB填写一些控制和管理进程的信息,然后由系统为该进程分配运行时必要资源,最后把该进程转成就绪态。
    ⑤结束态:进程正在消失,可能是进程正常结束或其他原因中断退出运行。先置为结束态再释放资源和回收等工作。
  • 五种状态转换:
    ①就绪态->运行态:就绪态进程被调度指挥,获得处理机资源进入运行态。
    ②运行态->就绪态:时间片用完了,让出处理机转为就绪态,还有可能是更高优先级的进程就绪的时候抢占处理机。
    ③运行态->阻塞态:进程请求某资源的使用和分配或等待某事件发生时,从运行态变为阻塞态。
    ④阻塞态->就绪态:进程等待的事件到来,只等处理机了。
    在这里插入图片描述

进程控制

  • 主要功能就是对系统中所有进程有效管理,具有创建,撤销,状态转换等功能。一般进程控制的程序段称为原语,特点就是原子性,不可分割的基本单位。
  • 进程创建:
    允许一个进程创建另一个,父子进程。子进程继承父进程的资源,撤销时归还给父进程,撤销父进程时撤销所有子进程。过程:
    ①为新进程分配一个唯一进程标识号,申请空白PCB。PCB申请失败则创建失败。
    ②为进程分配资源,必要的内存,若资源不足,进程进入阻塞态等待内存资源。
    ③初始化PCB,包括初始化标志信息,初始化处理机状态信息,控制信息,进程优先级等。
    ④若进程就绪队列能够接纳新进程,就插入就绪队列等待被调度运行。
  • 进程终止:
    引起终止的事件有:①正常结束。②异常结束(非法指令,运行超时,IO故障)。③外界干扰(外界请求终止,人工干预/父进程撤销等),过程:
    ①根据进程标识符,检索PCB,读出进程状态。
    ②若处于执行状态,立即终止,把资源分配给其他进程。
    ③若有子孙进程,全部终止。
    ④把所有资源,归还给父进程或OS。
    ⑤把PCB删除。
  • 进程阻塞和唤醒:
    阻塞(主动)就是运行态中等待某事件发生,调用原语Block,过程:
    ①找到进程标识号和PCB。
    ②若执行态则保护现场,转为阻塞态。
    ③把该PCB插入相应事件的等待队列,把处理机分配给其他进程。
    等待事件发生,调用原语Awake,过程:
    ①找到进程标识号和PCB。
    ②从等待队列移除,变为就绪态。
    ③把该PCB插入就绪队列,等待调度程序调度。
  • 进程切换:
    处理机从一个进程运行转到另一个进程运行,过程:
    ①保存处理机上下文,包括程序计数器和其他寄存器。
    ②更新PCB信息。
    ③把进程的PCB移入相应队列,如就绪队列,等待队列等。
    ④选择另一个进程执行,更新其PCB。
    ⑤更新内存管理的数据结构。
    ⑥恢复处理机上下文。

进程的组织

  • PCB:进程存在唯一标志,通过PCB管理控制进程。
    在这里插入图片描述

①进程描述信息:进程标识符(标识各个进程,唯一),用户标识符(标识进程归属用户)
②进程控制和管理信息:进程当前状态(状态信息,作为分配调度的依据),进程优先级。
③资源分配清单:用于说明有关内存地址空间或虚拟地址空间的状况,所打开文件的列表和所使用的IO设备信息。
④处理机相关信息:主要处理处理机中各寄存器值,当进程切换时,处理机状态信息必须保存在PCB中,重新执行可以从断点继续执行。

  • 程序段:能够被进程调度程序调度到CPU执行的程序代码段,多个程序可能有同一个代码段。
  • 数据段:可以是进程对应程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

进程的通信

高级通信方法有三类:共享存储,消息传递,管道通信。

线程概念和多线程模型

  • 线程的基本概念:
    引入进程目的是更好地使多道程序并发执行,提高资源利用率和系统吞吐量。而引入线程的目的是减小程序在并发执行时所付出的时空开销,提高OS的并发性能。线程最直接的理解就是轻量级“进程”,它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID,程序计数器,寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调用和分派的基本单位,线程自己不具有系统资源,只拥有一点运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程中的全部资源,一个线程可以创建/撤销另一个线程,也可以并发执行,也有三种状态:就绪,阻塞和运行。引入线程之后,进程只作为CPU之外系统资源分配单元,而线程是处理机分配单元,由于一个进程内部多个线程,则线程切换开销小。

  • 比较:
    ①调度:线程是独立调度的基本单位,进程是拥有资源的基本单位。
    ②拥有资源:进程是拥有资源的基本单位,而线程没有,但可以访问隶属进程的资源,提出线程就是为了切换线程时开销小,否则没有意义。
    ③并发性:进程线程均可以并发执行,使得操作系统更好的并发性,提高系统吞吐量。
    ④系统开销:由于进程增删,系统都要分配回收资源,开销远大于线程增删。进程切换的时候,涉及当前执行进程的CPU环境保存和新调度进程CPU环境读取,线程切换只需要保存和设置少量寄存器内容,开销很小。且线程同步与通信很容易实现。
    ⑤地址空间和其他资源:进程的地址空间相互独立,而同一个进程内线程共享。
    ⑥通信方面:进程之间通过线程同步和互斥手段辅助,而线程之间读写进入程序数据段来通信。

  • 线程的属性:
    多线程OS把线程作为独立运行的基本单位,此时进程不是基本可执行实体,但仍然具有执行状态,所谓的“执行”状态,就是其中线程在执行,线程主要属性如下:
    ①线程是一个情形实体,不拥有系统资源,但每个线程有唯一标识符和线程控制块(记录线程执行的寄存器和栈等现场状态)
    ②不同线程可以窒息感相同程序,即同一个程序不同用户调用也是不同线程。
    ③同一个进程中各个线程资源共享。
    ④线程是处理机的独立调度基本单位,多个线程可以并发执行。
    ⑤线程创建之后开启生命周期,直至终结。

  • 线程的实现方式:
    两类实现方式用户级线程(ULT),内核级线程(KLT)。
    ①用户级线程:有关线程管理的工作都应用程序完成,内核意识不到线程存在,应用程序可以通过使用线程库设计成多线程程序,通常应用程序从单线程程序开始,在该线程中运行,运行任何时刻都可以调用线程库中创建新线程。
    ②内核级线程:线程管理所有工作都由内核完成,应用程序通过调用接口。内核为进程及其内部的每个线程维护上下文信息,调用也在内核基于线程构架基础上完成。
    ③组合方式:线程创建,调度,同步在用户空间,映射到一些内核级线程上。
    在这里插入图片描述

  • 多线程模型:
    有些系统同时支持用户线程和内核线程,由此产生了不同的多线程模型,即实现用户级线程和内核级线程的联机方式。
    ①多对一模型:多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。此模式中,用户级线程对操作系统不可见。
    ②一对一模型:每个用户级线程映射到一个内核级线程。
    ③多对多模型:把n个用户级线程映射到m个内核级线程。m小于等于n。

处理机调度

调度的概念

  • 基本概念:从就绪队列中按照一定算法选择一个进程并把处理机分配给它运行,以实现进程并发地执行。

  • 调度的层次:一个作业从提交到开始,往往经历三级调度:
    ①作业调度:又称高级调度,其主要任务是按一定的原则从外存上处于后备的作业中挑选作业给他们分配资源,建立相应的进程,使得他们获得竞争处理机的机会,就是内存与辅存之间的调度。执行频率低,几分钟一次。
    ②中级调度:又称内存调度,其作用是提高内存利用率和系统吞吐量,为此应将那些暂时不能运行的进程调至外存等待,此时进程状态为挂起态,当他们已经具备运行条件且内存又稍有空闲的时候,由中级调度决定把外存上那些就绪进程调入内存,修改其状态为就绪态,在就绪队列上等待。
    ④进程调度:又称低级调度,主要任务就是按照某些策略从就绪队列中选取一个进程分配处理机,频率很高,几十毫秒一次。
    在这里插入图片描述

  • 三种调度联系:
    作业调度从外存的后备队列选择一批作业进入内存,为他们建立进程,送入就绪队列,进程调度从就绪队列选出一个进程运行,把CPU分配给它。而中级调度是为了提高内存利用率,系统将那些暂时不运行的进程挂起来,当内存宽松的时候,通过中级调度选择具备运行条件的进程唤醒。(进程调度不可或缺,最基本的)

调度的时机,切换和过程

  • 进程调度和切换程序是OS内核程序,现代OS中不可以进行进程调度和切换的情况有:
    ①处理中断过程中。
    ②进程在OS内核程序临界区中,临界区独占式访问共享数据,并行程序无法进入。
    ③其他需要完全屏蔽中断的原子操作过程中。
  • 应发生调度和切换的情况有:
    ①发生引起调度条件且当前进程无法继续运行下去时,可以马上进行调度与切换,非剥夺调度。
    ②中断处理结束或trap处理结束,返回被中断进程的用户态程序执行现场签,可以马上进行进程调度和切换,剥夺调度。

进程调度方式

指当某个进程正在处理机上执行,若有更重要的进程需要处理,则优先权更高的进程进入就绪队列,此时应该如何分配处理机,通常两种方式:
①非抢占方式:正在执行任务执行完再给更重要的任务配分。即一旦把CPU分配给一个进程,就会保持CPU直到终结或等待态。优点就是实现简单,开销小,适用于大多数批处理系统,单不用于分时系统和大多数实时系统。
②抢占方式:立即暂停正在执行进程,把处理机给更重要的进程。对于提高系统吞吐量和响应效率都有益处,但必须有原则地进行抢占。

调度的基本准则

调度算法考虑的评价准则,主要考虑以下几种:
①CPU利用率:使CPU尽可能忙。
②系统吞吐量:单位时间内CPU完成作业数量,长作业需要长时间处理,降低系统吞吐量,而短作业提高吞吐量,所以不同调度方式对于吞吐量影响大。
③周转时间:指从作业提交到完成经历时间,是作业等待,在就绪队列排队和处理机上运行及IO花费时间总和。
④等待时间:指进程处于等待处理机时间之和,单纯考虑等待时间即可评判算法好坏。
⑤响应时间:指从用户提交请求到系统首次响应所用的时间。

典型的调度算法

  • 先来先服务调度算法FCFS:
    最简单的算法,最先进入队列的作业调入内存分配资源,创建进程并放入就绪队列。
    在这里插入图片描述

属于非抢占算法,所有作业公平,但长作业会使得后边的短作业等待时间过长,所以不能作为分时系统和实时系统的策略,但常跟其他策略结合。算法简单,效率低,有利于CPU繁忙型作业,不利于IO繁忙型作业。

  • 短作业优先调度算法SJF:
    从后备队列中选择若干运行时间短的作业把处理机分配给它,使之立即执行,直到完成/发生某事件而阻塞时才释放处理机。
    在这里插入图片描述

该算法对于长作业不利,长作业出现可能长期都不被调度的“饥饿”现象。而且完全不考虑作业紧迫程度。作业时长是估计的并不准确,有可能长作业缩短很多,并不一定做到最短优先。

  • 优先级调度算法:
    优先级就是作业紧迫程度。从后备队列中选择优先级最高的若干作业调入内存,分配资源创建进程放入就绪队列,每次只分配给当前优先级最高的作业处理机。根据是否能抢占,又分为两种:非剥夺式优先级调度算法和剥夺式优先级调度算法,且进程优先级是否可以改变又把进程优先级分为两种:静态优先级(不改变,但确定优先级需要根据进程类型,对资源要求等)和动态优先级(改变,确定根据进程占有CPU时间长短,就绪过程等待CPU长短等)。
    一般来说,进程优先级设置参照原则:
    ①系统进程>用户进程。②交互式进程>非交互式进程。③IO型进程>计算型进程。
  • 高响应比优先调度算法:
    对于FCFC和SJF的平衡,考虑每个作业的等待时间和估计的运行时间。每次进行作业调度时先计算后备队列中每个作业响应比,找出最高的投入运行。响应比Rp=(等待时间+要求服务时间)/要求服务时间。
    则作业等待时间相同的时候短作业有利,要求服务时间相同时先来先服务有利,对于长作业等待时间增大响应比就可以增大到很大,克服了“饥饿”现象。
  • 时间片轮转调度算法:
    主要适用分时系统,系统把所有就绪进程按到达时间排列FCFS,但仅仅有一个时间片,使用完时间片就让下一个进程使用。时间片大小对于系统性能影响很大,时间片很大所有进程都能在一个时间片内完成,则就是FCFS算法,时间片很小则处理机在进程之间频繁切换,使得开销增大,真正用于运行用户进程的时间减少,因此时间片大小应该选择适当。
  • 多级反馈队列调度算法:
    融合了时间片轮转法和优先级调度算法,通过动态调整优先级和时间片大小。
    在这里插入图片描述

思想:
①设计多个就绪队列,每个队列不同优先级,优先级逐次降低。
②赋予各个队列进程执行时间片大小各不相同,优先级越高的队列时间片越小,时间片成1倍线性增长.
③一个新进程进入内存之后,首先把它放入第1级队列末尾,按照FCFS原则排队等待,若时间片内完成则撤离系统否则进入第2级队列末尾,同样进行下去。
④仅当第1级队列为空时,才调度第2级队列进行,若处理机正在第i级队列处理进程,1-i-1的队列加入优先级高的队列就会抢占当前处理机。
优点:
①终端型作业用户:短作业优先。
②短批处理作业用户:周转时间短。
③长批处理作业用户:经过前几个队列得到部分执行,不会出现“饥饿”现象。

进程同步

进程同步的基本概念

  • 多道程序环境下,进程是并发的,不同进程之间存在制约关系,为了协调进程之间的制约关系,所以出现了同步。(2+3*1,一定要让加法发生在乘法之后)

  • 临界资源:
    多个进程可以共享系统资源,但许多资源只能有一个进程独占,我们把一次仅允许一个进程使用的资源称为临界资源。(许多物理设备和变量数据)对于临界资源的访问必须互斥地进行,每个进程中访问临界资源的那段代码称为临界区,把访问临界资源分为四个部分:
    ①进入区:进入临界区使用临界资源,检查是否可以进,能进则设置正在访问标志,阻止其他进程访问临界区。
    ②临界区:访问临界资源的代码,又称临界段。
    ③退出区:把正在访问临界区的标志删除。
    ④剩余区:代码其余部分。
    在这里插入图片描述

  • 同步:
    同步亦称直接制约关系,指的是为了完成某种任务而建立起的若干进程,需要在某些位置上协调他们的工作次序而等待,传递信息所产生的制约关系。

  • 互斥:
    互斥是间接制约关系,当一个进程进入临界区另一个就需要等待。

实现临界区互斥的基本方法

  • 软件检查法:在进入区设置并检查一些标志来表明是否有进程在临界区,若有则循环检查进行等待,进程离开临界区后则在退出区修改标志。
    ①单标志法:设置一个公用整型变量turn,用于指示被允许进入临界区的进程编号。即turn=0,允许P0进入临界区,每次只有一个进程进入临界区,而且两个进程必须交替进入,否则另一个进程也无法进入临界区,因为标志一直不变了。
    在这里插入图片描述

②双标志先检测法:每个进程访问临界区之前,先查看临界资源是否被访问,正在访问则等待,否则可以进入临界区,设置flag[i],false标识Pi未进入临界区,true标识进入临界区。
在这里插入图片描述

③双标志后检测法:先检测可能同时进入,所以先把自己设置为true,再检测对方的状态,对方为true则等待,否则进入临界区。
在这里插入图片描述

④Peterson算法:防止两个进程为了进入临界区无期限等待,设置turn,每个进程先设置自己标志再设置turn,再同时检测另一个进程状态标志和不允许进入标志,以便保证两个进程同时想进入临界区时只有一个能进入。设置自己flag为true,把turn设置为其他进程,然后检测是否其他进程为true,是则等待,否则进入临界区。利用flag解决临界资源的互斥访问,利用turn解决“饥饿”现象。
在这里插入图片描述

  • 硬件实现方法:通过硬件支持实现临界问题的方法称为低级方法/元方法。
    ①中断屏蔽方法:当一个进程正在使用处理机执行它的临界区代码时,防止其他进程进入就禁止一切中断发生,或称之为屏蔽中断,关中断(CPU只在中断的时候进行进程切换)
    在这里插入图片描述

②硬件指令方法:
在这里插入图片描述

③硬件方法优点:任意数目进程都可以,简单,支持进程多个临界区。

信号量

  • 用来解决互斥问题的,只能被两个标准原语wait(S)和signal(S)访问,也就是P操作和V操作。原语是指完成某种功能且不被分割,不被中断执行的操作序列,通常硬件实现,
    ①整形信号量:wait——当s<=0则陷入循环,否则自减,signal——自增。
    ②记录型信号量:wait——当s.value<=0则资源分配完毕,自我阻塞,否则自减,分配资源。而signal——自增,释放一个资源,资源数增加1。
    ③利用信号量实现同步,互斥,前驱关系:设置一个进程公用的信号量S,并且根据需求进行初始化,V加P减,举例如下:
    在这里插入图片描述

管程

  • 大量分散的同步操作麻烦且容易死锁,所以产生进程同步工具——管程,保证了进程互斥,无须人工实现,降低死锁发生可能性,同时提供了条件变量,程序员灵活实现同步。
  • 定义:系统中硬软件资源均可用数据结构描述其资源特性,对该结构实施的操作定义为一组过程。进程对共享资源的申请,释放等操作都通过这组过程实现,还可以根据资源情况或接收阻塞进程访问,确保每次仅有一个进程使用共享资源,这就可以统一管理共享资源访问,实现进程互斥,这个资源管理程序,就是管程。定义了一个数据结构和能为并发进程所执行的一组操作,能够同步进程和改变管程中的数据。
  • 组成:名称,局部与管程内部的共享数据结构说明,操作的一组过程,初始化语句。
  • 管程很像一个类CLASS,能够把共享资源封装起来,且每次允许一个进程进入管程,从而实现互斥。

经典同步问题

重在理解,信号量和缓冲区的运用。

  • 生产者-消费者问题
  • 读者-写者问题
  • 哲学家就餐问题
  • 吸烟者问题

死锁

死锁的概念

  • 定义:多个进程并发执行带来死锁这个问题,多个进程因竞争资源而造成的相互等待的僵局。
  • 产生原因:
    ①系统资源的竞争:
    通常是系统中不可剥夺资源,数量不足需求,比如打印机。(不剥夺资源竞争不会死锁)
    ②进程推进顺序非法:
    进程运行中请求和释放资源顺序不当,也会死锁(两个进程各自占着对面需要的资源),信号量也会产生死锁。(两个进程等待对方发来的消息)
    ③死锁产生必要条件:
    产生死锁必须同时满足4个条件:
    Ⅰ:互斥条件:只有一个进程能够拥有该资源。
    Ⅱ:不剥夺条件:资源未使用完不可被剥夺。
    Ⅲ:请求并保持条件:进程至少已经保持了一个资源,并且提出了请求资源(该资源已被占有),此时请求失败,但还不放弃自己已经得到的资源。
    Ⅳ:循环等待条件:存在一种进程资源的循环等待链,相当于一个环(12345,1的请求资源被2占有。。。5的资源被1占有)
    在这里插入图片描述

死锁处理策略:

  • 死锁预防:设置某些限制条件,破坏4个必要条件,防止发生死锁。
  • 避免死锁:动态分配资源中,使用某种方法防止进入不安全状态,进而避免死锁。
  • 死锁检测和解除:允许死锁,及时检测并且接触即可。
    在这里插入图片描述

死锁预防:

  • 破坏互斥条件:不可行(肯定有资源是互斥的)
  • 破坏不剥夺条件:一个保持资源的进程得不到需要的资源就把拥有的全部资源释放。
  • 破坏请求并保持条件:设备申请就申请所有需要的资源,也就是说没有资源才可以申请。
  • 破坏循环等待条件:给系统中资源编号,每个进程必须按照递增顺序请求资源,即申请大于自己编号的资源。

死锁避免:

  • 系统安全状态:系统能够按照某种进程的推进顺序为每个进程分配所需资源,直到满足每个进程对于资源的最大需求,使每个进程都顺序完成,此时进程序列为安全序列,若系统中没有一个安全序列,则系统是不安全状态。并非不安全状态就是死锁状态,只是有可能是死锁状态,但只要是安全状态,系统就可以避免死锁状态。
  • 银行家算法:最著名的死锁避免算法:三个矩阵一个向量(可用资源向量Available,最大需求矩阵Max,分配矩阵Allocation,需求矩阵Need,其中Need=Max-Allocation),先分配资源,检查是否处于安全状态(安全性算法,求一个安全序列),安全则确定分配,不安全则取消分配。一定掌握!!!

死锁检测和解除

  • 资源分配图:圆圈代表进程,框代表资源,其中从进程到资源的有向边称为请求边,反向则是分配边。

  • 死锁定理:
    简化资源分配图就可以检测系统状态S是否为死锁,不可完全简化就是死锁的。
    在这里插入图片描述

  • 死锁解除:
    ①资源剥夺法:挂起死锁进程,抢占其资源,把资源分配给其他死锁进程。
    ②撤销进程法:强制撤销部分甚至全部死锁进程并剥夺这些进程的资源,撤销原则按照优先级和撤销进程代价高低进行。
    ③进程回退法:让一个/多个进程回退到足够避免死锁的地步,要求系统保持历史状态,设置还原点。

小结

在这里插入图片描述

  • 进程同步和互斥:
    并发进程执行会产生相互制约的关系:一种是进程之间竞争使用临界资源,但只有一个能用,这是互斥,是竞争关系。而进程之间协同完成任务,某点上进程需要等待另一个进程发来的消息,以便协同一致,是一种协作关系。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值