前言
操作系统作为计算机基础的四大件,系统学习无疑是十分重要的。在这个系列的文章中,荔枝会结合操作系统的知识进行归纳梳理,总结输出博文!下面这篇文章主要介绍的是进程状态和调度,重点是几种调度算法的理解和掌握,希望对正在学习的小伙伴有帮助~~~
文章目录
[1.1 基本概念](#1.1 基本概念)
[1.2 进程与线程之间的关系](#1.2 进程与线程之间的关系)
[2.1 原语](#2.1 原语)
[2.2 进程状态](#2.2 进程状态)
[2.2.1 进程的五种状态](#2.2.1 进程的五种状态)
[2.2.2 七种进程状态](#2.2.2 七种进程状态)
[2.2.3 阻塞和挂起区别](#2.2.3 阻塞和挂起区别)
[3.1 进程的调度层次](#3.1 进程的调度层次)
[3.2 进程的调度时机](#3.2 进程的调度时机)
[3.3 进程的调度过程](#3.3 进程的调度过程)
[3.4 调度算法指标](#3.4 调度算法指标)
[3.5 六种进程调度算法](#3.5 六种进程调度算法)
[3.5.1 先来先服务FCFS(First Come First Served)](#3.5.1 先来先服务FCFS(First Come First Served))
[3.5.2 短作业优先SJF(Shortest Job First)](#3.5.2 短作业优先SJF(Shortest Job First))
[3.5.3 高响应比优先调度HRRN(Highest Response Ratio Next)](#3.5.3 高响应比优先调度HRRN(Highest Response Ratio Next))
[3.5.4 优先级调度PSA(Priority-Scheduling AIgorithm)](#3.5.4 优先级调度PSA(Priority-Scheduling AIgorithm))
[3.5.5 时间片轮转调度RR(Round-Robin)](#3.5.5 时间片轮转调度RR(Round-Robin))
[3.5.6 多级反馈队列调度MFQ(Multileveled Feedback Queue)](#3.5.6 多级反馈队列调度MFQ(Multileveled Feedback Queue))
一、进程基础
1.1 基本概念
进程,是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度的基本单位。
要点
- 进程是程序的一次执行
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
- 进程是程序在一个数据集合上运行的过程
- 进程是系统进行资源分配和调度的一个基本单位
进程的结构
- 控制块:PCB(Process Control Block),这是进程的唯一标识;
- 数据段:数据段存放着原始数据、中间数据;
- 程序段:程序段存放在文本区域,可被多个进程共享;
进程的特征
- 动态性:进程从创建开始,从撤销结束
- 并发性:多个进程可以同时运行
- 独立性:进程中的资源是独立的
- 异步性:不同的进程之间是相互独立、互不干扰的
1.2 进程与线程之间的关系
线程的概念
Thread,进程的轻型实体,也叫"轻量级的进程",是一系列活动按实现设定好的顺序依次执行的过程,是一系列指令的集合。线程是依赖于进程而存活的,不能单独存在,同时线程也是操作系统运算调度的最小单位。
区别
线程相对于进程,大大降低了创建、撤销和切换可执行实体的成本和难度。同时引入了线程明显提高了操作系统处理并发事务的能力。
二、进程控制
进程控制指的是操作系统对进程实现有效的管理,包括创建新进程、撤销已有进程、挂起、阻塞、唤醒、进程切换等多种操作。操作系统主要是通过原语操作来实现进程控制。
2.1 原语
原语是一种特殊的原子操作指令集,由若干个指令组成,共同完成某个特定的功能。
原语特点
- 原语是原子操作的,要么全部成功,要么全部失败,执行过程不会被中断;
- 在内核态下执行的,常驻内存;
- 是内核三大支撑功能(中断处理/时钟管理/原语操作)之一
进程状态转换相应操作的原语:
- 创建原语:create
- 阻塞原语:block
- 唤醒原语:wakeup
- 撤销原语:destroy
- 挂起原语:suspend
- 激活原语:active
2.2 进程状态
2.2.1 进程的五种状态
进程在其声明周期中默认有五种状态:创建、就绪(等待)、执行、阻塞、结束。
2.2.2 七种进程状态
我们知道计算机系统的存储分为内存和外存,而有些进程在整个系统向外提供服务的过程中,我们总是有这么一种需求将长时间不用调度的进程解除系统所有资源的占用,把这一部分的内存资源移到外存中存储,那么在OS中我们就可以执行挂起的操作。
2.2.3 阻塞和挂起区别
阻塞和挂起的状态主要区别在于对于系统资源的占用上、发生时机和恢复时机。
- 对系统资源占用:当进程处于阻塞 状态时,虽然释放了CPU,但它仍占用内存资源 ;而挂起 状态的进程则通过**"对换"技术** 被换出到外存(如磁盘)中,不占用内存资源。
- 发生时机:阻塞状态通常在进程等待某种资源(如IO资源、信号量)时出现,是一种被动行为;而挂起状态是由于系统或用户的需要而主动进行的行为,例如用户需要暂停程序以研究或修改程序,或者系统为了提高内存利用率需要将暂时不能运行的进程调出到磁盘。
- 恢复时机:处于阻塞状态的进程只有在等待的资源得到满足(例如获得了锁)后,才会进入就绪状态,等待被调度执行;而被挂起的进程由将其挂起的对象(如用户、系统)在符合时机时(如调试结束、被调度进程选中需要重新执行)主动激活。
三、进程调度
进程调度也被称为处理机调度,主要是操作系统OS根据一定的算法和原则将处理及资源进行重新分配的过程。操作系统需要进行进程调度的前提是我们需要的任务数(进程数) > 处理机数。在调度的时候我们必须考虑两点:满足特定系统用户的需求(快速响应);考虑系统整体效率即系统的平均周转时间和调度算法本身的开销。
**目的:**提高资源利用率,减少处理及空闲时间。
3.1 进程的调度层次
进程的调度层次主要分为三层:高级调度(作业调度)、中级调度(内存调度)、低级调度(进程调度)。其中进程调度是最基本的调度,主要功能是从就绪队列中选取进程分配给处理机。
3.2 进程的调度时机
处理机进行进程调度的时机一般是下面几种情况:
- 进程运行完毕 | 时间片用完
- 进程要求I/O操作
- 执行某种原语操作
- 高优先级进程申请运行(剥夺式调度)
3.3 进程的调度过程
进程调度过程会依次执行下面的过程:
- 保存镜像:记录进程现场信息
- 调度算法:确定进行资源调度的处理机调度原则
- 进程切换:分配处理机给其它进程
- 处理机的进程回收
3.4 调度算法指标
衡量进程调度算法的指标主要有:
- CPU的利用率:忙碌时间/总时间
- 系统的吞吐量:完成的作业数/总时间
- 周转时间:作业完成时间-作业提交时间,其中带权周转时间=周转时间/实际运行时间
- 等待时间:作业等待处理及调度的时间
- 响应时间:请求提交到首次响应的间隔
3.5 六种进程调度算法
进程的调度算法主要是用在两种场景下:A在后备作业/就绪队列中对进程进行排序调度、B在内存中对进程进行调度。下面的六种算法前四种是属于A,后两种属于B。当然了前四中也可以用于A,只不过可能用的比较少而已。
3.5.1 先来先服务FCFS(First Come First Served)
FCFS算法思想比较简单,就是一个队列,先入先出,先到先得。也就是说先进入调度队列的进程先被执行。
调度方式:非抢占式调度
使用场景:作业 | 进程调度
优缺点
- 算法简单,适用于CPU繁忙型的作业,可以有效利用CPU资源;
- 不利于I/O繁忙型作业,会导致操作耗时。
3.5.2 短作业优先SJF(Shortest Job First)
短作业优先,顾名思义就是将所需服务最短的作业/进程优先执行,当然了这种时间估计并不是准确的,所以这种算法追求理想状态下最少的平均(带权)周转时间。
调度方式:SJF/SPF非抢占式调度、SRTN抢占式
使用场景:作业 | 进程调度
优缺点
- 平均等待 / 周转时间最少
- 对耗时长的作业不友好,容易带来饥饿问题;不能保证紧急任务被优先处理
SRTN:最短剩余时间优先算法。
3.5.3 高响应比优先调度HRRN(Highest Response Ratio Next)
结合FCFS和SJF,综合考虑等待时间和服务时间计算响应比,响应比高的优先调度,这种算法综合考虑了进程的等待时间和服务时间试图提出一种更好的调度算法。响应比的计算比较简单:响应比=(等待时间+服务时间) / 服务时间。
调度方式:非抢占式调度
使用场景:作业 | 进程调度
重点
- 只有当前进程放弃执行权(完成 / 阻塞)时,重新计算所有进程的响应比
- 缓解了长作业饥饿的问题,长作业等待时间越久就越容易获得CPU执行权。
3.5.4 优先级调度PSA(Priority-Scheduling AIgorithm)
优先级调度是按照进程的优先级,也就是任务的紧迫程度来进行调度。优先级调度有两种:剥夺式和非剥夺式,区别在于对于当前正在执行的作业,突然加入一个更高优先级的作业,是否会等到改作业执行完成后再抢占CPU。
调度方式:抢占式 | 非抢占式调度
使用场景:作业 | 进程调度
优先级设置原则
- 系统进程优先级高于用户进程、交互型>非交互型、I/O型>计算型
- 低优先级可能会导致饥饿
3.5.5 时间片轮转调度RR(Round-Robin)
时间片轮转的机制有点像计算机网络中的分时复用的模式,就绪队列会按照进程到达的顺序,轮流去分配一个时间片去执行,时间用完后就会剥夺该进程的使用权。这种按照时间片来均匀分配的机制确实可以使得进程再一定时间内都可以得到响应,从而不会导致某一些进程一直饥饿。
调度方式:抢占式调度,开启抢占的时间主要是由时钟中断来确定
使用场景:进程调度
优缺点
- 公平,响应快,适合于分时系统
- 时间片的影响因素:系统响应时间、就绪队列进程数量、系统处理能力
- 时间片的设置要求比较难,太大就会退化FCFS;太小会导致处理机切换频繁而带来较大的开销
3.5.6 多级反馈队列调度MFQ(Multileveled Feedback Queue)
多级反馈队列调度算法设计了多个按照优先级排序的就绪队列,对于多个队列按照优先级从高到低,时间片从小到大排序和级别划分。每个队列中的进程依旧是按照先到先得的原则被分配时间片,而对于新进程的加入默认会加在第一级别队列尾部,按照时间片轮转的机制来执行,若在当前时间片中没有执行完的会掉到下一级队列的尾部继续按照相同模式来执行。遵循的规则就是:前面的队列不为空,不执行后续的队列进程。
调度方式:抢占式调度
使用场景:进程调度
优缺点
- 对于各类型相对公平,快速响应
- 终端型作业用户:短作业优先
- 批处理作业用户:周转时间短
- 长批处理作业用户:在前几个队列部分执行
总结
简单了解进程的概念以及进程控制和调度这些基础的知识,荔枝无疑对操作系统有了初步的认知。需要注意的是,作业队列和进程调度的具体指代、几种进程状态的切换和区别这些均是面试重点关照的地方,希望在这篇文章荔枝有说清楚~~~
今朝已然成为过去,明日依然向往未来!我是荔枝,在技术成长之路上与您相伴~~~
如果博文对您有帮助的话,可以给荔枝一键三连嘿,您的支持和鼓励是荔枝最大的动力!
如果博文内容有误,也欢迎各位大佬在下方评论区批评指正!!!