操作系统 进程篇之基本概念、状态和状态转换

前言

本文梳理进程的概念、状态和状态转换等知识。

进程的定义、组成、组织方式和特征

image.png

进程的定义

程序段、数据段、PCB三部分组成了进程实体(进程映像)。一般而言,我们把进程实体就简称为进程。
创建进程实际上是创建进程实体中的PCB;
撤销进程实际上是撤销进程实体中的PCB;
PCB:进程控制块,用来描述进程的各种信息(如程序代码存放位置),它是进程存在的唯一标志。

进程是进程实体的运行过程,是系统进行资源分配的一个独立单位,进程内运行的线程是CPU调度的基本单位。

进程的组成

  • 程序段
    存放要执行的程序代码

  • 数据段
    存放程序运行过程中处理的各种数据,如全局变量、局部变量、宏定义的常量等

  • PCB(操作系统操作进程时的对象)

    • 进程描述信息:进程标识符PID、用户标识符UID
    • 进程控制和管理信息:进程当前状态、进程优先级
    • 资源分配清单:程序段指针、数据段指针、键盘、鼠标
    • 处理机相关信息:各种寄存器值(当进程切换时需要把进程当前的运算情况记录下来保存在PCB中,如程序计数器的值(表示当前程序执行到哪一句了))

进程的组织

进程的组成是指一个进程内部由哪些部分构成;
进程的组织是指多个进程,即多个PCB之间的组织方式;

进程的组织分为链接方式和索引方式。

  • 链接方式:按照进程状态将PCB分为多个队列,操作系统持有指向各个队列的指针。
    image.png

  • 索引方式:根据进程状态的不同,建立几张索引表,操作系统持有指向各个索引表的指针。
    image.png

进程的特征

  • 动态性:
    进程是程序的一次执行过程,是动态的产生、变化和消亡的

  • 并发性:
    内存中有多个进程实体,各进程可并发执行

  • 独立性:
    进程是能独立运行、独立获得资源、建立接受调度的基本单位
    进程是资源分配、接受CPU调度的基本单位

  • 异步性:
    各进程按各自独立的、不可预知的速度向前推进,操作系统要提供进程同步机制来解决异步问题

  • 结构性:
    每个进程都会分配一个PCB。结构上看,进程由程序段、数据段、PCB组成

进程的状态与转换

image.png

进程的状态

  • 创建态New
    进程正在被创建,操作系统为进程分配资源、创建PCB

  • 就绪态Ready
    已经具备运行条件,但由于没有获取到CPU时间片,而暂时不能运行;

  • 运行态Running
    占有CPU,并在CPU上运行;单核CPU每一时刻最多只有一个进程处于运行态,多核CPU可以有多个进程处于运行态。

  • 阻塞态Waiting/Blocked
    因等待某一时间而暂时不能运行;

  • 终止态Terminated
    进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB

进程状态的转换

image.png

操作系统如何实现进程状态转换

image.png

基本概念

  • 进程控制就是要实现进程状态的转换。

  • 如何实现进程控制,进程控制用原语来实现。
    原语执行具有原子性,原语采用关中断指令和开中断指令实现。
    原语是在操作系统内核中实现,运行在核心态。
    image.png

  • 开/关中断指令,它们都是特权指令
    image.png

进程控制相关原语

  • 进程控制原语基本功能:
  1. 更新PCB中的信息:修改进程状态标志、将运行环境保存到PCB、从PCB中恢复运行环境
  2. 将PCB插入合适的队列
  3. 分配/回收资源
  • 创建原语:无-> 创建态 -> 就绪态
    引起进程创建的条件:用户登录、作业调度、提供服务、应用请求

    1. 申请空白PCB
    2. 为进程分配所需资源
    3. 初始化PCB
    4. 将PCB插入就绪队列。
  • 撤销原语:就绪态/阻塞态/运行态 -> 终止态 -> 无
    引起进程终止的条件:正常结束、异常结束、外界干预

    1. 从PCB集合中找到终止进程的PCB
    2. 若进程正在运行,立即剥夺CPU使用权,将CPU分配给其他进程
    3. 终止其所有子进程
    4. 将该进程拥有的所有资源归还给父进程或操作系统
    5. 删除PCB
  • 阻塞原语:运行态->阻塞态
    引起进程阻塞的条件:需要等待系统分配某种资源、需要等待相互合作的其它进程完成工作

    1. 找到要阻塞的进程对应的PCB
    2. 保护进程运行现场,将PCB状态信息设置为阻塞态,暂时停止进程运行
    3. 将PCB插入相应事件的等待队列
  • 唤醒原语:阻塞态->就绪态
    引起进程唤醒的事件:等待的事件发生

    1. 在事件等待队列中找到PCB
    2. 将PCB从等待队列移除,设置进程为就绪态
    3. 将PCB插入就绪队列,等待被调度
  • 阻塞原语和唤醒原语必须成对使用,Monitor机制,因何事阻塞,必须由何事唤醒

  • 切换原语:运行态->阻塞态/就绪态、就绪态->运行态
    引起进程切换的事件:当前进程时间片到、有更高优先级的进程到达、当前进程主动阻塞、当前进程终止

    1. 将运行环境信息存入PCB
    2. PCB移入相应队列
    3. 选择另一个进程执行,并更新其PCB
    4. 根据PCB恢复新进程所需的运行环境

猜你喜欢

转载自blog.csdn.net/u014099894/article/details/112747927