-进程

Posted 吹灭读书灯 一身都是月

tags:

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

文章中的GoodNotes截图来源于我的学姐🥰

第二章 进程的描述与控制

2.1 前趋图和程序执行

  1. 前驱图3

    定义:前趋图是一个有向无环图(DAG),用于描述进程之间执行的前后关系,其实就是一个拓扑排序。(前驱图中禁止循环)

    不存在前驱关系的程序之间才能并发执行

  2. 程序的顺序执行及其特性

    程序是指令(或语句)的集合,指令之间是顺序关系

    三个特点:

    • 顺序性
    • 封闭性(程序一旦开始执行,其计算结果不受外界因素的影响)
    • 可在现性(程序执行的结果与它的执行速度无关(即与时间无关),而只与初始条件有关)
  3. 程序的并发执行及其特征

上图中可以抽象出四个程序,列出其前趋图,发现S1和S2互不干扰(没有前驱关系),可以并发执行。

2.2 进程的描述

2.2.1进程的定义和特征

1、定义

  • 进程:在一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位,是可并发执行的程序在一个数据集合上的运行过程。
  • 进程的结构: 程序+数据+PCB

进程控制块(Processing Control Block)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统可以利用PCB来控制和管理进程,所以说,PCB是系统感知进程存在的唯一标志。

2、特性

  • 动态性 可动态地创建、结束进程,进程由创建而产生,由调度而执行,有撤销而消亡。
  • 并发性 多个进程实体同存于内存中,且能在一段时间内同时运行。
  • 独立性 独立运行
  • 制约性(异步性) 因访问共享数据/资源或进程间同步而产生制约,按各自独立的、不可预知的速度向前推进

进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。

引入进程的目的:使多个程序能并法执行,提高资源利用率和系统吞吐量

2.2.2进程的基本状态转换

1、进程的三种基本状态

(1)就绪状态(Ready)

进程已获得除CPU之外的所有必需的资源,一旦得到CPU控制权,立即可以运行。

(2)运行状态(Running)

进程已获得运行所必需的资源,它正在处理机上执行。

(3)阻塞状态(Blocked)

正在执行的进程由于发生某事件(如等待I/O)而暂时无法执行时,便放弃处理机CPU而处于暂停状态,称该进程处于阻塞状态或等待状态。

2、创建状态和终止状态

  • 创建态
    进程正在被创建,操作系统为该进程分配系统资源、初始化PCB。
  • 终止态
    进程正在被撤销,操作系统会回收该进程拥有的系统资源、撤销PCB。

3、挂起状态

挂起进程即把进程放在外存中。

原因:

  1. 终端用户的请求
  2. 父进程请求挂起子进程
  3. 负荷调节
  4. 操作系统需要

2.2.3 进程控制块(Process Control Block)

1、作用

包含进程的当前情况以及控制进程运行的全部信息。【常驻内存】

2、进程控制块中的信息

3、进程控制块的组织方式

2.3 进程控制

是进程管理中最基本的功能,包括:

  1. 创建一个进程

  2. 终止一个进程

  3. 进程运行中的状态转换

    由OS内核—操作系统内核实现

    问:什么是处理机的内核模式?

    内核:把常用的或与硬件关联度高的模块打包放到离硬件进的地方,常驻内存,提高效率。OS的内核运行在处理机的内核模式下,并在该模式下提供所有OS应具备的功能。

    一般OS内核的功能:

    • 支撑功能(底层):中断处理,时钟管理,原语操作
    • 资源管理功能:进程管理,存储管理,设备操作
  • 目态(用户态),具有低特权,仅能执行规定的指令,仅可访问规定寄存器和内存【应用程序在目态下执行】
  • 管态(系统态|内核态),具有高特权,能执行一切指令,可访问所有寄存器和内存【OS在管态下执行】

2.3.1 进程的创建

1、引起进程创建的事件

2、进程的创建

2.3.2 进程的终止

  • 正常结束:批处理最后的Halt指令、分时的logs off 等
  • 异常结束:越界错误、非法指令等
  • 外界干预:操作员或操作系统干预、父进程请求、父进程终止

2.3.3 进程的阻塞与唤醒

1、引起阻塞的事件

  • 向系统请求共享资源失败
  • 等待某种操作的完成,如I/O
  • 新数据尚未到达
  • 等待新任务的到达

进程用阻塞原语block()将自己阻塞,是进程自身的主动行为

2、进程的阻塞过程

3、进程的唤醒过程

由有关进程调用唤醒原语wakeup()(阻塞进程不能唤醒自己)

唤醒:进程状态由阻塞 —> 就绪;

  • 被阻塞的进程所期待的事件出现时,如I/O完成或者其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。

  • 唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

父子进程哪些共享,哪些私有?

  1. 父子进程各自分支中的程序私有,创建前和分支结束后为父子进程共享
  2. 如果子进程在其分支结束处使用exit()进程终止执行,则不会共享分支结束后的程序段
  3. 在各自的if中属于各自进程

2.4 进程同步

2.4.1 进程同步的基本概念

1、进程同步:在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。

(1)间接制约:互斥关系,排他性地对独占性资源的访问

(2)直接制约:同步关系,多个进程的执行有先后顺序的限制

2、 临界区

  • 临界资源:一段时间内只允许一个进程访问的资源称为临界资源或独占资源。

  • 临界区(critical section):每个进程中访问临界资源的那段代码称为临界区,每次只允许一个进程进入临界区,进入后,不允许其他进程进入。

  • 进入区(entry section):用于进入临界区前检查临界区是否已经被访问。

  • 退出区(exit section):将临界区正在被访问的标志恢复成未被访问。

  • 剩余区(remainder section):进程中其他部分称为剩余区。

3、同步机制应遵循的原则

  • 空闲让进:没有进程在临界区时,任何进程可进入
  • 忙则等待:有进程在临界区时,其他进程均不能进入临界区
  • 有限等待:等待进入临界区的进程不能无限期等待
  • 让权等待:不能进入临界区的进程,应释放CPU(如转换到阻塞状态)

2.4.2 硬件同步机制

  1. 关中断

    在进入锁测试之前关闭终端,直到完成锁测试并上锁之后才能打开中断

  2. Test-and-Set指令(TS:读后置1)实现互斥

    lock表示临界资源的锁,当lockfalse时表示资源是空闲的

  1. Swap指令(i386:XCHG指令实现)

硬件指令缺点

当临界资源忙碌时,其他访问进程必须不断进行测试,处于**“忙等”**,一直做空循环

2.4.3 信号量机制

1、整形信号量

自旋锁这个概念是相对于互斥锁而言的。对于自旋锁,当一个进程不能得到锁资源时,并不会放弃CPU而进入阻塞状态,而是不断地在那里进行循环检测,因此称它为自旋锁。

无忙等待锁的基本思想和自旋锁是一样的,只是一旦进程不能进入临界区,则将它加入等待队列,并且进入阻塞状态。在一个进程释放了锁资源后,再挑选等待队列中的一个阻塞进程,并将它唤醒。

S整形量表示资源数量;

wait(S)signal必须成对出现,缺少则资源用不释放

wait  //P操作用来申请资源
	while(S <= 0);   //没有资源的话做空循环:“忙等”
	S--;

signal //V操作用来释放资源
	S++;

PV操作既能用来解决进程互斥问题,又能用于解决同步问题:

P:用于测试自己进程所需的信息是否到达;

V:用于进程向其他进程发送信息;

  • 二元信号量:互斥变量,处值为1;
  • 一元信号量:同步,处值为共享资源初始数量

2、记录型信号量

3、AND型信号量

即将需要的所有资源全部分配给进程

4、信号量集

问题:

  1. 一次所需的N类资源时,执行N次wait操作低效
  2. 当资源数量低于某一下限时,不予分配

2.5 经典的进程同步问题

2.5.1 生产者-消费者问题

2.5.2 总结

2.5.2 哲学家进餐问题

桌上的筷子是临界资源,每人间有1只筷子;

3种解决办法:

  1. 至多只允许有四位哲学家同时去拿左边的筷子。

  2. 仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。(AND信号量)

  3. 规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子;而偶数号哲学家则相反。

2.5.3 读者-写者问题

“读者优先”,即一旦有读者正在读数据,允许多个读者同时进入读数据,只有当全部读者退出,才允许写者进入写数据。
“写者优先”,即当一个写进程想进行写操作时,已在等待的读者以及后续的读者必须等写操作完成后,才能进行读操作。

2.6 进程通信

分类:

  1. 低级通信:交换信息量少。通信由程序员完成,用PV原语实现进程的互斥、同步

  2. 高级通信:信息量大。系统提供高效、简捷的信息传输命令

    • 共享存储器系统:①共享数据结构 由程序员完成,效率低,量少

      ​ ②共享存储区 进程可随时间系统请求一块存储区

    • 管道通信

    • 消息、传递系统:直接通信和间接通信

    • 客户机—服务器系统

2.7 线程

一、线程的引入

为了支持进程内多道程序而设计

二、线程的状态

①执行状态 ②就绪状态 ③阻塞状态

三、线程和进程的比较

  1. 线程作为调度的基本单位,开销更小
  2. 并发性:一个进程的多个线程可以并发;不同进程的线程也可以并发
  3. 拥有资源:线程基本上无系统资源,只有一点必不可少的、保证独立运行的资源
  4. 独立性:在同一进程中的不同线程之间的独立性比不同进程之间的独立性低
  5. 系统开销低
  6. 线程能支持多处理机系统

四、多线程中的进程

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

如何清理僵尸进程(转载)

多任务编程 -- 孤儿进程和僵尸进程

多任务编程 -- 孤儿进程和僵尸进程

孤儿进程僵尸进程及其回收

孤儿进程僵尸进程及其回收

孤儿进程和僵尸进程