Loading

操作系统(一)

1 概述

多道程序同时计算

  • 原因:

    • CPU速度与I/O速度不匹配的矛盾,非常突出
    • 只有让多道程序同时进入内存争抢CPU运行,才可以使得CPU和外围设备充分并行,从而提高计算机系统的使用效率
  • 示例:

image-20220420155304551
  • 实现:
    • 为进入内存执行的程序建立管理实体:进程
    • OS控制进程执行和资源的调度
      • 如何让正在运行的程序让出CPU:中断(中断正在执行的程序,引入OS处理),中断是激活CPU的唯一手段,启动等也属于中断

系统调用

  • 概念:
    • 系统调用是操作系统的程序接口,为所有运行程序提供访问操作系统的接口。它是操作系统完成某种特定功能的过程。
  • 实现:
    • 陷入处理机制:控制和实现系统调用的机制
      • 需设计一张系统调用入口地址表,每个入口地址指向一个系统调用的处理程序,并包含系统调用自带参数的个数
      • 需开辟现场保护区,以保存发生系统调用时的处理器现场
    • 陷入指令:异常中断指令,为实现系统调用而引起处理器中断的指令
    • 每个系统调用都事先规定了编号,并在约定寄存器中规定了传递给内部处理程序的参数
image-20220420161107488

2 处理器管理1 中断

指令执行过程

  1. 取指:CPU根据PC从存储取出机器指令放入IR
  2. 解码:IR解译指令
  3. 执行:连接CPU控制单元和算术逻辑单元,执行指令

程序状态字PSW

  • PSW,指一个或一组控制与状态寄存器,保存当前程序运行的动态信息,比如PC、IR、中断字、中断屏蔽、处理器模式等

用户态与内核态

  • 设计的处理器模式,用来实现特权指令管理
    • 内核态可以执行全部指令,用户态只能执行非特权指令。特权指令如置PC寄存器、启动I/O指令
  • \(用户态 \stackrel{中断、异常、系统异常}{\rightarrow} 内核态\)
  • \(内核态 \stackrel{内核处理完成,调用中断返回指令}{\rightarrow} 用户态\)

中断概念

  • 广义中断概念:
    • 暂时停止当前CPU上运行的程序。然后处理中断事件。处理完返回被中断处,或根据中断优先级调度其他程序。
    • 狭义中断、异常、系统异常都属于广义中断。
  • 中断、异常、系统异常:
    • 狭义中断,指来源于处理器之外的中断事件,即与当前运行指令无关的中断事件,如I/O中断、外部信号中断等。这种情况要保存并恢复上下文环境。
    • 异常,指当前运行指令引起的中断事件,如地址异常、算术异常(比如除数为0)
    • 系统异常,触发系统调用引起的中断事件,如请求设备、请求I/O、创建进程等。系统异常可视为异常的一类

中断系统

  • 中断响应(硬件完成) + 中断处理(软件完成)

  • 中断响应:

    • 在指令执行周期最后增加一个微操作,以响应中断。
    • 过程:
      1. 发现中断源,决定是否中断屏蔽。当有多个要响应的中断源时,按规定的优先级选择。
      2. 中断当前程序的执行,保存当前程序的PSW到核心栈
      3. 转向操作系统的中断处理程序
image-20220420165657561
  • 中断处理:

    • 过程:
      1. 处理中断事件
      2. 恢复正常操作(内核态 --> 用户态)
  • 中断系统处理流程:

    • 中断码:PSW中字段,可用来分析被中断程序的中断源
    • 交换新旧PSW:把当前被中断的程序的PSW/PC记录下来,同时把操作系统内核程序的PC置到PC寄存器中,使得内核程序占有处理器运行。
image-20220420170855038

多中断响应与处理

  • 中断屏蔽

    • 有选择的响应中断,中断装置通过中断屏蔽位决定是否响应已发生的中断
  • 中断优先级

    • 多个中断,根据中断优先级响应一个中断事件
  • 中断的嵌套处理

    • 当计算机响应中断后,在中断处理过程中,可以再响应其他中断
    • 中断的嵌套处理改变中断处理次序,先响应的有可能后处理

2 处理器管理2 进程

进程概念

  • 进程是资源分配的最小单位,可以理解成一个独立程序关于某个数据集合的一次运行活动。
    • 进程控制块PCB,有标识信息(进程标识号)、现场信息(如寄存器内容)、控制信息(如进程特权信息、进程调度信息)
    • 内存程序P、内存数据D、通用寄存器信息R
    • 程序状态字PSW
  • 进程上下文:
    • 进程执行的现场信息和执行信息
    • 包括:
      • 用户级上下文:用户程序块/用户数据区/用户栈/ 用户共享内存
      • 寄存器上下文:PSW/栈指针/通用寄存器
      • 系统级上下文:PCB/内存区表/核心栈

进程状态模型

  • 进程状态
    • 运行态:进程占有处理器运行
    • 就绪态:进程具备运行条件等待处理器运行
    • 等待态:进程由于等待资源、输入输出、信号等而不具备运行条件
    • 挂起态:因为运行资源不足,比如性能低或死锁,暂时被淘汰出内存的进程。剥夺内存和其他资源,不参加进程调度,待适当时候调入内存,恢复资源,参与调度。
      • 挂起态与等待态有本质区别,挂起态没有任何资源,等待态占有已申请到的资源处于等待
  • 进程三态:
image-20220421143609278
  • 进程五态:
image-20220421143634567

进程管理 - 进程队列模型

  • 进程管理实现的基本模型
  • 过程:
    • 进程首先处于短暂的新建态,创建完成后加入就绪队列
    • 处理器空闲时,选择一个占有处理器运行
      • 运行时出现等待事件后运行态进程会进入等待队列,不同的等待原因会构成不同的等待队列等待事件结束后,进程又会加入就绪队列
      • 运行时间片到或出现更高优先级进程,运行态进程会让出处理器进入就绪队列,进程调度选择新进程运行
    • 运行结束后,进程会进入短暂的终止态,善后之后退出
image-20220421145859555

进程管理 - 原语与进程控制原语

  • 进程控制过程中涉及对OS核心数据结构(进程表/PCB池/队列/资源表)的修改
  • 原语是由若干条指令构成的完成某种特定功能的程序,执行上具有不可分割性
    • 原语的执行可以通过关中断实现
    • 原语前关掉中断,原语后打开中断
  • 进程控制原语和进程通信原语

进程管理 - 进程切换

  • 从一个正在运行的进程中回收CPU,让待运行程序来占有CPU运行

  • 本质是两个进程的进程上下文切换

    • 进入内核态
    • 保存被中断进程的上下文
    • 转向中断/异常/系统调用处理程序
    • 转向进程调度
    • 恢复待运行进程的上下文
    • 进入用户态
  • 进程切换发生在系统调用/中断/异常处理过程中,但是系统调用/中断/异常处理不一定触发进程切换

  • 处理器模式切换,因为进程切换必须在操作系统内核模式下完成

    • 用户模式到内核模式:由中断/异常/系统调用中断用户进程执行而触发
    • 内核模式到用户模式:OS执行中断返回指令将控制权交还用户进程而触发

2 处理器管理3 线程

线程概念

  • 单线程结构进程在并发程序设计上的问题:

    • 进程切换、进程通信开销大
    • 限制并发粒度、降低并行效率
  • 线程是系统调度和分派的最小单位,能轻量运行,会被频繁调度和切换。

    • 同一个进程中的所有线程共享进程获得的主存空间和资源。线程具有独立的PC、执行堆栈、线程状态、线程上下文、容纳局部变量的静态存储器
  • OS对线程的感知:

    • 感知线程环境下:处理器调度对象是线程,进程没有三状态
    • 不感知线程环境下:处理器调度对象仍是进程,用户空间中的用户调度程序调度线程

多线程的实现

  • 内核级多线程KLT和用户级多线程ULT:
image-20220421164122078
  • 内核级线程 用户级线程
    处理器是否感知 是。线程管理的所有工作由OS内核完成。OS直接调度KLT 否。线程管理的所有工作都由应用程序完成,内核没有意识到线程的存在。因此能运行在任何OS上,内核在支持ULT方面不需要做任何工作。
    线程切换开销 线程切换开销大。应用程序线程在用户态运行,线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要模式切换,系统开销较大 线程切换开销小。所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源。允许进程按应用特定需要选择调度算法,甚至根据应用需求裁剪调度算法
    能否利用多处理器并行 多处理器环境中,内核能同时调度同一进程中多个线程并行执行。 不能利用多处理器的优点,OS调度进程,仅有一个ULT能执行
    某个线程阻塞影响 一个KLT被阻塞了,内核能调度同一进程的其它线程占有处理器运行 一个ULT的阻塞,将引起整个进程的阻塞(致命缺点)。用jacketing技术解决(把阻塞式系统调用改造成非阻塞式的,当线程陷入系统调用时,执行jacketing程序。由jacketing 程序来检查资源使用情况,以决定是否执行进程切换或传递控制权给另一个线程)
    开发者使用 OS提供API直接使用KLT 通过线程库进行程序设计,再连接线程库后台运行
    优点 物理并行性好 逻辑并行性好,切换快、可裁剪
  • 混合式策略:

    • 组合KLT和ULT,结合优点,减少缺点,提高逻辑并行性和物理并行性
    • 线程创建完全在用户空间中完成,线程的调度和同步也在应用程序中进行
    • 一对一、多对一、多对多等等,一个应用中的多个ULT被映射到一些(小于等于ULT数目)的KLT上,可以调整KLT数量达到最佳效果。只有活跃态ULT才绑定到KLT的线程三态上。

进程调度算法

非抢占 抢占
FCFS (先来先服务) RR (时间片轮转)
SPN (最短进程优先) Feedback (多级反馈调度)
HRRF (最高响应比优先)
SRT (最短剩余时间优先)
  • 非抢占式:运行 - > 就绪不发生,适合以计算为主的进程

  • 抢占式:I/O频繁的进程

  • 未加粗的都需要提前预估进程的CPU运行时长,所以有问题,只是概念级,不能实际应用

  • FCFS (先来先服务):

    • 当某个进程就绪时,都加入就绪队列(ready queue)
    • 当前正在运行的进程停止执行时,选择在就绪队列到存在时间最长的进程运行
    • 问题:
      • 一个短进程可能不得不等待很长时间才能获得执行
      • 偏袒计算为主的进程,I/O多的进程不得不等待计算为主的进程做完
  • SPN (最短进程优先):

    • 选择所需处理时间最短的进程
    • 短进程将会越过长进程,优先获得调度
    • 问题:
      • 只要持续不断地提供更短的进程,长进程就有可能饿死。
  • SRT (最短剩余时间优先):

    • 调度器总是选择预期剩余时间更短的进程
    • 当一个新进程加入就绪队列,他可能比当前运行的进程具有更短的剩余时间,只要该新进就绪,调度器就可能抢占当前正在运行的进程
  • HRRN (最高响应比优先) Highest Response Ratio Next

    • 选择响应比最高的
    • (等待时间 + 期待服务时间)/ 期待服务时间
  • RR(时间片轮转) Round Robin

    • 基于时钟做抢占式调度
    • 以一个周期性间隔产生时钟中断,当中断发生时,当前正在运行的进程被置于就绪队列中,然后基于FCFS策略选择下一个就绪进程运行
    • 优缺点:
      • 优点:公平,响应快,适用于分时操作系统
      • 缺点:由于高频率的进程切换,因此会有一定的开销,不区分任务的紧急程度
  • Feedback(多级反馈调度)

    • 建立多个不同优先级的就绪进程队列,多个就绪进程队列之间按照优先级调度
    • 单个就绪进程队列中的进程 按照先来先服务算法调度
    • 当一个进程第一次进入系统时,它被放置在RQ0,当它第一次被抢占后并返回就绪状态时,它被放置在RQ1。在随后的时间里,每当它被抢占时,它被降级到下一个低优先级队列中。一个短进程很快会执行完,不会在就绪队列中降很多级。
  • 传统Unix调度:

    • 多级反馈队列,每个优先级队列使用时间片轮转
posted @ 2022-04-20 17:24  iterationjia  阅读(161)  评论(0编辑  收藏  举报