进程与线程408

时间:2022-04-19 01:20:07

1、进程与线程

1.1 进程的概念与特征

  • 进程的概念

进程的概念在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征。为此引入了进程(Process)的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性共享性。

  • 进程的特征
  1. 动态性。进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
  2. 并发性。指多个进程实体同存千内存中,能在一段时间内同时运行。
  3. 独立性。指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。
  4. 异步性。由于进程的相互制约,使得进程按各自独立的、不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此在操作系统中必须配置相应的进程同步机制。
    进程与线程408

1.2 进程的状态与转换

  • 进程状态
  1. 运行态。进程正在处理机上运行。在单处理机中,每个时刻只有一个进程处千运行态。
  2. 就绪态。进程获得了除处理机外的一切所需资源,一且得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
  3. 阻塞态,又称等待态。进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。系统通常将处千阻塞态的进程也排成一个队列,甚至根据阻塞原因的不同,设置多个阻塞队列。
  4. 创建态。进程正在被创建,尚未转到就绪态。创建进程需要多个步骤:首先申请一个空PCB, 并向 PCB 中填写用千控制和管理进程的信息;然后为该进程分配运行时所必须的资源;最后把该进程转入就绪态并插入就绪队列。但是,如果进程所需的资源尚不能得到满足,如内存不足,则创建工作尚未完成,进程此时所处的状态称为创建态。
  5. 结束态。进程正从系统中消失,可能是进程正常结束或其他原因退出运行。进程需要结束运行时,系统首先将该进程置为结束态,然后进一步处理资源释放和回收等工作。
  • 状态转化
    基本状态之间的转换如下:
    • 就绪态 -> 运行态:处于就绪的进程被调度后,获得处理机资源),于是进程由就绪态转换为运行态。
    • 运行态 -> 就绪态:处于运行态的进程在时间片用完后,不得不让出处理机,从而进程由运行态转换为就绪态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转换为就绪态,让更高优先级的进程执行。
    • 运行态 -> 阻塞态:进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/0 操作的完成)时,它就从运行态转换为阻塞态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。
    • 阻塞态 -> 就绪态:进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞态转换为就绪态。
      进程与线程408
      一个进程从运行态变成阻塞态是主动的行为,而从阻塞态变成就绪态是被动的行为,需要其他相关进程的协助。

1.3 进程的组成

进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位。
进程实体(又称进程映像)由程序段、相关数据段和 PCB 三部分构成。所谓创建进程,实质上是创建进程实体中的 PCB;而撤销进程,实质上是撤销进程的 PCB。值得注意的是,进程映像是静态的,进程则是动态的。
进程与线程408

1.4进程控制

进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。

1.5 进程的通信

进程通信是指进程之间的信息交换。PV 操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三类。

  • 共享存储
  • 消息传递
  • 管道通信
    进程与线程408

2、处理机调度

2.1 调度的基本概念

  • 概念
    在多道程序系统中,进程的数量往往多于处理机的个数,因此进程争用处理机的情况在所难免。处理机调度是对处理机进行分配,即从就队列中按照一定的法(公平高效的原则)选择一个进程并将处理机分配给它运行,以实现进程并发地执行。
  • 调度的层次
    进程与线程408
    (1) 高级调度(作业调度)
    按照一定的原则从外存上处于后备队列的作业中挑选一个(或多),给它(们)分配内存输入/输出设备等必要的资源,并建立相应的进程,以使它(们)获得竞争处理机的权利。简言之作业调度就是内存与辅存之间的调度。每个作业只调入一次、调出一次。
    多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度(2) 中调度(内存调度)
    引入中级调度的目的是提高内存利用率和系统吞吐量。为此,将那些暂时不能运行的进程调至外存等待,此时进程的状态称为挂起态。当它们已具备运行条件且内存又稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改其状态为就绪态,挂在就绪队列上等待。中级调度实际上是存储器管理中的对换功能。
    (3)低级调度(进程调度)
    按照某种算法从就绪队列中选取一个进程,将处理机分配给它。进程调度是最基本的一种调度,在各种操作系统中都必须配置这级调度。进程调度的频率很高,一般几十毫秒一次。
    进程与线程408

2.2 调度算法的评价指标

进程与线程408

  1. CPU利用率:指CPU “忙碌”的时间占总时间的比例。
    利用率 = 忙碌时间 / 总时间
  2. 系统吞吐量:单位时间内完成作业的数量
    系统吞吐量 = 总共完成了多少到作业 / 总共花了多少时间
  3. 周转时间 = 作业完成时间 – 作业提交时间
    平均周转时间 = 各作业周转时间之和 /作业数
    带权周转时间 = 作业周转时间 / 作业实际运行的时间= (作业完成时间 - 作业提交时间 )/ 作业实际运行的时间
    平均带权周转时间 = 各作业带权周转时间之和 / 作业数
  4. 等待时间,指进程/作业处于等待处理机状态时间之和,等待时间越长,用户满意度越低。
  5. 响应时间,指从用户提交请求到首次产生响应所用的时间。

2.3 调度的实现

  1. 调度程序(调度器)
    在操作系统中,用于调度和分派 CPU 的组件称为调度程序,它通常由排队器、分派器和上下文切换器三部分组成。
  2. 进程调度的时机、切换与过程、调度方式
    进程与线程408

2.4 经典的调度算法

  1. 先来先服务 (FCFS) 调度算法
  • FCFS 度算法是一种最简单的调度算法,它既可用于作业调度,又可用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个几个作业,将它们调入内存分配必要的资源,创建进程并放入就绪队列。
    在进程调度中FCFS 度算法次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到运行完成或因某种原因而阻塞时才释放处理机。
  • FCFS度算法属于不可剥法。从表面上看,它对所作都是公平的,若一个长作业先到达系统,就会使后面的许多短作业等待很长时间,因此它不能作为分时系统和实时系统的主要调度策略。但它常被结合在其他调度策略中使用。例如,在使用优先级作为调度策略的系统中,往往对多个具有相同优先级的进程按 FCFS 原则处理。
  • FCFS 度算法的特点是算法简单,但效率低,对长作业比较有,对短作业不利(相对SJF 和高响应比);有利于CPU 繁忙型作业,而不利于I / O忙型作业 。
    进程与线程408
  1. 短作业优先(SJF, Shortest Job First)
  • 短作业(进程优先法是对(法。(SJF调度算法从后备队列中选择一个或若干估计运行时间最短的作业,将它们调入内存运行;短进程优先(SPF)度算法从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。
  • SJF法存在不容忽视的缺点:
    (1)该法对长作业不利,SJF调度算法中长作业的周转时间会增加。
    (2)该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业会被及时处理。
    (3)由于作业的长短是根据用户所提供的估计行时间而定的,而用户可能会有或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。注意,SJF 调度算法的平均等待时间、平均周转时间最少。
    进程与线程408
  1. 优先级调度算法
    优先级调度算法既可用于作业调度,又可用于进程调度。该算法中的优先级用于描述作业的紧程度。在作业度中,优先级调度算法每次从后备作业队列中选择优先级的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,优先级调度算法每次从就绪队列中选择优先级最高的进程,将处理机分配给它,使之投入运行。
    进程与线程408
  2. 高响应比优先(HRRN, Highest Response Ratio Next)
    高响应比优先调度算法主要用于作业调度,是对 FCFS 度算法和 SJF 算法的一种综合平衡,同时考虑了每个作业的等待时间和估计的运行时间。在每次进行作业调度时,先计算后备乍业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。
    响应比的变化规律可描述为:
    响应比 =(等待时间+要求服务时间)/ 要求服务时间
    进程与线程408
  3. 时间片轮转(RR, Round-Robin)
    时间片轮转调度算法主要适用于分时系统。在这种算法中,系统将所有就绪进程按 FCFS 策略排成一个就绪队列,调度程序总是选择就绪队列中的第一个进程执行,但仅能运行一个时间片,如50ms。在使用完一个时间片后,即使进程并未运行完成,它也必须释放出(被)处理机给下一个就绪进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。
    在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。若时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。若时间片很小,则处理机将在进程间过于频繁地切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此,时间片的大小应选择适当,时间片的长短通常由以下因素确定:系统的响应时间、就绪队列中的进程数目和系统的处理能力。
    进程与线程408
  4. 多级反馈队列调度算法
    多级反馈队列调度算法是时间片轮转调度算法和优先级调度算法的综合与发展。通过动态调整进程优先级和时间片大小,多级反馈队列调度算法可以兼顾多方面的系统目标.例如,为提高系统吞吐和缩短平均周转时间而照顾短进程:为获得较好的 I/设备利用率和缩短响应时间而照顾I/O型进程:同时,也不必事先估计进程的执行时间。
    进程与线程408
    进程与线程408

3、同步与互斥

3.1 同步与互斥的基本概念

  1. 临界资源
    多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所用,我们将一次仅允许一个进程使用的资源称为临界资源。
    许多物理设备都属于临界资源,如打印机等。此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。
    对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区为了保证临界资源的正确使用,可把临界资源的访问过程分成4个部分:
    (1)进入区。为了进入临界区使用临界资源,在进入区要检查可否进入临界区,若能进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。
    (2)临界区。进程中访问临界资源的那段代码,又称临界段。
    (3)退出区。将正在访问临界区的标志清除。
    (4)剩余区。代码中的其余部分。

  2. 同步
    同步亦称直接制约关系,是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系源于它们之间的相互合作。

  3. 互斥
    互斥也称间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问此临界资源。

3.2 实现临界值互斥的基本方法

2.3.2 实现临界区互斥的基本方法
1.软件实现方法
1)单标志法:违背“空闲让进”原则
2)双标志法先检查:违背“忙则等待”原则
3)双标志法后检查:会导致“饥饿”现象
4)皮特森算法:单标志法和双标志法后检查的结合
2.硬件实现方法
(1)中断屏蔽法:进区关中断,出区开中断
(2)硬件指令法:设立原子操作指令:TestAndSet指令、Swap指令

3.3 互斥锁

解决临界区最简单的工具就是互斥锁 (mutex lock)。一个进程在进入临界区时应获得锁;在退出临界区时释放锁。函数 acquire()获得锁,而函数 release()释放锁。
每个互斥锁有一个布尔变量 available,表示锁是否可用。如果锁是可用的,调用 acquire()会成功,且锁不再可用。当一个讲程试图获取不可用的锁时,会被阻塞,直到锁被释放。

3.4 信号量

信号量机制是一种功能较强的机制,可用来解决互斥与同步问题,它只能被两个标准的原语wait(S)和signal(S)访问,也可记为“P操作”和“V操作”。
原语是指完成某种功能且不被分割、不被中断执行的操作序列,通常可由硬件来实现。例如,前述的 Test-and-Set 和 Swap 指令就是由硬件实现的原子操作。原语功能的不被中断执行特性在单处理机上可由软件通过屏蔽中断方法实现。原语之所以不能被中断执行,是因为原语对变量的操作过程若被打断,可能会去运行另一个对同一变量的操作过程,从而出现临界段问题。

3.5 管程

管程定义
管程:由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程的数据和同步过程
管程的组成:
(1)管程的名称
(2)局部于管程的共享结构数据说明
(3)对该数据结构进行操作的一组过程
(4)对局部于管程的共享数据设置初始值的语句
管程的基本特性:
1)局部于管程的数据只能被局部于管程内的过程所访问
2)一个进程只有通过调用管程内的过程才能进入管程访问共享数据
3)每次仅允许一个进程在管程内执行某个内部过程

4、死锁

进程与线程408

4.1 概念

死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象。

  • 死锁、饥饿、死循环的区别
    进程与线程408

4.2 死锁产生的必要条件

产生死锁必须同时满足一下四个条件,只要其中任一条件不成立,死锁就不会发生。
(1)互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。
(2)不剥夺条件:进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放。
(3)请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放。
(4)循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个进程所请求。

4.3 预防死锁

进程与线程408