进程管理

进程:运行着的程序

进程的组成:进程控制块PCB + 程序段 + 数据集合

PCB属于系统空间,程序段和数据集合属于用户空间

  • 进程组成图

  • PCB
    PCB

进程控制块PCB

  • PCB是操作系统用于控制和管理进程的一种数据结构,它包含了系统所需要的关于进程的所有信息,是操作系统中最重要的数据结构

  • PCB是进程存在的唯一标志,操作系统靠PCB感知进程的存在

  • 用户无法感知,也无法访问


进程的特征:动态性,并发性,独立性,异步性,结构性,共享性,制约性


进程三种基本状态:就绪,运行,阻塞(有的系统会有五种基本状态,增加了新建和完成/终止状态)

  • 关于完成状态
    • 处于该状态的进程还未从系统中消失,可能还有一些善后工作没完成,但是也不会再被调用了。
    • 一个进程可以在任何状态下终止而进入完成状态

这三种状态依然不够充分:(进程挂起的原因)

  • 一方面,处理机内存等系统硬件资源的利用率不高
  • 另一方面,处在活动的进程可能由于某种原因暂时静止不活动了,也不退出系统,造成CPU空闲,其他进程也无法使用CPU。

因此这就引入了挂起状态

  • 挂起的目的:是把进程占用的系统资源让出部分或全部,以供其他进程利用让出的姿态,提高系统的效率。

  • 处于静止的就绪或阻塞进程称为挂起状态,将被从内存对换到外存中。

多进程图像

  1. 如何组织多进程:PCB+状态+队列
  • 进程状态图:
  • 队列

  1. 多进程如何进行交替/切换:队列操作+调度+切换

通过一个重要的函数--schedule()

进入磁盘等待队列
schedule{
  p2=getNext(ReadyQueue);//getNext()即为调度策略
  switch_to(p1,p2);      //p1 p2为两个PCB,也即两个进程
}
  1. 多进程之间相互影响
  • 多个进程处于用户态,存在于内存中,如何防止进程之间内存使用不越界呢。

    • 进程使用的内存地址都是逻辑地址,并不是真正的物理地址,每一个逻辑地址通过映射表对应一个物理地址,因此虽然两个进程可能使用了同一个逻辑地址,但这两个逻辑地址映射的物理地址是不同的,这样一来,通过映射表将各个进程的内存分离了,这也是后面内存管理的内容,内存管理也是为了进程管理服务的。

进程控制

  • 进程切换与处理机执行模式切换的注意事项:

    • 进程切换是通过调度实现的,时机通常在事件中断时

    • 进程切换必然导致模式切换,模式切换不一定会发生进程切换(例如进程仅仅是进行一个系统调用,处理机由用户态切换到内核态,系统调用完后继续返回该进程执行,并没有切换到其他进程)

    • 无论是何种事件的中断,都会进行模式切换,进入内核执行中断处理程序

操作系统内核

  • 内核的组成:
    • 进程管理

    • 内存管理

    • IO管理

    • 与硬件有关的部分(中断处理、IO驱动程序、进程调度与控制用原语等)

内核常驻内存中

原语操作(也称为原子操作):指不可分割的操作,要么不做,要么全做

  • 原语操作分类:

    • 机器指令级原语:执行期间不允许中断
    • 功能级原语:作为原语的程序段不允许并发执行(禁止被中断)
  • 关于原语的注意点:

    • 两类原语都在核心态执行
    • 通常利用原语的特性,把进程控制用程序段做成原语(创建原语、撤销原语、阻塞原语、唤醒原语、进程同步原语等)

进程的创建与终止

1.进程图:为了提高系统的并发性和系统整体效率,进程运行过程中可以根据需要动态的创建子进程。类似于继承关系。

  • 进程图的要点:
    • 进程图是有向树,A为父进程,B、C为子进程;D、E又是B的子进程,A作为树的根,是这个进程家族的祖先
    • 子进程可以继承父进程所拥有的资源
    • 父进程可以动态的撤销(终止)子进程,子进程终止时,归还从父进程得到的资源
    • 父进程终止时,将同时撤销所有的子孙进程
  1. 进程创建
  • 进程创建过程(由系统调用,或创建原语创建进程)
    • 给新进程分配一个唯一的进程标识号PID,从系统空闲的PCB结构中摘出一个PCB表
    • 为新进程分配所需资源;主要是分配内存空间
    • 初始化PCB;包括进程名、用户名、父进程标识、优先级、处理机状态(就绪)、进程地址、栈指针等
    • 将新进程插入就绪队列
  1. 进程终止
  • 系统通过终止进程的系统调用或执行终止原语终止进程:
    • 根据标识号得到PCB,立即终止进程的运行
    • 回收全部资源(包括程序空间,外部设备等)
    • 若有子孙进程,则同时终止子孙进程,收回所有资源
    • 将PCB移除(暂存在系统其他空间),由其他进程搜集信息和进行善后工作,进入完成状态。待系统将该进程所有工作完成后,收回PCB,插入到空闲队列中,以供其他新的进程使用
并不是所有的OS都有进程树结构,UNIX是典型的带有进程树层次结构的系统,而Windows中不存在任何进程树结构的概念,所有进程都是地位相同的

进程阻塞与唤醒

  1. 进程阻塞
  • 引起进程阻塞的原因:

    • 启动IO操作
    • 请求系统资源
    • 同步约束
    • 服务进程无服务:当服务进程完成的自己的服务后,就会将自己阻塞起来
  • 进程阻塞过程:

    • 立即停止当前进程的执行,保护CPU现场保存到PCB中
    • 将进程状态修改为阻塞,插到阻塞队列中
    • 转进程调度程序重新选择一个就绪状态的进程投入运行

2.进程唤醒

  • 进程唤醒的方式

    • 系统进程唤醒
    • 事件发生进程唤醒
  • 进程唤醒过程:

    • 将相关的阻塞进程从阻塞进程中摘出
    • 修改阻塞进程状态为就绪,插入到就绪队列中
    • 调度程序进行新的调度,或继续回复原当前进程

进程的挂起与激活

  1. 进程挂起
  • 进程挂起的过程(通过挂起原语)
    • 找到需要挂起进程的PCB,将其从相应队列中摘出
    • 将其空间归还系统
    • 判断被挂起的状态,如阻塞状态,则将其修改为静止阻塞状态,就绪-->静止就绪
    • 申请交换区空间,将部分或者全部进程映像写到交换区,并将交换区地址记入PCB中
    • 若被挂起的进程为当前进程,则转向进程调度

2.进程激活
进程激活与挂起是对应相反的过程

进程间的相互关系

  • 结构相关进程(物理上)

    • 相关进程————进程动态创建产生多个子进程,构成进程树
      具有两个方面的相关特性:

      • 资源的继承性;
      • “消失”的同时性
    • 无关进程

  • 逻辑相关进程
    制约关系:进程间由于并发而产生首系统资源、信息交换、通信等因素干扰而等待。

    • 直接制约关系
    • 间接制约关系
posted @ 2021-09-28 11:17  这个世界会好的  阅读(178)  评论(0编辑  收藏  举报