操作系统第二章

时间:2022-04-30 20:09:48

处理器状态

操作系统第二章

中断技术

1. 中断概念

不同计算机系统中,通常有不同的中断源和中断装置,它们有一个共性,即在中断事件发生后,中断装置能改变处理器内操作的执行顺序

2. 中断源分类

  1. 外中断(中断异步中断):指来自处理器之外的中断信号
    外中断又分可屏蔽中断不可屏蔽中断

  2. 内中断(异常同步中断):指来自处理器内部,通常由于程序执行中,发现与当前指令关联的、不正常的、或是错误的事件,内中断不可屏蔽

    • 访管中断:由执行系统调用而引起
    • 硬件故障中断:如电源失效、协处理器错误、奇偶校验错误、总线超时等
    • 程序性异常:如非法操作、地址越界、页面故障、调试指令、除数为0和浮点溢出等
  3. 大部分异常发生在用户态,而内核态唯一发生的异常是“缺页异常”

  4. “中断”要求被快速处理,以便及时响应其它中断信号,所以,中断处理程序处理过程中是不能阻塞的;“异常”处于被打断的当前进程上下文中,所提供的服务是当前进程所需要的,所以,异常处理程序处理过程中是可以阻塞的
  5. 中断允许发生嵌套,但异常大多为一重;异常处理过程中可能会产生中断,但中断处理过程中决不会被异常打断

3. 中断和异常的响应及服务

  • 发现中断源
  • 保护现场
  • 转向处理中断/异常事件的处理程序
  • 恢复现场

4.中断事件处理原则

  1. 硬件故障中断
    • 需要人工干预,如复位、设置或替换
    • 中断处理程序保护现场、停止设备工作,停止CPU运行、向操作员报告故障信息
  2. 程序性中断
    • 语法错误、逻辑错误、异常
    • 不同用户处理要求不同,借助于信号机制将捕获中断事件,并原封不动地转交给应用程序自行处理
  3. I/O中断
  4. 访管中断
  5. 时钟中断

5. 中断优先级和多重中断

6. Linux中断处理

进程及其实现

线程及其实现

Linux进程

处理器调度

1. 处理机调度层次

1. 高级调度,又称作业调度、长程调度
2. 中级调度,又称平衡调度、中程调度
3. 低级调度,又称进程调度/线程调度、短程调度

2. 选择调度算法的原则

  1. 资源利用率
    • CPU利用率=CPU有效工作时间/CPU总的运行时间
    • CPU总的运行时间=CPU有效工作时间+CPU空闲等待时间
    • 在一定的I/O操作等待时间的比率下,运行程序的道数越多,CPU空闲时间所占的百分比越低
  2. 吞吐率
    单位时间内处理的作业数
  3. 公平性
    确保每个用户每个进程获得合理的CPU份额或其他资源份额,不会出现饿死情况
  4. 响应时间
    • 交互式进程从提交一个请求(命令)到接收到响应之间的时间间隔称响应时间
    • 使交互式用户的响应时间尽可能短,或尽快处理实时任务
    • 这是分时系统和实时系统衡量调度性能的一个重要指标
  5. 周转时间
    • 批处理用户从作业提交给系统开始,到作业完成为止的时间间隔称作业周转时间
    • 如果作业i提交给系统的时刻是 ts ,完成时刻是 tf ,该作业的周转时间 ti ti=tfts
    • 实际上,它是作业在系统里的等待时间与运行时间之和
    • 应使作业周转时间或平均作业周转时间尽可能短,这是批处理系统衡量调度性能的一个重要指标
  6. 带权周转时间
    • 作业的周转时间T与系统为其提供服务的服务时间之比
    • 反映作业长短
      • 带权周转时间越大,作业越短
      • 带权周转时间越小,作业越长
    • 为了提高系统的性能,要让若干个用户的平均作业周转时间平均带权周转时间 最小
      平均作业周转时间 T=(i=1nti)/n
      平均带权作业周转时间 T=(i=1n(tiai))/n

3. 作业管理与调度

4. 低级调度功能和类型

5. 作业调度和低级调度算法

  1. 剥夺式(preemptive) ,又称抢先式
    • 高优先级进程/线程可剥夺低优先级进程/线程
    • 当运行进程/线程时间片用完后被剥夺
  2. 非剥夺式(nonpreemptive),又称非抢先式
    一旦某个进程/线程开始运行后便不再让出处理器,除非
    • 进程/线程运行结束
    • 主动放弃处理器
    • 因发生某个事件而不能继续执行
  3. 剥夺式vs.非剥夺式
    • 剥夺式策略比非剥夺式策略开销要大,主要是调度程序自身开销,及内存和磁盘对换程序及数据的开销
    • 剥夺式策略可以避免进程/线程长时间地独占处理器,对于实时系统和分时系统有利,能为用户提供高性能服务

低级调度算法类型

  1. 先来先服务算法(First Come First Severed,FCFS)
    按照先后次序,不利于短作业而优待了长作业、不利于I/O繁忙作业而利于CPU繁忙作业
  2. 最短作业优先算法 (Shortest Job First,SJF)
    每次选择耗时最短的,忽视作业等待时间,会出现饥饿现象,实现需要知道作业所需运行时间,否则调度没有依据。
  3. 最短剩余时间优先算法(Shortest Remaining Time First,SRTF)
    如果新作业需要的CPU时间比当前正在执行的作业剩余的CPU时间短,SRTF就强行赶走正在执行的作业。
  4. 最高响应比优先算法(Highest Response Ratio First,HRRF)
    介于FCFS与SJF之间的折中的非剥夺式算法,每次选择响应比最高的程序投入运行
    响应比 = 1 + 已等待时间/估计运行时间
    1. 短作业容易得到较高响应比
    2. 长作业等待时间足够长后,也会获得足够高响应比
    3. 饥饿现象不会发生
  5. 优先级调度算法
    1. 静态优先数法
    2. 动态优先数法
      • 根据进程等待CPU时间决定
      • 根据进程占有CPU时间决定
  6. 时间片轮转法调度(Round-Robin,RR)
    每次把CPU分给就绪队列首进程使用一个时间片,当一个时间片结束时,强迫一个进程让出处理器并且排到就绪队列的尾部。(注意程序到来时间与一个进程结束后的时间前后)
  7. 多级反馈队列调度(Multi-Level Feedback Queue,MLFQ)、反馈循环队列、多队列策略
    将就绪队列分为两级或多级、较高优先级的队列一般分配给较短的时间片、处理器优先选择较高优先级队列。

Linux调度算法