• 第2章 进程的描述与控制


    进程的由来(1⭐)

    程序并发执行的特征(解释为何失去了封闭性)

    间断性

    程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,这些并发执行的程序之间形成了相互制约的关系。
    如图所示I、C、P是三个互相合作的程序。当计算程序Ci-1完成计算时,如果输入程序Ii尚未完成数据输入,,则计算程序Ci就无法进行数据处理,此时必须暂停执行。

    程序并发执行时的前驱图
    I4
    I3
    I2
    I1
    C4
    C3
    C2
    C1
    P4
    P3
    P2
    P1

    失去封闭性

    系统中存在多个可以并发执行的程序时,系统中的各种资源将为它们所共享,而这些资源的状态也会由这些程序来改变,致使其中任一程序在执行时,其执行环境必然会受到其他程序的影响。

    不可再现性

    程序并发时,失去封闭性会导致失去可再现性。

    例如程序A和B,共享变量N。

    // 程序A
    N = N +1;
    
    • 1
    • 2
    // 程序B
    printf("%d",N);
    N = 0;
    
    • 1
    • 2
    • 3

    执行种可能有几种结果

    1. A程序在B之前执行

      1. N = n+1

      2. 输出N = n+1

      3. N = 0

    2. B在A前

      1. 输出N = n

      2. N = 0

      3. N = 1

    3. N+1在printf和N=0之间执行

      1. 输出N = n

      2. N = n+1

      3. N = 0

    进程概念的由来

    多道程序环境下,程序的执行属于并发执行,因此它们会失去封闭性,并具有间断性和运行结果不可再现性。
    通常,程序是不能参与并发执行的,否则程序就失去了意义。
    为了使得程序可以并发执行,并且可以对并发执行的程序加以描述和控制,所以人们在OS中引入了“进程”这个概念。

    PCB

    Process Control Block

    系统利用进程控制块来描述进程的基本情况和活动过程,进而控制和管理进程,是进程存在的唯一标识

    进程的组成
    程序段
    进程实体
    相关的数据段(数据/结构集)
    PCB

    进程控制块信息

    PCB标识符
    进程名
    进程标识符
    标识符
    进程号
    用户名
    用户标识
    用户号
    父进程
    家族联系
    子进程

    进程的概念/描述(2⭐)

    进程的定义

    从不同的角度可以有不同的定义

    1. 进程是程序的一次执行。
    2. 进程是一个程序及其数据在处理机上顺序执行所发生的活动。
    3. 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位(最小单位)。

    引入进程的概念后,我们可以把传统OS中的进程定义为:
    进程是程序的执行过程,是系统进行资源分配调度的一个独立单位。

    进程的特征

    进程和程序是不同的概念,除了进程具有程序所没有的PCB结构外,还具有下面一些特征:

    动态性(最基本)

    进程的实质是程序的执行过程。
    进程有一定的生命期:进程由创建产生,由调度而执行,由撤销而消亡。

    并发性

    多个进程共存于内存中,且能在一段时间内同时执行。
    引入进程也正是为了使进程能和其他进程并发执行。
    没有建立PCB的程序是不能参与并发执行的。

    独立性

    进程是一个能够独立运行、独立获取资源、独立接收调度的基本单位。
    没有建立PCB的程序都不能作为一个独立的单位参与并发执行。

    异步性

    进程按各自独立的、不可预知的速度向前推进。

    总结:程序经过多次执行后,虽然多次执行时的环境和初始条件相同,但得到的结果却各不相同。

    进程的状态(3⭐)

    为什么要引入状态

    由于多个进程在并发执行时需要共享资源,它们会在执行过程中呈现间断性规律,因此,进程在其生命周期内可能具有多种状态。

    三大基本状态

    就绪(Ready)

    此时进程已分配到除CPU以外的所有必要资源,只要获得CPU后,便可立即执行
    如果系统中有多个就绪进程,通常它们按照一定的策略*(e.g. 优先级策略)排成队列,则该队列就成为就绪队列*。

    执行(Running)

    单处理系统中,只有一个进程处于执行状态。
    多处理机系统中,则可能会有多个进程处于执行状态。

    阻塞(Block)

    由于发生某事件*(e.g. I/O请求、申请缓冲区失败)暂时无法继续执行,即进程的执行收到了阻塞。
    此时会引发进程调度,OS会把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态(又称阻塞状态、等待状态或封锁状态)。
    通常系统会将阻塞状态的进程排成一个队列,则该队列就成为
    阻塞队列*。

    在较大的系统中,为了减少阻塞队列的操作开销,提高系统效率,则会设置多个阻塞队列。

    创建状态和终止状态

    为满足PCB对数据与操作的完整性要求和增强管理灵活性,则通常会引入这两种状态。

    创建状态

    进程进程一般要通过多个步骤才能完成

    1. 进程申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息。
    2. 为该进程分配运行时所需的资源。
    3. 把该进程状态转换为就绪状态,并将其插入到就绪队列中。

    如果进程所需的资源不足,此时进程将不能被调度运行,此时进程所处的状态称为创建状态(新建状态)。

    终止状态

    1. 等待OS善后处理。
    2. 将进程的PCB清零,并将PCB空间返还给OS。

    进程进入终止状态后,OS中依然会保留一个记录,保存状态码和一些计时统计数据以供其他进程收集。

    进程状态的转换(5⭐)

    进程的5种基本状态及转换关系
    进程的3种基本状态及转换关系
    许可
    I/O完成
    进程调度
    时间片完
    I/O请求
    释放
    创建
    就绪
    阻塞
    执行
    终止

    进程挂起(1⭐)

    挂起状态引入的原因

    终端用户的需要

    终端用户发现自己的程序在运行时有可疑问题,希望暂停程序运行,以便用户研究其执行情况或对其进行修改。

    父进程的需要

    父进程有时候需要考察和修改子进程,协调各子进程间的活动。

    负荷调节的需要

    实时系统工作负荷较重时,可能会影响到对实时任务的控制,系统可以将不重要的进程挂起,保证自身的运行正常。

    操作系统(OS)的需要

    OS有时需要挂起进程,以便检查进程运行过程中资源使用情况或进行记账。

    进程挂起状态图(3⭐)

    在这里插入图片描述

    实现进程通信的方式

    共享存储器

    相互通信的进程通过共享某些数据结构或存储区来进行通信,可分为

    1. 共享数据结构方式
      仅适用于传送相对较少的数据,通信效率低下,属于低级进程通信。
    2. 共享存储区方式
      属于高级进程通信。

    管道(共享文件)

    利用共享文件来实现进程间的通信。

    消息传递

    进程间的消息交换以消息或报文为单位,程序员利用一组通信**命令(原语)**来实现通信,可分为

    1. 直接通信方式
    2. 间接通信方式

    常用原语

    1. 创建、撤销原语
    2. 阻塞(Block)原语,由执行到阻塞状态。
    3. 唤醒(Wake Up)原语,由阻塞到运行状态。

    线程

    拥有资源所有权的称为进程,而调度的最小单位称为线程,或轻量级进程。

    进程是资源独立占有的单位。

  • 相关阅读:
    因为一次服务器卡顿,再来好好理解Spring事务传播
    快来组战队,赢iPhone啦!
    一生一芯14——chisel环境搭建
    【Spring】三级缓存
    猿创征文|HCIE-Security Day51:单包攻击防范与应用(附场景和配置)
    idea提交代码到gitee
    Pandas数据分析17——pandas数据清洗(缺失值、重复值处理)
    shiro之AccessControlFilter()
    测试C#调用Windows Media Player组件
    用于 syslog 收集的协议:TCP、UDP、RELP
  • 原文地址:https://blog.csdn.net/dongsizhuo/article/details/126925638