os -- 进程的控制

Posted onlypinsily

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了os -- 进程的控制相关的知识,希望对你有一定的参考价值。

os -- 进程的控制

参考

《计算机操作系统》(第四版) 汤小丹等编著


概念引入

进程控制

进程控制是最基本的功能,负责创建进程、结束进程等功能,一般由 OS 内核中的原语来实现

原语

所谓原语,就是由若干条指令组成的,用于完成一定功能的一个过程,算是不可分割的、最基本的操作

Note

  1. 接下来原语基本用于所有的操作

操作系统内核

操作系统将一些常用或者运行频率较高的模块(如时钟管理、进程调度等)常驻内存,这些就被称为 OS 内核

两大功能
  1. 支撑功能

    • 中断处理
    • 时钟管理
    • 原语操作

  2. 资源管理功能

    • 进程管理
    • 存储器管理
    • 设备管理

进程的创建

进程的层次

进程可以创建另一个进程,形成父进程和子进程的关系

Note

  1. 进程不能拒绝子进程的继承权
  2. 父进程撤销时,子进程也得随之 over
  3. 根据父子进程的关系,可以构成一棵进程树
  4. Window 中,一个进程创建另一个进程时,获得一个句柄,形成控制与被控制的关系

引起创建进程的事件

  1. 用户登录
  2. 作业调度
  3. 提供服务
  4. 应用请求

进程的创建

调用进程创建原语 Creat

  1. 申请空白 PCB(进程控制块),获取唯一的数字标识符
  2. 分配进程所需的资源
  3. 初始化 PCB
  4. 允许的情况下,插入就绪队列

进程的终止

引起进程终止的事件

  1. 正常结束

  2. 异常终止

    • 越界错:超出进程访问的存储区
    • 保护错:进程试图访问不能被访问的资源或文件
    • 非法指令:访问一条不存在的指令
    • 运行超时
    • 等待超时
    • 算术运算错
    • I/O 故障
  3. 外界干预

Note:最典型的算是 Ctrl + C 吧

进程的终止过程

调用进终止原语

  1. 根据进程的标识符, 从 PCB 集合中检索该进程的 PCB,读出进程状态
  2. 若进程还在执行,则立即终止该进程的执行,并置调度标志为真,用于指示该进程被终止后应重新进行调度
  3. 若该进程还有子孙进程,则先终止其子孙进程,防止失控进程的产生
  4. 将终止进程的所有资源归还父进程或系统
  5. PCB 从所在集合中移除

进程的阻塞与唤醒

引起进程阻塞和唤醒的事件

  1. 请求共享资源失败
  2. 等待某种操作的完成
  3. 新数据尚未到达
  4. 等待新任务的到达

进程阻塞进程

调用阻塞原语 Block

  1. 将进程停止运行
  2. 修改 PCB 现行状态为“阻塞”
  3. 插入阻塞队列等待唤醒

进程唤醒过程

调用唤醒原语 Wakeup

  1. 将进程从阻塞队列移出
  2. 修改 PCB 线性状态为“执行”
  3. 插入到就绪队列

进程的挂起与激活

进程的挂起

挂起原语 suspend

  1. 检查被挂起进程的状态
    • 若为活动就绪状态,则改为静止就绪
    • 若为活动阻塞状态,则改为静止阻塞
  2. 将该进程的 PCB 复制到指定的内存区域,方便考察其运行情况
  3. 若进程正在执行,则转向调度程序重新调度

进程的激活过程

激活原语 active

  1. 状态转换与挂起相反

总结

  1. 原语和操作系统内核
  2. 进程的创建和终止
  3. 进程的阻塞和唤醒
  4. 进程的挂起和激活

以上是关于os -- 进程的控制的主要内容,如果未能解决你的问题,请参考以下文章

Erlang:控制Erlang进程崩溃时如何使连接的外部OS进程自动死亡?

[OS-Linux]详解Linux进程控制

[OS-Linux]详解Linux进程控制

王道操作系统OS第二章进程管理

OS(A)之进程调度模拟算法

有没有更好的方法来控制子进程的 PYTHONPATH?