OS-4
调度的基本内容:
因为内存空间是有限的,所以当用户提交多个作业时不能完全放在内存里面
必须通过一定的选择选中一些放到内存里面去执行,怎么选择就是调度需要完成的事
这个调度也被称为是作业调度,其发生频率相对于后面两者低很多
至于书上所说的:多道批处理系统大多配有作业调度,而别的通常不需要配置
目前还在困惑……..
补充,来源:
[https://zhuanlan.zhihu.com/p/436887051]
作业调度主要用于多道批处理系统,在分时和实时系统中不设置作业调度。因为分时系统为了做到及时响应,用户通过键盘输入的命令或数据等会被直接送入内存,因而无需配置作业调度机制,但是它也需要设置某种接纳控制措施来限制进入系统的用户数目。类似地,实时系统中也不需要作业调度,但是必须要有接纳控制措施。
又是一个历朝历代的考研人的博客:
[https://blog.csdn.net/qyb19970829/article/details/112441513]
低级调度就是一般所说的,根据优先级从进程里面选一个执行,后面会进一步细化的
讨论的主题也是这样一个方向
当内存不够的时候,中级调度就会把一些进程给调用到外存,从内存调到外存里面放着
于是就被称为是挂起了,也不能说是节省资源,答案那边写的是节省内存,而非系统开销
关于书上所说的“暂时不能运行”基本也是指代内存不够这样一个事情
在统考里面只需要掌握五种状态即可,另外两种当作拓展性了解即可,没必要特别在意
重点应该是把握这个挂起态、阻塞态之间的不同点
一个小部分的总结,书上的内容还是比较丰富的,复习的时候可以结合起来看
调度的实现,根据书上的大致上给一些补充和解释:
调度程序是不是原语?
调度一般可以分为被动式调度以及主动式调度,什么时候能够调度?
相应的,什么时候不能调度?
对书上调度时机的补充,P67页下角,这个和中断屏蔽什么没关系,单纯就是判断优先级
简单来说就是此进程重新回到了就绪态,然后和正在运行的比较优先级决定是否抢占
这个是当年统考真题后引出的一堆知识点
关于狭义、广义,本身OS就是比较偏零散性知识点的一门课,不能说有绝对的正确
所以有时候难免会出现一些描述不清、前后矛盾,这时候也只能去猜出题人想法
进程调度在不同的语境下也可能产生不同的含义,只能说看哪个错的更离谱去做选择了
进程调度又可以分为抢占式、非抢占式
关于闲逛,书上的一些补充:
这个闲是真的闲,意思是CPU现在是真的没有事情干,至于指令周期后测试中断
这个并不是闲逛程序的特性,而是每一个指令周期结束的例常事务
需要注意下不同的调度算法下,其被激活的时间可能不一样,主要是抢占式和非抢占关系
非抢占式一般都会等这个作业完成或者这个作业主动选择退出后再去调度别的进程
抢占式就没有固定了,符合条件该抢就抢
调度时机——什么事件会触发“调度程序”?
• 创建新进程
• 进程退出
• 运行进程阻塞
• I/O中断发生(可能唤醒某些阻塞进程)
• 非抢占式调度策略,只有运行进程阻塞或退出才触发调度程序工作
• 抢占式调度策略,每个时钟中断或k个时钟中断会触发调度程序工作
关于书上线程调度的补充:
主要是用户级线程,其用户态的调度是用户那边的线程库决定的
但是其在内核看来依旧是一个进程,所以内核也依旧会为其安排相应的调度策略
对69页(4)中一句话的补充:
其实主要是对这个“执行时间”的补充,这里说的执行时间是执行时长,非执行的时间
需要注意的就是这页的最后一段话,还是比较重要的
课后习题的补充:
第八题,稍微联系下两门的知识点
个人混淆了进程上下文与操作系统所干的事情之间的关系,进程上下文是一个综合性工作
不只是操作系统完成的,是硬件和操作系统一起完成的
操作系统P16、P18
中断机制中,仅有一小部分功能属于内核,它们主要负责保护和恢复中断现场的信息
同时转移控制权到相关的处理程序里面
处理程序的执行不是内核的事情
对应到计组P310页,就是保存现场和屏蔽字、恢复现场和屏蔽字,移交控制权
将PSW、PC存入栈是CPU硬件,即所谓隐指令干的事情
其实就是进程上下文和中断上下文的关系,两个本身流程很类似
所谓的子程序嵌套本身也就是进程的上下文切换
[https://blog.csdn.net/qq_38500662/article/details/80598486]
[https://blog.csdn.net/Ragnaro/article/details/81240976]
关于算法的补充:
复习建议是,先看一遍书上的,再看一遍这边补充的事,然后跟着王道PPT的例题走一遍
然后再去做课后的大量综合题、计算题,建议是练的越多越好,可以自己出题
这边的内容我已经猜到肯定会忘得非常快,所以有时间的情况下一定要花点时间过来
关于优先级或者运行时间相同等无法依靠现有算法区分的情况:
一般统考肯定会严谨给出相应的策略,但也要清楚一般情况下而言都是辅助FCFS
关于服务时间、等待时间等的补充:
当一个进程在I/O的时候,这个时候是会主动放弃CPU进入阻塞状态,但不代表进入等待
这个时间是不能算作等待时间的,其依旧被服务着,即CPU和I/O设备的服务都是服务时间
只有真正等待,什么都不干的时候才是等待时间
周转时间需要注意是单纯的结束时间减去开始时间,不要算错,课后错了一次
对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间
最简单直观的算法就是结束减去开始,当然这边的开始是指提交开始,不是进入内存
运行时间一般指代的是在CPU上运行的时间
关于进程调度、作业调度的区分:
课后的综合题会出现,也会出现批处理的作业量,比较坑,内存里可能只能放两个进来
意思就是同时只能上两个程序,就绪队列里面最多只有一个,还有一个在运行
其实主要就是这样一个点:
进程想要运行需要先放到主存里面,这个是作业调度
放到内存里面的进程被CPU调度,那么这个才是进程调度
即使是用户级线程也有两种情况,先由内核的作业调度进来,然后再由线程库自己调度
关于同时刻的区分问题:
这个,如果是同时刻到达的话,那么就安心按照算法所给定的来选择
例如同时顺序到达1、2、3、4、4,优先级是5、4、3、2、1,不代表第一个必须首运行
按照相应的算法策略来,暂时不至于那么坑
时间片轮转:
时间片轮转的时候,同时刻撤下一个进程,又新进一个进程,那么先把新的加入队尾再把老的放队尾
时间片需要注意的就是一个坑,时间片没有用完但是进程结束,那么直接是让渡时间片的
这个很容易考,需要注意,在73页中间
优先级调度:
需要注意的就是优先级的问题,到底是高的优先级高还是低的优先级高,题目会有题设
SJF默认就是非抢占式的,如果是抢占式的要记住是剩余时间最短的抢占方式
画图建议:
一般个人不太建议画甘特图,按照自己的方法(A)(B)会更加明朗,哪个快用哪个
其实课后的习题里面已经有一定的体现,按照最简单、清晰的方法画,后面会进行总结
关于I/O繁忙与计算繁忙:
I/O繁忙的经常会离开CPU等待I/O,所以一般也可以看做是短作业,这个注意记住
计算繁忙的会长时间占据CPU,所以可以看作是长作业
FCFS的处理策略会导致计算繁忙的大量占据CPU,而短作业等待时间过长
PS:
对于算法的内容个人并没有大量摘录,一方面是认为没必要,一方面认为还是要多练为主
这上面是一些比较容易忽略的细节处理,这一些是必要的摘录内容
仍然是一个前提:课后的计算题、王道PPT上面的计算题有条件尽可能每天都去做一遍
直到自己认为完全没问题为止,算法这一块本就繁杂容易忘记,数据结构的教训
补充:
短作业、长作业都是相对概念,不代表短作业不会饥饿,也是会的