操作系统教程Linux实例分析孟庆昌第2章进程.ppt
《操作系统教程Linux实例分析孟庆昌第2章进程.ppt》由会员分享,可在线阅读,更多相关《操作系统教程Linux实例分析孟庆昌第2章进程.ppt(167页珍藏版)》请在三一办公上搜索。
1、第2章 进程管理,2.1 进程概念 2.2 线程 2.3 进程管理 2.4 进程间通信 2.5 经典进程同步问题 2.6 管程 2.7 进程通信 2.8 Linux进程管理 习题,2.1 进 程 概 念,2.1.1 程序的顺序执行 顺序程序活动有三个主要特点:(1)程序所规定的动作在机器上严格地按顺序执行。(2)只有程序本身的动作才能改变程序的运行环境。(3)程序的执行结果与程序运行的速度无关。,图2-1列出了几个典型的顺序程序的示意图。其中图(a)最简单,一条条指令顺次做下去;图(b)表示程序代码中出现循环的情况;图(c)表示A程序在执行过程中调用B程序,B运行完,返回A,继续执行A的情况。
2、,图2-1 顺序程序示意图,2.1.2 程序的并发执行和资源共享 多道程序 设计是指两个或更多个程序同时在系统中存在并且运行。这时的工作环境与单道程序(仅一个)的运行条件相比,大不相同。首先,每个用户程序都需要一定的资源,如内存、设备、CPU时间等,因此系统中的软、硬件资源不再是单个程序独占,而是由几道程序所共享。这样,共享资源的状态就由多道程序的活动共同决定,从而打破了单道程序“闭关自守”的局面。,图2-2 非多道技术下作业执行过程,采用多道程序技术来执行同样的作业A和B,就能大大改进系统性能,如图2-3所示。作业A先运行,它运行一秒后等待输入,此时让B运行;B运行一秒后等待输入,此时恰好A
3、输入完,可以运行了就这样在CPU上交替地运行A和B。在这种理想的情况下,CPU不空转,其使用率升至百分之百,并且吞吐量也随之增加了。,图2-3 多道技术下作业执行过程,2.1.3 程序并发执行的特性 资源共享和程序的并发执行使得系统的工作情况变得非常复杂,带来一系列新的问题,特别表现在各种程序活动的相互依赖和制约关系方面。我们分析一下图2-4中几个程序并发执行的情况。,图2-4 并发程序的执行(a)并发执行的程序;(b)并发程序的关系;(c)有制约关系的并发程序,通过上述三个例子的分析,可以得出并发程序的三个主要特征:(1)没有封闭性。有共享公共变量时,其执行结果不可再现,就是说,结果与相关的
4、并发程序的相对速度有关。(2)程序与计算不再一一对应。“程序”是指令的有序集合,是“静态”的概念。(3)并发程序在执行期间可以互相制约。,2.1.4 进程概念的引入和描述“进程”是操作系统的最基本、最重要的概念之一。引进这个概念对于理解、描述和设计操作系统都具有极其重要的意义。但是迄今为止,对这个概念还没有形成统一的定义,都是从不同的角度来描述它的各个基本特征。下面列举出比较能反映进程实质的几种定义:,(1)进程(或任务)是可以和别的计算并发执行的计算。(2)进程是程序的一次执行,是在给定内存区域中的一组指令序列的执行过程。(3)所谓进程,简单说来就是一个程序在给定活动空间和初始条件下,在一个
5、处理机上的执行过程。(4)进程可定义为一个数据结构和能在其上进行操作的一个程序。(5)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。,进程和程序是两个不同的概念,但又有密切的联系。它们之间的主要区别是:(1)程序是静态概念,本身可以作为一种软件资源长期保存着;而进程则是程序的一次执行过程,它是动态概念,有一定的生命期,是动态地产生和消亡的。,(2)进程是一个能独立运行的单位,能与其他进程并发执行,进程是作为资源申请和调度单位存在的;而通常的程序段是不能作为一个独立运行的单位的。(3)程序和进程无一一对应关系。一个程序可由多个进程共用;另一方面,一个进程在其活动
6、中又可顺序地执行若干个程序。,(4)各个进程在并发执行过程中会产生相互制约关系,造成各自前进速度的不可预测性。而程序本身是静态的,不存在这种异步特征。表2-1列出了进程和程序之间的主要区别。,表2-1 进程和程序的对比,2.1.5 进程的状态及其变迁 进程是一个程序的执行过程,有着走走停停的活动规律。进程的动态性质是由其状态变化决定的。如果一个事物始终处于一种状态,那么它就不再是活动的,就没有生命力了。通常在操作系统中,进程至少要有三种基本状态,这些状态是处理机挑选进程运行的主要因素,所以又称之为进程控制状态。这三种基本状态是:运行态、就绪态和阻塞态(或等待态)。如图2-5所示。,图2-5 进
7、程状态及其变化,在很多操作系统中,又添加了两种基本状态:创建态和终止态。创建态是指新进程正被创建时的状态,当创建工作完成后它就进入到就绪态。终止态是指进程正常或非正常终止时所处的状态,它的必然结局是从系统中消失。上述五种进程状态及其变迁情况如图2-6所示。,图2-6 进程的五种基本状态,2.1.6 进程的组成 进程的活动是通过在CPU上执行一系列程序和对相应数据进行操作来体现的,因此程序和它操作的数据是进程存在的实体。但这二者仅是静态的文本,没有反映出其动态特性。为此,还需要有一个数据结构,用来描述进程当前的状态、本身的特性等。这种数据结构被称为进程控制块(PCB,Process Contro
8、l Block)。,程序往往由一系列函数组成。执行函数调用时要保存好调用者的现场信息,以便被调函数完成后能恢复调用者的运行环境。这一系列现场信息要保存在堆栈中,按“后进先出”方式管理。为此,系统要为每个进程设立一个或多个栈。所以进程通常都由程序、栈、数据集合和PCB这四部分组成。图2-7示出进程的物理结构。,图2-7 进程组成,2.1.7 进程控制块 进程控制块有时也称为进程描述块(Process Descriptor),它是进程映像中最关键的部分,其中含有进程的描述信息和控制信息,是进程动态特性的集中反映,它是系统对进程施行识别和控制的依据。在不同的系统中,PCB的具体组成成分是不同的,在简
9、单操作系统中它较小;而在大型操作系统中它很复杂,设有很多信息项。一般来说,进程控制块应包括如下内容,如图2-8所示。,图2-8 PCB构成,(1)进程名。它是惟一标志对应进程的一个标志符或数字。(2)特征信息。它包括是系统进程还是用户进程,进程映像是否常驻内存等。(3)进程状态信息。它表明该进程的执行状态,是运行态、就绪态还是阻塞态。(4)调度优先权。这表示进程获取CPU的优先级别。,(5)通信信息。它反映该进程与哪些进程有什么样的通信关系,如等待哪个进程的信号等。(6)现场保护区。当对应进程由于某个原因放弃使用CPU时,需要把它的一部分与运行环境有关的信息保存起来,以便在重新获得CPU后能恢
10、复正常运行。,(7)资源需求、分配和控制方面的信息。如进程所需要或占有的IO设备、磁盘空间、数据区等。(8)进程映像信息。指出该进程的程序和数据的存储情况,在内存或外存的地址、大小等。(9)族系关系。它反映父子进程的隶属关系。(10)其他信息。如文件信息、工作单元等。,2.1.8 PCB的组织方式 1.线性表方式 如图2-9所示,线性表的方式简单,最容易实现。操作系统预先确定整个系统中同时存在的进程最大数目,比如是n,静态分配空间,把所有的PCB都放在这个表中。,图2-9 PCB线性表,2.链接表方式 链接表方式是经常采用的方式。其原理是:按照进程的不同状态分别放在不同的队列中,如图2-10所
11、示。,图2-10 PCB链接表,3.索引表方式 索引表方式是利用索引表记载各种状态进程的PCB地址,如就绪索引表中的表项指向就绪进程PCB的指针,而阻塞表中的表项指向阻塞进程PCB的指针。各索引表的起始地址放在专用的指针单元中,运行进程的PCB由一个专用的运行指针指向。图2-11示出PCB索引表方式。,图2-11 PCB索引表,2.2 线 程,2.2.1 线程概念 1.线程 线程 是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。如果把进程理解为在逻辑上操作系统所完成的任务,那么线程表示完成该任务的许多可能的子任务之一。,2.Thread结构 每个线程有一个Thread结构,用于保存与
12、线程有关的信息,主要由以下几个基本部分组成:(1)一个惟一的线程标识符。(2)描述处理器状态的一组状态寄存器的内容,用于调度。(3)每个Thread结构有两个堆栈指针:一个指向核心堆栈,一个指向用户堆栈。(4)一个私有存储区,存放现场保护信息及其他各种统计信息等。,图2-12 Thread结构,3.带线程的进程模型 一个进程可以包含一个或者多个线程,但至少要有一个线程。在传统的进程中就只有一个线程。当一个进程包含多个线程时,各线程除自己有少量私有资源(如程序计数器、寄存器和堆栈)外,要共享所属进程的全部资源(如程序代码、数据和文件等)。图2-13示出单线程和多线程的进程模型。,图2-13 单线
13、程式和多线程式的进程,4.进程与线程的关系 从以上介绍中可以看出,进程和它的线程有如下关系:(1)一个进程可以有多个线程,但至少要有一个线程。(2)进程是资源的拥有者,是分配资源的独立单位;而线程一般不拥有系统资源(仅有一点必不可少的资源),同一进程的所有线程共享该进程的全部资源。(3)在支持线程的操作系统中,线程是调度和分派的基本单位。,(4)进程可以并发执行。(5)线程在执行过程中往往需要协作同步。(6)在实施创建、撤消和切换等操作时,进程的开销远大于线程的开销。(7)线程和进程一样,都是动态实体,具有不同的状态,如运行态、就绪态、阻塞态和终止态等。,2.2.2 线程的实现方式 1.用户级
14、线程 在这种方式下,整个管理线程的线程库放在用户空间,对线程从创建到撤消的全部管理工作都由应用程序完成。核心对线程一无所知,只对常规进程实施管理。图2-14(a)示出用户级线程的实现方式。,图2-14 线程的实现方式,用户级线程实现方式具有以下三个优点:(1)线程切换速度快。(2)调度算法可以是应用程序专用的,不仅最适合自己的需求,而且不干扰底层操作系统的进程调度。(3)用户级线程可运行在任何操作系统上,包括不支持线程机制的操作系统。,用户级线程方式也存在两个主要缺点:(1)系统调用的阻塞问题。当一个线程执行系统调用时,不仅它自己被阻塞,而且在同一进程内的所 有线程都将被阻塞。(2)这种方式下
15、的多线程应用程序不具有多处理的优点。因为核心只为每个进程一次分配一台处理机。,2.核心级线程 在这种方式下,核心知道线程的存在,并对它们实施管理。如图2-14(b)所示。在核心空间中不仅有一个进程表,而且有一个线程表,其中记载系统中所有线程的情况。这样,就由核心统一管理系统中所有的线程。核心进行调度时以线程为基本单位。,核心级线程的优点是:(1)在多处理器系统中,核心可以同时调度同一进程的多个线程,真正实现并行操作。(2)一个进程的某个线程阻塞了,核心可以调度同一进程的另一个线程运行。核心级线程方式也存在缺点,主要是:(1)线程切换速度慢,控制转移开销大。(2)调度算法由核心确定,应用进程无法
16、影响线程的切换。,2.3 进 程 管 理,2.3.1 创建进程 1.进程图(Process Graph)与多数操作系统对进程的管理相似,UNIX系统中各个进程构成了树型的进程族系,如图2-15所示。,图2-15 各个进程构成了树型的进程族系,2.进程创建过程 父进程利用系统调用(如UNIX/Linux系统中的fork)来创建子进程,其主要过程如下:(1)申请一个空闲的PCB。(2)为新进程分配资源。(3)将新进程的PCB初始化。(4)将新进程加到就绪队列中。,2.3.2 终止进程 终止进程的主要操作过程是:(1)从系统的PCB表中找到指定进程的PCB。(2)回收该进程所占用的全部资源。(3)若
17、该进程还有子孙进程,则还要终止其所有子孙进程,回收它们所占用的全部资源。(4)释放被终止进程的PCB,并从原来队列中摘走。,2.3.3 更换进程映像 改变进程映像的工作很复杂,其主要过程是:(1)释放子进程原来的程序和数据所占用的内存空间;(2)从磁盘上找出子进程所要执行的程序和数据(通常以可执行文件的形式存放);(3)分配内存空间,装入新的程序和数据;(4)为子进程建立初始的运行环境主要是对各个寄存器初始化,返回到用户态,运行该进程的程序。,2.3.4 阻塞进程 进程阻塞的过程如下:(1)立即停止当前进程的执行;(2)将现行进程的CPU现场送到该进程的PCB现场保护区中保存起来,以便将来重新
18、运行时恢复此时的现场;,(3)把该进程PCB中的现行状态由“运行”改为“阻塞”,把它插入到具有相同事件的阻塞队列中;(4)然后转到进程调度程序,重新从就绪队列中挑选一个合适的进程投入运行。,2.3.5 唤醒进程 唤醒原语执行过程是:(1)首先把被阻塞进程从相应的阻塞队列中摘下;(2)将现行状态改为就绪态,然后把该进程插入到就绪队列中;(3)如果被唤醒进程比运行进程有更高的优先级,则设置重新调度标志。,2.4 进 程 间 通 信,2.4.1 进程间的关系 1.同步 同步是进程间共同完成一项任务时直接发生相互作用的关系,也就是说,这些具有伙伴关系的进程在执行的时间次序上必须遵循确定的规律。,2.互
19、斥 协同工作的进程之间存在同步关系,但是进程之间更一般的关系是互斥关系,这是由于诸进程共享某些资源而引起的。3.通信 进程经常需要与其他进程通信。,2.4.2 竞争条件和临界区 1.竞争条件 在有些操作系统中,并发进程在活动过程中可能共享一些彼此都能够读写的公用存储区。它可能在内存中,也可能是一个共享文件,其所在位置并不影响问题的实质。下面我们考虑两个进程对一个系统打印机分配表的操作情况。,假定进程Pa负责为用户进程分配打印机,进程Pb负责释放打印机。由于分配和释放可能同时发生,因此两个进程必须共享一个打印机分配表,如表2-2所示。,表2-2 打印机分配表,Pa进程分配打印机的过程是:(1)逐
20、项检查分配标志,找出标志为0的打印机号码;(2)把该机的分配标志置1;(3)把用户名和设备名填入分配表中相应位置。,Pb进程释放打印机的过程是:(1)逐项检查分配表的各项信息,找出标志为1并且用户名和设备名与被释放的名字相同的机号;(2)该机标志清0;(3)清除该机用户名和设备名。,表2-3 打印机分配表(出错情况),2.临界区 为了使临界资源得到合理使用,就必须禁止两个或两个以上的进程同时进入临界区内,就是说欲进入临界区的若干个进程要满足如下关系:(1)如果有若干进程要求进入临界区,一次仅允许一个进程进入。,(2)任何时候,处于临界区内的进程不可多于一个。(3)进入临界区的进程要在有限时间内
21、退出,以便其他进程能及时进入自己的临界区。(4)如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象。,2.4.3 用锁操作原语实现互斥 进程通信是实现进程间同步与互斥的一种机制。这类似于人类社会生活中为表达意见、交流思想、交换信息等而采用多种通信方式,例如,人们打手势、交谈、打电话、写信、发E-mail等,方式有简有繁,当然其功能也有强弱之别。下面分别介绍典型的实现进程同步与互斥的手段。,为解决进程互斥进入临界区的问题,可为每类临界资源设置一把锁,该锁有打开和关闭两种状态。进程执行临界区程序的操作按下列步骤进行:(1)关锁。先检查锁的状态,如为关闭状态,则等待其打开;如已打
22、开了,则将其关闭,继续执行(2)的操作。(2)执行临界区程序。(3)开锁。将锁打开,退出临界区。,2.4.4 信号量上的P、V操作原语 1.信号量(Semaphore)信号量及信号量上的P操作和V操作是E.W.Dijkstra在1965年提出的一种解决同步、互斥问题的更通用的方法,并在THE操作系统中得以实现。,结构型信号量一般是由两个成员组成的数据结构(亦称记录型信号量),其中一个成员是整型变量,表示该信号量的值;另一个是指向PCB的指针。当多个进程都等待同一信号量时,它们就排成一个先入先出的队列,由信号量的指针项指出该队列的头,而PCB队列是通过PCB本身所包含的指针项进行链接的。最后一个
23、PCB(即队尾)的链接指针为0。,信号量的值是与相应资源的使用情况有关的。当它的值大于0时,则表示当前可用资源的数量;当它的值小于0时,则其绝对值表示等待使用该资源的进程个数,即在该信号量队列上排队的PCB的个数。图2-16表示信号量的一般结构以及信号量上PCB队列的情况。,图2-16 信号量的一般结构及PCB队列,2.P、V操作原语 信号量的初值可以由系统根据资源情况和使用需要来确定。在初始条件下信号量的指针项可以置为0,表示队列为空。信号量在使用过程中它的值是可变的,但仅能由P、V操作来改变。设信号量为S,对S的P操作记为P(S),对它的V操作记为V(S)。以下为它们各自的含义表述。,P(
24、S):顺序执行下述两个动作:信号量的值减1,即S=S-1。如果S0,则该进程继续执行;,2.4.5 用P、V原语实现互斥 利用P、V原语和信号量实现进程通信是很方便的,它的使用方式基本上可分成三种:第一种用法是用于实现进入临界区的互斥,这时信号量的初值往往是1;第二种用法是用于实现进程间的简单同步,信号量初值可以是0;第三种用法是用于实现进程间的计数同步,信号量初值通常是大于0的整数。,2.4.6 用P、V原语实现简单同步 考虑2.4.1节中对缓冲区的同步使用问题。供者和用者对缓冲区的使用关系如图2-17所示。,图2-17 简单供者与用者的关系,设置两个信号量:S1表示缓冲区是否空(0表示不空
25、,1表示空);S2表示缓冲区是否满(0表示不满,1表示满)。规定S1和S2的初值分别为1和0,则对缓冲区的供者进程和用者进程的同步关系用下述方式实现:,供者进程 用者进程 L1:P(S1)L2:启动读卡机 P(S2);收到输入结束中断 从缓冲区取出信息 V(S2);V(S1);goto L1;加工并存盘 goto L2;,用P、V操作实现同步时应注意:首先应分析进程间的制约关系,确定信号量个数和相应功能。信号量的初值与相应资源的数量有关,也与P、V操作在程序代码中出现的位置有关。同一信号量的P、V操作要“成对”出现,但它们分别在不同的进程代码中。,2.4.7 生产者消费者问题 为了使这两类进程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 教程 Linux 实例 分析 孟庆昌第 进程
链接地址:https://www.31ppt.com/p-6472727.html