声明:操作系统系列只针对南邮操作系统课程重点进行梳理,尽量不要作为考研复习资料,可能会有缺失之类,也恳请读者进行批评指正,共同进步;参考教材:《操作系统教程》人民邮电出版社,黄刚、徐小龙、段卫华编著,2009.9;
第二章用户界面不作要求,可选择自行观看。
本章节为考察重点,尽量跳过繁琐的概念(但不会忽视重点的概念和相关概念的辨析),重点讲快速复习的知识点并在考试中取得高分,尤其是作业调度算法一定要熟练掌握。
进程管理与调度
3.1中央处理器
3.1.1 CPU的构成与基本工作方式
中央处理器由运算器、控制器、一系列的寄存器以及高速缓存构成。
1)运算器:实现指令中的算术运算和逻辑运算,是计算机计算的核心。
2)控制器:负责控制程序运行的流程,包括取指令、维护CPU状态、CPU与内存的交互等。
3)寄存器:指令在CPU内部作处理的过程中暂存数据、地址以及指令信息的存储设备。
3.1.2 特权指令和非特权指令
- 特权指令:只能由操作系统使用的指令。
- 非特权指令:操作系统和用户都能使用的指令。
3.1.3 处理器状态
- 管态:操作系统管理程序运行的状态,具有较高的特权级别,又称为特权态、系统态。
- 目态:用户程序运行时的状态,较低的特权级别,又称为普通态、用户态。
(注意:有些系统将处理器状态划分核心状态,管理状态和用户程序状态(目标状态)三种)
- 状态切换
管态到目态的转换可通过设置程序状态字来实现;
目态到管态的转换的唯一途径是通过中断。
3.2中断⭐️⭐️
中断是指CPU对系统中或系统外发生异步事件的响应。异步事件是指无一定时序关系的随机发生事件。
从中断的性质和激活的手段将中断分为强迫性的中断和自愿性中断。
通常:异常会引起中断;中断未必由异常引起。
3.3进程及其实现
3.3.1 进程定义⭐️⭐️
进程是为了描述程序在并发执行时对系统资源的共享,所需的一个描述程序执行时动态特征的概念。
定义:进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配、调度和保护的独立单位。
3.3.2 进程的类型和特性
1、进程的类型:系统进程、用户进程
2、进程的特征:
- 动态性:进程是程序在处理机上的一次执行过程,有一定生命周期。
- 并发性:多个进程可同时存在于内存中,能在一段时间内同时运行。
- 独立性:进程是一个能独立运行的基本单位,也是资源分配的基本单位。
- 制约性:进程间因为对资源的争用而相互制约。
- 异步性:进程按照各自独立的、不可预知的速度推进。
- 结构性:进程包含了相关的数据和程序,同时还有一个称为“进程控制块”的数据结构来记录进程的动态变化过程。因此,进程的组成三要素为“程序”、“数据”和“进程控制块(PCB)”。
3、进程和程序的区别⭐️⭐️(考简答题)
- 进程更能真实地描述并发,而程序不能。
- 进程是由程序和数据和进程控制块三部分组成的。
- 程序是静态的,进程是动态的。
- 进程有生命周期,有诞生有消亡,短暂的;而程序是相对长久的。
- 一个程序可对应多个进程,反之亦然。
- 进程具有创建其他进程的功能,而程序没有。
3.3.3 进程的状态和转换
三态/五态模型⭐️⭐️⭐️
- 就绪 ------> 运行:调度程序选择一个新的进程运行。
- 运行 ------> 就绪:①运行进程用完了时间片;②运行进程被中断,因为一高优先级进程处于就绪状态。
- 运行 ------> 等待:①当一进程必须等待时;②对一资源的访问尚不能进行;③初始化I/O且必须等待结果;④等待某一进程提供输入。
- 等待 ------> 就绪:当所等待的事件发生时。
3.3.4 进程控制块
进程控制块的构成:
- 进程描述信息:进程标识符(process ID),唯一。
- 进程控制信息;
- 所拥有的资源和使用情况;
- CPU现场保护信息。
3.3.5 进程要素
进程的静态组成:进程程序;进程数据;栈;进程控制块;前面所有统称为进程映像。
3.6处理器调度
1、调度策略考虑因素⭐️⭐️(考简答题)
- 系统设计目标;
- 资源利用率;
- 均衡系统与用户的要求。
2、调度模式:(按层次分)
- 高级调度:也称为作业调度或宏观调度。
- 中级调度:也称为平衡负载调度或中程调度。
- 低级调度:也称为进程调度或短程调度。
3.7作业的管理与调度⭐️⭐️⭐️⭐️
3.7 我觉得编写的不好,作者把进程调度和作业调度分得太开,导致理解起来会有一定困难,个人认为最好的顺序是在作业调度之后紧跟进程调度,然后再讲多道程序环境下的作业调度算法;还有线程和进程的安排也不是很合理;而且我还觉得作者目录分这么细,感觉把内容割裂了开,个人不是很喜欢这种风格。
3.7.1 作业及其调度
作业:用户在一次计算过程中,或者一次事务处理过程中,要求计算机系统所做工作的总称。
系统为每个作业建立一个作业控制块(Job Control Block,JCB)记录有关信息。JCB的内容包括作业名、作业类型、资源要求、当前状态、资源使用情况以及该作业的优先级等。
3.7.2 作业与进程
作业与进程的主要区别⭐️⭐️(考简答题)
作业是用户需要计算机完成某项任务而要求计算机所做工作的集合。一个作业的完成要经过作业提交、作业收容、作业执行和作业完成四个阶段。而进程是已提交完毕的作业的执行过程,是资源分配的基本单位。两者的主要区别如下:
-
作业是用户向计算机提交任务的任务实体。在用户向计算机提交作业之后,系统将它放入外存中的作业等待队列中等待执行;而进程则是完成用户任务的执行实体,是向系统申请分配资源的基本单位。任一进程,只要它被创建,总有相应的部分存在于内存中。
-
一个作业可由多个进程组成,且必须至少由一个进程组成,但一个进程不能构成多个作业。
-
作业的概念主要用在批处理系统中。像UNIX这样的分时系统则没有作业的概念;而进程的概念则用在几乎所有的多道程序系统中。
3.7.3 调度原则
一个最佳的作业或进程调度算法及相应策略应该达到哪些理想目标?⭐️⭐️(考简答题)
调度实质上是一个策略问题,设定的目标往往是相互冲突的。
- (1)单位时间内运行尽可能多的作业
- (2)使处理器尽可能保持“忙碌”
- (3)响应时间和周转时间能够尽可能短
- (4)使各种I/O设备得以充分利用
- (5)对所有的作业都是公平合理的
设作业进入时间(也叫到达时间)为 S i S_i Si,结束时间为 E i E_i Ei,则作业平均周转时间: T = 1 n × ∑ i = 1 n ( E i − S i ) T=\frac{1}{n}\times\sum_{i=1}^{n}(E_i-S_i) T=n1×i=1∑n(Ei−Si)
设 r i r_i ri为作业的实际执行时间,则作业的平均带权周转时间 W W W: W = 1 n × ∑ i = 1 n E i − S i r i W=\frac{1}{n}\times\sum_{i=1}^{n}\frac{E_i-S_i}{r_i} W=n1×i=1∑nriEi−Si
T T T:衡量不同调度算法对同一个作业流的性能。
W W W:同一调度算法对不同作业流的性能衡量。
系统进行作业调度算法的决策因素:
- 作业到达时间
- 预先为作业确定的优先级
系统可测定的其他因素:
- 作业所需的CPU时间片
- 存储要求
- 其他的资源要求
3.7.3 作业调度算法⭐️⭐️⭐️⭐️⭐️
单道程序环境下的作业调度算法(重点掌握三个)书 P 54 P_{54} P54
抢占和非抢占:通俗来讲,抢占就是作业在进行中的时候,按照比如SJF规则,在到达时间有个更短的作业,就会强制让之前运行的作业直接退出,然后进行新的作业;非抢占就是一旦作业进入工作就不可被强制替换出来,但还依旧在等待序列中。
1、先来先服务算法(FCFS:First Come First Serve)
最简单的调度算法。按照作业提交的先后顺序分派CPU。当前作业或进程占用CPU后,除非其任务完成或阻塞,才让出CPU(非抢占式)。
特点: ● 算法开销小
● 有利于长作业,不利于短作业
● 有利于CPU繁忙的作业,不利于I/O繁忙的作业
2、最短作业优先算法(SJF:Shortest Job First)
对执行时间短的作业优先分派处理机。
特点: ● 可以得到最大的系统吞吐率
● 比FCFS算法改善了平均周转时间和带权周转时间
● 有可能使长作业永远没有机会执行
3、基于优先数的调度算法(HPF)
● 由用户规定优先数(外部优先数)用户提交作业时,根据急迫程度规定适当的优先数作业调度程序根据JCB优先数决定进入内存的次序
● 由系统计算优先数(内部优先数)
多道程序环境下的作业调度算法(必考大题)⭐️⭐️⭐️⭐️⭐️ 书 P 55 P_{55} P55
例题:有一个具有两道作业的批处理系统,作业调度采用短作业优先的非抢占调度算法,进程调度采用以优先数为基础的抢占式调度算法,在下表所示的作业序列中,作业优先数即为进程优先数,优先数越小优先级越高。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(1)列出所有作业进入内存时间及结束时间。(2)计算平均周转时间和平均带权周转时间。
解析:每个作业运行将经过两个阶段:作业调度(SJF算法)和进程调度(优先数抢占式)。作业调度是非抢占的,即作业进入CPU就不会被强制退出,而进程是抢占的,即当CPU存在两个作业的时候必须得选一个,会根据算法进行选择更改运行的作业。另外,批作业最多容纳2道作业,更多的作业将在后备队列等待。
-
a)10:00,作业A到达并投入运行。
-
b)10:20,作业B到达并且优先权高于A,所以B运行,A等待,此时A还剩20分钟
-
c)10:30,作业C到达,但是由于作业调度是非抢占的,已经有两道作业,等待,不可进入CPU。
-
d)10:50,作业B结束,作业D到达,按SJF短作业优先算法,所以D被装入CPU,但是A的优先级高于D,所以进程调度选择A运行。
-
e)11:10,作业A结束,作业C被调入CPU,且C的优先级高于D,所以进程调度选择C运行。
-
f)12:00,作业C结束,作业D运行。
-
g)12:20,作业D结束。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3.9线程及其基本概念
进程与线程的联系和区别:
- 进程是资源分配的基本单位。进程也是抢占处理机的调度单位,它拥有一个完整的虚拟地址空间。而线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。
- 当进程发生调度时,不同的进程拥有不同的虚拟地址空间,而同一进程内的不同线程共享同一地址空间。
- 线程只由相关堆栈寄存器和线程控制块组成。寄存器可被用来存储线程内的局部变量,但不能存储其他线程的相关变量。
- 进程切换时涉及到有关资源指针的保存以及地址空间的变化等问题;线程切换时,由于同一进程内的线程共享资源和地址空间,将不涉及资源信息的保存和地址变化问题。而且,进程的调度与切换都是由操作系统内核完成,而线程则既可由操作系统内核完成,也可由用户程序进行。
- 进程间的关系比较疏远。各个进程是在自己独有的地址空间内执行,不但寄存器和堆栈是独有的,动态数据堆、静态数据区和程序代码也相互独立。而线程间的关系则要紧密得多,虽然各线程为保持自己的控制流而独有寄存器和堆栈,但由于两线程从属于同一进程,它们共享同一地址空间,所以动态堆、静态数据区及程序代码为各线程共享。
线程的实现:用户级线程、核心级线程、混合级线程。