【Note】进程管理

第二章、进程管理

一、程序执行

程序是一组有序指令集合

顺序执行的特点:

  1. 顺序性
  2. 封闭性
  3. 可再现性

在这里插入图片描述

并发执行:

并发执行是为了增强计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术

特点:

  1. 间断性
  2. 失去封闭性
  3. 不可再现性

在这里插入图片描述

程序的并发执行总结为:一组在逻辑上互相独立的程序或程序段在执行过程中其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始的执行方式

二、进程

1、可再入程序

2、进程:

Progrom+DS ==> Process

程序段 + 数据集 = 新建一个进程

PCB为唯一标识符

进程定义: 可并发执行的程序在一个数据集上的一次执行过程是系统进行资源管理的基本单位。由进程控制块PCB唯一标识。

进程是一个动态的执行过程

进程的特点:

  1. 动态性
  2. 并发性
  3. 独立性
  4. 异步性
  5. 结构特征

不同程序产生不同数据,它们进程也不同

同一个程序产生不同的数据集,也可以是不同的进程

同一个程序段和数据集,在不同的时间也可能是不同的进程

3、生命周期

在一个进程的活动期间至少具备三种基本状态:就绪状态,运行状态,等待状态。有些操作系统中增加了两种基本状态:新状态和终止状态

在这里插入图片描述

新建进程必须需要完成的一个任务:

分配内存空间(分配程序段和数据集等所需的空间)

4、PCB(进程控制块)

每一个进程都有一个且只有一个PCB,进程控制块是操作系统用于记录和刻画进程状态及有关信息的数据结构,也是操作系统控制和管理进程的主要依据,它包括了进程执行时的情况,以及进程处理后所处的状态等。

进程控制块包含四类信息:

标识信息进行标识符
说明信息进程状态、等待原因、进程程序存放位置、进程数据存放位置
现场信息通用寄存器内容、控制寄存器内容、程序状态寄存器内容
管理信息进程优先数、队列指针

5、线程

比进程更小,能够独立运行的基本单元。

三、进程控制

为了防止操作系统及关键数据受到用户程序有意或无意的破坏,通常将处理器的运行状态分成核心态和用户态

1、核心态

核心态又称管态,它具有较高的特权,能执行一切指令,并返回所有寄存器和存储区

2、用户态

用户态,又称为目态。具有较低特权的运行状态,它只能执行规定的指令,访问指定的寄存器和存储器

在核心态下执行的某些具有特定功能的程序段称为原语,其特点是在执行期间不允许中断,是一个不可分割的基本单位。

一般用于进程控制的原语有:

  1. 进程创建
  2. 进程撤销
  3. 进程阻塞和唤醒
  4. 进程挂起与激活

四、进程并发执行

1、类型

无关/交往

2、与时间有关的错误:(对共享资源为加以限制)

由于并发进程执行的随机性,一个进程对另一个进程的影响是不可预测的。由于它们共享了资源,当在不同时刻交替访问资源时就可能造成结果的不正确。

五、临界区

1、定义

并发进程中与共享变量有关的程序段称为“临界区”。共享变量所代表的资源称为“临界资源”。多个并发进程中涉及相同共享变量的程序段称为“相关临界区”。

2、管理要求

  1. 互斥进入:一次最多让一个进程在临界区执行,当有进程在临界区执行时,其他想进入临界区执行的进程必须等待;(每个进程都要定义自己的临界区,且只能进入自己的临界区)
  2. 有限占有:任何一个进入临界区执行的进程必须在有限的时间内退出临界区,即任何一个进程都不应该无限期地逗留在临界区中。
  3. 有限等待:不能强迫一个进程无限期地等待进入它的临界区,即有进程退出临界区时,应让一个等待进入临界区的进程进入它的临界区。

六、PV机制

1、信号量

表示可用资源的数量

取值: { s = 0 : 当 前 实 际 可 用 资 源 用 完 s > 0 : 当 前 实 际 可 用 资 源 个 数 s < 0 : 有 ∣ s ∣ 个 进 程 请 求 资 源 , 正 在 等 待 \begin{cases} s=0 :当前实际可用资源用完 \\s>0: 当前实际可用资源个数\\ s<0:有|s|个进程请求资源,正在等待\end{cases} s=0:s>0:s<0:s

**注:**建立一个信号量必须说明此信号所代表的意义并且赋初值。除赋初值外,信号量仅能通过PV操作来访问。

2、信号量分类

  1. 公用信号量

    • 相关的进程均可在此信号上执行P操作和V操作

    • 初值常常为1,用于实现进程互斥

  2. 私有信号量

    • 仅允许拥有此信号量的进程执行P操作,而其他相关进程可在其上施行V操作
    • 初值常常为0或正整数
    • 多用于实现进程同步

**注:**用PV操作来管理共享资源,要先确保PV操作自身执行的正确性

3、P操作原语

申请访问共享资源

void p(Semaphore S){
	S = S - 1;
	if(S < 0)
		W(S);
}

在这里插入图片描述

3、V操作原语

归还申请成功的资源

void V(Semaphore S){
	S=S+1;
	if(S<=0){
		P(S);
	}
}

在这里插入图片描述

注:

  1. 采用一个互斥信号量一定能解决与时间有关的问题
  2. 采用多个信号量不一定能解决与时间有关的问题

七、进程同步

解决异步环境下进程的同步问题

def: 异步环境:相互独立合作的一组并非进程。其中每一个进程都以独立的不可预测的速度向前推进,但它们又需要密切合作,以实现一个共同的任务,即彼此“知道”相互的存在和作用。

在这里插入图片描述

PI:(输入进程)

  1. 输入原始数据
  2. 存入Buffer
    1. 向OS申请一个空位置
    2. 将数据存入这个空位置(Buffer)
  3. 通知PC可取出的原始数据增加了一个
    • 释放一个数据的位置给PC用
  4. 继续回到第(1)步

PC:

  1. 设法从内存缓冲区中的位置处取出原始数据
    1. 向OS申请一个存在原始数据的满的位置
    2. 从该满位置中取出数据
  2. 通知PI可使用的空位置数增加了一个
  3. 加工处理该数据
  4. 回到第(1)步

改造Buffer

这里其实使用的就是循环队列的数据结构

定义信号量S1= 容量

S1:PI可连续向Buffer中存入的原始data总个数

  1. 空位置数
  2. 总容量 = 1(初始)

S2: Pc可连续向Buffer中取出的原始data总

  1. 满位置数
  2. 初始为0
int B[k],i,j;
Semaphore S1,S2,S;

cobegin
    void PI();
	void Pc();
coend

void PI(){
	while(1){
        [输入一个原始数据];
        P(S1); //向OS中申请空位置
        P(S); //申请互斥信号量(访问权)
        Buffer = Data;
        i = (i+1)%k;
        V(S2);
        V(S); //将已存入d的Buffer变满的位置释放给Pc;
    }
}

void Pc(){
    while(1){
        P(S2);
        p(S); //刚开始申请不成功,等V(S2) wake up
        [get the data from Buffer];
        B[j];
        j = (j+1) % k;
        V(S);
        V(S1);
        [把原始数据加工成结果];
    }
}

P(X) { 1. 申 请 缓 冲 区 , 2. 申 请 缓 冲 区 使 用 权 \begin{cases} 1.申请缓冲区, \\ 2.申请缓冲区使用权\\ \end{cases} {1.,2.使
V(X)释放无先后顺序

总结:

  1. 对于一组并发进程,如果每个进程执行中既要访问互斥信号量又要访问同步信息号量时,则PV操作的顺序有具体要求。
  2. P操作顺序至关重要,必须先申请同步信号量,再申请互斥信号量,否则可能出现与时间有关的错误。
  3. V操作顺序无关紧要
  4. 用PV操作实现进程的同步时,P(本身信号量),V(释放给对方)

八、读者与写者问题

前提:有2组并发进程:读者和写者共享一个文件

要求

  1. 允许多个读者可同时对文件执行读操作
  2. 只允许一个写者往文件中写信息
  3. 任一个写者在完成写操作之前不允许其他读者或写者工作
  4. 写者执行写操作前,应让已有的写者和读者全部退出

主要操作

  1. 第一个读者与写者竞争w信号量,成功阻止写者工作
  2. 最后一个读者退出读操作时释放w信号量,从而唤醒等待中的写者工作

w:表示是否允许写的信号量

posted @ 2021-04-01 19:39  egospace  阅读(964)  评论(0)    收藏  举报