DJ2-1 进程管理

目录

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),用于描述进程之间执行的先后顺序。

DJ2-1 进程管理_第1张图片

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

1. 程序的顺序执行

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

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

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

DJ2-1 进程管理_第2张图片

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

1)顺序性:处理机的操作严格按照程序所规定的顺序执行。

2)封闭性:程序运行时独占全机资源,程序一旦开始执行,其执行结果不受外界因素影响。

3)可再现性:只要程序执行时的环境和初始条件相同,都将获得相同的结果。

(不论它是从头到尾不停顿地执行,还是 “走走停停” 地执行。)

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

1. 程序的并发执行

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

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

DJ2-1 进程管理_第3张图片

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

1)间断性:由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间,形成了相互制约的关系。相互制约将导致并发程序具有 “执行——暂停——执行” 这种间断性的活动规律。

2)失去封闭性:多个程序共享系统中的各种资源,即这些资源的状态将由多个程序来改变,致使程序的运行失去封闭性。

3)不可再现性:程序在并发执行时,由于失去了封闭性,导致不可再现性 。

举例

有两个循环程序 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. 进程的三种基本状态

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

DJ2-1 进程管理_第4张图片

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

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

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

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

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

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

DJ2-1 进程管理_第5张图片

2. 进程的五种基本状态

DJ2-1 进程管理_第6张图片

1)Ready:准备执行。

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

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

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

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

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

阻塞队列

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

DJ2-1 进程管理_第7张图片

3. 进程的状态转换

处理机就是 CPU 。

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

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

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

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

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

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

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

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

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

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

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

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

DJ2-1 进程管理_第8张图片

解决方法:

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

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

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

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

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

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

1. 进程的挂起状态

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

1)引入挂起状态的原因

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

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

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

2)被挂起进程的特征

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

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

区分:挂起与阻塞。

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

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

4 种状态组合

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

3)进程挂起状态的转换

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

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

DJ2-1 进程管理_第9张图片

2.2.4  进程管理中的数据结构

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

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

特点:常驻内存。

2. 进程控制块中的信息

DJ2-1 进程管理_第10张图片

不同 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 进程管理_第11张图片

你可能感兴趣的:(计算机操作系统,学习,网络,计算机操作系统)