操作系统核心原理-3.进程管理(中):进程调度

PS:在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态。那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理的一个重要组成部分:进程调度,跟随本篇来一起复习下进程调度吧!

一、进程调度基础

1.1 进程调度定义

  进程调度是操作系统进程管理的一个重要组成部分,其任务是选择下一个要运行的进程

1.2 进程调度目标

  首先,一般的程序任务分为三种:CPU计算密集型、IO密集型与平衡(计算与IO各半)型,对于不同类型的程序,调度需要达到的目的也有所不同。对于IO密集型,响应时间最重要;对于CPU密集型,则周转时间最重要;而对于平衡型,进行某种响应和周转之间的平衡就显得比较重要。

  因此,进程调度的目标就是要达到极小化平均响应时间、极大化系统吞吐率、保持系统各个功能部件均处于繁忙状态和提供某种貌似公平的机制

PS:为何说要保持系统各个功能部件均处于繁忙状态?因为CPU非常昂贵,让其闲置是一种浪费,因此保持CPU繁忙十分重要。就像生命也非常珍贵,我们只有一只保持学习保持充实的状态,才算不浪费生命。

二、基本调度算法

2.1 先来先服务算法

  先来先服务(FCFS)算法是一种最常见的算法,它是人的本性中的一种公平观念。其优点就是简单且实现容易,缺点则是短的工作有可能变得很慢,因为其前面有很长的工作在执行,这样就会造成用户的交互式体验也比较差。

  例如排队办理业务时,你要办理的业务只需要几分钟就可以办好,但是你前面的一个人办理的事情很复杂需要1个小时,这时你需要在他后面等很久,于是你就想到:要是每个人轮流办理10分钟事务的话,那该多好!于是就出现了时间片轮转算法。

2.2 时间片轮转算法

  时间片轮转是对FCFS算法的一种改进,其主要目的是改善短程序的响应时间,实现方式就是周期性地进行进程切换。时间片轮转的重点在于时间片的选择,需要考虑多方因素:如果运行的进程多时,时间片就需要短一些;进程数量少时,时间片就可以适当长一些。因此,时间片的选择是一个综合的考虑,权衡各方利益,进行适当折中。

  但是,时间片轮转的系统响应时间也不一定总是比FCFS的响应时间短。时间片轮转是一种大锅饭的做法,但是现实生活中却是走的“一部分人先富,先富带动后富”的路线。例如,如果有30个任务,其中一个任务只需要1秒时间执行,而其他29个任务需要30秒钟执行,如果因为某种原因,这个只要1秒钟的任务排在另外29个任务的后面轮转,则它需要等待29秒钟才能执行(假定时间片为1秒)。于是,这个任务的响应时间和交互体验就变得非常差。因此,短任务优先算法被提出。

2.3 短任务优先算法

  短任务优先算法的核心是所有的任务并不都一样,而是有优先级的区分。具体来说,就是短任务的优先级比长任务的高,而我们总是安排优先级高的任务先运行

  短任务优先算法又分为两种类型:一种是非抢占式,一种是抢占式。非抢占式当已经在CPU上运行的任务结束或阻塞时,从候选任务中选择执行时间最短的进程来执行。而抢占式则是每增加一个新的进程就需要对所有进程(包括正在CPU上运行的进程)进行检查,谁的时间短就运行谁

  由于短任务优先总是运行需要执行时间最短的程序,因此其系统平均响应时间在以上几种算法中是最优的,这也是短任务优先算法的优点。但短任务优先算法也有缺点:一是可能造成长任务无法得到CPU时间从而导致“肌饿”。二是如何知道每个进程还需要运转多久?于是为了解决第一个缺点,优先级调度算法被提出。而第二个缺点则可以采取一些启发式的方法来进行估算,目前很多的人工智能算法都可以做这个事。

2.4 优先级调度算法

  优先级调度算法给每个进程赋予一个优先级,每次需要进程切换时,找一个优先级最高的进程进行调度。这样如果赋予长进程一个高优先级,则该进程就不会再“饥饿”。事实上,短任务优先算法本身就是一种优先级调度,只不过它给予短进程更高的优先级而已。

  该算法的优点在于可以赋予重要的进程以高优先级以确保重要任务能够得到CPU时间,其缺点则有二:一是低优先级的进程可能会“饥饿”,二是响应时间无法保证。第一个缺点可以通过动态地调节任务的优先级解决,例如一个进程如果等待时间过长,其优先级将因持续提升而超越其他进程的优先级,从而得到CPU时间。第二个缺点可以通过将一个进程优先级设置为最高来解决,但即使将优先级设置为最高,但如果每个人都将自己的进程优先级设置为最高,其响应时间还是无法保证。

2.5 混合调度算法

  之前的算法都存在一定缺点,那么可否有一个算法混合他们的优点,摒弃它们的缺点,这就是所谓的混合调度算法。混合调度算法将所有进程分为不同的大类,每个大类为一个优先级。如果两个进程处于不同的大类,则处于高优先级大类的进程优先执行;如果处于同一个大类,则采用时间片轮转算法来执行。混合调度算法的示意图如下图所示:

2.5 进程调度的过程

三、调度异常之优先级倒挂

3.1 何为优先级倒挂

  优先级倒挂指的是一个低优先级任务持有一个被高优先级任务所需要的共享资源。这样高优先级任务因为资源缺乏而处于受阻状态,一直到低优先级任务释放资源为止。这样实际上造成了这两个任务的优先级倒挂。

3.2 优先级倒挂的表现形式

  (1)不持有资源的低优先级进程阻碍需要资源的高优先级进程的执行;

  (2)持有资源的优先级进程阻碍需要资源的高优先级进程的执行;

3.3 优先级倒挂的预防办法

  (1)针对第一种形式,可以使用中断禁止的方法,其核心是通过禁止中断来保护临界区。

  (2)针对第二种形式,不能让低优先级进程持有高优先级进程所需要的资源,则可以通过优先级上限和优先级继承来实现。

  优先级倒挂问题,后面会详细学习,到时再详细说说。当然,欲知后事如何,请看下回分解

  

参考资料

邹恒明,《操作系统之哲学原理》,机械工业出版社

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

时间: 2024-10-22 09:27:21

操作系统核心原理-3.进程管理(中):进程调度的相关文章

操作系统核心原理-3.进程管理(上):进程概要

进程管理.内存管理和文件管理是操作系统的三大核心功能,那么什么是进程呢?顾名思义,进程就是进展中的程序,或者说进程是执行中的程序.当一个程序被加载到内存之后就变为了进程.因此,我们可以得到:进程=程序+执行.本篇将会对进程.进程模型.进程状态以及进程的缺陷等进行学习,为后续学习进程调度与进程通信打下坚实基础. 一.进程是什么鬼? 1.1 从工作到进程 进程在Multics操作系统出现之前被叫做工作(Job),工作是IBM用于多道批处理程序设计中的概念.由于历史原因,Multics操作系统的研发人

操作系统核心原理-3.进程原理(中):进程调度

PS:在多进程并发的环境里,虽然从概念上看,有多个进程在同时执行,但在单个CPU下,在任何时刻只能有一个进程处于执行状态,而其他进程则处于非执行状态.那么问题来了,我们是如何确定在任意时刻到底由哪个进程执行,哪些不执行呢?这就涉及到进程管理的一个重要组成部分:进程调度,跟随本篇来一起复习下进程调度吧! 一.进程调度基础 1.1 进程调度定义 进程调度是操作系统进程管理的一个重要组成部分,其任务是选择下一个要运行的进程. 1.2 进程调度目标 首先,一般的程序任务分为三种:CPU计算密集型.IO密

操作系统核心原理-6.外存管理(下)文件系统

一.为何需要文件系统? 磁盘具有大容量.低成本以及持久化的特点,即使发生断电,磁盘上的数据也不会丢失.但是,对于一般用户而言,使用磁盘是非常苦难的,因为他们不知道如何驱动一个磁盘,以及计算数据在磁盘上的存放位置.从上一篇<磁盘基础>可以知道,了解磁盘的各项技术细节将使用户不堪重负. 操作系统是一个魔术师,其提供给用户的就是各种幻想:抽象.进程抽象的是CPU,虚拟内存抽象的是内存,对于磁盘来说,操作系统提供给用户的帮助就是在磁盘外面包裹一层容易使用的抽象,用户直接与这层抽象打交道,而无需了解磁盘

操作系统核心原理-5.内存管理(下):分页内存管理

在上一篇介绍的几种多道编程的内存管理模式中,以交换内存管理最为灵活和先进.但是这种策略也存在很多重大问题,而其中最重要的两个问题就是空间浪费和程序大小受限.那么有什么办法可以解决交换内存存在的这些问题呢?答案是分页,它是我们解决交换缺陷的“不二法门”. 一.分页内存管理 1.1 解决问题之道 为了解决交换系统存在的缺陷,分页系统横空出世.分页系统的核心在于:将虚拟内存空间和物理内存空间皆划分为大小相同的页面,如4KB.8KB或16KB等,并以页面作为内存空间的最小分配单位,一个程序的一个页面可以

操作系统核心原理-6.外存管理(上)磁盘基础

计算机是处理数据的机器,而数据就需要有地方存放.在计算机中,可供数据存放的地方并不太多,除了内存之外,最主要的存储数据的媒介就是磁盘.对于大多数计算机领域的人来说,磁盘通常被看做是一种外部设备.可是,对于现代操作系统来说,磁盘是不可或缺的.虽然早期的操作系统可以基于磁带,但由于操作系统复杂性和性能的不断提升,用磁带作为操作系统的载体已经不合时宜,取而代之的是磁盘.由于操作系统需要存放在磁盘上,且操作系统内的文件系统也是基于磁盘,所以,从某种程度来说,磁盘是操作系统不可分割的一部分,理解磁盘将对理

进程控制在进程管理中的作用

 进程控制是进程管理中最基本的功能.它用于创建一个新进程,终止一个已完成的进程,或者去终止一个因出现某事件而使其无法运行下去的进程,还可负责进程运行中的状态转换. 一.创建进程 1.引起创建进程的事件 在多道程序环境中,只有(作为)进程(时)才能在系统中运行.因此,为使程序能运行,就必须为它创建进程.导致一个进程去创建另一个进程的典型事件,可以有以下四类: 1) 用户登录 在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入到就绪队列中. 2)作业调

操作系统核心原理-4.线程原理(上)线程基础与线程同步

我们都知道,进程是运转中的程序,是为了在CPU上实现多道编程而发明的一个概念.但是进程在一个时间只能干一件事情,如果想要同时干两件或者多件事情,例如同时看两场电影,我们自然会想到传说中的分身术,就像孙悟空那样可以变出多个真身.虽然我们在现实中无法分身,但进程却可以办到,办法就是线程.线程就是我们为了让一个进程能够同时干多件事情而发明的“分身术”. 一.线程基础 1.1 线程概念 线程是进程的“分身”,是进程里的一个执行上下文或执行序列.of course,一个进程可以同时拥有多个执行序列.这就像

操作系统核心原理-7.设备管理:I/O原理

一.I/O的基本知识 1.1 为何要有I/O 前面阐述了操作系统具有进程管理.内存管理.外存管理三大核心功能,但是计算机归根是为人类服务的,这就要求计算机必须提供某种机制使得人们可以向计算机发出命令或操纵计算机.也就是说计算机与人之间必须存在某种沟通的机制,这种沟通的机制就是计算机的输入输出机制.输入输出的存在才使得计算机的存在有了意义,就像一个人,如果没有输入输出,那么就不能与外部世界打交道. (1)输入提供的是一个“人→计算机”的通道,即人或外部世界通过输入向计算机发出命令或提供数据. (2

操作系统核心原理—2.一些基本概念

一.计算机硬件基础 1.1 总线结构 从概念上讲,计算机的结构是总线型的:布置一根总线将各种硬件设备挂在总线(Bus)上. (1)所有的设备都有一个控制设备,外部设备通过控制器与CPU进行通信. (2)所有的设备之间的通信也需要通过总线. 1.2 流水线结构 为了提高计算机的效率,人们又设计出了流水线结构:仿照工业流水装配线,将计算机的功能部件分为多个梯级,并将计算机的每条指令拆分为同样多个步骤,使每条指令在流水线上流动,到流水线最后一个梯级时指令执行完毕. 下图展示了5个梯级的流水线结构,流水