重点
处理器调度的分类和对应内容。上下文。作业调度和进程调度算法,重点注意MFQ。
基本概念
处理器调度划分为3个层次:高级调度、中级调度和低级调度。
用户作业从提交给系统开始,直到运行结束退出系统为止,将经历高级调度、中级调度和低级调度。
高级调度
将用户提交的作业分配到就绪队列。是从硬盘到内存。是对作业的调度。
中级调度
是为了提高内存利用率和平衡系统负载而采取的一种利用外存补充内存的措施。
它根据需要确定被挂起的进程,并在有进程被挂起时确定哪个进程进入内存。
低级调度
低级调度又称为进程调度、短程调度。是从内存到处理器。
它确定就绪进程哪个被执行。
进程调度的基本机制
- (一个或多个)就绪队列
- 分派程序。将根据进程调度算法将所选中的进程从就绪队列中移出,然后进行进程的上下文切换,并将处理器分配给京城。
- 上下文切换机制。实现进程的上下文切换。
上下文
操作系统内核使用一种称为上下文切换的较高层形式的控制流来实现多任务。
内核为每一个进程维持一个上下文。
上下文就是内核重新启动一个被抢占的进程所需的状态。他有一些对象的值组成,这些对象包括:
- 各个寄存器
- 程序计数器
- 用户栈
- 内核栈
- 各种内核数据
比如描绘地址空间的页表,包含有关当前进程信息的进程表,以及包含进程已打开文件的信息的文件表。
进程上下文切换的操作
- 保存并恢复处理器信息。和Java的Activity类似,在切换进程时会将这个进程的相关数据保存到PCB中。
- 更新PCB并移动到相应进程队列。
从内存中恢复下一个要执行的进程,恢复该进程原来的状态到寄存器,返回到其上次暂停的执行代码然后继续执行
- CS只能发生在内核态(kernel mode)
- system call会陷入内核态,是user mode => kernel mode的过程。我们称1其为mode switch,但不表明会发生CS(其实mode switch同样也会做很多和CS一样的流程,例如通过寄存器传递user mode 和 kernel mode之间的一些参数)
- 一个硬件中断的产生,也可能导致kernel收到signal后进行CS
抢占调度和非抢占调度算法
抢占调度指的是:一个进程在处理器中运行时,操作系统可以根据相应抢占规则,将进程移动到就绪队列,并运行其他进程。
调度算法
作业调度算法:
- 先来先服务FCFS
- 最短作业SJF
- 响应比高者优先HRRF(等待时间/处理时间大者优先)
- 优先级
- 分类调度
进程调度算法:
- 先来先服务
- 时间片TRR(轮流执行)
- 优先级
- 多级队列MQ(不同的就绪队列有不同优先级,调度算法也可能不同)
- 多级反馈队列MFQ(都使用时间片调度,且优先级高的时间片短)
在Unix中采用的即是多级反馈队列
线程调度
实时调度
时间约束
实时系统的任务具有一定的时间约束(截止时间)。
根据截止时间,实时系统的实时性分为“硬实时”和“软实时”。硬实时是指应用的时间需求能够得到完全满足,否则就造成重大安全事故,甚至造成重大的生命财产损失和生态破坏,如在航空航天、军事、核工业等一些关键领域中的应用。软实时是指某些应用虽然提出时间需求,但实时任务偶尔违反这种需求对系统运行及环境不会造成严重影响,如监控系统等和信息采集系统等。
可预测性
可预测性是指系统能够对实时任务的执行时间进行判断,确定是否能够满足任务的时限要求。由于实时系统对时间约束要求的严格性,使可预测性成为实时系统的一项重要性能要求。除了要求硬件延迟的可预测性以外,还要求软件系统的可预测性,包括应用程序的响应时间是可预测的,即在有限的时间内完成必须的工作;以及操作系统的可预测性,即实时原语、调度函数等运行开销应是有界的,以保证应用程序执行时间的有界性。
进行实时调度时,进程的起始时间、处理时间、截止时间、资源需求、优先级都是已知的。
操作系统的目的是尽量让所有任务都完成,如果不能做到,则让优先级高的都完成。
周期任务处理能力
根据所有周期任务的处理时间/周期时间的和与1的关系判断即可。
抢占式调度算法
- 基于时钟中断的优先级算法
- 立即抢占算法
- 发生频率优先级算法
发生频率越高,优先级越高。运行时允许高优先级抢占低优先级
非抢占式调度算法
- 轮转
- 优先级算法
- 期限算法
多处理器调度
略
参考文献
这里是我的blog:有更多总结分享。排版可能也会更好看一点=v=
https://endlesslethe.com/operating-system-course-tutorial-1.html