文章目录
第二章 进程管理
2.2.1、处理机调度的概念、层次
当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。
在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程。处理机调度,就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程的并发执行。
1、高级调度
2、中级调度
3、补充知识-进程的挂起与七状态模型
4、低级调度
5、三层调度的对比、联系
6、总结
2.2.2、进程调度的时机、切换与过程、方式
1、进程调度的时机
进程在访问普通临界区时可以进行调度与切换
但进程在操作系统内核程序临界区中不能进行调度与切换
2、进程的调度方式
3、进程的切换与过程
4、总结
2.2.3、调度算法的评价指标
1、CPU利用率
2、系统吞吐量
3、周转时间
4、等待时间
5、响应时间
对于计算机用户来说,会希望自己的提交的请求(比如通过键盘输入了一个调试命令)尽早地开始微系统服务、回应。
响应时间,指从用户提交请求到首次产生响应所用的时间。
6、总结
2.2.4、调度算法1
FCFS 先来先服务算法、作业与进程同名
SJF 短作业优先
SPF 短进程优先调度算法(非抢占式短作业优先算法)
SRTN 最短剩余时间优先算法(抢占式短作业优先算法)
1、先来先服务(FCFS)
例题:
2、短作业优先(SJF)
非抢占式SJF:
抢占式SJF:
3、高响应比优先(HRRN)
先来先服务算法只考虑了等待时间,而短作业优先算法只考虑了运行时间,两者都有自己的局限性;所以就产生了综合考虑等待时间和运行时间的高响应比算法
4、总结
2.2.5、调度算法2
1、时间片轮转(RR)
2.2_5_调度算法:时间片轮转、优先级、多级反馈队列_哔哩哔哩_bilibili(4:40-10:00)时间片轮转算法的处理过程
2、优先级调度算法
非抢占式:
抢占式:
3、多级反馈队列调度算法
2.2_5_调度算法:时间片轮转、优先级、多级反馈队列_哔哩哔哩_bilibili(30:00-35:40)多级调度算法的处理过程
4、总结
2.3.1 进程同步、进程互斥
2.3.2 进程互斥的软件实现方法
1、单标志法
turn表示当前允许进入临界区的进程号,而只有当前允许进入临界区的进程在访问了临界区之后,才会修改turn 的值。也就是说,对于临界区的访问,一定是按PO→P1→PO→P1→…这样轮流访问。这种必须“轮流访问”带来的问题是,如果此时允许进入临界区的进程是Po,而PO一直不访问临界区,那么虽然此时临界区空闲,但是并不允许P1访问。
因此,单标志法存在的主要问题是:违背“空闲让进”原则。
2、双标志先检查法
可能存在两个进程同时进入处理机的情况,违反"忙则等待"原则
3、双标志后检查法
若按照①⑤②⑥…的顺序执行,PO和P1将都无法进入临界区
因此,双标志后检查法虽然解决了“忙则等待”的问题,但是又违背了“空闲让进”和“有限等待”原则,会因各进程都长期无法访问临界资源而产生“饥饿”现象
4、Peterson算法
5、知识回顾
2.3.3 进程互斥的硬件实现方法
1、中断屏蔽方法
2、TestAndSet指令
3、Swap指令
4、知识回顾
2.3.4 信号量机制
复习回顾+思考:之前学习的这些进程互斥的解决方案分别存在哪些问题?
进程互斥的四种软件实现方式(单标志法、双标志先检查、双标志后检查、Peterson算法)进程互斥的三种硬件实现方式(中断屏蔽方法、TS/TSL指令、Swap/XCHG指令)
1.在双标志先检查法中,进入区的“检查”、“上锁”操作无法一气呵成,从而导致了两个进程有可能同时进入临界区的问题;
2.所有的解决方案都无法实现“让权等待”
1965年,荷兰学者Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法——信号量机制
- 用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。
- 信号量:其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量。
- 原语:是一种特殊的程序段,其执行只能一气呵成,不可被中断。原语是由关中断/开中断指令实现的。软件解决方案的主要问题是由“进入区的各种操作无法一气呵成”,因此如果能把进入区、退出区的操作都用“原语”实现,使这些操作能“一气呵成”就能避免问题。
- 一对原语: **wait(S)**原语和 signal(S)原语,可以把原语理解为我们自己写的函数,函数名分别为wait和signal,括号里的信号量s其实就是函数调用时传入的一个参数。
- wait、signal原语常简称为P、V操作(来自荷兰语proberen和 verhogen)。因此,做题的时候常把wait(S)、signal(S)两个操作分别写为P(S)、v(S)