操作系统1-进程

进程

什么是进程

程序的顺序执行与并发执行

顺序执行:若干程序和程序段必须严格按照某种先后顺序执行

  • 顺序性:操作严格按照程序规定的顺序执行;
  • 封闭性:程序运行时占用全机资源;
  • 可再现性:只要程序的执行环境和初始资源的条件相同,结果就相同;

并发执行:多个时间在同一个时间间隔内发生;

  • 应用级并发:事务处理系统,数据库管理系统
  • 系统级并发:操作系统;
  • 间断性:由于资源的共享和相互合作,程序体现执行-暂停-执行的现象
  • 失去封闭性:程序在并发执行时,是多个程序共享系统的资源,资源的状态有多个程序来改变;
  • 不可再现性:程序在并发执行时,由于失去了封闭性,多次重复可以得到不同的结果;

image-20240927150453849

进程

引入进程的目的:为了 控制 多道程序能够 正确的并发 执行

定义:(程序代码program code + 数据集set of data + 进程控制块PCB,process control block)

  1. 一个正在执行的程序;
  2. 一个正在计算机上执行的程序实例;
  3. 一个能够被调度到处理器上执行的实体;
  4. 由一串指令的执行、当前状态和一组正在使用的系统资源表征的活动单元;

进程的物理存在:进程映像

  • Process Image=PCB+program+data+stack
  • 进程映像取决于文件格式;

系统中同时存在的诸进程相互独立,也相互关联,这取决于设计模式;

可以说,并发基于进程;

进程控制块

进程执行的任意时刻可以由 进程控制块 表征,组成如下:

  1. 标识符
  2. 状态
  3. 优先级
  4. 程序计数器
  5. 内存指针
  6. I/O状态信息
  7. 记账信息……

注意,PCB常驻内存,PCB是进程存在的唯一标志

进程的特征

  • 动态性最基本特征,是计算机的执行的程序实例,存在生命周期;
  • 并发性:多个进程实体存在于内存中也能在一段时间内同时运行,可以说进程的设计就是为了操作系统的并发;
  • 独立性:进程实体是独立运行的基本单位,也是系统独立获得资源和调度的基本单位,各个进程的地址空间相互独立除非进程间相互通信;
  • 异步性:各个进程按照独立的,不可预知的速度向前推进;

注意:进程和程序之间不存在一一对应的关系;

进程带来的挑战

  • 空间开销:为进程建立数据结构PCB
  • 时间开销:管理和协调,跟踪,填写和更新相关的数据结构,切换进程,保护现场
  • 控制复杂性:协调多个进程对资源的竞争和共享,预防解决多个进程因为资源竞争问题带来的故障

进程状态模型

由于进程具有动态性,执行间断性和多种状态的特征,需要建立进程状态的自动机描述;

进程轨迹trace :进程执行的指令序列,描述单个进程的行为;

调度器dispatcher:调度多个进程的执行;

以下是 轮转(round-robin) 的例子:通过指定一个时间片,处理器决定是否切换进程;

image-20240927152122797

image-20240927152140953

两状态模型

进程处于两种状态之一:

  1. 运行态:进程队列的头部进程被系统调度执行;
  2. 非运行态:进程创建后,以非运行态进入进程队列中;

进程队列:存放指向特定进程的指针;

image-20240927152317809

三状态模型

进程处于三种基本状态之一:

  1. 就绪ready:
    • 进程已经获得除开CPU外的所有必要资源后,只需获得CPU立即执行进程
  2. 执行running:
    • 进程获得CPU,程序正在执行;
  3. 阻塞waiting:
    • 正在执行的进程因为其他事件的等待无法继续执行;
    • 进程放弃处理机而处于暂停状态;

对于一些嵌入式的操作系统,三状态模型足以描述:

image-20240927153655741

注意:

  • 状态转换并非都可逆
  • 一个进程在任何一个指定的时刻必须而且只能处于一
    种状态
  • 时间片完也不是执行-就绪的唯一原因,可能是高优先级抢占控制权
  • 在单处理机系统中,只有一个进程处于执行状态

五状态自动机

进程新增两个状态后真正称为自动机模型:

  • 新建New:
    • 进程刚刚创建,OS完成了进程创建的必要工作(构造了进程标识符,创建了进程管理的表格)
    • OS未将进程加入可执行进程组,进程自身未进入主存,进程尚未被同意执行,进程的程序也没有分配空间而保存在辅存;
    • 进程创建原因:新的批处理作业,交互登陆,提供服务,现有进程派生
  • 终止Exit
    • 进程不再具有执行资格;
    • 表格和其他信息暂时保留,OS从可执行进程组释放;
    • 原因:正常完成,超时,无可用内存,各种错误…

image-20240927155128295

注意:

  • 加载/接纳:OS做好接纳进程的准备后,将一个进程从新建态转换成就绪态;
  • 就绪-退出,阻塞-退出:某些系统中,父进程可以在任何时候终止一个子进程,这样的转换可能存在;
排队模型实现:维护就绪队列和阻塞队列
  • 进入OS的每个进程放在就绪队列中,OS选择进程运行时在就绪队列中选择一个;
  • 运行的程序被移除处理器后,要么终止,要么进入就绪队列或阻塞队列
  • 某事件发生导致阻塞队列中的相应进程进入就绪队列中;

具体实现:

多阻塞队列可以避免对很长的队列进行扫描;

image-20240927160858477

七状态自动机

交换技术swapping和挂起suspend

进程竞争内存资源:内存紧张,或者所有进程因为某事件等待,但是无就绪进程,处理机实际空闲

解决方案:扩充内存,swapping

  • 将内存中处于阻塞、就绪、甚至是执行状态的进程swapping-out进外存(磁盘)
  • 不再参与CPU的竞争,我们把这种静止状态称为挂起状态;
  • 在磁盘中维护一个挂起队列,建立虚存;
  • 当存在已具备运行条件的进程或进程所需要的数据和程序,Swapping-in到内存。

进程挂起的原因:

  • 进程全部阻塞,处理机空闲
  • 交换,如系统负荷过重,内存空间紧张
  • 操作系统的需要,操作系统可能需要挂起后台进程或一些服务进程,或某些可能导致系统故障的进程。
  • 终端用户的请求,如调试
  • 父进程请求

被挂起进程的特征

  • 不能立即执行
  • 挂起条件独立于阻塞条件
  • 使之挂起的进程:自身、OS、父进程
  • 激活挂起进程的进程:实施挂起操作的进程

当被挂起的进程返回内存时,OS不一定执行的准备,进一步划分:

  • 就绪挂起:进程在外存,只要调入内存并获得CPU即可执行
  • 阻塞挂起:进程在外存,并等待某事件

image-20240927162304899

注意:

  • 加载:新建进程后,进程要么加入就绪队列,要么进入就绪挂起队列,视当时的资源而定;
    • 创建进程的just-in-time原理:尽可能推迟创建进程以减小系统的开销;
  • 运行-就绪挂起:一般来说,运行进程的分配时间到期后就会转换成就绪态,但是某个具有高优先级的进程位于阻塞/挂起队列不被阻塞时,OS会抢占这个进程

进程描述

进程的执行必须由操作系统分配资源,操作系统是资源的管理者:采用表格记载资源的信息,进而实现资源的管理,维护和更新;

  • 内存表
  • I/O表
  • 文件表
  • 进程表

image-20240927163242526

进程控制块

包括信息主要有三类:

  • 进程标识信息;唯一标识一个进程
    • 内部标识符:操作系统为每个进程赋予的一个唯一整数,便于系统控制
    • 父进程标识符
    • 用户标识符
  • 处理机状态信息:主要是上下文,由处理器的各种寄存器中的内容组成的
    • 通用寄存器
    • 控制和状态寄存器
    • 栈指针
  • 进程控制信息:与进程调度和进程切换有关的信息
    • 进程状态
    • 进程优先级
    • 时间记账
    • 阻塞原因
    • 链接指针
    • 进程间通信
    • 程序和数据地址
    • 资源所有权和使用情况

进程的组织方式

索引

系统为所有进程的状态建立几张索引表;

image-20240927164502164

链接
  • 单一队列:所有PCB块连接成一个队列

    image-20240927164522935

  • 多级队列:相同状态的PCB块连接成一个队列

    image-20240927164547710

内核

内核是操作系统的核心,是包含重要系统功能的部分,常住内存以提高操作系统的系统功能;

不同操作系统对内核的设计(功能范围的设定)不同;

  • 资源管理

    • 进程管理:进程的创建和终止,调度,分配,切换,同步和进程间通信,管理PCB

    • 存储管理:为进程分配地址空间,交换,页和段管理

    • I/O管理:缓冲区管理,为进程分配I/O通道

  • 支撑功能

    • 中断:操作系统的一切重要活动最终依赖于中断
    • 时钟
    • 记账

执行模式

  • 大多数处理器至少支持两种模式:内核模式,用户模式
  • 某些指令只能在特权模式运行,部分内存只能在特权模式下访问
  • 采用两种模式可以保护操作系统和重要的系统操作表不受程序干扰
  • 查看运行模式:程序状态字寄存器PSWR下指示执行模式的位

模式切换:

  • 原因:系统调用或中断,中断发生时,将程序计数器设置为中断程序处理的开始地址,切换成内核模式使得中断程序可以执行某些特权指令
  • 中断不一定引发进程切换,也不一定造成模式切换,模式切换和进程切换无决定关系

进程控制

进程控制包括以下事件:

  • 进程的穿件与撤销
  • 进程的阻塞和唤醒
  • 挂起和激活
  • 进程切换

实现方式:原语Primitive

  • 原语用于完成一定功能的过程,定义了原子操作
  • 其执行过程不允许被中断;

create原语:创建进程

  • 为新进程分配唯一一个进程标识符
  • 为进程分配空间
  • 初始化进程控制块(标识信息,处理机状态信息,调度信息)
  • 建立连接,插入就绪(就绪/挂起)队列
  • 建立扩充其他相关的数据结构

后面两步是方便操作系统管理进程的必要步骤;

进程终止原语

  • 根据标识符找到其PCB,读出进程的状态
  • 对于执行状态的进程,终止它,调度下一个进程就绪进程的执行
  • 若进程存在子进程,不同的操作系统有不同的处理方式,挂在其他结点或者终止它
  • 将进程的全部资源归还(父进程或者OS)
  • 被终止进程的PCB从队列中移除,等待其他程序搜集信息

进程阻塞

  • 对于执行状态的进程发生阻塞时,使用Block()原语将自己阻塞
  • 将PCB的状态由执行到阻塞将PCB加入阻塞队列
  • 将处理剂分配给下一个就绪进程并切换

进程唤醒

  • 被阻塞进程期待的事件出现时,有关进程调用唤醒原语wakeup(),等待该事件的进程唤醒
  • 唤醒进程原语执行:将被阻塞进程从队列移出,将PCB中现行状态由阻塞改为就绪,插入到就绪队列中

进程挂起

出现引起进程挂起的事件时,系统将利用挂起原语suspend()将指定挂起;

  • 检查被挂起的状态
  • 插入相应队列

进程激活

  • 发生激活进程的事件时,将在外存上处于挂起的进程换入内存
    • 利用激活原语active()将指定进程从外存调入内存:检查进程状态,插入相应队列

进程切换

进程切换:调度另一个就绪进程占用处理器
进程上下文:进程执行的现场
发生原因:

  • 时钟中断
  • IO中断
  • 内存失效
  • 陷阱
  • 系统调用

步骤:

  • 保存处理器上下文,包括程序计数器和其他寄存器
  • 更新运行进程的PCB
  • 将PCB移动到相应队列
  • 选择另一个进程执行
  • 更新另一个PCB
  • 恢复被选择的上下文

线程

线程是进程的一个实体,是独立调度和分派的基本单位;
进程是系统进行资源分配和调度的独立单位;
线程是进程的一个实体,是对调度和分配的基本单位;

  • 进程是系统中拥有资源的单位,比如进程映像的地址空间,全局变量,打开文件,IO设备
  • 线程,拥有少量的私有资源(线程控制块,栈…)
  • 同一进程哪的线程共享全部资源
  • 同一进程的线程切换不会引发进程切换
  • 不同进程中线程切换将引起进程切换
  • 同一进程的多个线程也存在并发,提高系统资源的使用和系统吞吐量
  • 线程间通信比进程间通信快很多
  • 线程的系统开销小于进程,同一进程的多个线程同步和通信更容易

状态

  • 就绪状态
  • 执行状态
  • 阻塞状态

一般不具有挂起状态,一个进程可以创建和撤销多个线程,同一个进程的多个线程可以并发执行

基本操作

  • 派生spawn:
  • 阻塞block
  • 解除阻塞ubblock
  • 结束finish

分类

  • 用户级线程
  • 内核级线程
  • 混合线程