第 2 讲 从应用编程者角度看进程

63
第 2 第 第第第第第第第第第第第 如如如如如如 如如如如 如如如如

Upload: candra

Post on 17-Jan-2016

127 views

Category:

Documents


0 download

DESCRIPTION

第 2 讲 从应用编程者角度看进程. 如何查看进程 进程控制 进程通讯. 如何查看进程. 命令行 利用目录 /proc. ps 命令. 示例 ps –ef 输出. 进程开始的时间和日期. 进程占用 CPU 的百分比. 用户 ID. 进程号. 父进程号. 启动进程的终端号. 进程已占用的时间. 运行的命令. ps 命令. 功能 查看系统中正在运行的进程 语法 ps  [-ef][-n name][-t ttys][-p pids][-u users][-groups] 参数选项 -f :产生某个进程的一个完整清单 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 2 讲 从应用编程者角度看进程

第 2 讲 从应用编程者角度看进程

如何查看进程进程控制进程通讯

Page 2: 第 2 讲 从应用编程者角度看进程

如何查看进程• 命令行• 利用目录 /proc

Page 3: 第 2 讲 从应用编程者角度看进程

3

ps 命令• 示例– ps –ef 输出

运行的命令

用户ID

进程占用 CPU的百分比启动进程的终端号

进程开始的时间和日期父进程号

进程号

进程已占用的时间

Page 4: 第 2 讲 从应用编程者角度看进程

4

ps 命令• 功能

– 查看系统中正在运行的进程• 语法

– ps [-ef][-n name][-t ttys][-p pids][-u users][-groups]• 参数选项

– -f :产生某个进程的一个完整清单– -u :显示进程的用户名和启动时间等信息 – -t n :显示第 n 个终端的进程– -e :显示所有的进程

• 说明– ps 可查看后台进程、前台进程,当 ps 命令行没有选项时,只显示与

控制终端相关进程的基本信息– 没有 root 权限, ps 仅限以说明运行进程,报告用户的进程讯息

Page 5: 第 2 讲 从应用编程者角度看进程

5

进程基本管理• 分类– 前台进程:用户运行一个程序或执行一个命令就启动

一个前台进程,进程不结束,终端就不出现系统提示符

– 后台进程: 用户在输入命令行后加上” &” 字符就启动一个后台进程, shell 不等待命令退出,立即重新显示提示符,让该命令进程在后台运行

– bg 命令可以将进程放到后台运行– fg 命令可以将后台进程放到前台运行

• 举例– [jjpr@zzh jjpr]$ sleep 10&

[1] 467[jjpr@zzh jjpr]$

– find / -name myfile -print > /root/test &1为作业号,由 shell分配。 467 为 PID作业号不同于 PID,在系统中不一定唯一

Page 6: 第 2 讲 从应用编程者角度看进程

如何查看进程• 命令行• 利用目录 /proc

Page 7: 第 2 讲 从应用编程者角度看进程

/PROC/PROC 文件系统部分列表文件系统部分列表

Page 8: 第 2 讲 从应用编程者角度看进程

procproc 文件系统中进程子目录包含信息文件系统中进程子目录包含信息(1)(1)

Page 9: 第 2 讲 从应用编程者角度看进程

你可以看到某一个进程的信息• /proc/pid/status :相应进程的状态• /proc/pid/ctl :相应进程的控制文件• /proc/pid/psinfo :相应进程的 ps 信息• /proc/pid/as :相应进程的地址空间• /proc/pid/map :相应进程的映射信息• /proc/pid/object :相应进程的对象信息• /proc/pid/sigact :相应进程的信号量操作• /proc/pid/sysent :相应进程的系统调用信息• /proc/pid/lwp/tid :相应进程的核心线程标示符目录• /proc/pid/lwp/tid/lwpstatus :核心线程的状态• /proc/pid/lwp/tid/lwpctl :核心线程控制文件• /proc/pid/lwp/tid/lwpsinfo :核心线程的 ps 信息

Page 10: 第 2 讲 从应用编程者角度看进程

还可以看到其它信息还可以看到其它信息• 内存管理信息内存管理信息

// procproc // slabinfoslabinfo 是主存管理中关于各个是主存管理中关于各个 slabslab 缓冲块的信息缓冲块的信息// procproc // swapsswaps 是系统的是系统的 swapswap 设备的信息设备的信息

··设备相关信息。设备相关信息。 // procproc // pcipci 是是 PCIPCI 总线上所有设备的列表信息。总线上所有设备的列表信息。 /proc/devices/proc/devices 文件:列出字符和块设备的主设备号,文件:列出字符和块设备的主设备号,以及分配到这些设备号的设备名称。以及分配到这些设备号的设备名称。 /proc/dma/proc/dma 文件:列出由驱动程序保留的文件:列出由驱动程序保留的 DMADMA 通道和保留它通道和保留它们的驱动程序名称。们的驱动程序名称。 casadecasade 项供用于把次项供用于把次 DMADMA 控制器从主控制控制器从主控制器分出的器分出的 DMADMA 行所使用。行所使用。

··文件系统信息。文件系统信息。 // procproc // mountsmounts 是系统中已经安装的文件系统设备的列表是系统中已经安装的文件系统设备的列表// procproc // filesystemsfilesystems 则是已经登记的每种文件系统(类型)则是已经登记的每种文件系统(类型)

的清单信息。的清单信息。// procproc // partitionspartitions 是磁盘分区的信息是磁盘分区的信息

• 中断编号信息。中断编号信息。 // procproc // interruptsinterrupts 是关于中断源和它们的中断向量编号的是关于中断源和它们的中断向量编号的

清单信息。清单信息。

Page 11: 第 2 讲 从应用编程者角度看进程

• 模块相关信息。模块相关信息。 // procproc // modulesmodules 是系统中已安装的动态模块的清单,是系统中已安装的动态模块的清单,// procproc // ksymsksyms 则是内核中供可安装模块动态连接的符号则是内核中供可安装模块动态连接的符号

名及其地址的清单信息。名及其地址的清单信息。

• 系统版本信息。系统版本信息。 包括号系统版本号,及其他各种统计与状态信息。包括号系统版本号,及其他各种统计与状态信息。

• /proc/cmdline/proc/cmdline 文件:给出了内核启动的命令文件:给出了内核启动的命令行。行。

• /proc/cpuinfo/proc/cpuinfo 文件:提供了有关系统文件:提供了有关系统 CPUCPU 的的多种信息。文件列出了多种信息。文件列出了 CPUCPU 的型号,以及能得的型号,以及能得到的更多特定信息(制造商,型号和版本)。该到的更多特定信息(制造商,型号和版本)。该文件还包含了以文件还包含了以 bogomipsbogomips 表示的处理器速度表示的处理器速度

Page 12: 第 2 讲 从应用编程者角度看进程

/proc/kcore/proc/kcore 文件:是系统的物理主存以文件:是系统的物理主存以 corecore 文件格文件格式保存的文件。例如,式保存的文件。例如, GDBGDB 能用它考察内核的数据结构。能用它考察内核的数据结构。它不是纯文本,而是它不是纯文本,而是 /proc/proc 目录下为数不多的几个二进目录下为数不多的几个二进制格式的项之一。制格式的项之一。

/proc/kmsg/proc/kmsg 文件:用于检索用文件:用于检索用 printkprintk 生成的内核消生成的内核消息。任何时刻只能有一个具有超级用户权限的进程可以读息。任何时刻只能有一个具有超级用户权限的进程可以读取这个文件。也可以用系统调用取这个文件。也可以用系统调用 syslogsyslog 检索这些消息。检索这些消息。通常使用工具通常使用工具 dmesgdmesg 或守护进程或守护进程 klogdklogd 检索这些消息。检索这些消息。

/proc/ksyms/proc/ksyms 文件:列出了已经登记的内核符号,这些文件:列出了已经登记的内核符号,这些符号给出了变量或函数的地址。每行给出一个符号的地址,符号给出了变量或函数的地址。每行给出一个符号的地址,符号名称以及登记这个符号的模块。程序符号名称以及登记这个符号的模块。程序ksymsksyms ,, insmodinsmod 和和 kmodkmod 使用这个文件。它还列出使用这个文件。它还列出了正在运行的任务数,总任务数和最后分配的了正在运行的任务数,总任务数和最后分配的 PIDPID 。。

/proc/loadavg/proc/loadavg 文件:给出以几个不同的时间间隔计算文件:给出以几个不同的时间间隔计算的系统平均负载,这就如同的系统平均负载,这就如同 uptimeuptime 命令显示的结果那命令显示的结果那样。前样。前 33 个数字是平均负载。这是通过计算过去个数字是平均负载。这是通过计算过去 11 分钟,分钟,55 分钟,分钟, 1515 分钟里运行队列中的平均任务数得到的,随分钟里运行队列中的平均任务数得到的,随后是正在运行的任务数和总任务数,最后是上次使用的进后是正在运行的任务数和总任务数,最后是上次使用的进程号。程号。

/proc/locks/proc/locks 文件:包含在打开的文件上的加锁信息,文件:包含在打开的文件上的加锁信息,文件中的每一行描述了特定文件和文档上的加锁信息以及文件中的每一行描述了特定文件和文档上的加锁信息以及对文件施加的锁的类型。内核也可以需要时对文件施加强对文件施加的锁的类型。内核也可以需要时对文件施加强制性锁。 制性锁。

Page 13: 第 2 讲 从应用编程者角度看进程

/PROC/PROC 文件系统使用方法文件系统使用方法– 向向 procproc 文件系统中添加可读写文件文件系统中添加可读写文件

• 参看实验教材参看实验教材– 通过通过 procproc 文件系统查看进程信息文件系统查看进程信息

• cat /proc/cpuinfocat /proc/cpuinfo

Page 14: 第 2 讲 从应用编程者角度看进程

第 2 讲 从应用编程者角度看进程

如何查看进程进程控制进程通讯

Page 15: 第 2 讲 从应用编程者角度看进程

25

1. 1. 进程控制的概念进程控制的概念进程控制的职责进程控制的职责

对系统中的进程实施有效的管理,负责进程状态的改变。

进程状态变化:

进程及进程管理进程及进程管理————进程控制进程控制

创建 撤销无 有 消亡

等待运行 等待

唤醒就绪 等待

常用的进程控制原语常用的进程控制原语

创建原语、撤消原语、阻塞原语、唤醒原语

Page 16: 第 2 讲 从应用编程者角度看进程

26

2. 2. 进程创建进程创建进程创建原语的形式进程创建原语的形式

create (name , priority)

name 为被创建进程的标识符

priority 为进程优先级

进程创建原语的功能进程创建原语的功能

创建一个具有指定标识符的进程,建立进程的 PCB 结构。

进程及进程管理进程及进程管理————进程控制进程控制

Page 17: 第 2 讲 从应用编程者角度看进程

27

PCB 池

进程创建原语的实现进程创建原语的实现

a

b

1

进程创建原语的实现框图

入口

查 PCB 总链

有同名 ?

向系统申请一个空的 PCB 结构

有 空PCB ?

将入口信息填入PCB 相应项

将 PCB 入就绪队列 将 PCB 入总链队列

返回进程 pid

出错

Y

N

出错

进程及进程管理进程及进程管理————进程控制进程控制

Page 18: 第 2 讲 从应用编程者角度看进程

哪些事件会引起进程创建?• 用户登录• 作业调度(用户请求运行程序)• 提供服务• 应用请求

Page 19: 第 2 讲 从应用编程者角度看进程

28

3. 3. 进程撤销进程撤销进程撤销原语的形式进程撤销原语的形式

当进程完成任务后希望终止自己时使用进程撤消原语。

Kill ( 或 exit)

进程撤销原语的功能进程撤销原语的功能

撤消当前运行的进程。将该进程的 PCB 结构归还到 PCB

源池,所占用的资源归还给父进程,从总链队列中摘除

它,然后转进程调度程序。

进程及进程管理进程及进程管理————进程控制进程控制

Page 20: 第 2 讲 从应用编程者角度看进程

29

进程撤销原语的实现进程撤销原语的实现

入口

由运行指针得当前进程的pid

释放本进程所占用的资源给父进程

该进程从总链队列中摘下

释放PCB结构

转进程调度

进程及进程管理进程及进程管理————进程控制进程控制

Page 21: 第 2 讲 从应用编程者角度看进程

30

4. 4. 进程等待进程等待进程等待原语的形式进程等待原语的形式

当进程需要等待某一事件完成时,它可以调用等待原语阻塞自己。

susp(chan)

入口参数 chan :进程等待的原因

进程等待原语的功能进程等待原语的功能

中止调用进程的执行,并加入到等待 chan 的等待队列中;最

后使控制转向进程调度。

进程及进程管理进程及进程管理————进程控制进程控制

Page 22: 第 2 讲 从应用编程者角度看进程

31

进程等待原语的实现进程等待原语的实现

入口

保护进程的 CPU 现场到 PCB 结构中

置该进程为”等待”状态

将该进程 PCB 结构插入到等待队列中

转进程调度

进程及进程管理进程及进程管理————进程控制进程控制

Page 23: 第 2 讲 从应用编程者角度看进程

32

5. 进程唤醒进程唤醒原语的形式进程唤醒原语的形式

当处于等待状态的进程所期待的事件来到时,由发现者进

程使用唤醒原语叫唤醒它。

wakeup(chan)

入口参数 chan :进程等待的原因。进程唤醒原语的功能进程唤醒原语的功能

当进程等待的事件发生时,唤醒等待该事件的进程。

进程及进程管理进程及进程管理————进程控制进程控制

Page 24: 第 2 讲 从应用编程者角度看进程

33

进程唤醒原语的实现进程唤醒原语的实现

进程及进程管理进程及进程管理————进程控制进程控制

入口

找到该等待队列

将队列首进程移出此等待队列

将该进程置为”就绪”状态,并将 PCB 结构插入到就绪队列中

返回

Page 25: 第 2 讲 从应用编程者角度看进程

哪些事件引起进程的阻塞和唤醒?• 请求系统服务• 启动某种操作• 新数据尚未到达• 无新工作可做

Page 26: 第 2 讲 从应用编程者角度看进程

int main(){int pid;switch(pid=fork()){case-1:return-1;case 0:execl("/bin/sh","sh","-

c",command,NULL);exit(127);default:wait(NULL);}return 0;}

int main(){int pid;char *cmdarg={","sh","-

c",command,NULL}switch(pid=fork()){case-1:return-1;case 0:execv("/bin/sh,cmdarg);exit(127);default:wait(NULL);}return 0;}

Page 27: 第 2 讲 从应用编程者角度看进程

通过这节课的学习你知道怎么查看进程和改变进程的状态没有?

Page 28: 第 2 讲 从应用编程者角度看进程

第 2 讲 从应用编程者角度看进程

如何查看进程进程控制进程通讯

Page 29: 第 2 讲 从应用编程者角度看进程

• 信号量• 信号• 管道• 共享主存• 消息传递• 套接字

Page 30: 第 2 讲 从应用编程者角度看进程

并发执行的进程之间的关系?• 资源共享 (互斥)• 合作(同步)

Page 31: 第 2 讲 从应用编程者角度看进程

37

互斥互斥

在操作系统中,当多个并发进程使用同一个资源。而这个资源又不能同时使用,进程间的这种相互制约关系称为互斥。

进程及进程管理进程及进程管理————进程相互制约关系进程相互制约关系

Page 32: 第 2 讲 从应用编程者角度看进程

34

1. 1. 进程互斥的概念进程互斥的概念

进程及进程管理进程及进程管理————进程相互制约关系进程相互制约关系

例 1 :两个进程 A 、 B共享一台打印机

例 2 :两个进程共享一个变量 x

设: x代表某航班机座号, p1 和 p2两个售票进程,售票

工作是对变量 x 加 1 。这两个进程在一个处理机 C 上并

发执行,分别具有内部寄存器 r1 和 r2 。

Page 33: 第 2 讲 从应用编程者角度看进程

35

P1 与 P2 并发执行,两种可能的执行次序:A情形(希望这样)

p1 : r1 := x ; r1:= r1+1 ; x := r1 ;

p2 : r2:= x ; r2 := r2+1 ; x := r2 ;

设 x 的初值为 10 ,两种情况下的执行结果: 情况 A : x = 10+2

情况 B : x = 10+1

进程及进程管理进程及进程管理————进程相互制约关系进程相互制约关系

B情形

p1 : r1 := x ; r1:= r1+1 ; x := r1 ;

p2 : r2:= x ; r2 := r2+1 ; x := r2 ;

Page 34: 第 2 讲 从应用编程者角度看进程

36

临界区是进程中对临界资源使用的程序段,称为相对于该临界资源的临界区。

临界资源

一次仅允许一个进程使用的资源称为临界资源。

硬件:如输入机、打印机、磁带机等

软件:如公用变量、数据、表格、队列等临界区临界区

进程及进程管理进程及进程管理————进程相互制约关系进程相互制约关系

x := x+1;

csa {

进程 P1 进程 P2

x := x+1;

csb {

Page 35: 第 2 讲 从应用编程者角度看进程

40

1. 1. 锁和上锁、开锁操作锁和上锁、开锁操作什么是锁什么是锁

用变量 w代表某种资源的状态, w称为“锁” 。

上锁操作和开锁操作上锁操作和开锁操作

进程及进程管理进程及进程管理————进程同步机构进程同步机构

检测 w 的值 ( 是 0 还是 1) ;

如果 w 的值为 1 ,继续检测;

如果 w 的值为 0 ,将锁位置 1 (表示占用资源 ) ,进入临界区执行。 (此为上锁操作 )

临界资源使用完毕,将锁位置 0 。 (此为开锁操作 )

Page 36: 第 2 讲 从应用编程者角度看进程

42

上锁原语和开锁原语上锁原语和开锁原语

上锁原语算法 lock

输入:锁变量 w

输出:无

{

test : if (w 为 1)

goto test ;

∕* 测试锁位的值 *∕

else w=1 ; ∕ * 上锁 *∕

}

进程及进程管理进程及进程管理————进程同步机构进程同步机构

开锁原语算法 unlock

输入:锁变量 w

输出:无

{

w=0 ;∕ *开锁 *∕

}

Page 37: 第 2 讲 从应用编程者角度看进程

47

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

程序描述程序描述 程序 task1

main( ) pa( ) pb( )

{ { {

int w=1 ; ∕ * 互斥锁 *∕

cobegin lock(w) ; lock(w) ;

pa( ) ; csa ; csb ;

pb( ) ; unlock(w) ; unlock(w) ;

coend

} } }

Page 38: 第 2 讲 从应用编程者角度看进程

46

1. 1. 用用上锁原语和开锁原语实现进程互斥上锁原语和开锁原语实现进程互斥框图描述 框图描述

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

上锁原语

进入临界区 csa

进程 pa

开锁原语

上锁原语

进入临界区 csb

进程 pb

开锁原语

Page 39: 第 2 讲 从应用编程者角度看进程

41

上锁原语的问题:没有让权等待!上锁原语的问题:没有让权等待!

进程及进程管理进程及进程管理————进程同步机构进程同步机构

1→W

进入临界区 csa

0→W

进程 A

W=0 ?

= 0

1→W

进入临界区 csb

0→W

进程 B

W=0 ?

= 0

Page 40: 第 2 讲 从应用编程者角度看进程

进程进入临界区的准则• 空闲让进• 忙则等待• 有限等待• 让权等待

Page 41: 第 2 讲 从应用编程者角度看进程

43

2. 2. 信号灯和信号灯和 PP 、、 VV 操作操作什么是信号灯什么是信号灯

信号灯是一个确定的二元组 (s , q) , s是一个具有非负

初值的整型变 量, q是一个初始状态为空的队列。操

作系统利用信号灯的状态对并发进程和共享资源进行

控制和管理。信号灯是整型变量。

变量值 ≥ 0 时,表示绿灯,进程执行;

变量值 0 时,表示红灯,进程停止执行。

注意:创建信号灯时,应准确说明信号灯 s 的意义和初值 (这个初值

绝不能为负值 ) 。

进程及进程管理进程及进程管理————进程同步机构进程同步机构

Page 42: 第 2 讲 从应用编程者角度看进程

44

P P 操作操作P 操作的定义

对信号灯 s 的 p 操作记为 p(s) 。 p(s)是一个不可分割的原语操作,即取信号灯值减 1 ,若相减结果为负,则调用 p(s) 的进程被阻,并插入到该信号灯的等待队列中,否则可以继续执行。

P 操作的实现

入 口

S-1 → S

S≥0 ?

转进程调度

返回 入信号灯等待队列

置“等 待 状态”

≥0

0

进程及进程管理进程及进程管理————进程同步机构进程同步机构

Page 43: 第 2 讲 从应用编程者角度看进程

45

V V 操作操作

V 操作的定义

对信号灯 s 的 v 操作记为 v(s) 。 v(s)是一个不可分割的原语操作,即取信号灯值加 1 ,若相加结果大于零,进程继续执行,否则,要帮助唤醒在信号灯等待队列上的一个进程。

V 操作的实现

入 口

S+1 → S

从信号灯的等待队列中取出首元素

入就绪队列

置“就绪状态”

返回

S≤0 ?>0

进程及进程管理进程及进程管理————进程同步机构进程同步机构

Page 44: 第 2 讲 从应用编程者角度看进程

48

2. 2. 用用信号灯的信号灯的 PP 、、 VV 操作实现互斥操作实现互斥框图描述框图描述

设: mutex 为互斥信号灯,初值为 1 。

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

p(mutex)

进入临界区 csa

进程 pa

v(mutex)

p(mutex)

进入临界区 csb

进程 pb

v(mutex)

程序描述程序描述

Page 45: 第 2 讲 从应用编程者角度看进程

49

程序 task2 main( )

{

int mutex=1 ; ∕ * 互斥信号灯 *∕

cobegin

pa( ) ; pb( ) ; coend

}

pa( ) pb( )

{ {

p(mutex) ; p(mutex) ; csa ; csb ; v(mutex) ; v(mutex) ;

} }

信号灯可能的取值信号灯可能的取值 两个并发进程,互斥信号灯的值仅

取 1 、 0 和- 1三个值。

mutex=1

表示没有进程进入临界区;

mutex=0

表示有一个进程进入临界区;

mutex= - 1

表示一个进程进入临界区,

另一个进程等待进入。

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 46: 第 2 讲 从应用编程者角度看进程

50

例:例:

x代表某航班机座号, pa 和 pb两个售票进程,售票工作是对变量 x 加 1 。试用信号灯的 P 、 V 操作实现这两个进程的互斥。

设: mutex 为互斥信号灯,初值为 1 。paa( ) pbb( )

{ {

p(mutex) ; p(mutex) ; x:=x+1 ; x:=x+1 ; v(mutex) ; v(mutex) ;

} }

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 47: 第 2 讲 从应用编程者角度看进程

并发执行的进程之间的关系?• 资源共享 (互斥)• 合作(同步)

Page 48: 第 2 讲 从应用编程者角度看进程

38

2. 2. 进程同步的概念进程同步的概念什么是进程同步什么是进程同步

并发进程在一些关键点上可能需要互相等待与互通消息,

这种相互制约的等待与互通消息称为进程同步。

进程同步的例进程同步的例

病员就诊

看病活动:

要病人去化验;

等化验结果;

继续诊病;

化验活动:

需要进行化验 ?

进行化验;

开出化验结果;

进程及进程管理进程及进程管理————进程相互制约关系进程相互制约关系

Page 49: 第 2 讲 从应用编程者角度看进程

39

共享缓冲区的计算进程与打印进程的同步

计算进程 cp 和打印进程 iop公用一个单缓冲

缓冲区 buf

iop cp

A

B

C

D

ABCD

进程及进程管理进程及进程管理————进程相互制约关系进程相互制约关系

Page 50: 第 2 讲 从应用编程者角度看进程

两类同步问题• 生产者消费者问题• 合作进程

Page 51: 第 2 讲 从应用编程者角度看进程

54

单缓冲区的生产者与消费者问题单缓冲区的生产者与消费者问题

计算进程 cp 和打印进程 iop公用一个单缓冲,为了完成正确的计算与打印,试用信号灯的 p 、 v 操作实现这两个进程的同步。

缓冲区缓冲区 bufbuf

iop cp

两个进程的任务

计算进程 cp经过计算,将计算结果送入 buf ;

打印进程 iop 把 buf 中的数据取出打印。

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 52: 第 2 讲 从应用编程者角度看进程

39

共享缓冲区的计算进程与打印进程的同步

计算进程 cp 和打印进程 iop公用一个单缓冲

缓冲区 buf

iop cp

A

B

C

D

ABCD

进程及进程管理进程及进程管理————进程相互制约关系进程相互制约关系

Page 53: 第 2 讲 从应用编程者角度看进程

55

信号灯设置

sa :表示缓冲区中是否有可供打印的计算结果,其初值为 0 。

sb :表示缓冲区有无空位置存放新的信息,其初值为 1 。

分析任务的同步关系

当 cp 进程把计算结果送入 buf 时, iop 进程才能从 buf 中取出结果去打印,否则必须等待。

当 iop 进程把 buf 中的数据取出打印后, cp 进程才能把下一个计算结果数据送入 buf 中,否则必须等待。

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

缓冲区缓冲区 bufbuf

iop cp

Page 54: 第 2 讲 从应用编程者角度看进程

57

程序 task5

main( )

{

int sa=0 ; ∕ *表示 buf 中有无信息 *∕

int sb=1 ; ∕ *表示 buf 中有无空位置 *∕

cobegin

cp( ) ; iop( ) ; coend

}

cp( ) iop( )

{ {

while(计算未完成 ) while(打印工作未完成 )

{ {

得到一个计算结果; p(sa) ; p(sb) ; 从缓冲区中取一数; 将数送到缓冲区中; v(sb) ; v(sa) ; 从打印机上输出; } }

} }

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

缓冲区缓冲区 bufbuf

iop cp

Page 55: 第 2 讲 从应用编程者角度看进程

59

生产者生产者————消费者问题的一般解答消费者问题的一般解答

生产者——消费者问题图示

生产者与消费者的同步关系

生产者:当有界缓冲区中无空位置时,要等待;

向有界缓冲区放入物品后,要发消息。

消费者:当有界缓冲区中无物品时,要等待;

从有界缓冲区取出物品后,要发消息。

c1p1

c2

c3

ck

p2

p3

pm

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 56: 第 2 讲 从应用编程者角度看进程

60

信号灯设置

两个同步信号灯——

sb :表示空缓冲区的数目,初值 = n

sa : 表示满缓冲区 ( 即信息 ) 的数目,初值 = 0

一个互斥信号灯——

mutex :表示有界缓冲区是否被占用,初值 = 1

c1p1

c2

c3

ck

p2

p3

pm

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 57: 第 2 讲 从应用编程者角度看进程

62

程序描述程序 prod_cons

main( )

{

int sa=0 ; ∕ *满缓冲区的数目 *∕

int sb=n ; ∕ * 空缓冲区的数目 *∕

int mutex=1 ; ∕ * 对有界缓冲区进行操作的互斥信号灯 *∕

cobegin

p1 ( ) ; p2 ( ) ;… pm ( ) ;

c1 ( ) ; c2 ( ) ;… ck ( ) ;

coend

}

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 58: 第 2 讲 从应用编程者角度看进程

63

pi( ) c j( )

{ {

while( 生产未完成 ) while( 还要继续消费 )

{ {

p(sa) ; 生产一个产品; p(mutex) ; p(sb) ; 从有界缓冲区中取产品; p(mutex) ; v(empty) ; 送一个产品到有界缓冲 v(sb) ; v(mutex) ; 消费一个产品; v(sa) ; } }

} }

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 59: 第 2 讲 从应用编程者角度看进程

两类同步问题• 生产者消费者问题• 合作进程

Page 60: 第 2 讲 从应用编程者角度看进程

51

合作进程的执行次序合作进程的执行次序

进程流图

p3

s

f

p5

p1

p2p4

p6

p9 p10

p8

f

s

p5 p6

p7

s

f

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 61: 第 2 讲 从应用编程者角度看进程

52

例:例: pa 、 pb 、 pc 为一组合作进程,其进程流图如图所

示,试用信号灯的 p 、 v 操作实现这三个进程的同步。

pb pc

pa

f

s 分析任务的同步关系

任务启动后 pa 先执行,当它结束后, pb 、 pc 可以开始执行, pb 、 pc 都执行完毕后,任务终止。 信号灯设置

设两个同步信号灯 sb 、 sc 分别表示进程 pb 和 pc

能否开始执行,其初值均为 0 。 同步描述

pa pb pc

p(sb ) ; p(sc ) ; v(sb ) ; v(sc ) ;

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 62: 第 2 讲 从应用编程者角度看进程

53

pb pc

pa

f

s

程序 task4

main( )

{

int sb=0 ; ∕ *表示 pb 进程能否开始执行 *∕

int sc=0 ; ∕ *表示 pc 进程能否开始执行 *∕

cobegin

pa( ) ; pb( ) ; pc( ) ; coend

}

pa( ) pb( ) pc( )

{ { {

p(sb) ; p(sc) ; v(sb) ; v(sc) ; } } }

进程及进程管理进程及进程管理————进程互斥与同步的实现进程互斥与同步的实现

Page 63: 第 2 讲 从应用编程者角度看进程

你可以用以上的算法解决你的程序之间的同步与互斥的关系