计算机软件技术基础 操作系统(3)
3.3 进程及进程管理 进程! 1. 为什么要引入进程的概念? 程序——由若干条机器指令所组成的解题顺序和步骤。 在单任务操作系统中,程序执行的结果只与程序本身有关。 main( ) { int a; int b; a = 5; b = a + 5; printf(“ result = %d”, b); } 然而,当程序的执行方式变为复杂的“并发”执行之后,一个程序执行的结果并不完全由程序本身来决定! 因此,我们需要一个更准确的概念来刻画程序的执行。这就是 进程!
1)程序的顺序执行 一个计算过程往往由若干个简单的操作所组成。如果这些操作必须按某种先后次序来执行,那么这样一类计算过程称为程序的顺序执行过程,这种程序称为顺序程序。 程序顺序执行的特征 顺序性 顺序程序的各个操作是顺序执行的 封闭性 程序一旦开始执行,其计算结果不受外界因素的影响 可再现性 初始条件不变的情况下,程序多次执行的结果一样
单道程序执行时的先后次序图 I1 输入设备 处理机 打印机 I2 C1 I3 C2 P1 C3 P2 t1 t2 t3 t4 t7 t5 作业1 作业2 作业3
2)程序的并发执行 若干个程序段同时在系统中运行,这些程序段的执行在时间上是重迭的,一个程序段的执行尚未结束,另一个程序段的执行已经开始,称为程序的并发执行。 程序并发执行的特征: 失去了程序的封闭性和可再现性 程序与计算不再一对应 程序并发执行的相互制约 并发程序的描述: cobegin S1; S2; …; Sn; coend 表示语句S1,S2,…,Sn可以并发执行。
多道程序执行时的先后次序图 I1 P3 输入设备 处理机 打印机 I2 C1 I3 C2 P1 C3 P2 t1 t2 t3 t4 t5
例:共享变量n的两个程序段并发执行的算法。 main( ) { int n=0; cobegin p1: while (A的任务未完成) { …; n++; … ; } p2: while (B的任务未完成) { …; printf ("N IS % d\n",n); n=0; … ; } coend …; } 执行的结果与顺序有关 问题:这个程序的执行可能产生哪些结果?
2. 进程的定义 分析并发程序的活动规律:执行-暂停-执行 如何让并发程序的执行获得可再现性,这个问题需要依靠控制程序的执行过程来解决。因此我们引入“进程”的概念来描述程序的执行过程。 所谓进程,就是一个程序在给定活动空间和初始环境下,在一个处理机上的执行过程。
讨论:进程和程序这两个概念有什么区别? 类似于乐曲与乐曲的一次演奏之间的关系。 程序 进程 静态的概念 动态的概念 不能并行活动 独立的运行单位,能并行活动 不是一个基本单位 是处理机调度、竟争资源的基本单位 一个程序可对应多个进程 一个进程可以执行多个程序段
3. 进程的基本状态及变迁 (1)进程的三种基本状态 就绪状态(ready) ——存在于处理机调度队列中的那些进程,它们已经准备就绪,一旦得到CPU,就可以立即运行,这些进程所处的状态称为就绪状态。 运行状态(running) ——当进程得到处理机控制权时,它的程序正在处理机上运行,该进程所处的状态为运行状态。 等待状态(wait) ——若一个进程正等待着某一事件发生(如等待输入输出操作的完成)而暂时停止执行,这时,即使给它CPU时间,它也无法执行,则称该进程处于等待状态(又可称为阻塞状态或挂起状态)。
× (2)进程状态的变迁及原因 进程随着自身的推进和外界条件的变化而从一个状态变换为另一个状态称为状态变迁。 运 行 等 待 就 绪 运 行 等 待 就 绪 服务请求 (请求I/O等) 服务完成/事件来到 进程调度 时间片到 × 注意:有一种状态变迁是永远也不可能发生的。
4. 进程的组成 一个进程包含4个组成部分: 程序——描述进程要完成的功能的指令序列; 数据——程序加工的对象; 工作区——程序执行使用的内存区域,如用户栈或系统栈; 进程控制块——存放进程控制和管理信息的数据结构。 进程控制块PCB(Process Control Block)是进程存在的标志!是进程的“档案袋”。 进程创建时建立PCB。 在进程的生命周期内,OS通过对PCB的管理来实现对进程的管理。 进程撤消时删除相应的PCB。
动态特性 运行控制 PCB是纪录进程动态特性,运行控制等信息的数据结构。 进程标识符 CPU现场(程序状态字、寄存器内容等) 进程状态 优先级 运行控制 资源清单 通信机制(信箱或消息队列) 同步机制(信号量) 队列指针、家族关系 存储位置
5. 进程控制 (1)进程控制的功能 对系统中的进程实施有效的管理和控制。具体表现为控制进程进入不同的状态。 结束 新进程 就绪 执行 等待 (2)进程控制功能的实现 进程的控制动作由操作系统完成; 操作系统提供相应的原语以备调用 执行时不可中断的系统调用
(3)进程控制原语 进程创建——创建一个新进程 进程撤消——撤消一个已完成任务的进程 进程阻塞——使进程转换为等待状态 进程唤醒——唤醒一个等待进程
6. 进程的互斥与同步 (1)互斥 三个基本概念: 临界资源—一次仅允许一个进程使用的资源称为临界资源。 反映了进程间的竞争与合作 (1)互斥 三个基本概念: 临界资源—一次仅允许一个进程使用的资源称为临界资源。 许多物理设备(如打印机等)和软件资源(如变量、数据、队列等)都具有这种独占性的特点。 临界区——在进程中访问临界资源的那段代码称为临界区。 要注意区分临界资源与临界区。 互斥——当一个进程正在访问某临界区时,不允许其它进程进入其相应的临界区,这种相互制约的关系称为互斥。 例如:飞机订票系统中各个订票点对机票库的访问
... ... 进入区 进入区 退出区 退出区 ... ... 进程的互斥进入临界区 改变资源状态 等待资源释放 临界区 临界区 释放资源 唤醒等待进程 退出区 退出区 ... ... 进程 1 进程 2
问题:如何保证进程之间是互斥的进入临界区的呢? 答:操作系统提供了进程间同步和互斥的机制,程序中使用这些机制来保证执行中的互斥进入。其中最常见的机制就是信号灯。 什么是信号灯? 信号灯是一个二元组(s, q),其中:s 是一个具有非负初值的整型变量,q 是一个初始状态为空的队列指针。 通过对信号灯的P、V操作,进程可以实现相互间的互斥。
P、V操作原语的含义和实现 P操作表示对资源的申请 V操作表示对资源的释放 P操作的实现: (1)s 值减1; (2)若相减结果大于等于0, 则进程继续执行; (3)若结果小于0,则该进程挂起。 注:挂起该进程包括:保留调用进程CPU现场;置“等待”状态;入等待队列;转进程调度; V操作的实现: (1)s 值加1; (2)若相加结果大于0,进 程继续执行; (3)否则,唤醒一个等待该信号灯的进程,然后本进程继续执行。 注:等待该信号灯的进程也就是队列q 中的进程。
两个进程互斥的例子 问题:x代表某航班机座号,p1和p2两个售票进程,售票工作是对变量x加1。试用信号灯的P、V操作实现这两个进程的互斥。 设:mutex为互斥信号灯,初值为1 ; p1( ) { …… p(mutex); x:=x+1 ; v(mutex); } p2( ) { …… p(mutex); x:=x+1 ; v(mutex); }
为完成某个任务,并发进程在一些关键点可能些需要相互等待与互通消息, 这种关系称为同步。 (2)同步 为完成某个任务,并发进程在一些关键点可能些需要相互等待与互通消息, 这种关系称为同步。 同步进程间是一种合作关系 例如:病人就诊 门诊医生: …… 开化验单; 等化验结果; 继续诊病; 化验员: …… 等化验单; 化验; 填写化验结果;
计算进程 cp 和打印进程 op 共用一个缓冲区,为了完成正确的计算与打印,试用信号灯实现这两个进程的同步。 同步进程的例子 计算进程 cp 和打印进程 op 共用一个缓冲区,为了完成正确的计算与打印,试用信号灯实现这两个进程的同步。 cp 进程把计算结果送入 buf 之后,op 进程才能从 buf 中取出结果打印,即当 buf 内有信息时,op 进程才能动作,否则必须等待。 op 进程把 buf 中的数据取出打印之后,cp 进程才能把下一个计算结果送入 buf 中,即当 buf 为空时,cp 进程才能动作,否则必须等待。 缓冲区buf op cp 设置:两个信号灯Sa和Sb: Sa:表示缓冲区中是否有可供打印的计算结果,其初值为0; Sb :表示缓冲区有无空位置存放新的信息,其初值为1。
main( ) { int Sa=0; /* 表示buf中有无信息 */ int Sb=1; /* 表示buf中有无空位置 */ cobegin cp( ); op( ); coend } cp( ) { while (计算未完成) { 得到一个计算结果; P(Sb); 将数送到缓冲区中; V(Sa); } op( ) { while (打印工作未完成) { P(Sa) ; 从缓冲区中取一数; V(Sb) ; 从打印机上输出; }
小 结 结 束 进程概念的引入 程序的顺序执行和并发执行的特点 进程概念的基本概念 1. 进程定义(定义、进程与程序的区别 ) 小 结 进程概念的引入 程序的顺序执行和并发执行的特点 进程概念的基本概念 1. 进程定义(定义、进程与程序的区别 ) 2. 进程状态(三个基本状态、状态变迁图) 3. 进程描述(pcb结构、定义、作用) 进程的互斥与同步 1. 临界资源 2. 临界区 3. 互斥和同步 4. 用信号灯的P、V操作实现进程的互斥与同步 结 束