前言
有关操作系统cpu进程调度的概念总结
基本概念
- CPU(处理机、进程)调度
- Nonprescriptive(非抢占式)调度: 直到某进程运行完成或者阻塞时才把处理机分配给另一个进程
- running -> waiting
- terminate
- Preemptive(抢占式)调度: 系统基于某种原则(优先权、短进程优先、时间片),剥夺当前进程的处理机,并分配给其他进程
- Dispatcher(调度程序): 分配处理器给短期调度选中的进程
- 切换上下文
- 切换用户模式
- 跳到用户程序所在位置开始执行
- Dispatch latency(调度延迟): 调度程序停止一个进程到启动另一个进程的时间
调度算法的准则
- 面向用户
- 周转时间(turnaround time):进程从提交到完成的时间(执行(CPU)+等待(就绪+阻塞))
- 周转时间=完成时间-提交时间
- 平均周转时间=∑周转时间/进程数
- 带权周转时间=周转时间/CPU执行时间
- 平均带权周转时间=∑平均周转时间/进程数
- 响应时间(response time): 进程提出请求到首次被响应的时间
- 等待时间(waiting time): 进程在就绪队列中等待的时间总和
- 截止时间: 开始截止时间和完成截止时间
- 周转时间(turnaround time):进程从提交到完成的时间(执行(CPU)+等待(就绪+阻塞))
- 面向系统
- 吞吐量(throughput)单位时间内完成的进程数(批处理系统)
- 平均周转时间不是吞吐量的倒数(考虑并发)
- 处理机利用率(cpu utilization)
- 设备的均衡利用
- 调度算法
- 最优原则
- 最大CPU利用率 Max Cpu utilization
- 最大吞吐量 Max throughput
- 最短周转时间 Min turnaround time
- 最短等待时间 Min waiting time
- 最短响应时间 Min response time
- 公平
调度算法
- FCFS(First-Come,First-Served)先来先服务
- 按照作业提交的顺序形成就绪状态的先后sx
- 当前作业占用CPU直到执行完或阻塞(非抢占)
- 作业唤醒后(I/O完成)要等到当前作业让出CPU才执行
- 最简单
- 有利于长进程;有利于CPU Bound型进程;不利于短进程;不利于I/O Bound型进程
- SJF(Shortest-Job-First,SPF,Shortesst-Process-First)短作业优先
- 对预计执行时间短的作业优先
- 非抢占
- 抢占式(SRT,SRTF,Shortest-Remainint-Time-First)当新来进程的剩余时间小于当前进程的运行时间则抢占
- HRRN(是FCFS和SJF的折中):响应比R=(等待时间+要求执行时间)/要求执行时间
- 只能预测其运行时间,通过之前的CPU burst预测本次的CPU burst:Tn+1=αtn+(1-α)Tn,tn为实际中第n次CPU burst的长度。Tn为预测的下次CPU burst;0<=α<=1
- Priority 优先权
- 分配给最高优先权的进程
- 静态优先权:创建进程时确定(进程类型、对资源要求、用户要求)
- 动态优先权:基于某种原则
- 最小的整数≡最高的优先级
- SJF以下一次CPU脉冲长度作为优先数
- 非抢占式将最高优先级的进程放在队列头
- 抢占式需要在高优先级进程到来时中断
- 易出现饥饿(Starvation)问题,即进程长时间得不到执行;通过动态优先级解决(老化(Aging),随时间增加进程优先权)
- 分配给最高优先权的进程
- Round Robin 时间片轮转
- 将所有就绪进程按照FCFS排队列
- 每次调度将CPU分配给队首执行一个时间片(time slice(几毫秒到几百毫秒))
- 时间片结束发生时钟中断
- 切换上下文,将当前进程送到就绪队列队尾
- 进程未使用完时间片(阻塞)也可以让出CPU
- 时间片过大=>FIFO; 时间片过小=>但必须大于上下文切换,否则开销过大
- 设时间片长度为q,队列进程数为n,则响应时间为n*q,每个进程一次以至多q的长度占有1/n CPU,进程不会等待超过(n-1)q
- 就绪进程越多,时间片越小(响应时间一定)
- 一个时间片内应该能处理完用户输入
- 平均周转时间大于SJF,但响应时间小于SJF
- Multilevel Queue 多级队列
- 将就绪队列分为多个子队列,每个作业固定在一个队列(系统进程、用户交互进程、批处理进程)
- 分为foreground(interactive 前台、交互式)-RR background(batch 后台、批处理)-FCFS
- 固定优先级调度:先前台再后台,可能会饥饿
- 给定时间片调度:每个队列得到一定的CPU时间,进程在给定时间内执行
- Multilevel Feedack Queue 多级反馈队列:是时间片和优先级的综合
- 对短进程:提高系统吞吐量和缩短平均周转时间
- 对I/O进程,获得较好的I/O设备利用率和缩短响应时间
- 多个就绪队列,每个队列的优先级不同(逐级降低),时间片不同(逐级升高)
- 新进程进入内存后先进入队列1的末尾,按FCFS调度,若在队列1中一个时间片未执行完,则降低优先级并加入到队列2的末尾,仍然按FCFS进行,在最低级的队列中使用RR
- 当高优先级的队列为空时才执行低优先级队列;若此时有进程进入高优先级队列,则抢占式执行新进程,并将被抢占的进程投入原队列的末尾
- I/O型进程:进入最高优先级队列以即时响应I/O,执行一个小时间片(只处理I/O数据),转入阻塞
- CPU型进程:每次执行完时间片进入更低级队列,最终采用最大时间片来执行,减少调度次数
- I/O<CPU:处理完I/O进程后回到原队列
- I/O完成时,提高优先级,时间片用完时,降低优先级
- HRRN(Highest Response Ratio Next) 高响应比优先
- 多处理器进程调度
多线程调度
- 本地(local)线程: 线程库调度
- 全局(global)线程: 内核调度