目录

2.1  前趋图和程序执行

2.1.1  前趋图

2.1.2  程序的顺序执行及其特征

2.1.3  程序的并发执行及其特征

2.2  进程的描述

2.2.1  进程的定义及特征

2.2.2  进程的基本状态及转换

2.2.3  进程挂起操作和进程状态的转换

区分:挂起与阻塞。

2.2.4  进程管理中的数据结构


2.1  前趋图和程序执行

2.1.1  前趋图

前趋图(Precedence Graph)是一个有向无循环图(DAG:Directed Acyclic Graph),用于描述进程之间执行的先后顺序。

2.1.2  程序的顺序执行及其特征

1. 程序的顺序执行

通常,一个应用程序由若干个程序段组成,每一个程序段完成特定的功能,它们在执行时,都需要按照某种先后次序顺序执行。仅当前一程序段执行完后,才运行后一程序段。

我们用结点(Node)代表各程序段的操作,其中 I 代表输入操作,C 代表计算操作,P 代表打印操作,用箭头指示操作的先后次序。

即使是一个程序段,也可能存在着执行顺序问题,下面示出了一个包含了三条语句的程序段:

s1: a := x + y;
s2: b := a - 5;
s3: c := b + 1;

2. 程序顺序执行时的特征

特征 解释
顺序性 处理机严格地按照程序所规定的顺序执行,即每一操作必须在下一个操作开始之前结束
封闭性 程序运行时独占全机资源,程序一旦开始执行,其执行结果不受外界因素影响
可再现性 只要程序执行时的环境和初始条件相同,都将获得相同的结果;不论它是从头到尾不停顿地执行,还是 “走走停停” 地执行

2.1.3  程序的并发执行及其特征

1. 程序的并发执行

对于具有下述四条语句的程序段:

s1: a := x + 2;
s2: b := y + 4;
s3: c := a + b;
s4: d := c + b;

2. 程序并发执行时的特征

特征 解释
间断性 由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间形成了相互制约的关系
失去封闭性 多个程序共享系统中的各种资源,即这些资源的状态将由多个程序来改变,致使其中任一程序在运行时,其环境都必然受到其它程序的影响
不可再现性 程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性

举例

有两个循环程序 A 和 B 它们共享一个变量 N,假设 N 值为 n 。

  • 程序 A 每执行一次时,都要做 N=N+1 操作;
  • 程序 B 每执行一次时,都要执行 Print(N) 操作,然后再将 N 置成 0 。

程序 A 和 B 以不同的速度运行。

1)N=N+1 在 Print(N) 和 N=0 之前执行

N=N+1        // n+1
Print(N)     // n+1
N=0          // 0

2)N=N+1 在 Print(N) 和 N=0 之后执行

Print(N)     // n
N=0          // 0
N=N+1        // 1

3)N=N+1 在 Print(N) 和 N=0 之间执行

Print(N)     // n
N=N+1        // n+1
N=0          // 0

上述情况说明,程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性。换而言之,程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但得到的结果却各不相同。

2.2  进程的描述

2.2.1  进程的定义及特征

1. 进程的定义

典型的进程定义有:

1)进程是程序的一次执行。

2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。

3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

2. 进程的特征

1)结构特征

为使程序能独立运行,应为之配置一个进程控制块,即 PCB(Process Control Block);而程序段、相关的数据段和 PCB 三部分便构成了进程实体。

所谓创建进程,实质上是创建进程实体中的 PCB;而撤消进程,实质上是撤消进程的 PCB 。

上述 “程序” 包含了程序段和数据段。

2)动态性

进程的实质是进程实体的一次执行过程。

因此,动态性是进程的最基本的特征。动态性表现为 “它由创建而产生,由调度而执行,由撤消而消亡”。可见,进程实体有一定的生命期。

程序是一组有序指令的集合,其本身并不具有运动的含义,因而是静态的。

3)并发性:是指多个进程实体同存于内存中,且能在一段时间内同时运行。

4)独立性:是指进程实体是一个能独立运行、独立分配资源和独立接受调度的基本单位。

5)异步性:是指进程按各自独立的、不可预知的速度向前推进,即进程实体按异步方式运行。

2.2.2  进程的基本状态及转换

1. 进程的三种基本状态

无论进程处于三种基本状态的哪一种,其程序段和数据段都是在内存里的。

1)就绪状态(Ready):当进程已分配到除 CPU 以外的所有必要资源后,只要再获得 CPU,便可立即执行。

由进程调度算法来挑选下一个执行的进程。一般情况下,每个进程在加入就绪队列时就会比较优先级,每次调度时取位于就绪队列最前的进程即可。

2)执行状态(Running):进程已获得 CPU,其程序正在执行。

时间片完时,进程回到就绪队列的末尾或者同级别进程的末尾。

3)阻塞状态(Blocked):正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,把这种暂停状态称为阻塞状态,有时也称为等待状态。

如:需要从磁盘加载数据到内存中。现在笔记本的磁盘转速一般为 5400 转/min;转速越高,耗电越大。

2. 进程的五种基本状态

1)Ready:准备执行。

2)Running:占用处理机(单处理机环境中,某一时刻仅一个进程占用处理机)。

3)Blocked:等待某事件发生才能执行,如等待 I/O 完成等。

4)New:进程已经创建,但未被 OS 接纳为可执行进程,并且程序还在外存,PCB 在内存。

PCB 是直接在内存中创建的;当内存有空间时,才将程序段和数据段装载到内存中。

5)Exit:因停止或取消,被 OS 从执行状态释放。

阻塞队列

  • 单阻塞队列
  • 多阻塞队列

3. 进程的状态转换

处理机就是 CPU 。

1)空 → 新状态:新创建的进程首先处于新状态。

创建进程包括申请内存空间和创建 PCB 。

2)新状态 → 就绪状态:当系统允许增加就绪进程时,操作系统接纳新建状态进程,将它变为就绪状态,插入就绪队列中。

新状态是程序段和数据段与 PCB 的第一次分离,即程序段和数据段在外存,PCB 在内存。只有当内存有空间时,才会将其装载到内存,此时进程变为就绪状态。

3)就绪状态 → 执行状态:当处理机空闲时,将从就绪队列中选择一个进程执行,该选择过程称为进程调度,或将处理机分派给一个进程,该进程状态从就绪转变为执行。

4)执行状态 → 终止状态:执行状态的进程执行完毕,或出现诸如访问地址越界、非法指令等错误,而被异常结束,则进程从执行状态转换为终止状态。

5)执行状态 → 就绪状态:分时系统中,时间片用完,或优先级高的进程到来,将中断较低优先级进程的执行。进程从执行状态转变为就绪状态,等待下一次调度。

6)执行状态 → 阻塞状态:执行进程需要等待某事件发生。通常,会因为进程需要的系统调用不能立即完成,如读文件、共享虚拟内存、等待 I/O 操作、等待另一进程与之通信等事件而阻塞。

7)阻塞状态 → 就绪状态:当阻塞进程等待的事件发生,就转换为就绪状态。进入就绪队列排队,等待被调度执行。

4. 多个进程竞争内存资源

  • 内存资源紧张。
  • 无就绪进程,处理机空闲。

I/O 的速度比处理机的速度慢得多,可能出现全部进程阻塞等待 I/O 。如下图所示,一开始有四个进程处于就绪状态。处理机依次对各个进程进行处理,而这四个进程都需要等待 I/O 操作,因此最终都转换成了阻塞状态。又因为这四个进程占满了内存空间,故没有处于就绪状态的新的进程,从而导致处理机空闲。

解决方法:

1)采用交换技术:换出一部分进程到外存,以腾出内存空间。

首选换出处于阻塞状态的进程。

将内存中暂时不能运行的进程,或暂时不用的数据和程序,换出到外存,以腾出足够的内存空间;把已具备运行条件的进程,或进程所需要的数据和程序,换入内存。

进程被交换到外存,状态变为挂起状态。

2)采用虚拟存储技术:每个进程只能装入一部分程序和数据(存储管理部分)。

2.2.3  进程挂起操作和进程状态的转换

1. 进程的挂起状态

挂起状态:是指使执行的进程暂停执行,静止下来。

1)引入挂起状态的原因

  • 终端用户的请求
  • 父进程请求
  • 负荷调节的需要
  • 操作系统的需要

负荷调节的需要:当实时系统中的工作负荷较重,把一些不重要的进程挂起,以保证系统能正常运行。参考上述例子。

操作系统的需要:操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。* 记账:比如租借算力或者显卡时需要计算费用。

2)被挂起进程的特征

  • 不能立即执行
  • 可能是等待某事件发生
  • 使之挂起的进程为:自身、其父进程、OS
  • 只有挂起它的进程才能使之由挂起状态转换为其他状态

可能是等待某事件发生:若是,则阻塞条件独立于挂起条件,即使阻塞事件发生,该进程也不能执行。* 阻塞条件独立于挂起条件:当进程处于挂起状态时,它所等待的事件依然可以处于处理中。但是即使所等待的事件发生了,该进程也不能被执行。

区分:挂起与阻塞。

  • 进程是否等待事件,阻塞与否 ?
  • 进程是否被换出内存,挂起与否?

进程是否阻塞和是否挂起并不冲突,可以既是阻塞状态又是挂起状态。

4 种状态组合

  • 就绪:进程在内存,准备执行。
  • 阻塞:进程在内存,等待事件。
  • 就绪/挂起:进程在外存,只要调入内存即可执行。
  • 阻塞/挂起:进程在外存,等待事件。

3)进程挂起状态的转换

  • Ready:活动就绪
  • Ready & Suspend:静止就绪
  • Blocked:活动阻塞
  • Blocked & Suspend:静止阻塞

程序段和数据段在外存就是静止。

2.2.4  进程管理中的数据结构

1. 进程控制块 PCB(process control block)

作用:是进程存在的唯一标志。

特点:常驻内存。

2. 进程控制块中的信息

不同 OS 中的 PCB 数据结构有所不同。

1)进程标识符

进程标识符用于唯一标识一个进程。一个进程通常有两种标识符:

① 内部标识符。为每一个进程赋予一个唯一的数字标识符。设置内部标识符主要是为了方便系统使用。

② 外部标识符。它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。

2)处理机状态

处理机状态信息主要是由处理机的各种寄存器中的内容组成:

① 通用寄存器

② 指令计数器

③ 程序状态字 PSW

④ 用户栈指针

3)进程调度信息

在 PCB 中还存放一些与进程调度和进程对换有关的信息,包括:

① 进程状态

② 进程优先级

③ 进程调度所需的其它信息

④ 事件,阻塞原因

4)进程控制信息

① 程序和数据的地址

② 进程同步和通信机制

③ 资源清单

④ 链接指针

3. PCB 的组织方式

1)线性方式

将系统中的所有 PCB 组织在一张线性表中,将该表的首址存放在内存的一个专用区域中。

2)链接方式

把具有相同状态进程的 PCB 分别通过 PCB 中的链接字链接成一个队列。这样,可以形成就绪队列、若干个阻塞队列和空白队列等。

/* 等待队列示例 */
struct wait_queue {struct task_struct * task;struct wait_queue * next;
};

3)索引方式

系统根据所有进程状态的不同,建立几张索引表。例如,就绪索引表、阻塞索引表等,并把各索引表在内存的首地址记录在内存的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个 PCB 在 PCB 表中的地址。

DJ2-1 进程管理相关推荐

  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. saxreader读取服务器xml文件,使用SAXReader从xml文件读取元素
  2. [architecture]-CPU(ARM)启动的第一条指令
  3. 四个角度教你评估一个产品的用户体验好坏 | PMCAFF
  4. 和我一起学《HTTP权威指南》——安全HTTP与HTTPS
  5. python 获取指定目录下的图片文件
  6. 在用 Eclipse 搭建 SAP Commerce Cloud 调试环境时,错误和正确的 buildfile
  7. 将 k8s 制作成 3D 射击游戏,好玩到停不下来 | 文末福利
  8. matlab遗传算法实例crtrp,遗传算法求解实例
  9. abb机器人建立工件坐标系_abb机器人坐标系说明介绍
  10. 什么是 Thrift(RPC)?一种接口描述语言和二进制通讯协议,用来定义和创建跨语言的服务
  11. 海南关于推荐扬尘监控系统的通知_实时监管!定州对44家混凝土搅拌企业实施远程视频监控...
  12. short s=1;s=s+1有问题吗?short s=1;s+=1;有问题吗?
  13. MYSQL查询重复记录的方法
  14. 编译asp.net 2.0项目到dll文件
  15. VS2010编写动态链接库DLL及单元测试用例,调用DLL测试正确性
  16. electron 屏幕标注_gInk:一款好用的屏幕标注写画软件
  17. 2018年注册测绘师考试详情解析
  18. 第五章-----Java数组及排序
  19. GMAC接口(1)——GMAC简介
  20. 计算机相关论文10000字,有关计算机毕业论文怎么写(10000字)

热门文章

  1. telnet测试136邮箱imap服务器
  2. Kali Linux渗透测试——WEB渗透(一)
  3. 攻读学位研究计划计算机专业,拟攻读博士学位的科学研究计划书模板
  4. GPL和MIT开源协议
  5. Spring2:bean的使用
  6. 用数据说话,看中国49个地方(省、市、高新区)集成电路产业实力情况
  7. python进程通信方式总结(一):管道与信号量
  8. 百度图片排名:SEO常用的5个技巧!
  9. 控制文件的备份与还原
  10. 为什么要进行傅立叶变换?如何用Matlab实现快速傅立叶变换?