进程的描述与控制

前趋图和程序执行

  • 在早期未配置OS的系统和单道批处理系统中,程序的执行方式是顺序执行
  • 在多道程序系统中,由于内存中可以同时状如多个程序,使它们共享系统资源,并发执行

前趋图和程序执行

前趋图

  • 用于描述程序执行先后顺序
  • 前趋图是指一个有向无循环图,可记为DAG(Directed Acyclic Graph)
  • 图中的每个节点可用来表示一个进程或程序段,甚至一条语句,结点间的有向边则表示两个结点之间存在的偏序或前趋关系
  • 如果P1和P2之间存在前趋关系,可表示微P1->P2,表示在P2开始前P1必须完成,此时P1是P2的直接前趋,P2是P1的直接后继
  • 把没有前趋的结点称为初始结点,把没有后继的结点称为终止结点
  • 每个结点还具有一个重量(weight),用于表示该结点所含有的程序量或程序的执行时间
  • 前趋图中不允许有循环

程序顺序执行

*程序的顺序执行:在前趋结点执行完成后才能执行后继结点
*程序顺序执行时的特征:

**顺序性**:每一操作必须在下一个操作开始之前完成
**封闭性**:指程序在封闭的环境下运行,即程序运行时独占全机资源,资源的状态(初始状态除外),只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响
**可再现性**:指只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“走走停停”地执行,都可获得相同的结果

程序并发执行

  • 程序的并发执行
    • 不存在前趋关系之间的结点可以并发执行,如下图中的I3、C2和P1
  • 程序并发执行时的特征
    • 提高了系统吞吐量和资源利用率
    • 程序共享系统资源,致使在这些并发执行的程序之间必将形成相互制约的关系,从而带来了新的特征:
    • 间断性。程序在并发执行时,由于它们共享资源,以及为完成统一项任务而相互合作,致使在这些并发执行的程序之间形成了相互制约的关系。如上图中的I2和C1.相互制约将导致并发程序具有“执行—暂停—执行”这种间断性活动规律
    • 失去封闭性。当系统中存在着多个可以并发执行的程序时,系统中的各种资源将为它们所共享,而这些资源的状态也由这些程序来改变。致使其中任一程序在运行时,其环境都必然会受到其他程序的影响
    • 不可再现性。因不同的程序并发执行时的完成效率不一样,因此会导致结果不同。如两个程序共享同一个变量,分别对它作运算操作。效率不同结果也可能不一样

进程的描述

进程的定义和特征

  • 进程的定义
    • 为了使参与并发执行的每个程序(含数据)都能独立的运行,在操作系统中必须为之配置一个专门的数据结构,称之为进程控制块(PCB,Process Control Block)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。这样,由程序段、相关数据段和PCB三部分便构成了进程实体(又称为进程映像)。
    • 一般把进程实体简称为进程。
    • 所谓创建进程就是创建进程实体中的PCB;而撤销进程,实质上是撤销进程的PCB。
    1. 进程时程序的一次执行;
    2. 进程时一个程序及其数据在处理机上顺序执行时所发生的活动;
    3. 进程时具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
    进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
  • 进程的特征
    • 动态性:进程的实质是进程实体的执行过程,因此,动态性就是进程的最基本的特征。“进程由创建而产生,由调度而执行,由撤销而消亡”。进程有一定的生命周期,而程序只是一组有序指令的集合,并存放在某种介质上,其本身并不具有活动的含义,是静态的。
    • 并发性:指多个进程实体同存于内存中,且能在一段时间内同时运行。而程序(没有建立PCB)是不能参与并发执行的。
    • 独立性:指进程实体是一个能独立运行、独立获得资源和独立接收调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。
    • 异步性:指进程是按异步方式运行的,即按各自独立的、不可预见的速度向前推进,。因此传统意义上程序若参与并发执行,会产生其结果的不可再现性。为保证异步时进程并发执行的结果时可再现的,OS中引进了进程的概念,并且配置相应的进程同步机制。

进程的基本状态及转换

  • 进程的三种基本状态:
    • 就绪状态:指进程已处于准备好运行的状态,即进程已分配到除CPU以外的所有必要资源后,只要再获得CPU就可立即执行。如果系统中有许多处于就绪状态的进程,通常将它们按一定的策略(如优先级策略)排成一个队列,称该队列为就绪队列;
    • 执行状态:指进程已获得CPU,其程序正在执行的状态;
    • 阻塞状态:这是指正在执行的进程由于发生某事件暂时无法继续执行时的状态,亦即进程的执行受到阻塞。也称为等待状态或封锁状态。通常系统将处于阻塞状态的进程拍成一个阻塞队列。在实际开发中,为了减少队列操作的开销,提高系统效率,根据阻塞原因的不同,会设置多个阻塞队列。
  • 进程的三种基本状态及其转换
  • 创建状态和终止状态
    • 创建状态
      • 创建进程的步骤:首先由进程申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息,然后为该进程分配运行时所必须的资源,最后把该进程转入就绪状态并插入就绪队列之中
      • 引入创建状态是为了保证进程的调度必须在创建工作完成后进行,以确保对进程控制块操作的完整性。同时,创建状态的引入也增加了管理的灵活性,OS可以根据系统性能或主存容量的限制推迟新进程的提交(创建状态)。当处于创建状态的进程在获得了所需的资源以及对其PCB的初始化工作完成后,便可由创建状态转入就绪状态。
    • 终止状态
      • 进程的终止的步骤:首先等待操作系统进行善后处理,最后将其PCB清零,并将PCB空间返回系统。当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统终结,或是被其他有终止权的进程所终结,它将进入终止状态。进入终止态的进程以后不能再执行,但在操作系统中依然保留一个记录。其中保存状态码和一些计时统计数据,供其他进程收集。一旦其他进程完成了对其信息的提取之后,操作系统将删除该进程。即将其PCB清零,并将空白PCB返回给系统。

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

  • 挂起操作:当该操作作用于某个进程时,该进程将被挂起,意味着此时该进程处于静止状态。如果进程正在执行,它将暂停执行。若原本处于就绪状态,则该进程此时暂不接受调度,与挂起操作对应的时激活操作
  • 挂起操作引入的原因
    • 终端用户的需要
    • 父进程请求
    • 负荷调节的需要
    • 操作系统的需要
  • 引入挂起原语操作后三个进程状态的转换
    • 活动就绪->静止就绪
    • 活动阻塞->静止阻塞
    • 静止就绪->活动就绪
    • 静止阻塞->活动阻塞
  • 引入挂起操作后五个进程状态的转换
    • NULL->创建
    • 创建->活动就绪
    • 创建->静止就绪
    • 执行->终止

进程管理中的数据结构

  • 操作系统中用于管理控制的数据结构
    • OS管理的这些数据结构一般分为以下四类:内存表、设备表、文件表和用于进程管理的进程表,通常进程表又被称为进程控制块PCB
  • 进程控制块PCB的作用
    • PCB作为进程实体的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构
    • 是独立运行基本单位的标志。系统是通过PCB感知进程的存在的,事实上,PCB已成为进程存在于系统中的唯一标志。
    • 能实现间断性运行方式。当进程因阻塞而暂停运行时,系统将CPU现场信息保存在被中断进程的PCB中,供该进程再次被调用执行时恢复CPU现场时使用。
    • 提供进程管理所需要的信息。当调度程序调度到某进程运行时,只能根据该进程PCB中记录的程序和数据在内或外存中的始址指针,找到相应的程序和数据;在进程运行过程中,当需要访问文件系统中的文件或I/O设备时,也都需要借助于PCB中的信息。还可根据PCB中的资源清单了解到该进程所需的全部资源等。
    • 提供进程调度所需要的信息。只有处于就绪状态的进程才能被调度执行,而在PCB中就提供了进程处于何种状态的信息。
    • 实现与其他进程的同步与通信。进程同步机制是用于实现诸进程的协调运行的。在采用信号量机制时,它要求在每个进程中都设置有相应的用于同步的信号量。在PCB中还具有用于实现进程通信的区域或通信队列指针等。
  • 进程控制块中的信息
    • 进程标识符:外部标识符,方滨阿用户对进程的访问;内部标识符,方便系统对进程的使用。
    • 处理机状态:处理机状态信息也称为处理机的上下文,主要是由处理机的各种寄存器中的内容组成。这些寄存器包括:通用寄存器(用户可视寄存器),用于暂存信息;指令计数器,存放了要访问的下一条指令的地址;程序状态字PSW,其中含有状态信息,如条件码、执行方式、中断屏蔽标志等;用户栈指针,用于存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶,处理机处于处于执行状态时,正在处理的许多信息都是放在寄存器中,当进程被切换时,处理机状态信息都必须保存在相应的PCB中,以便在该进程重新执行时能再从断电继续执行。
  • 进程调度信息
    • 在OS进行调度时,必须了解进程的状态及有关进程调度的信息,这些信息包括:
    • 进程状态,指明进程 当前的状态,它是作为进程调度和对换时的依据;
    • 进程优先级,是用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机;
    • 进程调度所需的其他信息具体与所采用的进程调度算法有关;
    • 事件,是指进程由执行状态转变为阻塞状态所等待发生的事件,即阻塞原因
  • 进程控制信息
    • 指用于进程控制所必须的信息:
    • 程序和数据的地址,进程实体中的程序和数据的内存或外存地(首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据;
    • 进程同步和通信机制,这是实现进程同步和进程通信时必需的机制,如消息队列指针、信号量等,它们可能全部或部分地放在PCB中;
    • 资源清单,列出了进程在运行期间所需的全部资源(CPU)除外,另外还有一张已分配到该进程的资源的清单;
    • 链接指针,它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址
  • 进程控制块的组织方式
    • 线性方式,即将系统中所有的PCB都组织在一张线性表中,将该表的首址存放在内存的一个专用区域中。该方式实现简单、开销小,但每次查找时都需要扫描整张表,因此时和进程数目不多的系统;
    • 链接方式,即把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列。
    • 索引方式,即系统根据所有进程状态的不同,建立几张索引表,如就绪索引表、阻塞索引表等,并把各索引表在内存的首地址记录在内的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个PCB在PCB表中的地址。

进程控制

  • 进程控制时进程管理中最基本的功能,主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。

操作系统内核

  • 为了保护一些软件防止遭受其他应用程序的破坏和提高OS运行效率,通常将一些与硬件紧密相关的模块和各种常用设备的驱动程序以及运行频率较高的模块都安排在紧靠硬件的软件层次中,将它们常驻内存,即通常被称为的OS内核。
  • 为了防止OS本身及关键数据(如PCB等)遭受到应用程序的破坏,通常将处理机的执行状态分为系统态和用户态两种:
    • 系统态,又称为管态或内核态。它具有较高的特权,能执行一切指令,访问所有寄存器和存储区,传统的OS都在系统态运行;
    • 用户态:又称为目态,它是由具有较低特权的执行状态,仅能执行规定的指令,访问制定的寄存器和存储区。
  • 不同的OS的内核所包含的功能间存在着一定的差异,但大多数OS内核都包含了以下两大方面的功能:
    • 支撑功能。包括中断处理、时钟管理、原语操作等
      • 中断处理:内核最基本的功能,时整个操作系统赖以活动的基础。
      • 时钟管理:如在时间片轮转调度中,每当时间片用完时,便由时钟管理产生一个中断信号,促使调度程序重新进行调度。同样,在实时系统中的截止时间控制、批处理系统中的最长运行时间控制等,也无不依赖于时钟管理功能。
      • 原语操作:原语就指由若干条指令组成的,用于完成一定功能的一个过程。它与一般过程的区别在于:它们时“原子操作(要么全做,要么全不做)”。它是一个不可分割的基本单位。原语在执行过程中不允许被中断。原子操作在系统态下执行,常驻内存。如用于对链表进行操作的原语、用于实现进程同步的原语等。
    • 资源管理功能
      • 进程管理。由于各个功能的运行频率较高,如进程的调度与分派、进程的创建与撤销等;或者由于它们为多种功能模块所需要,如用于实现进程同步的原语、常用的进程通信原语等。通常将它们放在内核中,提高OS的性能。
      • 存储器管理。存储器管理软件的运行频率也比较高,如地址转换机构、内存管理模块等。通常也放在内核中,以保证存储器管理具有较高的运行速度。
      • 设备管理。由于设备管理与硬件(设备)紧密相关,因此其中很大部分也都设置在内核中。如驱动程序、缓冲管理、设备管理模块等。

进程的创建

  • 进程的层次结构
    • 把创建进程的进程称为父进程,子进程可以继承父进程所拥有的资源。
    • 进程图:用来描述进程的家族关系。把树的根结点作为进程家族的祖先
    • 引起创建进程的事件
      • 用户请求
      • 作业调度
      • 提供服务
      • 应用请求
    • 进程的创建
      • 1.申请空白PCB;
      • 2.为新进程分配其运行所需的资源;
      • 3.初始化进程控制块(PCB);
      • 4.如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列

进程的终止

  • 引起进程终止的事件
    • 正常结束,进程的任务完成,正常推出;
    • 异常结束,异常中断,如越界错、保护错、非法指令、特权指令错、运行超、等待超时、算术运算错、I/O故障
    • 外界干预,如操作员或操作系统干预、父进程请求、因父进程终止
  • 进程的阻塞与唤醒
    • 引起进程阻塞和唤醒的事件
      • 向系统请求共享资源失败
      • 等待某种操作的完成
      • 新书局尚未到达
      • 等待新任务的到达
    • 进程阻塞过程:正在执行的进程,如果发生了上述事件,进程便通过调用阻塞原语block将自己阻塞。进入block过程后,由于该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。
    • 进程唤醒过程
    • 当被阻塞进程所期待的事件发生时,则由有关进程调用唤醒原语wakeup,将等待该事件的进程唤醒。wakeup的过程时:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中
    • block原语和wakeup原语是一对作用刚好相反的原语,在使用时必须成对使用
  • 进程的挂起与激活
    • 进程的挂起,当系统中出现了引起进程挂起的事件时,OS将利用挂起原语suspend将制定进程或处于阻塞状态的进程挂起。过程:首先检查被挂起进程的状态,若处于活动就绪状态,便将其改为静止就绪;对于活动阻塞状态的进程,则将之改为静止阻塞;为了方便用户或父进程考查该进程的运行情况,而把该进程的PCB复制到某指定的内存区域;最后,若被挂起的进程正在执行,则转向调度程序重新调度;
    • 进程的激活过程,当系统中发生激活进程的事件时,OS将利用激活原语active,将指定进程激活。激活原语先将进程从外存调入内存,检查该进程的现行状态,若是静止就绪,便将之改为活动就绪;若为静止阻塞,便将之改为活动阻塞。假如采用的是抢占调度策略,且将被激活的进程的优先级高于当前正在运行的进程,则立即剥夺当前进程的运行,把处理机分配给刚被激活的进程

进程同步

  • 包括硬件同步机制、信号量机制、管程机制等

进程同步的基本概念

  • 进程同步机制的主要任务是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时时序)共享系统资源,并能很好地相互合作,从而使程序的执行具有可再现性
  • 两种形式的制约关系
    • 简介相互制约关系(资源共享)
    • 直接相互制约关系(相互合作)
  • 临界资源
    • 生产者—消费者(P—C)问题:为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n各缓冲区的缓冲池,生产者进程将其所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中趋走产品去消费,尽管所有的生产者进程和消费者进程都是以异步方式运行的,但它们之间必须保持同步,既不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个已装满产品且尚未被取走的缓冲区投放产品。
  • 临界区
    • 把每个进程中访问临界资源的那段代码称为临界区
    • 必须在临界区前面增加一段用于进行上述检查的代码,把这段代码称为进入区。相应地,在临界区后面也要加上一段称为退出区的代码,用于将临界区正被访问的标志恢复为未被访问的标志。
  • 同步机制应遵循的规则
    • 空闲让进
    • 忙则等待
    • 优先等待
    • 让权等待
  • 硬件同步机制
    • 关中断
    • 利用Test-and-Set指令实现互斥
    • 利用Swap指令实现进程互斥
  • 信号量机制
    • 整型信号量:把整型信号量定义为一个用于表示资源数目的整型量S,它与一般整型量不同,除初始化外,仅能通过两个标准的原子操作wait(S)和signal(S)来访问。这两个操作分别被称为P、V操作。可描述如下:
       
      //进入区
      wait(S){
      while(S<=0);
      S--;
      }
      //退出区
      signal(S){
      S++;
      }
    • 记录型信号量
      • 在信号量机制中,除了需要一个用于代表资源数目的整型变量value外,再增加一个进程链表指针list,用于链接所有等待进程
    • AND型信号量
      • 一个进程需要获得两个或更多的共享资源后才能执行其任务时,AND同步机制的基本思想时:将进程再整个运行过程中需要的所有资源,一次性全部分配给进程,待进程使用完后再一起释放(要么全部分配,要么全都不分配)
        *信号量集
      • 有些情况下,为确保系统的安全性,当所申请的资源数量低于某一下限值时,还必须进行管制,不予以分配。
      • “信号量集”还有下面集中特殊情况:
        • Swait(S,d,d),此时再信号量集中只有一个信号量S,但允许它每次申请d个资源,当现有资源数少于d时,不予以分配;
        • Swait(S,1,1),此时的信号量集已蜕化为一般的记录型信号量(S>1时)或互斥信号量(S=1时)
        • Swait(S,1,0),当S>=1时,允许多个进程进入某特定区:当S变为0后,将组织任何进程进入特定区。相当于是一个可控开关。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值