2 处理器管理

处理器管理是操作系统的重要组成部分:

  • 负责管理、调度和分配计算机系统的重要资源,并控制程序执行
  • 处理器管理中最重要的是处理器调度,即进程调度,也就是控制、协调进程对处理器的竞争

进程与线程:

  • 进程是资源分配和管理的单位
  • 线程是处理器调度的基本单位

管态与目态:

  • 管态又叫特权态,可以执行特权指令,执行资源管理程序、为应用程序执行提供良好运行环境的各种原语等
  • 目态又叫用户态,只能执行非特权指令

1 处理器与寄存器

1.1 处理器

1.2 寄存器

用户程序可见寄存器
可以使程序员减少访问主存储器的次数,提高指令执行的效率
所有程序可使用,包括应用程序和系统程序

  • 数据寄存器:又称通用寄存器
  • 地址寄存器:索引、栈指针、段地址等寄存器

控制与状态寄存器
主要被具有特权的操作系统程序使用,以控制程序的执行
程序计数器 PC:存储将取指令地址
指令寄存器 IR:存储最近使用的指令
条件码 CC:标志正/负/零/溢出等结果
标志位:中断位、中断允许位、中断屏蔽位、处理器模式位、内存保护位等

程序状态字 PSW
PSW 既是操作系统的概念,指记录当前程序运行的动态信息,也是计算机系统的寄存器(设置一组控制与状态寄存器,也可以专设一个 PSW 寄存器)
通常包含:

  • 程序计数器、指令寄存器、条件码
  • 中断字、中断允许/禁止、中断屏蔽、处理器模式、内存保护、调试控制

PSW in IBM System/360:

2 指令与处理器模式

2.1 机器指令

机器指令是计算机系统执行的基本命令,是中央处理器执行的基本单位

2.2 指令执行过程

一种指令执行步骤:

  • 取指:根据 PC 从存储器或 cache 中取指令到 IR
  • 解码:解译 IR 中的指令来决定其执行行为
  • 执行:连接到 CPU 部件,执行运算,产生结果并写回,同时在 CC 里设置运算结论标志;跳转指令操作 PC,其他指令递增 PC 值

2.3 指令执行周期与指令流水线

2.4 特权指令与非特权指令

特权指令:只能被操作系统内核使用的指令
非特权指令:能被所有程序使用的指令

2.5 处理器模式

计算机通过设置处理器模式实现特权指令管理
一般设置四种运行模式,分别对应:

  • 0:操作系统内核
  • 1:系统调用
  • 2:共享库程序
  • 3:用户程序等保护级别

0 模式可以执行全部指令;3 模式只能执行非特权指令;其他运行模式可以规定执行的指令子集
一般来说现代操作系统只使用 0 和 3 两种模式,分别对应内核模式和用户模式

2.6 处理器模式的切换

用户模式 \(\to\) 内核模式,内核模式 \(\to\) 用户模式
中断、异常或系统异常等事件导致用户程序向 OS 内核切换,触发用户模式 \(\to\) 内核模式
OS 内核处理完成后,调用中断返回指令,触发内核模式 \(\to\) 用户模式

3 中断

3.1 中断的概念

中断是指程序执行过程中,遇到急需处理的事件时,暂时中止 CPU 上现行程序的运行,转去执行相应事件的处理程序,待处理完成后再返回源程序被中断处或调度其他程序执行的过程。
操作系统时“中断驱动”的;也就是说,中断时激活操作系统的唯一方式。

上述中断指的是广义中断

3.2 中断、异常与系统异常

狭义的中断指来源于处理器之外的中断事件,即与当前运行指令无关的中断事件,如 I/O 中断、时钟中断、外部信号中断等
异常指当前运行指令引起的中断事件,如地址异常、算数异常、处理器硬件故障等
系统异常指陷入指令而触发系统调用引起的中断事件,如请求设备、请求 I/O、创建进程等

中断与异常的异同?
相同点:
都是程序执行过程中的强制性转移,转移到相应的处理程序。
中断是 CPU 以外的事件引起的,而异常来自 CPU 内部事件或程序执行中的事件引起的过程。中断是异步的,异常是同步的。

3.3 中断源

由处理器、内存储器、总线等硬件故障引起
处理原则为:保护现场、停止设备、停止 CPU、向操作员报告、等待人工干预
1 程序性中断事件(内部异常中断)
处理器执行机器指令引起

  • 除数为 0、操作数溢出等算数异常
  • 非法指令、用户态使用特权指令、地址越界、非法存取等指令异常
  • 虚拟地址异常
    2 自愿性中断事件(软中断)
    处理器执行陷入指令请求 OS 服务引起;在操作系统中一般被称作系统调用
    处理流程:陷入 OS、保护现场、根据功能号查入口地址、跳转具体处理程序
    3 I/O 中断事件
    来源于外围设备报告 I/O 状态的中断事件
    4 外部中断事件
    由外围设备发出的信号引起的中断事件(时钟中断、间隔时间中断;设备报到与结束中断;键盘鼠标信号中断;关机/重启中断)

4 中断系统

中断系统是计算机系统中响应和处理中断的系统,包括硬件子系统和软件子系统两部分,分别进行响应与处理。

4.1 中断响应处理与指令执行周期

在指令执行周期最后增加一个微操作,以影响中断

4.2 中断装置

指计算机系统中发现并响应中断/异常的硬件装置;由于中断源的多样性,硬件实现的中断装置有多种,分别处理不同类型的中断:

  • 处理器外的中断
  • 处理器内的异常
  • 请求 OS 服务的系统异常

4.3 中断控制器

CPU 中的一个控制部件,包括中断控制逻辑线路和中断寄存器

  • 外部设备向其发出中断请求 IRQ,在中断寄存器中设置已发生的中断
  • 指令处理结束前,会检查中断寄存器,若有不被屏蔽的中断产生,则改变处理器内的操作顺序,引出操作系统中的中断处理程序

4.4 陷阱与系统陷阱

指令的逻辑和实现线路的一部分

  • 执行指令出现异常后,会根据异常情况转向操作系统的异常处理程序
  • 出现虚拟地址异常后,需要重新执行指令,往往越过陷阱独立设置页面异常处理程序
  • 执行陷入指令后,越过陷阱处理,触发系统陷阱,激活系统调用处理程序

4.5 中断响应过程

  1. 发现中断源,提出中断请求
    1. 发现中断寄存器中记录的中断
    2. 决定这些中断是否应该屏蔽
    3. 根据优先级选择一个中断源响应
  2. 中断当前程序的执行(保存当前程序的 PSW/PC 到核心栈)
  3. 转向操作系统的中断处理程序

4.6 中断的处理

中断处理程序:主要任务是处理中断事件和恢复正常操作
中断处理过程:

  • 保护未被硬件保护的处理器状态
  • 通过分析被中断进程的 PSW 中断码字段,识别中断源
  • 分别处理发生的中断事件
  • 恢复正常操作
    • 情况一:处理完毕后,直接返回刚刚被中断的进程
    • 情况二:需要中断当前进程的运行,调整进程队列,启动进程调度,选择下一个执行的进程并恢复其执行

5 多中断的响应与处理

5.1 中断屏蔽

当计算机检测到中断时,中断装置通过中断屏蔽位决定是否响应已发生的中断。

5.2 中断优先级

当计算机同时检测到多个中断时,中断装置响应中断的顺序
一种可能的处理次序:
处理机硬件故障中断事件、自愿性中断事件、程序性中断事件、时钟中断等外部中断时间、输入输出中断事件、重启动和关机中断事件。

5.3 中断的嵌套处理

当计算机响应中断后,在中断处理过程中可以再响应其他中断。考虑到系统效率和实现代价,中断的嵌套应限制在一定层数内,如 3 层。

5.4 中断响应与处理总结

决定中断处理次序的因素:

  • 中断屏蔽可以使中断装置不响应某些中断
  • 中断优先级决定了中断装置响应中断的次序
  • 中断可以嵌套处理,但嵌套的层数应有限制
  • 中断的嵌套处理改变了中断处理的次序

6 进程及其状态

6.1 进程的提出

操作系统必须全方位地管理计算机系统中运行的程序,因此操作系统为正在运行程序建立一个管理实体——进程。

6.2 进程的概念

进程是一个具有一定独立功能的程序,是关于某个数据集合的一次运行活动;进程是操作系统进行资源分配和调度的一个独立单位。
一个进程包括五个实体部分:

  • (OS 管理运行程序的)数据结构 P
  • (运行程序的)内存代码 C
  • (运行程序的)内存数据 D
  • (运行程序的)通用寄存器
  • (OS 控制程序执行的)程序状态字信息 PSW

6.3 进程举例

6.3.1 根据数据集

不同程序在不同数据集上运行:构成两个无关进程
不同程序在相同数据集上运行:构成两个共享数据的交往进程

6.3.2 根据代码

相同代码在不同数据集上运行:构成两个共享代码的无关进程
共享的代码称为可再入程序,如编辑器
可再入程序是纯代码的

6.3.3 内存级

前述的程序与数据集均是内存级的。
那么,在不同时段中针对同一个外存数据文件运行同一个外存程序文件,意味着完全不同的 P/C/D/R/Psw,所以两次运行构成两个不同的进程。

6.4 概念级的进程状态

运行态:进程占有处理器运行
就绪态:进程具备运行条件等待处理器运行
等待态:进程由于等待资源、输入输出、信号等而不具备运行条件

6.4.1 进程三态模型

6.4.2 进程挂起的概念

OS 无法预期进程的数目与资源需求,计算机系统在运行过程中可能出现资源不足的情况。
解决办法:剥夺某些进程的内存及其资源,调入 OS 管理的对换区,不参加进程调度,待适当时候再调入内存、恢复资源、参与运行。这就是进程挂起。

挂起态与等待态有着本质区别,后者占有已申请到的资源处于等待,前者没有任何资源。

6.4.3 进程挂起的选择与恢复

加入挂起的概念后,进程的形态模型变得更加复杂。

image.png

一些规则:

  • 一般选择等待态进程进入挂起等待态,也可以选择就绪态进程进入挂起就绪态
  • 运行态进程可以挂起自己
  • 等待事件结束后,挂起等待态进入挂起就绪态
  • 一般选择挂起就绪态进程予以恢复

6.5 进程的数据描述

6.5.1 进程控制块

进程控制块(PCB)是 OS 用于记录和刻画进程状态及环境信息的数据结构。借助 PCB,OS 可以全面管理进程的物理实体,刻画进程的执行现状,控制进程的执行。
要注意,在不同操作系统中,进程控制块包含的内容可能有所不同。

image.png

6.5.2 标识信息

用于存放唯一标识该进程的信息。包括:

  • 系统分配的标识号
  • 系统分配的进程组标识号
  • 用户定义的进程名
  • 用户定义的进程组名

进程组和会话
进程组(progress group)是进程的集合,可以由一个或多个进程组成。默认情况下,父进程与子进程属于同一个进程组。如果子进程想要脱离当前进程组,可以通过调用 setpgid 创建一个新的进程组或者移入已有的进程组。进程组的一大作用体现在对信号的处理上。应用程序可以通过 killpg 向进程组发送信号,这个信号会被发送给这个进程组的每个进程。
会话(session)是进程组的集合,可以由一个或多个进程组构成。会话将进程组根据执行状态分为前台进程组和后台进程组。控制终端进程是会话与外界进行交互的窗口,负责接收从用户发来的输入。

6.5.3 现场信息

用于存放该进程运行时的处理器现场信息。

  • 用户可见寄存器内容:数据寄存器、地址寄存器
  • 控制与状态寄存器内容:PC、IR、PSW
  • 栈指针内容:核心栈与用户栈指针

6.5.4 控制信息

如上图

6.5.5 内存映像

某一时刻进程的内容及其执行状态集合:

  • 进程控制块:保存进程的标识信息、状态信息和控制信息
  • 进程程序块:进程执行的程序空间
  • 进程数据块:进程处理的数据空间,包括数据、处理函数的用户栈和可修改的程序
  • 核心栈:进程在内核模式下运行时使用的堆栈,中断或系统过程使用
    进程映像是内存级的物理实体,又称为进程的内存映像。

image.png

6.5.6 进程上下文

进程的执行需要环境支持,包括 CPU 现场和 Cache 中的执行信息。OS 中的进程物理实体和支持进程运行的环境合成进程上下文,包括以下:

  • 用户级上下文:用户进程块/用户数据区/用户栈/用户共享内存
  • 寄存器上下文:PSW/栈指针/通用寄存器
  • 系统级上下文:PCB/内存区表/核心栈

当操作系统需要切换当前执行的进程时,就会使用上下文切换机制。该机制会将前一个进程的寄存器状态保存到 PCB 中,然后将下一个进程先前保存的状态写入寄存器,从而切换到该进程执行。
在早期的操作系统中,进程是操作系统调度的基本单位。但随着更加轻量级的运行抽象——线程的提出,调度和上下文切换的基本单位也由进程变为线程。

6.6 进程的管理

6.6.1 概念级的 OS 进程管理软件

关键的进程管理软件包括:

  • 系统调用/中断/异常处理程序
  • 队列管理模块
  • 进程控制程序
  • 进程调度程序
  • 进程通信程序
  • 终端登录与作业控制程序、性能监控程序、审计程序等外围程序

6.6.2 进程实现的队列模型

6.6.3 队列管理模块

  • 队列管理模块是操作系统实现进程管理的核心模块。操作系统建立多个进程队列,包括就绪队列和等待队列。
  • 按需组织为先进先出队列与优先队列,队列中的进程可以通过 PCB 中的队列指引元采用单/双指引元或索引连接。
  • 进程与资源调度围绕进程队列展开。

6.6.4 进程的控制与管理

  • 进程创建:进程表加一项,申请 PCB 并初始化,生成标识,建立映像,分配资源,移入就绪队列
  • 进程撤销:从队列中移除,归还资源,撤销标识,回收 PCB,移除进程表项
  • 进程阻塞:保存现场信息,修改 PCB,移入等待队列,调度其他进程执行
  • 进程唤醒:等待队列中移出,修改 PCB,移入就绪队列(该进程优先级高于运行进程触发抢占)
  • 进程挂起:修改状态并出入相关队列,收回内存等资源送至对换区
  • 进程激活:分配内存,修改状态并出入相关队列
  • 其他:如修改进程特权

6.6.5 原语与进程控制原语

进程控制过程中涉及对 OS 核心数据结构(进程表/PCB 池/队列/资源表)的修改,为了防止与时间有关的错误,应使用原语。原语是由若干条指令构成的完成某种特定功能的程序,执行上具有不可分割性。原语的执行可以通过关中断实现。
进程控制使用的原语成为进程控制原语,另一类常用原语是进程通信原语。

6.7 进程切换

进程切换指从正在运行的过程中收回处理器,让待运行进程来占有处理器运行。
进程切换实质上就是被中断运行进程与待运行进程的上下文切换,处理过程如下:

  • 保存被中断进程的上下文
  • 转向进程调度
  • 恢复待运行进程的上下文

6.7.1 模式切换

进程切换必须在操作系统内核模式下完成,这就需要模式切换。模式切换又称处理器状态切换,包括:

  • 用户模式到内核模式
  • 内核模式到用户模式

6.7.2 模式切换的基本工作任务

中断装置完成正向模式切换,包括:

  • 处理器模式转为内核模式
  • 保存当前进程的 PC/PSW 值到核心栈
  • 转向中断/异常/系统调用处理程序
    中断返回指令完成逆向模式转换,包括:
  • 从待运行进程核心栈中弹出 PSW/PC 值
  • 处理器模式转为用户模式

6.7.3 进程切换的工作过程

  1. (中断/异常等触发) 正向模式切换并压入 PSW/PC
  2. 保存被中断进程的现场信息
  3. 处理具体中断/异常
  4. 把被中断进程的系统堆栈指针 SP 值保存到 PCB
  5. 调整被中断进程的 PCB 信息,如进程状态
  6. 把被中断进程的 PCB 加入相关队列
  7. 选择下一个占用 CPU 运行的进程
  8. 修改被选中进程的 PCB 信息,如进程状态
  9. 设置被选中进程的地址空间,恢复存储管理信息
  10. 恢复被选中进程的 SP 值到处理器寄存器 SP
  11. 恢复被选中进程的现场信息进入处理器
  12. (中断返回指令触发) 逆向模式转换并弹出 PSW/PC

6.7.4 进程切换的发生时机

进程切换一定发生在中断/异常/系统调用处理过程中,常见的情况是:

  • 阻塞式系统调用、虚拟地址异常导致终端进程进入等待态
  • 时间片中断、I/O 中断后发现更高优先级进程导致被中断进程转入就绪态
  • 终止用系统调用、不能继续执行的异常导致被中断进程进入终止态

6.7.5 进程切换与模式切换

一些中断/异常不会引起进程状态转换,不会引起进程切换,只是在处理完成后把控制权交回给被中断进程,处理流程是:

  • (中断/异常触发) 正向模式切换压入 PSW/PC
  • 保存被中断进程的现场信息
  • 处理中断/异常
  • 恢复被中断进程的现场信息
  • (中断返回指令触发) 逆向模式转换弹出 PSW/PC

7 多线程技术概述

7.1 多线程环境概述

7.1.1 单线程结构进程

传统进程是单线程结构进程。
image.png

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

  • 进程切换开销大
  • 进程通信开销大
  • 限制了进程并发的粒度
  • 降低了并行计算的效率

解决思路

  • 把进程的两项功能,即“独立分配资源”和“被调度分派执行”分离开来
  • 进程作为系统资源分配和保护的独立单位,不需要频繁切换
  • 线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换
  • 线程的出现会减少进程并发执行所付出的时空开销,使得并发力度更细、并发性更好

7.1.2 多线程结构进程

image.png

多线程环境下进程的概念
在多线程环境中,进程是操作系统中进行保护和分配资源的独立单位。具有:

  • 用来容纳进程映像的虚拟地址空间
  • 对进程、文件和设备的存取保护机制

多线程环境下线程的概念
线程是进程的一条执行路径,是调度的基本单位,同一个进程中的所有线程共享进程获得的主存空间和资源。具有:

  • 线程执行状态
  • 受保护的线程上下文,当线程不运行时,用于存储现场信息
  • 独立的程序指令计数器
  • 执行堆栈
  • 容纳局部变量的静态存储器

7.1.3 多线程环境下线程的状态与调度

线程状态有运行、就绪和睡眠,无挂起
与线程状态变化有关的线程操作有:孵化、封锁、活化、剥夺、指派、结束
OS 感知线程环境下:

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

7.1.4 并发多线程程序设计的优点

  • 快速线程切换
  • 减少(系统)管理开销
  • 线程通信易于实现
  • 并行程度提高
  • 节省内存空间

7.1.5 多线程技术的应用

  • 前台和后台工作
  • C/S 应用模式
  • 加快执行速度
  • 设计用户接口

7.2 KLT 与 ULT

7.2.1 内核级线程 KLT

县城管理的所有工作由 OS 内核来做,OS 提供一个应用程序接口 API,供开发者使用 KLT,OS 直接调度 KLT。
image.png

特点

  • 进程中的一个线程被阻塞了,内核能调度同一进程的其他线程占有处理器运行
  • 多处理器环境中,内核能同时调度同一进程中多个线程并行执行
  • 内核自身也可用多线程技术实现,能提高操作系统的执行速度和效率
  • 应用程序线程在用户态运行,线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要模式切换,系统开销较大

7.2.2 用户级线程 ULT

用户空间运行的线程库,提供多线程引用程序的开发和运行支撑环境,任何应用程序均需通过线程库尽兴程序设计,再与线程库连接后运行。县城管理的所有工作都有应用程序完成,内核没有意识到线程的存在。

特点

  • 所有线程管理数据结构均在进程的用户空间中,线程切换不需要内核模式,能节省模式切换开销和内核的宝贵资源
  • 允许进程按应用特定需要选择调度算法,甚至根据应用需求裁剪调度算法
  • 能运行在任何 OS 上,内核在支持 ULT 方面不需要做任何工作
  • 不能利用多处理器的优点,OS 调度进程,仅有一个 ULT 能执行
  • 一个 ULT 的阻塞,将引起整个进程的阻塞

7.2.3 Jacketing 技术

把阻塞式系统调用改造成非阻塞式,当线程陷入系统调用时,执行 Jacketing 程序,由 Jacketing 程序来检查资源使用情况,以决定是否执行进程切换或传递控制权给另一个线程。

7.2.4 用户级线程 vs 内核级线程

image.png

ULT 适用于解决逻辑并行问题;KLT 适用于解决物理并行问题

7.2.5 多线程实现的混合式策略

线程创建时完全在用户空间做的,单应用的多个 ULT 可以映射成一些 KLT,通过调整 KLT 数目,可以达到较好的并行效果。
image.png

特点

  • 组合用户级线程/内核级线程设施
  • 线程创建完全在用户控件中完成,线程调度和同步也在应用程序中尽兴
  • 一个应用中的多个用户级线程被映射到一些(小于等于用户及线程数目)内核级线程上
  • 程序员可以针对特定应用和及其调节内核级现成的数目,以达到整体的最佳结果
  • 该方法将会结合纯粹用户及线程方法和内核级线程方法的有点,同时减少它们的缺点

7.2.6 线程混合策略下的线程状态

image.png

  • KLT 三态,系统调用负责
  • ULT 三态,用户调用负责
  • 活跃态 ULT 代表绑定 KLT 的三态
  • 活跃态 ULT 运行时可激活用户调用
  • 非阻塞系统调用可使用 Jacketing 启动用户调度,调整活跃态 ULT

7.2.7 多线程实现的各种策略总结

image.png

8 处理器调度

8.1 处理器调度的层次

  • 高级调度:又称长程调度,作业调度;决定能否加入到执行的进程池中
  • 中级调度:又称平衡负载调度;决定主存中的可用进程集合
  • 低级调度:又称短程调度,进程调度;决定哪个可用进程占用处理器执行

8.2 处理器调度算法

posted @ 2023-01-22 20:24  PTCGnaya  阅读(209)  评论(0编辑  收藏  举报