第3章进程管理201404新版_第1页
第3章进程管理201404新版_第2页
第3章进程管理201404新版_第3页
第3章进程管理201404新版_第4页
第3章进程管理201404新版_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章 进程管理进程管理3.1 顺序程序和并发程序顺序程序和并发程序 3.1.1 顺序程序的设计和执行顺序程序的设计和执行例、例、DOS系统的文件拷贝命令的最基本功能就是把一个源文件复系统的文件拷贝命令的最基本功能就是把一个源文件复制为目标文件。下面是完成基本文件拷贝功能的顺序拷贝程序:制为目标文件。下面是完成基本文件拷贝功能的顺序拷贝程序:#include #define PMODE 0644#define BSIZE 512main(int argc,char *argv) int fdr,fdw,n,fdp2; char abufBSIZE; fdr=open(argv1,0);

2、fdw=create(argv2, PMODE); while(n=read(fdr,abuf,BSIZE)0) write(fdw,abuf,n);(D1Ri(D1Ri和和D2WiD2Wi(i=1i=1、2 2、3 3、)分别表、)分别表示第示第i i次循环读源文件和写目标文件所在次循环读源文件和写目标文件所在磁盘的一个物理块(扇区)的动作磁盘的一个物理块(扇区)的动作) )顺序程序的特性: 顺序性:每一个操作都在前一个操作执行完后顺序性:每一个操作都在前一个操作执行完后才能开始。处理机的操作是严格按照程序所规才能开始。处理机的操作是严格按照程序所规定的次序进行的。定的次序进行的。 封闭性:

3、程序执行得到的最终结果由给定的初封闭性:程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。始条件决定,不受外界因素的影响。 可再现性:程序执行得到的最终结果与执行速可再现性:程序执行得到的最终结果与执行速度无关。只要输入的初始条件相同,则无论何度无关。只要输入的初始条件相同,则无论何时重复执行该程序都会得到相同的结果。时重复执行该程序都会得到相同的结果。 顺序程序:一组有序的操作序列。顺序程序:一组有序的操作序列。图图 文件顺序拷贝时各部件动作序列文件顺序拷贝时各部件动作序列图图 文件并发拷贝时各部件的可能动作序列文件并发拷贝时各部件的可能动作序列从逻辑上可分析出从逻辑上可分析出

4、D1RD1Ri+1i+1与与D2WD2Wi i在在时间上可以重叠时间上可以重叠图图 文件并发拷贝时各文件并发拷贝时各部件的可能动作序列部件的可能动作序列main(int argc,char main(int argc,char * *argv)argv) int x,fdr,fdw,n,fdp2int x,fdr,fdw,n,fdp2;char abufBSIZEchar abufBSIZE;fdr=open(argv1,0);fdr=open(argv1,0);fdw=creat(argv2, PMODE)fdw=creat(argv2, PMODE);pipe(fdp);pipe(fdp)

5、;while(x=fork()=-1);while(x=fork()=-1);if (x=0)if (x=0) while(n=read(fdr,abuf,BSIZE)0) while(n=read(fdr,abuf,BSIZE)0) write(fdp1,abuf,n); write(fdp1,abuf,n);elseelse while(n=read(fdp0,abuf,BSIZE)0)while(n=read(fdp0,abuf,BSIZE)0) write(fdw,abuf,n); write(fdw,abuf,n); 考察下面的并发程序的例子:考察下面的并发程序的例子: #inclu

6、de #include main() main() int pid,pid1; int pid,pid1; while(pid=fork()=-1); while(pid=fork()=-1); if(pid!=0) if(pid!=0) while(pid1=fork()=-1); while(pid1=fork()=-1); if(pid1!=0) if(pid1!=0) printf(“c”); printf(“c”); else else printf(“b”); printf(“b”); else else printf(“a”); printf(“a”); 程序运行结果可能是程序运

7、行结果可能是abc,abc,也可能是也可能是cba,cba,还还可能是可能是bcabca、acbacb、cabcab、cbacba等。等。出现多种运行结果的出现多种运行结果的原因是:父进程创建原因是:父进程创建子进程之后,系统的子进程之后,系统的调度是随机调度是随机并发程序的特性:非可再现性:并发程序的执行结果与它们的相对速度有关。非可再现性:并发程序的执行结果与它们的相对速度有关。共享性:共享性:1 1)共享同一段程序)共享同一段程序; ; 2 2)共享系统资源)共享系统资源通信性:并发程序之间相互依赖和制约。通信性:并发程序之间相互依赖和制约。进程进程-一个具有独立功能的程序对某个数据集一

8、个具有独立功能的程序对某个数据集在处理机上的一次运行过程。在处理机上的一次运行过程。进程具有两个基本特征:进程具有两个基本特征: 1 1)、动态性)、动态性 2 2)、并发性)、并发性3.2 3.2 进程及其状态变化进程及其状态变化3.2.1 3.2.1 进程的定义及特征进程的定义及特征3.2.2 3.2.2 进程的状态及其变化进程的状态及其变化1 1)基本状态转换图(进程是一个有生命的东西)基本状态转换图(进程是一个有生命的东西)程序执行必须由外存装入内存。程序执行必须由外存装入内存。就绪进程获得就绪进程获得CPUCPU转到执行。转到执行。分配分配CPUCPU时同时分配时间片。时同时分配时间

9、片。在进程等待某个事件发生时让出在进程等待某个事件发生时让出CPU CPU ,此时,此时CPUCPU去执行别的程序。这正是多道程序的根本体现。去执行别的程序。这正是多道程序的根本体现。进程基本状态转换图 执行执行创建就绪就绪封锁封锁终止终止调度选中调度选中时间片到时间片到等待某个事件等待某个事件发生发生(例如等待例如等待数据输入结束数据输入结束 )等待的事件发等待的事件发生了(例如数生了(例如数据输入结束)据输入结束)*注:封锁状态又称为:注:封锁状态又称为: 阻塞状态阻塞状态 等待状态等待状态 睡眠状态睡眠状态执行分为:执行分为: 用户态执行用户态执行 核心态执行核心态执行就绪分为:就绪分为

10、: 内存就绪内存就绪 外存就绪外存就绪2)UNIX系统进程状态转换图系统进程状态转换图进程构成进程构成:程序、数据、进程控制块程序、数据、进程控制块进程控制块进程控制块(简称为(简称为PCBPCB):):是包含进程的描述信息和控制信息是包含进程的描述信息和控制信息的数据结构,是进程动态特性的集中反映,是进程存在的唯一标志的数据结构,是进程动态特性的集中反映,是进程存在的唯一标志PCBPCB程序程序数据数据PCBPCB数数据据程程序序PCB1PCB1数数据据1 1 程程序序PCB2PCB2数数据据2 2(a)程序和数据混合程序和数据混合 (b)程序和数据分离程序和数据分离(c) 基本共享模式基本

11、共享模式进程构成的物理表示进程构成的物理表示:纯码:可被共享的程序,由指令和常量构成。纯码:可被共享的程序,由指令和常量构成。3.3 3.3 进程构成及进程控制块进程构成及进程控制块3.3.1 3.3.1 进程的构成进程的构成 每个进程都有一个进程控制块,进程与进程控制块一一对应每个进程都有一个进程控制块,进程与进程控制块一一对应; ; 所有进程的控制块构成了系统的进程控制块表所有进程的控制块构成了系统的进程控制块表; ; 进程控制表可以定义为一个结构数组,系统初始时均为空闲进程控制表可以定义为一个结构数组,系统初始时均为空闲; ; 每当创建一个进程,操作系统就为此进程分配一个空闲的进程每当创

12、建一个进程,操作系统就为此进程分配一个空闲的进程控制块并填写相应信息;控制块并填写相应信息; 每当撤消一个进程,操作系统就释放此进程占用的进程控制块每当撤消一个进程,操作系统就释放此进程占用的进程控制块并把其置为空闲。并把其置为空闲。关于进程控制块关于进程控制块: :3.3.1 3.3.1 进程的构成进程的构成3.3.2 PCB的组成(1 1)描述信息:)描述信息: 进程名或进程标识号、用户名或用户标识号、家族关系进程名或进程标识号、用户名或用户标识号、家族关系; ;(2 2)控制信息:)控制信息: 进程当前状态、进程优先级、各种计时信息、通信信息进程当前状态、进程优先级、各种计时信息、通信信

13、息; ;(3 3)资源管理信息:)资源管理信息: 内存起始地址、占用内存大小、管理用数据结构指针、输入内存起始地址、占用内存大小、管理用数据结构指针、输入 输出设备的设备号、指向文件系统的指针输出设备的设备号、指向文件系统的指针; ;(4 4)CPUCPU现场保护信息:现场保护信息: 为使得进程下次重新获得为使得进程下次重新获得CPUCPU能够正常执行下去所需要保存能够正常执行下去所需要保存 的信息,例如的信息,例如: : 程序计数器、处理机状态字程序计数器、处理机状态字. .3.3.3 3.3.3 进程上下文进程上下文(参见(参见P45P45)进程上下文实际上是进程执行活动全过程的静态描述进

14、程上下文实际上是进程执行活动全过程的静态描述包括计算机系统中与执行该进程有关的各种寄存器的值、程序段包括计算机系统中与执行该进程有关的各种寄存器的值、程序段在经过编译之后形成的机器指令代码集(或称正文段)、数据集在经过编译之后形成的机器指令代码集(或称正文段)、数据集及各种堆栈值和及各种堆栈值和PCBPCB结构结构( (如下图如下图3)3)进程控制块分为:进程控制块分为: 进程基本控制块(进程基本控制块(procproc结构)结构)进程扩充控制块(进程扩充控制块(useruser结构)结构) 数据段包括:数据段包括:用户数据区(用户数据区(C C程序中的外部变量、静态局部变量)程序中的外部变量

15、、静态局部变量)用户栈:执行用户程序代码时的动态存储分配区域用户栈:执行用户程序代码时的动态存储分配区域核心栈:执行系统程序代码时的动态存储分配区域核心栈:执行系统程序代码时的动态存储分配区域useruser结构结构UNIXUNIX系统进程上下文包括系统进程上下文包括: : 进程基本控制块、共享正文段和数据段进程基本控制块、共享正文段和数据段3.3.4 UNIX系统进程上下文系统进程上下文(参见(参见P46、P150)proc结构(结构(UNIX版本之一):版本之一):Structchar p_uid 进程所属的用户标识数进程所属的用户标识数 p_pid 进程标识数进程标识数 p_ppid 父

16、进程标识数父进程标识数 p_stat 进程状态(值为进程状态(值为NULL、SSLEEP、SWAIT、 SRUN、SSTOP等)等) p_flag 进程特征,表示是系统进程还是用户进程,是否进程特征,表示是系统进程还是用户进程,是否在内存等在内存等 p_pri 进程优先数进程优先数int p_time 在内存或外存驻留时间在内存或外存驻留时间p_cpu 用于计算动态优先数用于计算动态优先数p_nice 初始优先数初始优先数p_addr 数据段起始地址数据段起始地址p_size 数据段长度数据段长度p_textp 指向正文段的指向正文段的text结构结构p_wchan 等待原因等待原因p_sig

17、 软中断代码软中断代码p_ttyp 指向对应终端的指向对应终端的tty结构结构procNPROCuser结构包括下列有关项目:结构包括下列有关项目:u_uid,u_gid 用户标识数、用户组标识数用户标识数、用户组标识数u_rsav2 指向核心栈中进程现场保护区的指针指向核心栈中进程现场保护区的指针u_procp、u_tsize、u_dsize、u_usize、指向进程、指向进程proc结构结构的指针、正文段的长度、用户数据区的长度、用户栈的长度的指针、正文段的长度、用户数据区的长度、用户栈的长度u_arg5 存放系统调用参数和返回值存放系统调用参数和返回值u_ofileNOFILE 进程打开

18、文件表进程打开文件表u_base 文件读操作时指向目标区、文件写操作时指向源区文件读操作时指向目标区、文件写操作时指向源区u_utime、u_stime 进程在用户态、核心态下的运行时间进程在用户态、核心态下的运行时间、每个共享正文段都由一个每个共享正文段都由一个text结构描述结构描述text结构组成为:结构组成为:x_daddr共享正文段在盘交换区上的起始地址共享正文段在盘交换区上的起始地址x_caddr共享正文段在内存中的起始地址共享正文段在内存中的起始地址x_size共享正文段长度共享正文段长度x_iptr指向共享正文段所在文件的控制块指向共享正文段所在文件的控制块x_count共享该

19、正文段的进程数共享该正文段的进程数x_ccount共享该正文段且上下文在内存的进程数共享该正文段且上下文在内存的进程数 p_addr p_textp proc表表 x_caddrx_size . text表表 p_addr p_textp常驻内存部分常驻内存部分procitextk 用户栈用户栈用户数据区用户数据区核心栈核心栈User结构结构 共享正文段共享正文段 数据段数据段非常驻内存部分非常驻内存部分procj操作系统区操作系统区 (常驻常驻)用户程序区用户程序区 (非常驻非常驻)内存空间内存空间* *提问:提问: 1 1)procproc结构和结构和texttext结构为什么不能合并?结

20、构为什么不能合并? 2 2)用户栈与核心栈的用途有什么区别?)用户栈与核心栈的用途有什么区别?3.43.4进程调度(调度决定系统的性能)进程调度(调度决定系统的性能)3.4.13.4.1调度的基本概念调度的基本概念 一、高级、中级、低级调度一、高级、中级、低级调度、高级调度(作业调度):从后备作业中选取若、高级调度(作业调度):从后备作业中选取若干个作业到内存投入运行(决定将哪个在外存输干个作业到内存投入运行(决定将哪个在外存输入井中处于后备状态的作业调入内存)入井中处于后备状态的作业调入内存)2 2、中级调度(交换调度)、中级调度(交换调度) :将进程的程序和数据:将进程的程序和数据部分在内

21、存和外存交换区之间的调入调出部分在内存和外存交换区之间的调入调出3 3、低级调度(进程调度、低级调度(进程调度或线程调度) :按照某种:按照某种策略和方法选取一个处于就绪状态的进程策略和方法选取一个处于就绪状态的进程或线程占用处理机(决定就绪队列中的哪个进程占用处理机(决定就绪队列中的哪个进程或线程获得获得CPUCPU)二、进程调度方式二、进程调度方式1 1、非剥夺调度方式:一进程获得、非剥夺调度方式:一进程获得CPUCPU后一直运行下后一直运行下去,直到进程结束或需要等待某事件发生(如等待去,直到进程结束或需要等待某事件发生(如等待I/OI/O完成、等待分配到资源等)而被封锁时完成、等待分配

22、到资源等)而被封锁时 优点:简单、系统开销小优点:简单、系统开销小 缺点:可能导致系统性能恶化缺点:可能导致系统性能恶化1 1)、紧急任务到达时不能立即投入运行)、紧急任务到达时不能立即投入运行2 2)、若干后到的短作业需要等到长作业运行完)、若干后到的短作业需要等到长作业运行完成后才能投入运行,导致作业的周转时间增长成后才能投入运行,导致作业的周转时间增长例如:三个进程例如:三个进程P1P1、P2 P2 、 P3P3先后(但又几乎同时)先后(但又几乎同时)到达,他们分别需要到达,他们分别需要2020、4 4、2 2个时间单位,若它们个时间单位,若它们就按就按P1P1、P2 P2 、 P3P3

23、的顺序执行且不可剥夺,则周转的顺序执行且不可剥夺,则周转时间(从到达到完成的时间)分别为时间(从到达到完成的时间)分别为2020、2424、2626,平均周转时间为平均周转时间为23.3323.33个时间单位个时间单位. .2 2、剥夺调度方式:一个进程正在、剥夺调度方式:一个进程正在CPUCPU上运行时,上运行时,系统可以基于某种原则剥夺已分配给它的系统可以基于某种原则剥夺已分配给它的CPU CPU ,将之分配给其它进程将之分配给其它进程. . 剥夺原则:剥夺原则: 1 1)、优先级原则:优先级高的进程可以剥)、优先级原则:优先级高的进程可以剥夺优先级低的进程正在占用的夺优先级低的进程正在占

24、用的CPUCPU 2 2)、短进程原则:短进程到达后可以剥夺)、短进程原则:短进程到达后可以剥夺长进程正在占用的长进程正在占用的CPUCPU 3 3)、时间片原则:一个时间片用完后重新)、时间片原则:一个时间片用完后重新调度调度对前例(三个进程P1、P2 、 P3先后(但又几乎同时)到达,他们分别需要20、4、2个时间单位)采用基于时间片原则的剥夺调度方式,如果2 2个时间单位为一个时间片,则P1、P2、P3的周转时间分别为2626、1010、6 6,平均周转时间为1414个时间单位.CPUP1P2P3P1P2P142681026(课堂要求同学练习分别画出1个时间单位和3时间单位为一个时间片的

25、时序图)TCPUP1P1 P2P2 P3P3P2P2 P3P3P1P11234P1P156P1P1P1P1P2P2P2P2789 1026进程进程 周转时间周转时间 P1 26 P1 26 P2 10 P2 10 P3 6 P3 6 平均平均 14 14CPUP1P1P2P2P1P136P3P3P1P1P2P28112612进程进程 周转时间周转时间 P1 26 P1 26 P2 12 P2 12 P3 8 P3 8 平均平均 15.3315.33TT3.4.2 3.4.2 进程调度算法进程调度算法、先进先出(、先进先出(FIFOFIFO)调度算法)调度算法 将用户作业和就绪进程按提交顺序或变

26、为就绪状态的先将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理后排成队列,并按照先来先服务的方式进行调度处理、最高优先权优先调度算法(、最高优先权优先调度算法(FPFFPF) 总是把处理机分配给就绪队列中具有最高优先级的进程。总是把处理机分配给就绪队列中具有最高优先级的进程。 该算法的关键是任何确定进程的优先级。该算法的关键是任何确定进程的优先级。1 1)、静态优先级算法:进程的优先级在被创建是确定,在)、静态优先级算法:进程的优先级在被创建是确定,在整个运行期间不再改变。整个运行期间不再改变。 简单易行但不精确,有可能退化为非剥夺调度方式简单易行

27、但不精确,有可能退化为非剥夺调度方式3.4.2 3.4.2 进程调度算法进程调度算法 2 2)、动态优先级算法:基于某种原则,使进程的优先级随)、动态优先级算法:基于某种原则,使进程的优先级随着时间而变化。着时间而变化。 例如:让正在占用例如:让正在占用CPUCPU的进程的优先级降低,让正在等的进程的优先级降低,让正在等待待CPUCPU的进程的优先级升高。的进程的优先级升高。 、时间片轮转算法、时间片轮转算法 1 1)固定时间片轮转法:让就绪队列中的进程轮流占用)固定时间片轮转法:让就绪队列中的进程轮流占用CPUCPU,每一次占用时间不超过一个固定时间片大小。,每一次占用时间不超过一个固定时间

28、片大小。 2 2)可变时间片轮转法:每次选中一个进程占用)可变时间片轮转法:每次选中一个进程占用CPUCPU前,前,根据进程(或其所属的作业)的类型来确定时间片的大小。根据进程(或其所属的作业)的类型来确定时间片的大小。、多级队列算法、多级队列算法 就绪进程被分成若干个队列,对不同的队列采就绪进程被分成若干个队列,对不同的队列采用不同的调度算法用不同的调度算法 1 1)按进程所属的作业类型来分)按进程所属的作业类型来分 例例1:1:终端型作业终端型作业( (前台作业前台作业) )队列队列-固定时间片轮转法固定时间片轮转法 批处理型作业批处理型作业( (后台作业后台作业) )队列队列-可变时间片

29、轮转法可变时间片轮转法( (根据作业的长短根据作业的长短) ) 例例2:2:系统作业队列系统作业队列-动态优先级算法动态优先级算法 交互型作业队列交互型作业队列-固定时间片轮转法固定时间片轮转法 批处理型作业批处理型作业( (后台作业后台作业) )队列队列-FIFO-FIFO 2 2)按进程的动态优先级来分(多级反馈队列)按进程的动态优先级来分(多级反馈队列) 与与1 1相同的是就绪进程分成多个队列,不同的是一个进相同的是就绪进程分成多个队列,不同的是一个进程可在不同的队列之间转移。程可在不同的队列之间转移。 优先数确定的分为设置和计算两种。优先数确定的分为设置和计算两种。 规定:优先数小者优

30、先级高。规定:优先数小者优先级高。 设置优先数(设置优先数( -128-128100 100 ):对高、低优先级睡眠的进程。):对高、低优先级睡眠的进程。 计算优先数:对一般进程。计算优先数:对一般进程。 计算公式:计算公式:p_pri=min127,100+p_nice+p_cpu/16p_pri=min127,100+p_nice+p_cpu/16 计算时机:计算时机: 1 1)、每次时钟中断,占用)、每次时钟中断,占用CPUCPU的进程的的进程的p_cpup_cpu加加1 1; 2 2)、时钟中断每秒,所有进程的)、时钟中断每秒,所有进程的p_cpup_cpu减减1010直到直到0 0;

31、 3 3)、时钟中断每秒,对所有)、时钟中断每秒,对所有p_pri100p_pri100的进程的进程, ,重新计算其重新计算其p_prip_pri; 4 4)、软中断(系统调用)处理末尾重新计算当前进程的)、软中断(系统调用)处理末尾重新计算当前进程的p_prip_pri; 调度时机:中断处理末尾(准备返回到用户态时)调度时机:中断处理末尾(准备返回到用户态时)3.4.3 UNIX3.4.3 UNIX系统的进程调度算法系统的进程调度算法p_cpup_cpu与进程调度负反馈过程与进程调度负反馈过程*思考:属于进程调度算法、的哪种?思考:属于进程调度算法、的哪种?基本上属于动态优先级算法,并有多级

32、反馈队列特点。基本上属于动态优先级算法,并有多级反馈队列特点。1 1、工作步骤:、工作步骤:1 1)保护当前进程(旧进程)的进程调度现场)保护当前进程(旧进程)的进程调度现场2 2)按照进程调度算法选择一个就绪进程(新进程)按照进程调度算法选择一个就绪进程(新进程) 3 3)恢复新进程的进程调度现场)恢复新进程的进程调度现场2 2、进程调度现场、进程调度现场 为使得进程下次重新获得为使得进程下次重新获得CPUCPU能够正常执行下去所需要保存的能够正常执行下去所需要保存的信息,例如程序计数器、处理机状态字。信息,例如程序计数器、处理机状态字。工作步骤工作步骤 1 1、1 1)可描绘为:)可描绘为

33、: PCBi. PCBi. PCPCPCPC PCBi. PCBi. PSPS PSPS 、3.4.4 3.4.4 进程调度程序进程调度程序那么工作步骤那么工作步骤 1 1、3 3)如何描绘?)如何描绘?1 1、工作步骤:、工作步骤: PCBi. PCBi. PCPC PCPC1 1)保护旧进程现场)保护旧进程现场 PCBi. PCBi. PSPS PSPS 、2 2)选择一个新进程)选择一个新进程 PS PS PCBk. PCBk. PSPS 3 3)恢复新进程现场)恢复新进程现场 、 PC PC PCBk. PCBk. PCPC3.4.4 3.4.4 进程调度程序进程调度程序相同:相同:

34、保护的内容基本相同保护的内容基本相同不同:不同: 前者是在进程调度时保护,后者是在中断响应时保护前者是在进程调度时保护,后者是在中断响应时保护 前者的保护和恢复往往对应于不同的进程,后者的保护和前者的保护和恢复往往对应于不同的进程,后者的保护和 恢恢 复对应于相同的进程复对应于相同的进程 前者可保护在前者可保护在PCBPCB中,后者只能保护在堆栈中中,后者只能保护在堆栈中(中断可嵌套)(中断可嵌套)进程调度现场与中断现场有什么异同?3.5 3.5 进程控制及其应用进程控制及其应用 进程控制就是控制进程的状态变化,指进程进程控制就是控制进程的状态变化,指进程的创建、终止、封锁、解除封锁等工作。系

35、的创建、终止、封锁、解除封锁等工作。系统内部有相应的子程序来完成这些工作,并统内部有相应的子程序来完成这些工作,并向用户提供相应的系统调用,用户可通过这向用户提供相应的系统调用,用户可通过这些系统调用来控制自己的进程些系统调用来控制自己的进程 。3.5.1 UNIX3.5.1 UNIX系统中关于进程控制的系统调用系统中关于进程控制的系统调用(C语言函数形式参见P156-159)1 1、fork( )(fork( )(进程创建进程创建) ):调用者用它来建立一个子进程与调用者用它来建立一个子进程与自己独立地并发地运行,这个子进程基本上拷贝父进程的上下文自己独立地并发地运行,这个子进程基本上拷贝父

36、进程的上下文(正文段共享)。(正文段共享)。fork()fork()的返回值为的返回值为 -1-1表示进程创建不成功表示进程创建不成功在父进程的上下文中,在父进程的上下文中, fork()fork() 返回值为子进程标识号返回值为子进程标识号, ,大于大于0 0在子进程的上下文中,在子进程的上下文中, fork()fork()的返回值等于的返回值等于0 02 2、wait(wait(、)( )(进程挂起等待(封锁)进程挂起等待(封锁)) ):调用调用者进入封锁状态等待它的子进程终止。者进入封锁状态等待它的子进程终止。3 3、 exit()(exit()(进程终止进程终止) ):调用者将终止自己

37、,并解除调用者将终止自己,并解除父进程的封锁。父进程的封锁。4 4、execvp(filename,argp)(execvp(filename,argp)(进程上下文更换进程上下文更换) ):用文件名用文件名filenamefilename所指定的可执行文件来替换当前进程所指定的可执行文件来替换当前进程上下文中的程序和数据部分,并转入执行之。上下文中的程序和数据部分,并转入执行之。 fork()fork()系统调用的主要工作流程系统调用的主要工作流程(参见P157) 进程创建进程创建fork()fork()系统调用的效果系统调用的效果 (P(Pf f和和P Ps s分别表示父进程和子进程分别表

38、示父进程和子进程) )fork()fork()系统调用的粗略效果系统调用的粗略效果( (正文段和数据段不分正文段和数据段不分) )基本上基本上(P(Pf f和和P Ps s分别表示父进程和子进程分别表示父进程和子进程) )fork()系统调用的粗略效果(正文段和数据段不分) (Pf和Ps分别表示父进程和子进程, ro为PDP11机器的指令寄存器)Proc-Proc3.5.2 UNIX3.5.2 UNIX系统进程控制系统调用应用举例系统进程控制系统调用应用举例例:例:shellshell(命令处理程序)的实现流程(命令处理程序)的实现流程 (参见(参见P158P158)读入命令行读入命令行i=f

39、ork()父进程父进程wait(i)(等待子进程结束等待子进程结束)execvp(filename,)(用命令行对应的可执行文用命令行对应的可执行文件替换子进程上下文的程序件替换子进程上下文的程序和数据,并转入执行和数据,并转入执行)exit(、) (子进程自子进程自我终止并唤醒父进程我终止并唤醒父进程)N、外部命令外部命令 i=-1YYNi0YN(i=0)标准输入输出转向处理标准输入输出转向处理子进程子进程Shell主要工作流程主要工作流程 父进程父进程例:例:shellshell(命令处理程序)的实现程序框架(命令处理程序)的实现程序框架main()main() int i; int i;

40、 char command100 ; char command100 ; char char * * prompt = prompt = “$ $” ; ; while(printf( while(printf(“%s%s”, prompt), gets(command) !=NULL ), prompt), gets(command) !=NULL ) / / “显示显示UNIXUNIX系统终端提示符系统终端提示符$ $ ”, , “接收用户输入的字符串(命令行)接收用户输入的字符串(命令行)” ; 、 if(if(“commandcommand是外部命令是外部命令” while( (i=f

41、ork() = - 1 );while( (i=fork() = - 1 ); if (i = 0 )if (i = 0 ) execvp (filename, execvp (filename, 、 ) ) / / 更换子进程上下文的程序和数据更换子进程上下文的程序和数据 / filename/ filename为找到的为找到的commandcommand对应的可执行文件的路径名称对应的可执行文件的路径名称 elseelse wait(i); wait(i); 例:例:shellshell(命令处理程序)的一些说明(命令处理程序)的一些说明注意:注意:如果命令行结尾为后台命令符如果命令行结尾

42、为后台命令符“&”,则父进程不执,则父进程不执行行wait().wait().某些简单命令的程序代码就在某些简单命令的程序代码就在shellshell中,不必创建子中,不必创建子进程。特别是进程。特别是loginlogin,logoutlogout,chain (logoutchain (logout终止终端终止终端shellshell进程,进程,chainchain改变当前目录改变当前目录) )等等对于复杂的命令行要创建一系列进程,分别执行组对于复杂的命令行要创建一系列进程,分别执行组成复杂命令行的各个简单命令。例如:对命令行成复杂命令行的各个简单命令。例如:对命令行 C1|C2|C

43、3 C1|C2|C3 ,父进程,父进程P P要连续地创建三个子进程要连续地创建三个子进程P1,P2,P3P1,P2,P3,分别执行,分别执行C1C1,C2C2,C3C3,并等待他们,并等待他们都终止。都终止。对过程文件的解释执行程序也在对过程文件的解释执行程序也在shellshell中,比较复杂。中,比较复杂。例:典型的例:典型的C C语言并发程序结构语言并发程序结构main ( ) main ( ) int i;int i;P1;P1;while(i=fork() = -1);while(i=fork() = -1);if(i = 0)if(i = 0) Pc;Pc;exit();exit(

44、);elseelse P2;P2;wait();wait();P3;P3; P1P1 、 Pc Pc 、 P2 P2 、P3P3分别是不同的程序段。分别是不同的程序段。* *提问:提问:该程序的执行对应几个进程?该程序的执行对应几个进程?各进程执行哪些程序段?各进程执行哪些程序段?* *提问:提问:该程序的执行对应几个进程?该程序的执行对应几个进程?各进程执行哪些程序段?各进程执行哪些程序段?P1P1P2P2P3P3PcPc子进程子进程父进程父进程P2 与与Pc可以并发执行。可以并发执行。T TP1P1P2P2P3P3PcPc父进程父进程原题执行效果图示原题执行效果图示( (P2 P2 与与P

45、cPc并发执行并发执行) )T TP1P1P2P2P3P3PcPcT TP1P1P2P2P3P3PcPcT T省掉省掉wait(i)wait(i)语句执行效果图示语句执行效果图示省掉省掉exit()exit()语句执行效果图示语句执行效果图示P3P3父进程父进程父进程父进程子进程子进程子进程子进程子进程子进程例:例:C C语言并发程序结构之二语言并发程序结构之二main ( ) main ( ) int i;int i;P1;P1;while(i=fork() = -1);while(i=fork() = -1);if(i = 0)if(i = 0) Pc;Pc;i=fork() ;i=for

46、k() ;exit(); exit(); elseelse P2;P2;i=fork() ;i=fork() ;wait(); wait(); P3;P3; * *提问:提问:该程序的执行对应几个进程?该程序的执行对应几个进程?各进程什么关系?各进程什么关系?如果省略如果省略“exit();exit();”会怎样?会怎样?如果省略如果省略“wait();wait();”会怎样?会怎样? P1P1P2P2P3P3PcPcP Pf fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3P Pf fP Ps1s1P Ps2s2P Ps1ss1s。main ( ) main ( ) int i

47、; int i; P1; P1; while(i=fork() = -1); while(i=fork() = -1); if(i = 0) if(i = 0) Pc; Pc; i=fork() ; i=fork() ; exit(); exit(); else else P2;P2;i=fork() ;i=fork() ;wait(); wait(); P3; P3; P1P1P2P2P3P3PcPcP Pf fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3原题执行效果图示原题执行效果图示(P2 (P2 与与PcPc并发执行并发执行) )P1P1P2P2P3P3PcPcP Pf

48、 fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3P1P1P2P2P3P3PcPcP Pf fT TP Ps1s1P Ps2s2P Ps1ss1sP3P3省略省略“exit();”exit();”的时序图的时序图省略省略“wait();”wait();”的时序图的时序图main ( ) main ( ) int i;int i;P1; while(i=fork()=-1);P1; while(i=fork()=-1);if(i=0)if(i=0) Pc;Pc; while(i=fork()=-1); while(i=fork()=-1);if(i=0)if(i=0) P1; ex

49、it() P1; exit()elseelse P2; wait(); P2; wait(); exit() exit() elseelse P2; while(i=fork()=-1); P2; while(i=fork()=-1); if(i=0) if(i=0) P21; exit() P21; exit() else else P22 P22 wait(); wait(); P3;P3; 例:使用例:使用fork()fork()的的C C语言程序的例子语言程序的例子#include #include main() main() int pidint pid,i; i; while(pi

50、d=fork()=-1); while(pid=fork()=-1); if(pid!=0) if(pid!=0) while(1) while(1) for(i=0;i100000000;i+); for(i=0;i100000000;i+); printf(parent); printf(parent); else else while(1) while(1) for(i=0;i100000000;i+); for(i=0;i100000000;i+); printf(child); printf(child); 例:使用例:使用fork()fork()的的C C语言程序的例子语言程序的例

51、子 创建一个三进程的程序,第一个子进程显示创建一个三进程的程序,第一个子进程显示a,a,第二个子进程显示第二个子进程显示b,b,父进程显示父进程显示c c。 多次执行,并分析执行结果产生的原因。多次执行,并分析执行结果产生的原因。#include #include main() main() int pid,pid1; int pid,pid1; while(pid=fork()= =-1); while(pid=fork()= =-1); if(pid!=0) if(pid!=0) While(pid1=fork()= =-1); While(pid1=fork()= =-1); if(pi

52、d1!=0) if(pid1!=0) printf( printf(“c c”); ); else else printf( printf(“b b”); ); else else printf( printf(“a a”); ); 例:使用例:使用fork()fork()的的C C语言程序的例子语言程序的例子 创建一个三进程的程序,第一个子进程显示创建一个三进程的程序,第一个子进程显示a,a,第二个子进程显示第二个子进程显示b,b,父进程显示父进程显示c c。 多次执行,并分析执行结果产生的原因。多次执行,并分析执行结果产生的原因。#include #include main() main(

53、) int pid,pid1; int pid,pid1; while(pid=fork()= =-1); while(pid=fork()= =-1); if(pid!=0) if(pid!=0) While(pid1=fork()= =-1); While(pid1=fork()= =-1); if(pid1!=0) if(pid1!=0) printf( printf(“c c”); ); else else printf( printf(“b b”); ); else else printf( printf(“a a”); ); 程序运行结果可能是程序运行结果可能是abc,abc,也可

54、能是也可能是cba,cba,还可能是还可能是bcabca、acbacb、cabcab、cbacba等。等。出现多种运行结果主要由于父进程创建出现多种运行结果主要由于父进程创建子进程之后,系统的调度是随机的,可子进程之后,系统的调度是随机的,可能先调度子进程,也可能先调度父进程。能先调度子进程,也可能先调度父进程。例例3 3:进程并发的文件拷贝程序:进程并发的文件拷贝程序(先参见(先参见P34P34、P71P71)#include #include #define PMODE 0644#define PMODE 0644#define BSIZE 512#define BSIZE 512main

55、(int argc, char main(int argc, char * *argv)argv) int x, fdr, fdw, n, fdp2int x, fdr, fdw, n, fdp2; char abufBSIZEchar abufBSIZE; fdr=open(argv1,0);fdr=open(argv1,0); fdw=open(argv2, PMODE);fdw=open(argv2, PMODE); pipe(fdp);pipe(fdp); while(x=fork()=-1);while(x=fork()=-1); if (x=0)if (x=0) while(n=r

56、ead(fdr,abuf,BSIZE)0)while(n=read(fdr,abuf,BSIZE)0) write(fdp1,abuf,n);write(fdp1,abuf,n); elseelse while(n=read(fdp0,abuf,BSIZE)0)while(n=read(fdp0,abuf,BSIZE)0) write(fdw,abuf,n);write(fdw,abuf,n); 3.5.2 UNIX3.5.2 UNIX系统启动及进程树的形成系统启动及进程树的形成3.5.2 UNIX3.5.2 UNIX系统启动及进程树的形成系统启动及进程树的形成UNIXUNIX进程的树型体系进

57、程的树型体系 P0P1P2nP20P2iP30P400#进程进程1#进程进程终端进程终端进程命令行对应的进程命令行对应的进程程序中创建的子进程程序中创建的子进程。P3m。P4k3.6.13.6.1进程同步进程同步共同完成某项任务的多个进程往往要在并发执行过程的某共同完成某项任务的多个进程往往要在并发执行过程的某些点上相互等待、互通消息,这些进程之间具有直接的逻辑的些点上相互等待、互通消息,这些进程之间具有直接的逻辑的制约关系。制约关系。例例1 1:PiPi、PcPc和和PoPo分别为输入进程、计算进程和输出进程,分别为输入进程、计算进程和输出进程,PiPi 输入缓冲区输入缓冲区 PcPc 输出

58、缓冲区输出缓冲区 PoPo这些进程之间的同步关系为:这些进程之间的同步关系为:)、)、PiPi与与PcPc同步同步a) a) 输入缓冲区满时,输入缓冲区满时,PiPi要等待要等待PcPcb) b) 输入缓冲区空时,输入缓冲区空时,PcPc要等待要等待PiPi)、)、PcPc与与PoPo同步同步a) a) 输出缓冲区满时,输出缓冲区满时,PcPc要等待要等待PoPob) b) 输出缓冲区空时,输出缓冲区空时,PoPo要等待要等待PcPc3.6 3.6 进程通信进程通信由进程的并发执行和资源共享引起的进程之间相由进程的并发执行和资源共享引起的进程之间相互制约的等待或互通消息。互制约的等待或互通消息

59、。例2:读写管道文件的进程之间的同步关系为:Pw(写管道进程写管道进程) Pr(读管道进程读管道进程) 管道文件管道文件 a) 管道文件空时,管道文件空时,Pr要等待要等待Pwb) 管道文件满时,管道文件满时,Pw要等待要等待Pr3.6.23.6.2进程互斥进程互斥系统中本来没有逻辑关系的多个进程因为竞争使用资源而产生的间接制约关系。例如:系统中countp表示空闲打印机的台数,每个进程释放打印机都会执行 countp + +,所以countp为共享变量。设当前countp=0,之后执行的两个进程P1和P2都有释放打印机的操作,即都要执行下列程序段A(相当于语句 countp + +)(R为寄

60、存器): R = countpA R = R + 1 中断 countp = R1)如果P1、P2依次执行程序段A,则countp等于2,结果正确。2)如果P1先进入程序段A,执行完“R = R + 1”指令后发生中断,中断处理后进程调度选中P2占用处理机,P2执行完程序段A,、。之后P1再次获得处理机执行“countp = R” 指令后countp等于1,结果错误。设countp的初值为0P1: R countp countp=0 R=0 R R+1 countp=0 R=1中断处理进程调度程序(保护P1现场:现场中R=1;调度选中P2)P2: R countp countp=0 R=0 R R+1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论