02. 操作系统之进程管理

1. 进程管理之进程实体

进程的必要性
  • 进程是系统进行资源分配的基本单位(线程作为独立运行的基本单位)
  • 进程作为程序独立运行的载体保障程序正常执行
  • 进程的存在使得操作系统资源的利用率大幅度提高
进程与程序
  • 进程是资源分配的最小单位,线程是程序执行的最小单位(资源调度的最小单位)
  • 进程是动态的,程序是静态的: 程序是有序代码的集合,可以复制;进程是程序在数据集上的一次执行
  • 进程具有结构特征,由程序段、数据段和进程控制块三者组成
  • 进程与程序的对应关系: 通过多次执行,一个程序可对应多个进程
进程实体构成
  • 程序(段): 进程要进行的操作
  • 数据段: 包括操作的数据和程序自己的变量
  • 进程控制块PCB(Process Control Block): 存放进程标识符,进程运行的当前状态,程序和数据的地址、程序运行的CPU环境
进程的特征
  • 动态性: 进程是一个动态的概念,进程具有生命周期
  • 并发性: 多个进程实体同时存在于内存中,且一段时间内同时运行,共享系统资源,引入进程实体的目的就是并发执行
  • 独立性: 进程是一个能独立运行的基本单位,也是系统进行资源分配和调度的基本单位
  • 异步性: 各进程按各自独立的、不可预测的速度向前推荐
进程并发执行的特征
  • 间断性: “走走停停”, 一个程序可能走到中途停下来,失去原有的时序关系
  • 失去封闭性: 程序并发执行时,系统中多道程序共享资源,资源的状态不是取决于某一进程,所以失去封闭性
  • 不可再现性: 失去封闭性->失去可再现性,外界环境在程序的两次执行期间发生变化,失去原有的重复性特征
进程块的4大原语
  • 创建原语

    在实际系统中创建一个进程有两种方法:一是由操作系统建立,O号进程就是由操作系统建立的;二是由其他进程创建一个新的进程。基本操作都是一样的。创建进程原语总是先为新建进程申请一空白PCB,并为之分配唯一的数字标识符,使之获得PCB的内部名称,若该进程所对应的程序不在内存中,则应将它从外存储器调入内存,并将该进程有关信息填入PCB中,然后置该进程为就绪状态,并将它排入就绪队列和进程家族队列中

  • 撤销原语

    撤销进程的实质是撤销进程存在标志——进程控制块PCB。一旦PCB被撤销,进程就消亡了。撤销原语的操作过程大致如下:以调用者提供的标识符Ⅱ为索引,从该进程所在的队列,将它从该队列中消去,并撤销属于该进程的一切“子孙进程”,若有父进程则从父进程PCB中删除指向该进程的指针,并释放撤销进程所占用的全部资源,或将其归还给父进程,或归还给系统。若被撤销的进程处于执行状态,应立即中断该进程的执行,并设置调度标识为真,以指示该进程被撤销后系统应重新调度

  • 阻塞原语

    阻塞原语的大致工作过程如下:开始时,进程正处于执行状态,因此首先应中断CPU执行,并保存该进程的CPU现场,然后把阻塞状态赋予该进程,并将它插入具有相同实体的阻塞队列中

  • 唤醒原语

    一进程因为等待事件的发生而处于阻塞状态,当等待的事件完成后,进程又具有了继续执行的条件,这时就要把该进程从阻塞状态转变为就绪状态,这个工作由唤醒原语来完成。唤醒原语执行的操作有:先把被唤醒进程从阻塞队列中移出,设置该进程当前状态为就绪状态,然后再将该进程插入到就绪队列中

2. 进程的五状态

创建状态
  • 创建进程时拥有PCB但其他资源尚未就绪的状态称为创建状态
  • 当其他资源准备就绪则进入就绪状态
就绪状态
  • 进程被分配到除CPU以外的所有必要的资源
  • 只要再获得CPU的使用权,就可以立即云运行
阻塞状态
  • 进程因某种原因如:其他设备未就绪而无法继续执行从而放弃CPU的状态称为阻塞状态
  • 解决方案:
    (1) 将所有的阻塞状态的进程统一放入一个队列里面,等待CPU空闲,用时间换空间
    (2)将不同类别的进程分门别类地放入不同的队列,等CPU空闲根据队列不同优先次序调度,用空间换时间
    在这里插入图片描述
执行状态
  • 进程获得CPU,其程序正在执行称为执行状态
  • 此状态某一时刻的进程的数目小于等于CPU的数目
终止状态
  • 进程结束由系统清理或者归还PCB的状态称为终止状态
三种基本状态的转换

在这里插入图片描述

3. 进程控制

进程的创建
  • 进程创建事件

    1. 用户登录: 在分时系统中,用户在终端登录后,如果是合法用户,系统将为用户创建一个进程,并插入就绪队列
    2. 作业调度: 在批处理系统中,当作业调度程序调度到某作业时,该作业装入内存,为它分配资源并创建进程
    3. 提供服务: 当运行中的用户进程提出某种请求后,系统将专门创建一个进程来提供服务,如打印
    4. 应用请求: 由应用进程为自己创建进程,以便能并发执行,如输入、计算、输出程序
  • 进程创建过程

    1. 申请空白PCB: 为新进程申请唯一的数字标识符
    2. 为进程分配资源: 为新进程的程序和数据分配内存
    3. 初始化进程控制块: 初始化标识信息将系统标识信息写入新的PCB
    4. 将新进程插入就绪队列: 前提是进程就绪队列能够接纳新进程
进程的终止
  • 进程终止事件

    1. 正常结束

    2. 异常结束: 由于出现某些错误和故障迫使进程终止,常见的错误如下
      (1) 越界错误: 程序访问的存储区已经出该程序的区域
      (2) 保护错: 进程试图去访问一个不允许访问的资源或文件
      (3) 非法指令: 程序试图去执行一条不存在的指令
      (4) 特权指定错: 用户进程试图去执行一条只允许OS执行的指令
      (5) 运行超时

    3. 外界干预: 外界干预并非指在本进程运行中出现了异常事件,而迫使进程结束,有如下的干预
      (1) 操作员或操作系统干预终止该进程,由于某种原因,如死锁
      (2) 父进程请求,由于父进程具有终止自己的任何子孙进程的权利,可以由父进程提出请求,系统将终止该进程
      (3) 父进程终止时,OS也将它所有子孙进程终止

  • 进程终止过程

    1. 读取进程状态: 从PCB集合中检索出该进程的PCB,从中读出该进程状态
    2. 判断进程转态并作决策: 如果进程正处于执行转态,立即终止进程,并置调度标志为真,用于重新调度。如果该进程还有子孙进程,还应将其所有子孙进程终止,防止不可控
    3. 归还资源: 将终止进程所拥有的全部资源,或归还给其它进程,或者归还给系统
    4. 将终止进程(它的PCB)从所在队列移除,等待其它程序来搜索信息
进程的组阻塞与唤醒
  • 进程阻塞和唤醒事件

    1. 请求系统服务: 如请求打印机,若以被其它进程占用,此时只能阻塞,等其它进程释放后再请求进程唤醒
    2. 启动某种操作: 当进程启动某种操作后,进程在该操作完成后才能继续执行,则必须使进程阻塞
  • 进程阻塞和唤醒过程

    1. 进程唤醒: 调用唤醒原语weakup(),将阻塞等待的进程唤醒
进程的挂起与激活
  1. 挂起原语: suspend()
  2. 激活原语: active()

4. 进程同步

说明:
  • 对竞争资源在多线程间进行使用次序的协调,使得并发执行的多个程序之间可以有效使用资源和相互合作
临界资源及临界区
  • 临界资源: 指的是一些虽作为共享资源却无法同时被多个线程共同访问的共享资源。当进程在使用临界资源时,其他进程必须依据操作系统的同步机制等待占用进程释放该共享资源才可以重新竞争使用该共享资源,如打印机、磁带机、卡片输入机等

  • 临界区: 每个进程中访问临界资源的那段代码称为临界区

  • 进入区: 在临界区之前,对临界区进行查看,看是否正在被访问,如果未被访问,该进程进入临界区,并设置它正在被访问的标志,这段代码称为进入区

  • 退出区: 在临界区后的一段代码,用于将访问的资源恢复为未被访问的标志,这段代码称为退出区

进程间的同步原则
  • 空闲让进:资源无占用,允许使用
  • 忙则等待:资源有占有,请求进程等待
  • 有限等待:保证有限等待时间能够使用资源
  • 让权等待:等待时,进程需让出CPU
进程同步的方法
信号量机制
  • 整型信号量:
    通过两个标准的原子操作wait(S)和signal(S)访问,这两个操作分别被称为P、V操作。P操作用来判断访问临界资源,V操作用来释放临界资源

  • 记录型信号量:
    相比于整型信号量,遵循了"让权等待"的准则,不存在"忙等"现象

  • AND型信号量:
    相比于记录型信号量,通过将所有需要的资源一次性全部分配给进程解决死锁的问题

  • 信号量集:
    一次申请多个资源,可以批量的处理资源,当资源低于某个下限值时便不予分配。大大提高效率

  • 信号量的应用
    利用信号量实现前趋关系
    在这里插入图片描述
    生产者消费者问题
    在这里插入图片描述

线程间的同步
  • 互斥量
  • 读写锁
  • 自旋锁
  • 条件变量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章