第二章 进程的管理

第二章 进程的管理

2.1 进程与线程

2.1.1 进程的概念与特征

  1. 进程的概念
    在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性
    的特征,为此引入了进程概念。
    注1程序段、相关数据段和PCB三部分构成了进程映象(进程实体)。PCB是进程存在的唯一标志。所谓创建进程,实际上是创建进程映象中的PCB;而撤销进程,实际上是撤销进程的PCB。
    注2进程实体是静态的,进程是动态的。我们可以把传统的操作系统中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。
  2. 进程的特征
    1)动态性。进程是一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是
    动态地产生、变化和消亡的。动态性是进程最基本的特征。
    2)并发性。指多个进程同时存在于内存中,能在一段时间内同时运行。并发性是进程的重要特
    征。

    3)独立性。指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。凡未建立
    PCB的程序,都不能作为一个独立的单位参与运行。
    4)异步性。由于进程的相互制约,使得进程具有执行的间断性,即进程按各自独立的、不可知的
    速度推进。
    5)结构性。每个进程都配置一个PCB对其描述。进程实体都是由程序段、数据段和进程控制块
    部分组成的。

2.1.2 进程的状态与转换

1)运行态:进程正在处理机上运行。在单处理机环境下,每个时刻最多只有一个进程处于运行态
2)就绪态:进程已处于准备运行状态,即进程获得了除处理机外的一切所需资源,一旦得到处理机即
可运行。
3)阻塞态:又称为等待态。进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或
等待输入/输出完成。即使处理机空闲,该进程也不能运行。
4)创建态:进程正在被创建,尚未转到就绪态。创建进程通常需要多个步骤:首先申请一个空白的
PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所需的必要资源,
最后把该进程转入就绪态。
5)结束态:进程正在从系统中消失,可能是进程正常结束或其它原因中断退出运行,进程需要结束运
行时,系统首先必须置该进程为结束态,然后再进一步处理资源释放和回收工作。

  • 五种状态的基本转换
    (1)就绪态->运行态:处于就绪的进程被调度后,获得处理机资源(分派处理机时间片),于是进程就由就绪态转为运行态。
    (2)运行态->就绪态:处于运行态的进程在
    时间片用完
    后,不得不退出处理机,从而进程由运行态转为就绪态。此外,在可剥夺的操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转为就绪态,让更高优先级的进程执行。
    (3)运行态->阻塞态:进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行态转阻塞态。
    (4)阻塞态->就绪态:进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞态转换为就绪态。
    】进程从运行态转变为阻塞态是主动行为,而从阻塞态变成就绪态是被动行为,需要其它相关进程的协助。

2.1.3 进程控制

在操作系统中,一般把进程控制的程序称为原语,原语的特点是执行期间不允许被中断,它是一个
不可被分割的基本单位。

1. 进程的创建

  • 子进程与父进程

允许一个进程创建另一个进程。此时创建者称为父进程,被创建的进程称为子进程,子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。此外,在撤销父进程时,必须同时撤销其所有子进程。

  • 引起进程创建的事件

终端用户登录、作业调度、系统提供服务、用户程序的应用请求等

  • 操作系统创建一个新进程的过程

1)为新进程分配一个唯一的进程标识号,并申请一个空白的PCB(PCB是有限的)。若PCB申请失败,则创建失败。
2)为进程分配资源,为新进程的程序和数据及用户栈分配必要的内存空间(在PCB中体现)。
】若资源不足(如内存空间),则并不是创建失败,而是处于**“等待态”或称为“阻塞态”等待的是内存这个资源。
3)初始化PCB,主要包括初始化
标志信息**、初始化状态信息和初始化处理机控制信息,以及设置进程的优先级等。
4)若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。

2. 进程的终止

  • 引起进程终止的事件
    1)正常结束:表示进程的任务以及完成并准备退出。
    2)异常结束:表示进程运行时,发送了某种异常事件,使程序无法继续运行,如存储区越界、非法指令、特权指令错、保护错、I/O故障等。
    3)外界干预:指进程应外界的请求而终止运行,如操作员或操作系统干预、父进程请求和父进程终止
  • 进程终止的过程
    1)根据被终止的标识符,检索PCB,从中读出该进程的状态。(读状态)
    2)若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。(终止执行)
    3)若该进程还有子进程,则应将其所有的子进程终止。(终止子进程)
    4)将该进程所拥有的全部资源归还给其父进程,或归还给操作系统。(还资源)
    5)将该PCB从所在队列中删除。(删PCB)

3. 进程的阻塞和唤醒

  • 引起进程由执行态变为阻塞态的事件
    正在执行的进程,由于期待的某些事件未发生,如请求系统资源失败、等待某种操作的完成、新数据尚未到达或无新工作可做等,由系统自动执行阻塞原语(Block),使自己由运行态变为阻塞态。当被阻塞进程所期待的事件发生时,由有关进程调用唤醒原语(Wakeup),将等待该事件的进程唤醒。
  • 阻塞原语的执行过程
    1)找到将要被阻塞进程的标识号对应的PCB。(找PCB)
    2)若该进程为运行态,则保护其现场,将其状态转为阻塞态,停止运行。(转状态)
    3)把该PCB插入相应事件的等待队列。(插入等待队列)
  • 唤醒原语的执行过程
    1)在该事件的等待队列中找到相应进程的PCB。(找PCB)
    2)将其从等待队列中移出,并置其状态为就绪态。(从等待队列中移出)
    3)把该PCB插入就绪队列,等待调度程序调度。(插入就绪队列)
    【注】阻塞原语和唤醒原语是一对作用刚好相反的原语,必须成对使用。Block原语是由被阻塞进程自我调用实现的,而Wakeup原语则是由一个与被唤醒进程合作或被其它相关进程调用实现的。

4.进程切换
进程的切换是指处理机从一个进程的运行跳到另一个进程上运行。进程的切换是在内核的支持下实现的,因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。

  • 进程的切换过程
    1)保存处理机上下文,包括程序计数器和其他寄存器。
    2)更新PCB信息
    3)把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
    4)选择另一个进程执行,并更新其PCB。
    5)更新内存管理的数据结构
    6)恢复处理机上下文
  • 进程切换与处理机模式切换的区别
    注意,进程切换与处理机模式切换是不同的,模式切换时,处理机逻辑上可能还在同一进程中运行。若进程因中断或异常进入核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核时保存的CPU现场,而无需改变当前进程的环境信息。但若要切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变

2.1.4 进程的组织

2.1.5 进程的通信

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

2.1.6 线程概念和多线程模型

  1. 线程的基本概念
    引入进程的目的是为了更好地使用多道程序并发执行,提高资源利用率和系统吞吐率,增加并发程度;而引进线程的目的则是为了减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
    注1】线程是由线程ID程序计数器寄存器集合堆栈组成。
    注2线程是一个基本的CPU执行单元,也是程序执行流最小单元。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程可以并发执行。线程也有就绪、阻塞和运行三种状态。
    2.线程与进程比较

    3.线程的属性
    1)线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符一个线程控制块,线程控制块记录了线程执行的寄存器和栈等线程状态。
    2)不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统把他们创建成不同的线程。
    3)同一进程中的各个线程共享该进程所拥有的资源。
    4)线程是处理机的独立调度单位,多个线程是可以并发执行的。在单CPU的计算机系统中,各线程可以交替地占用CPU;在多CPU的计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务,则可缩短进程的处理时间。
    5)一个线程被创建后,便开始了它的生命周期,直至终止。线程在生命周期内会经历阻塞态就绪态运行态等各种状态变化。

4.线程的实现方式

  • 用户级线程
    在用户级线程中,有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。应用程序可以通过使用线程库设计成多线程程序。通常,应用程序从单线程开始,在该线程中开始运行,在其运行时刻,可以通过调用线程库中派生例程创建一个在相同进程中运行的新线程。
  • 内核级线程
    内核级程序中,线程管理所有工作由内核完成,应用程序没有线程管理的代码只有一个到内核级线程的编程接口。内核为进程及其内部的每个线程维护上下文信息,调度也在内核基于线程架构的基础上完成。
    有些系统中使用组合方式的多线程实现。线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被映射到一些(小于等于用户级线程的数目)内核线程上。
    5.多线程模型
  • 多对一模型
    多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。此模式中,用户级线程对操作系统不可见(透明)。
    优点:线程管理是在用户空间进行的,因而效率比较高。
    缺点:一个线程在使用内核服务时被阻塞,整个进程都会被阻塞;多个线程不能并行的运行在多处理机上。
  • 一对一模型
    用户级线程映射到一个内核级线程
    优点:当一个线程被阻塞后,允许另一个线程继续运行,所以并发能力较强。
    缺点:每创建一个用户级线程都需要创建一个内核线程与其对应,这样创建线程的开销比较大,会影响到应用程序的性能。
  • 多对多模型
    将n个用户级线程映射到m个内核线程上,要m小于等于n。
    特点:多对多模型是多对一和一对多模型的折中,即克服了多对一模型并发度不高的特点,又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。

2.2 处理机调度

2.2.1 调度的概念

1.调度的基本概念
在多道程序系统中,进程的数量往往多于处理机的个数,因此进程争用处理机在所难免。处理机调度是多道程序操作系统的基础,是操作系统设计的核心问题。
2.调度的层次
一个作业从提交开始直到完成,往往要经历以下三级调度。
1)作业调度
2)中级调度
3)进程调度
3.三级调度的联系
作业调度从外存的后备队列中选择一批作业进入内存,为他们建立进程,这些进程被送入就绪队列,进程调度从就绪队列中选出一个进程,把其状态改为运行态,把CPU分配给它。中级调度是为了提高内存的利用率,系统将那些暂时不能运行的进程挂起来。当内存空间宽松时,通过中级调度选择具备运行条件的进程,将其挂起。
1)作业调度为进程活动做准备,进程调度使进程正常活动起来,中级调度将展示不能运行的进程挂起,中级调度处于作业调度和进程调度之间。
2)作业调度的次数少,中级调度次数略多,进程调度的频率最高。
3)进程调度是最基本的,不可或缺的。

2.2.2 处理机调度的时机

进程调度切换程序操作系统内核程序。请求调度事件发生后,才可能运行进程调度程序。调度了新的就绪进程后,才会进行进程间的切换。理论上这三件事应该顺序执行,但在实际设计中,操作系统内核程序运行时,若某时发生了引起进程调度的因素,则不一定能马上进行进程调度与切换。
现代操作系统中,不能进行进程的调度与切换的情况有以下几种:
(1)在处理机中断的过程
(2)进程在操作系统内核程序临界区中
(3)其他需要完全屏蔽中断的原子操作过程中。如加锁、解锁、中断保护现场、恢复等原子操作。
】当进程处于临界区时,说明进程正在占用处理机,只要不破坏临界资源的使用规则,是不会影响处理机调度的。

  • 应该进行进程调度和切换的情况如下:

(1)发生引起调度条件且当前进程无法继续运行下去时,可以马上进行调度和切换。属于非剥夺调度
(2)中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换。属于剥夺调度

2.2.3 进程调度的方式

1)非剥夺调度方法,又称非抢占方式
2)剥夺调度方法,又称抢占方式

2.2.4 调度的基本原则

2.2.5 典型的调度算法

2.3 进程的同步

2.3.1 进程同步的基本概念

1.临界资源
我们将一次只允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如打印机等。此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。
在每个进程中,访问临界资源的那段代码成为临界区。为了保证临界资源的正确使用,可把临界资源的访问过程分为4个部分:
1)进入区:为了进入临界区使用临界资源,在进入区要检查是否进入临界区,若能进入临界区,则设置正在访问临界区标志,以阻止其他进程同时进入临界区。
2)临界区:进程中访问临界资源的那段代码,又称为临界段。
3)退出区:将正在访问临界区的标志清楚。
4)剩余区:代码中的其余部分。
2.同步
同步亦称直接制约关系,是指完成某任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而等待、传递消息所产生的制约关系。进程的直接制约关系源于他们之间的合作。
3. 互斥
互斥也称为间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用
临界区资源的进程退出临界区后,另一个进程才允许去访问此临界资源。
为了禁止两个进程同步进入临界区,同步机制应该遵循以下准则:
1)空闲让进
2)忙则等待
3)有限等待
4)让权等待

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

软件、硬件

2.3.3 信号量

信号量是一种功能较强的机制,可用来解决互斥与同步问题,它只能被两个标准原语wait(S)和signal(S)访问,也可记为“P操作”和“V操作”。
】原语是指完成某种功能且不被分割、不被中断执行的操作序列,通常可由硬件来实现。例如前述的Test-and-Set和Swap指令就是由硬件实现的原子操作。
1.整型信号量
整型信号量被定义为一个用于表示资源数目的整型量S
2.记录型信号量
记录型信号量是不存在“忙等”现象的进程同步机制。除需要一个用于代表资源数目的整型变量value
外,再增加一个进程链表L,用于链表所有等待该资源的进程
3.利用信号量实现同步
4. 利用信号量实现进程互斥

2.3.4 管程

  1. 管程的定义
    系统中的各种硬件资源和软件资源,均可用数据结构抽象地描述其资源特性,即用少量信息和对资
    源所执行的操作来表征该资源,而忽略它们的内部结构和实现细节。管程是由一组数据及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。
  2. 管程的组成
    1)局部于管程的共享结构数据说明
    2)对该数据结构进行操作的一组过程
    3)对局部于管程的共享数据设置初始的语句
  3. 管程的基本特性
    1)局部于管程的数据只能被局部于管程内的过程所访问
    2)一个进程只能通过调用管程内的过程才能进入管程访问的共享数据
    3)每次仅允许一个进程在管程内执行某个内部过程
    由于管程是一个语言成分,因此管程的互斥访问完全由编译程序在编译时自动添加无须程序员关注,而且保证正确。

2.4 死锁

2.4.1 死锁的概念

  • 死锁的定义
    多道程序的并发执行会带来死锁现象,这是指多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向前推进
  • 死锁产生的原因
    (1)系统资源的竞争
    通常系统中拥有不可剥夺资源,其数量不足以满足多个进程运行的需求,使得进程在运行时陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争才可能产生死锁,对于可剥夺资源的竞争是不会
    产生死锁的

    (2)进程推进顺序非法
    (3)死锁产生的必要条件
    产生死锁必须同时满足以下4个条件,只要其中任意一个条件不成立,死锁就不会发生。
  • 互斥条件:即在一段时间内某资源仅为一个进程所占有,其它请求进程只能等待。
  • 不剥夺条件:进程获得的资源在未使用完之前,不能被其它进程强行夺走,只能是主动释放。
  • 请求并保持等待:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进
    程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
  • 循环等待条件:存在一种进程资源的循环等待链,链中每个进程已获得的资源同时被下一个进程所
    请求。
    】破坏循环等待条件,一般采用顺序请求资源分配法。

2.4.2 死锁的处理策略

  1. 死锁预防
    设置某些限制条件,破坏产生死锁的4个必要条件中的一个或几个,以防止产生死锁。
  2. 避免死锁
    在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。
  3. 死锁的检测及解除
    无须采取任何限制性措施,允许在运行过程中发生死锁。通过系统检查出死锁的发生,然后采取某
    种措施解除死锁。

2.4.4 死锁避免

  1. 系统安全状态
    避免死锁的方法中,允许死锁动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分
    配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则让进程等待。
  2. 银行家算法
  3. 安全性算法
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值