文章目录
进程调度关系的问题
- 当前调度哪个进程进行操作
- 调度某个进程多长的时间
- 什么时候会发生调度问题:
- 进程创建的时候(creation)
- 进程退出的时候(exit)
- 进程阻塞的时候(block)
- 进程中断的时候(interrupt)
为什么进程调度困难
- 不同的工作负载
- 不同的环境(操作系统)有不同的需求,对下列不同的系统目标是不同的:
- Batch (periodic analytic tasks)
- Interactive(user facing)
- Real Time(need to meet deadlines)
对于不同操作系统的知识可以参考:
https://www.geeksforgeeks.org/types-of-operating-systems/?ref=gcse - 调度器对于每个进程的信息知之甚少
调度器的主要衡量指标(scheduler objectives)
- 公平性:
- 所有的进程都能够公平的分配 CPU 资源
- 吞吐量:
- 单位时间内完成的进程数尽可能多
- 周转时间:
- 让每个进程从开始到结束的时间尽可能短
- 响应时间:
- 从第一次提交请求到第一次响应产生的时间尽可能短
调度算法的目标(scheduling algorithm goals)
-
对于所有的系统都尽可能实现:
- 公平性
- 策略实施:确保既定政策得到贯彻执行
- 均衡性:让系统的所有部分都处于 busy 状态
-
对于 Batch system,尽可能完成下列要求:
- Throughput(吞吐量)
- Turnaround time(周转时间)
- CPU 利用率
-
对于 interactive system,尽可能实现:
- 响应时间(response time)
- 适应性(Proportionality):符合用户的预期
-
对于 real-time system,尽可能实现:
- meeting deadlines:avoid losing data
- predictability:avoid quality degradation in multimedia systems
调度算法分类
- 抢占调度:进程按照到达的顺序被放入 ready queue;进程可以在执行一段时间后被中断
- 非抢占调度(Non-preemptive):CPU 被分配给进程,进程会持有 CPU 资源运行到自己结束或者阻塞
进程 / 上下文切换
- 上下文切换的时候要对当前进程的状态进行保存:
- 保存当前的寄存器加载状态以及内存的相关内容(程序计数器、栈指针位置等)
- 更新各种内存表(memory tables)和列表(lists)
调度算法总览
适用于 batch system 的
First-come first-serverd
- 先进入等待列表的进程会被优先处理
pros(优点)
- 简单并且公平
cons(缺点)
- 如果有进程是 IO密集型的进程,那么整个系统的效率就会极其低
Shortest Job First
-
先处理在当前状态下 “已经等待的时间”最短的,将等待时间较长的任务靠后执行
-
详细的内容可以参考这篇文章,写的很不错:
https://www.guru99.com/shortest-job-first-sjf-scheduling.html
比较 a, b 情况的平均周转时间
- 其实这种调度的方式的优势在于最大程度降低了进程的平均等待时间,进而降低了平均的周转时间。
- 也正是因为这个特性,这种算法经常被用在面对 batch 任务的系统中
- shortest job first 调度算法本身是一种非抢占式的调度算法,但是通过改进后的 shortest remaining time next 是一种抢占式的调度算法
shortest remaining time next
- 详细描述也是参照上述连接
适用于 interactive system 的
Round-Robin
- 使用时间片(也称为时间量程 quantum)以相等的部分和循环顺序分配给每个进程,处理所有没有优先级的进程(也称为循环执行)
- 调度程序设置一个计时器,在特定的时间量(quantum)之后生成一个中断
- quantum 就是进程不间断运行的时间
- 循环调度简单,易于实现,并且没有 starvation 的问题
starvation: 有些进程由于一直没有分配到 CPU 资源而无法进行处理
Priority Scheduling
- 重要的任务总是在不那么重要的任务之前运行
- 例如:系统进程在某些情况下比用户进程更重要
- 静态与动态优先级问题
- 潜在的问题:starvation。如果更重要的任务不断到来,那么低优先级的任务可能永远不会执行。