zoukankan      html  css  js  c++  java
  • 进程控制

    1、进程控制

    1.1 进程的创建

    ​ 进程控制是进程管理中最基本的功能,它用于创建和撤消进程,并对进程在整个生命周期中各种状态之间的转换进行有效控制。
    ​ 进程控制是由操作系统的内核通过原语来实现的。
    ​ 原语:系统状态下执行的某些具有特定功能的程序段称为原语。 (原语的执行具有原子性,执行时不可分割)。

    进程的控制主要包括:
    创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程、撤销进程等

    1.1.1进程图(Process Graph):

    用于描述一个进程的家族关系的有向树。

    Snipaste_2020-09-26_14-46-30

    • 子进程可以继承父进程的所有资源,当子进程被撤消时,应将从父进程那里获得的资源归还给父进程。
    • 撤消父进程时也必须同时撤消其所有的子进程。

    1.1.2 引起创建进程的原因

    1) 用户登陆

    2)作业调度

    3)提供服务:由系统内核创建新进程

    4)应用请求:由请求的应用程序自行创建新进程

    1.1.3 进程创建的过程(Creation of Progress)

    1)申请空白PCB

    2)为新进程分配资源

    3)初始化进程控制块

    4)将新进程插入就绪队列

    创建新进程通过进程创建原语creat()来完成。
    进程创建原语的主要任务是进程创建控制块 PCB。

    Snipaste_2020-09-26_14-53-00

    1.2 进程的终止

    • 终止事由:

      • 正常结束

      • 异常结束

        如Protect error、overtime等

      • 外界的干预

        • 系统员kill进程;
        • 父进程终止
        • 父进程请求
    • 终止流程

      OS通过调用进程终止原语完成进程的终止。

      1. 第一步:根据被终止进程的标识符,从PCB集合中查找对应进程控制块并读出该进程的状态;
      2. 第二步:若进程还有子孙进程,应将其所有子孙进程终止,以防它们成为不可控制的。
      3. 第三步:将进程所占有的全部资源释放(还给父进程或系统),释放进程控制块(若该进程为执行态,要进行进程调度)。
      4. 第四步:将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其他程序来收集相关信息。
      5. 第五步:若被终止进程正处于执行状态,则终止该进程的执行,并设置调度标志为真,用于指示该进程被终止后应重新进行调度,选择一新进程,把处理机分配给它。

      进程终止的具体原因

      • 正常结束
      • 超时终止,终止时间超过预计时间
      • 内存不足,无法为进程分配所需的内存空间
      • 越界访问
      • 企图使用未允许使用的数据,或操作方式错
      • 计算错,如除零,或企图存储硬件允许的最大数
      • 超时等待某事件发生。
      • I/O失败,如找不到文件或多次重试仍无法读写文件,或无效操作。
      • 无效指令,企图执行不存在的指令。
      • 特权指令,企图执行特权指令
      • 数据类型不符,或未初始化。
      • 操作员或OS干预,如发生死锁的时候
      • 父进程终止
      • 父进程请求

    进程的终止过程:

    1. 查找对应的PCB
    2. 终止该进程及子孙进程
    3. 释放资源
    4. 释放PCB

    终止原语流程图

    Snipaste_2020-09-26_15-09-23

    通过进程终止原语来终止进程。
    终止进程的实质是收回 PCB。

    1.3 进程的阻塞与唤醒

    1.3.1 进程的阻塞

    ​ 当正在执行的进程需要等待某种事件的完成或本身无新工作可做时,应调用阻塞原语将自己从执行状态转换成阻塞状态。
    ​ 进程阻塞是进程的一种主动行为。通过阻塞原语block()来完成。

    引发的事件

    • 请求系统服务得不到满足时:如问系统请求打印。
    • 启动某种操作而需同步时:如该操作和请求该操作的进程需同步运行(即非异步操作)。
    • 新数据尚未到达:如进程A写,进程B读,则A未写完,B不能读。
    • 无新工作可做

    阻塞具体的操作过程:

    (1)停止进程的执行
    (2)将其状态改为阻塞状态
    (3)把它的 PCB 插入相应的阻塞(等待)队列
    (4)转调度程序进行重新调度。

    阻塞原语流程图

    Snipaste_2020-09-26_15-12-39

    1.3.2 进程的唤醒

    ​ 当阻塞进程所等待的事件完成时,应调用唤醒原语将该进程的状态从阻塞状态转换成就绪状态。通过唤醒原语wakeup()来完成。

    ​ 处于阻塞状态的进程是绝不可能叫醒自己的,必须由它的合作进程用唤醒原语唤醒它。

    唤醒具体的操作过程:

    1)在等待队列中移出该进程的PCB

    2)将其置成就绪状态

    3)把它插入就绪队列

    Snipaste_2020-09-26_15-19-11

    1.4 进程的挂起与激活

    1.4.1 进程的挂起

    ​ 当出现了引起进程挂起的事件时,用户请求将自己挂起,或者父进程请求挂起自己的子进程。
    ​ 系统通过挂起原语suspend()将指定进程挂起。

    挂起具体的执行过程:

    ​ (1)检查被挂起进程的状态,如果处于活动就绪状态,就将它改为静止就绪;如果处于活动阻塞,则改为静止阻塞。
    ​ (2)将 PCB 复制到指定的内存区域供用户或父进程考查。若挂起前进程正在执行,则转调度程序重新进行进程调度。

    1.4.2 进程的激活

    ​ 当发生激活事件后,系统利用激活原语Active( )将指定进程激活。
    ​ 激活具体的操作过程是:
    ​ (1)若进程处于静止阻塞状态,则将它转换成活动阻塞状态,否则将它转换成活动就绪状态。
    ​ (2)若进程转换成活动就绪状态,而系统又采用抢占调度策略,则应检查该进程是否有权抢占 CPU,若有则应进行进程调度。

    1.5 进程切换

    • 时钟中断
    • I/O中断
    • 内存访问出错
    • 陷阱

    步骤:

    • 保护进程A的现场
    • 恢复进程B的现场
  • 相关阅读:
    获取URL的name值 getUrl(url,name) 传入url和key 得到key对应的value
    封装GetQueryString()方法来获取URL的value值
    判断设备
    RecyclerView 加点击事件
    SparseArray,SparseBooleanArray和SparseIntArray
    内存泄漏监测-LeakCanary
    StrictMode
    数据结构-线性结构
    程序设计语言基础-知识点
    数据结构-概念
  • 原文地址:https://www.cnblogs.com/coderD/p/13735184.html
Copyright © 2011-2022 走看看