处理器状态
中断技术
1. 中断概念
不同计算机系统中,通常有不同的中断源和中断装置,它们有一个共性,即在中断事件发生后,中断装置能改变处理器内操作的执行顺序
2. 中断源分类
外中断(中断或异步中断):指来自处理器之外的中断信号
外中断又分可屏蔽中断和不可屏蔽中断-
内中断(异常或同步中断):指来自处理器内部,通常由于程序执行中,发现与当前指令关联的、不正常的、或是错误的事件,内中断不可屏蔽
- 访管中断:由执行系统调用而引起
- 硬件故障中断:如电源失效、协处理器错误、奇偶校验错误、总线超时等
- 程序性异常:如非法操作、地址越界、页面故障、调试指令、除数为0和浮点溢出等
大部分异常发生在用户态,而内核态唯一发生的异常是“缺页异常”
- “中断”要求被快速处理,以便及时响应其它中断信号,所以,中断处理程序处理过程中是不能阻塞的;“异常”处于被打断的当前进程上下文中,所提供的服务是当前进程所需要的,所以,异常处理程序处理过程中是可以阻塞的
- 中断允许发生嵌套,但异常大多为一重;异常处理过程中可能会产生中断,但中断处理过程中决不会被异常打断
3. 中断和异常的响应及服务
- 发现中断源
- 保护现场
- 转向处理中断/异常事件的处理程序
- 恢复现场
4.中断事件处理原则
- 硬件故障中断
- 需要人工干预,如复位、设置或替换
- 中断处理程序保护现场、停止设备工作,停止CPU运行、向操作员报告故障信息
- 程序性中断
- 语法错误、逻辑错误、异常
- 不同用户处理要求不同,借助于信号机制将捕获中断事件,并原封不动地转交给应用程序自行处理
- I/O中断
- 访管中断
- 时钟中断
5. 中断优先级和多重中断
6. Linux中断处理
进程及其实现
线程及其实现
Linux进程
处理器调度
1. 处理机调度层次
1. 高级调度,又称作业调度、长程调度
2. 中级调度,又称平衡调度、中程调度
3. 低级调度,又称进程调度/线程调度、短程调度
2. 选择调度算法的原则
-
资源利用率
- CPU利用率=CPU有效工作时间/CPU总的运行时间
- CPU总的运行时间=CPU有效工作时间+CPU空闲等待时间
- 在一定的I/O操作等待时间的比率下,运行程序的道数越多,CPU空闲时间所占的百分比越低
-
吞吐率
单位时间内处理的作业数 -
公平性
确保每个用户每个进程获得合理的CPU份额或其他资源份额,不会出现饿死情况 -
响应时间
- 交互式进程从提交一个请求(命令)到接收到响应之间的时间间隔称响应时间
- 使交互式用户的响应时间尽可能短,或尽快处理实时任务
- 这是分时系统和实时系统衡量调度性能的一个重要指标
-
周转时间
- 批处理用户从作业提交给系统开始,到作业完成为止的时间间隔称作业周转时间
- 如果作业i提交给系统的时刻是
ts ,完成时刻是tf ,该作业的周转时间ti 为ti=tf–ts - 实际上,它是作业在系统里的等待时间与运行时间之和
- 应使作业周转时间或平均作业周转时间尽可能短,这是批处理系统衡量调度性能的一个重要指标
- 带权周转时间
- 作业的周转时间T与系统为其提供服务的服务时间之比
- 反映作业长短
- 带权周转时间越大,作业越短
- 带权周转时间越小,作业越长
- 为了提高系统的性能,要让若干个用户的平均作业周转时间和平均带权周转时间 最小
平均作业周转时间T=(∑i=1nti)/n
平均带权作业周转时间T=(∑i=1n(tiai))/n
3. 作业管理与调度
4. 低级调度功能和类型
5. 作业调度和低级调度算法
-
剥夺式(preemptive) ,又称抢先式
- 高优先级进程/线程可剥夺低优先级进程/线程
- 当运行进程/线程时间片用完后被剥夺
-
非剥夺式(nonpreemptive),又称非抢先式
一旦某个进程/线程开始运行后便不再让出处理器,除非- 进程/线程运行结束
- 主动放弃处理器
- 因发生某个事件而不能继续执行
- 剥夺式vs.非剥夺式
- 剥夺式策略比非剥夺式策略开销要大,主要是调度程序自身开销,及内存和磁盘对换程序及数据的开销
- 剥夺式策略可以避免进程/线程长时间地独占处理器,对于实时系统和分时系统有利,能为用户提供高性能服务
低级调度算法类型
- 先来先服务算法(First Come First Severed,FCFS)
按照先后次序,不利于短作业而优待了长作业、不利于I/O繁忙作业而利于CPU繁忙作业 - 最短作业优先算法 (Shortest Job First,SJF)
每次选择耗时最短的,忽视作业等待时间,会出现饥饿现象,实现需要知道作业所需运行时间,否则调度没有依据。 - 最短剩余时间优先算法(Shortest Remaining Time First,SRTF)
如果新作业需要的CPU时间比当前正在执行的作业剩余的CPU时间短,SRTF就强行赶走正在执行的作业。 - 最高响应比优先算法(Highest Response Ratio First,HRRF)
介于FCFS与SJF之间的折中的非剥夺式算法,每次选择响应比最高的程序投入运行
响应比 = 1 + 已等待时间/估计运行时间- 短作业容易得到较高响应比
- 长作业等待时间足够长后,也会获得足够高响应比
- 饥饿现象不会发生
- 优先级调度算法
- 静态优先数法
- 动态优先数法
- 根据进程等待CPU时间决定
- 根据进程占有CPU时间决定
- 时间片轮转法调度(Round-Robin,RR)
每次把CPU分给就绪队列首进程使用一个时间片,当一个时间片结束时,强迫一个进程让出处理器并且排到就绪队列的尾部。(注意程序到来时间与一个进程结束后的时间前后) - 多级反馈队列调度(Multi-Level Feedback Queue,MLFQ)、反馈循环队列、多队列策略
将就绪队列分为两级或多级、较高优先级的队列一般分配给较短的时间片、处理器优先选择较高优先级队列。