目录

2.3  进程控制

2.3.1  操作系统内核

2.3.2  进程的创建

2.3.3  进程的终止

2.3.4  进程的阻塞与唤醒

2.3.5  进程的挂起与激活


2.3  进程控制

进程控制是用于创建一个新进程,终止一个已完成的进程,或去终止一个因出现某事件而使其无法运行下去的进程,还负责进程运行中的状态转换。

进程控制一般是由 OS 的内核中的原语(Primitive)来实现的。

2.3.1  操作系统内核

OS 内核——常驻内存。

  • 与硬件紧密相关的模块(中断处理)
  • 常用设备驱动、运行频率高的模块(时钟管理、进程调度)

OS 内核包含两大功能:

  • 支撑功能
  • 资源管理功能

2.3.2  进程的创建

1. 进程的层次结构

  • 父进程
  • 子进程:可以继承父进程所拥有的资源

2. 进程图(process graph)

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

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

3. 引起进程创建的事件

导致一个进程去创建另一个进程的典型事件,可有以下四类:

  • 用户登录(如:从终端登录到主机)
  • 作业调度(如:挑选作业来执行)
  • 提供服务(如:C/S、B/S)
  • 应用请求

4. 进程的创建过程

调用进程创建原语 Creat() 按下述步骤创建一个新进程:

1)申请空白 PCB

2)为新进程分配资源(挂到 PCB 上)

3)初始化进程控制块 PCB,包括:

  • 初始化标识信息
  • 初始化处理机状态信息
  • 初始化处理机控制信息

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

2.3.3  进程的终止

1. 引起进程终止的事件

1)正常结束:批处理中用 Holt 指令,分时中用 Logs off 指令。

2)异常结束:

本进程运行中出现了异常事件。

  1. 越界错误。存储区
  2. 保护错。写一个只读文件(权限)
  3. 非法指令。执行一条不存在的指令(指令集)
  4. 特权指令错。用户访问只允许 OS 执行的指令
  5. 运行超时。(防止资源浪费或骗取权限)
  6. 等待超时。
  7. 算术运算错。被 0 除(除以 0)
  8. I/O 故障

OS 是无法预先判断一个作业需要运行多长时间的。

3)外界干预

并非指本进程运行中出现了异常事件,而是指进程为响应外界请求而终止运行。

  1. 操作员或操作系统干预
  2. 父进程请求终止该进程
  3. 当父进程终止时,OS 也将终止其所有子孙进程

2. 进程的终止过程

1)根据被终止进程的标识符 ID,从 PCB 集合中检索出该进程的 PCB,从中读出该进程的状态。

2)若被终止进程正处于执行状态,应立即终止该进程的执行,并置调度标志为 true,用于指示该进程被终止后应重新进行调度。

3)若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程。

级联地终止,防止孤儿进程的出现。

4)将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统。

5)将被终止进程(它的PCB)从所在队列(或链表)中移出,等待其它程序来搜集信息。

2.3.4  进程的阻塞与唤醒

1. 引起进程阻塞的事件

1)请求系统服务:进程提出 I/O 服务请求且不能被立即满足时,转变为阻塞状态来等待。

2)启动某种操作:当进程启动某种操作后,在该操作完成之后才能继续执行

3)新数据尚未到达:对于相互合作的进程而言。

4)无新工作可做(如发送进程)

为了防止 CPU 空转,进程自己把自己阻塞,有新工作时再唤醒。

2. 进程的阻塞过程

1)正在执行的进程,当发现上述某事件时,由于无法继续执行,于是进程便通过调用阻塞原语 block( ) 把自己阻塞。

2)把进程控制块中的现行状态由执行改为阻塞,并将 PCB 插入阻塞队列。

3)转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换。

3. 进程的阻塞与唤醒

当被阻塞进程所期待的事件出现时,则由有关进程(如:用完并释放了该 I/O 设备的进程)调用唤醒原语 wakeup(),将等待该事件的进程唤醒。

4. 进程的唤醒过程

1)首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其 PCB 中的现行状态由阻塞改为就绪。

2)然后再将该 PCB 插入到就绪队列中。

2.3.5  进程的挂起与激活

1. 进程的挂起过程

当出现了引起进程挂起的事件时,系统将利用挂起原语 suspend() 将指定进程挂起。

suspend() 的执行过程是:

首先检查被挂起进程的现行状态

  • 若处于活动就绪状态,则将其改为静止就绪状态;
  • 若对于活动阻塞状态,则将之改为静止阻塞状态。

2. 进程的激活过程

当发生了激活进程的事件时,则可将在外存上处于静止就绪状态的进程换入内存,系统再利用激活原语 active() 将指定进程激活。

active() 的执行过程是:

首先将进程从外存调入内存,检查该进程的现行状态

  • 若处于静止就绪状态,则将其改为活动就绪状态;
  • 若对于静止阻塞状态,则将之改为活动阻塞状态。

DJ2-2 进程管理相关推荐

  1. 操作系统学习笔记 第二章:进程管理(王道考研)

    本文章基于 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系统概述 ...

  2. C++ Windows进程管理

    功能: 1.各个进程启动.挂起.恢复.停止等 2.监听进程的运行状态,进程退出(正常.非正常)时,通知用户 3.异步队列 4.线程安全 进程管理器类: #ifndef __ProcessManager ...

  3. php 进程管理,php如何管理进程

    进程管理-防止进程成为僵尸进程 创建好了进程,那么怎么对子进程进行管理呢? 使用信号,对子进程的管理,一般有两种情况:(推荐学习:PHP编程从入门到精通) posix_kill():此函数并不能顾名思 ...

  4. 《Linux内核设计与实现》读书笔记 第三章 进程管理

    第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...

  5. systemd进程管理工具实战教程

    systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理.   ...

  6. Linux进程管理 (7)实时调度

    关键词:RT.preempt_count.RT patch. 除了CFS调度器之外,还包括重要的实时调度器,有两种RR和FIFO调度策略.本章只是一个简单的介绍. 更详细的介绍参考<Linux进 ...

  7. boost:进程管理

    概述 Boost.Process提供了一个灵活的C++ 进程管理框架.它允许C++ developer可以像Java和.Net程序developer那样管理进程.它还提供了管理当前执行进程上下文.创建 ...

  8. php 脚本 fpm缓存,PHP生命周期及fpm(FastCGI进程管理器)的运作方式

    PHP在web方式中如何改了文件就立即生效的,重要的几个概念:sapi: 可以简单的理解为php引擎对外的一个统一接口,使得php可以和外部程序进行交互 php的生命周期中关键四个调用: MINT - ...

  9. linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp

    linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...

  10. Linux进程及进程管理命令

    Linux进程基础 1进程概念 1.1程序与进程 1.2进程的状态 1.3线程 1.4进程生命周期 1.5虚拟内存 2进程管理工具 2.1pstree 2.2ps 2.3pgrep 2.4kill.p ...

最新文章

  1. 太原理工大学计算机专业多少分录取分数线,多少分能上山西太原理工大学,往年全国各省各专业录取分数线出炉...
  2. JVM堆 栈 方法区详解
  3. HBase Shell常用的命令
  4. python文件传输模块_如何将python对象从一个文件模块传递到另一个文件模块?
  5. ITK:图像重新取样
  6. [Linux学习]Linux键盘布局设置
  7. docker java mysql_Docker 搭建 MySQL 服务
  8. 使用vue来开发一个下拉菜单组件(2)
  9. 训练自己的数据_PyTorch版CenterNet训练自己的数据集
  10. linux 进程优先级 chrt,关于Linux进程优先级的一些疑问
  11. php刷数据库数据库,php数据库操作种
  12. 《JavaScript 高级程序设计》第三章:基本概念
  13. 百度网盘下载速度太慢,有什么办法可以提高下载速度?
  14. VIM复制粘贴 的快捷键是什么
  15. 地铁供电系统原理图_城市轨道交通供电系统设计原理与应用
  16. Vue中使用微信JSDK实现图片上传
  17. 默克推进下一代抗体药物偶联物疗法;美国FDA受理君实生物特瑞普利单抗治疗鼻咽癌的上市申请 | 医药健闻...
  18. NXP JN5169 使用看门狗定时器
  19. In aggregated query without GROUP BY报错
  20. 计算机二级mysql考试经验分享(2021年3月)

热门文章

  1. css自动换行,css代码
  2. 两个服务器组虚拟机,linux 两台虚拟机
  3. layui 数据表格下拉框_LayUi数据表格中嵌套下拉框
  4. 正确的iconv使用方法
  5. JavaScript 学习总结(全)
  6. 傅立叶变换的原理、意义以及如何用Matlab实现快速傅立叶变换
  7. Java对象内存布局(JOL)
  8. springboot防止表单重复提交
  9. POJ3984迷宫问题
  10. 子类调用父类 关键字 super