进程调度
- 进程调度是一个内核子系统
- 进程调度的主要任务就是决定哪一个“就绪”状态的进程来执行
- 就绪进程就是非阻塞几次呢好姑娘
- 阻塞的进程就是正在睡眠的进程,需要内核唤醒的进程。
从人的理解,就是长久的sleep,周期性检查是不是需要检查。
内核会告诉你你准备的东西是否就绪,你是不是已经等完成了
找工作会考的三态模型
一个进程在启动后有三个状态,分别是就绪、运行、阻塞,进程会一直在这三个状态之间切换,进程在运行的状态是
- 就绪被调度起来就会运行起来,调度到内存中,有可能会发现时间片消耗完,运行到就绪,就绪到运行。
- 如果运行的时候发现了IO请求,就要变成阻塞状态,也就是发生了等待某个事件发生
- IO结束,或等待的事件发生,我就会从阻塞状态到就绪的状态,等待被调度。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IjBWZZ0m-1596268709201)(/Users/zhangzhihan/Desktop/海贼学习C语言/屏幕快照 2020-08-01 下午3.29.21.png)]
讲进程调度,就要从最开始开始讲
早起的微软用的系统,
DOS是单任务操作系统,每次只运行一个进程。
在单处理器的操作系统中,进程交错运行,从用户的角度上看,仿佛是多个任务在同时运行
在多处理器的操作系统中,在不同的处理器上可以同时运行不同的任务,做到真正的并行运行。
所谓调度:运行哪个进程,运行多久?
并行和并发
- 并行:真的在不同的cpu上运行
- 并发:交错着运行
协同和抢占
-
协同:
- 进程会一直运行,直到它自己结束
- 操作系统不做任何干预
-
抢占
- 调度器决定进程何时结束并执行另一个进程,这叫抢占
- 进程被抢占前运行的时间称为该进程的时间片
- 调度器给每一个进程分配一个处理器时间片
-
时间片
- 时间片的长短会影响系统的 全局行为和性能来说是至关重要的
- 时间片过长:-》提升系统通吐率和全局性能
- 降低了并发运行
- 用户会感觉到明显的延迟
- 时间片过短:-〉可以提升响应能力,交互性能
- 花更多的时间在调度上
- 会限制,时间局部性 带来的性能的提升
- 时间局限性在讲catch(高级快速缓存算法)我们的系统汇总cpu是最快的,其次是高速缓存,再其次是catch,内存,然后是外存;
- 为什么要有外存呢,cpu算的很快但是磁盘读的很慢,所以说我们也看到弊端,是空间小,所以内存可以调和cpu和磁盘的不对等。
- 高速缓存区域里面保留的都是内存中用的,是高频访问的数据,如果时间片过短,那就导致了高速缓存区,刚做好,就要被清除。
- 空间局部性,同样还有一个问题,读的时候是一个字节一个字节地去读,在读了之后发现都是引用的,我下次的系统都会自作主张多读一些,(工程控制—回路反馈)在计算机中有很多这样的机制,是连续地用这样的机制
- 解决时间片长短的问题:*不用时间片
-
IO约束型和处理器约束性
- 一直消耗完可用时间片的进程为处理器约束性进程
- (空转)没外设磁盘,读取这样的。cpu在就能一直转,需要更多的cpu资源,会耗掉全部的cpu
- 需要获取大量的CPU资源
- 消耗点调度器分配的全部CPU
- 多数时间处于阻塞状态或者等待资源的进程为IO约束型进程
- 经常阻塞在文件IO操作上:文件,网络,键盘,鼠标
- 也可能除了请求
- 一直消耗完可用时间片的进程为处理器约束性进程