操作系统笔记(二)

操作系统——进程管理

1、第二章:进程管理

通过下面的思维导图来依次分享「进程管理」里面重要知识点的笔记。

2、第一节:进程与线程

1.  进程从不同的角度,进程可以有以下不同的定义

①进程是程序的一次执行过程。

②进程是一个程序及其数据在处理上顺序执行时所发生的活动。

③进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

(总结:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位)

2.  进程控制块(Process Control Block,PCB):实质为一个专门的数据结构,系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。PCB是进程存在的唯一标志;相应的,由程序段、相关数据段和PCB三部分构成进程映像(进程实体)创建进程,实质上是创建进程映像中的PCB;而撤销进程,实质上是撤销进程的PCB;进程映像是静态的,进程是动态的

3.  进程的特征

1)动态性:进程是程序的一次执行,它有着创建、活动、  暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。

2)并发性:  指多个进程实体,同存于内存中,  能在一段时间内同时运行,并发性是进程的  第重要特征,同时也是操作系统的重要特征。引入进程的目的就是为了使程序能与其他进程的程序并发执行,以提高资源利用率。

3)独立性:指进程实体是一个能独立运行、独立获得姿源和独立接受调度的基本单位。

4)异步性:  由于进程的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。

5)结构性:  每个进程都配置一个PCB对其进行描述。从结构上看,进程实体是由程序段、数据段和进程控制段三部分组成的。

4.  进程的状态分为以下几种:

1)运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。

2)就绪状态:进程已处于准备运行的状态,即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。

3)阻塞状态,又称为等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。

4)创建状态:进程正在被创建,尚未转到就绪状态。创建需要的步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所必需的资源;最后把该进程转入到就绪状态。

5)结束状态:进程正从系统中消失,这可能是进程正常结束或其他原因中断退出运行。当进程需要结束运行时,系统首先必须置该进程为结束状态,然后在进一步处理资源释放和回收等工作。

5.  进程状态的转换:

1)就绪状态—>运行状态:处于就绪状态的进程被调度后,获得处理机资源(分派处理机的时间片)。

2)运行状态—>就绪状态:处于运行状态的进程在时间片用完后,不得不让出处理机;此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正执行的进程转换为就绪状态,让更高优先级的进程执行。

3)运行状态—>阻塞状态:当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行状态转换为阻塞状态。

4)阻塞状态—>就绪状态:当进程等待的时间来到时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞状态转换为就绪状态。

(注意:一个进程从运行状态变成阻塞状态是一个主动的行为,而从阻塞状态变到就绪状态的一个被动的行为,需要其他相关进程的协助。)

6.  进程控制:主要功能是对系统中所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。

7.  线程:是一个基本的CPU执行单元,也是程序执行流的最小单元。由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。

8.  在多线程操作系统中,把线程作为独立运行(或调度)的基本单位,线程的主要属性如下:

1)线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。

2)不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,  操作系统为它们创建成不同的线程。

3)同一进程中的各个线程共享该进程所拥有的资源。

4)线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各线程可交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务则可缩短进程的处理时间。

5)一个线程被创建后便开始了它的生命周期,直至终止,线程在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化。

9.  线程的作用:是为了减少程序在并发执行时所付出的时间开销,提高操作系统的并发性能。

3、第二节:处理机调度

1.  处理机调度:是对处理机进行分配,从就绪队列中,按照一定的算法(公平、高效)选择一个进程并将处理机。

2.  进程调度的方式:随是指当某一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,通常有以下两种进程调度方式:

1)非剥夺调度方式,又称为非抢占方式。是指当一个进程正在处理机上执行时,即使有某个更为重要或紧迫的进程进入就绪队列,仍然让正在执行的进程继续执行,直到该进程完成或发生某种事件而进入阻塞状态时,才把处理机分配给更为重要或紧迫的进程

2)剥夺调度方式,又称为抢占方式。是指当一个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要使用处理机,则立即暂停正在执行的进程,将处理机分配给这个更为重要或紧迫的进程。

3.  常用的调度算法:

1)先来先服务(Frist Come Frist Serve, FCFS)调度算法:既可以用于作业调度也可以用于进程调度。在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列。在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。

FCFS 调度算法的特点是算法简单,但效率低;对长作业有利,但对短作业不利;有利于CPU繁忙型作业,而不利于I/O繁忙型作业。

2)短作业(进程)优先(Shortest Job First, SJF)调度算法是指对短作业(进程)优先调度的算法。短作业优先(SJF)调度算法是从后备队列中选择一个或若干个估计运行时间短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法,则是从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即运行,直到完成或因某种原因而阻塞时才释放处理机。

SJF调度算法的优缺点:平均等待时间、平均周转时间最少。该算法对长作业不利,由于程序总是优先调度那些(即使是后进来的)短作业,将导致长作业长期不被调度(即“饥饿”现象);

3)优先级调度算法又称为优先权调度算法,既可以用于作业调度,也可以用于进程调度。根据作业或进程的优先级选择选择优先级高的作业或进程。

优先级调度算法的优缺点:考虑到作业或进程的紧迫程度,但也会产生“饥饿”现象,即优先级低的作业或进程长期不被调度。

4)高响应比优先(Highest Response Ratio Next, HRRN)调度算法,改算法是对FCFS调度算法和SJF调度算法的一种综合平衡,同时考虑每个作业的等待时间和估计运行时间。在每次运行作业调度时,先计算后备作业队列中每个作业的响应比,从中选出响应比最高的作业投入运行。

响应比Rp=(等待时间+要求服务时间)/要求服务时间

HRRN算法的特点:

①当作业的等待时间相同时,则要求服务时间越短,其响应比越高,有利于短作业。

②当要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而它实现的是先来先服务。

③对于长作业,作业的响应比可以随等待时间的增加而提高,当其等待时间足够长时,其响应比便可升到很高,从而也可获得处理机。克服了饥饿状态,兼顾了长作业。

5)时间片轮转调度算法,主要适合于分时系统,系统将所有就绪就绪按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅运行一个时间片(如100ms)。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等待再次运行。

时间片轮转调度算法的特点,如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此,时间片的大小应选择适当

  

4、第三节:进程同步

1.临界资源:一次只允许一个进程使用的资源。许多物理设备都属于临界资源,如打印机等,此外还有许多变量、数据都可以被若干进程共享,也属于临界资源。  

2.  临界区:对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区。

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

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

5.  同步机制应遵循以下准则:

1)空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。

2)忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待。

3)有限等待。对请求访问的进程,应保证能在有限时间内进入临界区。

4)让权等待。当进程不能进入临界区时,应立即释放处理器,防止进行忙等待。

6.  管程:是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。

7.  管程的组成(实质上是一个抽象类):

1)局部于管程的共享结构数据说明。

2)对该数据结构进行操作的一组过程。

3)对局部于管程的共享数据设置初始值的语句。

8.  管程的基本特征

1)局部于管程的数据只能被局部于管程内的过程所访问。

2)一个进程只有通过调用管程内的过程才能进入管程访问共享数据。

3)每次仅允许一个进程在管程内执行某个内部过程。

(由于管程是一个语言成分,所以管程的互斥访问完全由编译程序在编译时自动添加,无需程序员关注,而且保证正确)

5、第四节:死锁

1.  死锁的定义:是指多个进程因竞争资源而造成的一种僵持(互相等待),若无外力作用,这些进程都将无法向前推进。

2.  死锁产生的必要条件:

①互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

②不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。

③请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放

④循环等待条件:存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。

(产生死锁必须同时满足以上四个条件,只要其中任一条吧不成立,死锁就不会发生。)

3.  死锁的处理策略:

1)预防死锁:

设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个,以防止发生死锁。

2)避免死锁:

方法一:允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程,否则,让进程等待。

安全状态,是指系统能按某种进程推进顺序(P1,P2, ... ,Pn),为每个进程Pi分配其所需要资源,直至满足每个进程对资源的最大需求,使每个进程都可顺序地完成。此时称P1,P2, ... ,Pn为安全序列。如果系统无法找到一个安全序列,则称系统处于不安全状态。

方法二:银行家算法

银行家算法的思想是:把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能香满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。

3)死锁的检测和解除:

死锁的检测:利用死锁定理简化资源分配图以检测死锁的存在。

死锁解除的主要方法有:

资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程,但应防止被挂起的进程长时间得不到资源,而处于资源匮乏的状态。

②撤销进程法。强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。

③进程回退法。让一个(或多个)进程回退到足以回避死锁的地步,进程回退时自愿释放自愿而不是被剥夺。要求系统保持进程的历史消息,设置还原点。

通过博客将自己的学习笔记展现出来,也是对自己学习的一种记录。                                                                  

              扫一扫,关注公众号

猜你喜欢

转载自blog.csdn.net/ziyu_one/article/details/86607909