欢迎来到天天文库
浏览记录
ID:59269080
大小:873.50 KB
页数:140页
时间:2020-09-22
《操作系统第3章进程通信与控制ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第三章进程同步与通信目的与要求:了解并发程序的高级语言表示与操作系统支持下的实现;同步与互斥问题。重点与难点:并发程序中的同步与互斥★并发与并行的区别并发是指多个任务在单处理机下分时运行,从宏观上看它们同时都在向前推进,但从微观上来看,它们正在分时地轮流使用处理机。并行是指多个任务在多个处理机上正在同时运行,从微观上看这些任务分别是在各自的物理处理机上分别运行。3.1并发原理----1.并发带来的问题回顾第2章程序并发执行的特征3:程序执行结果的不可再现性。计算结果与执行的速度有关,从而失去了可再现性。如对共享变量
2、的使用。例,有2个循环程序A和B,它们共享一个变量n。程序A:{n++;/*n=n+1}程序B:{cout<3、序A的一个语句,最后执行程序B的第二个语句。B:cout<>in;Out=in;cout<4、P1调用echo,在得到输入数据后被中断(假设输入的字符是‘X’,保存在变量in中)。Voidecho(){charout,in;{cin>>in;Out=in;Cout<>in;Out=in;Cout<5、却输出了y.Voidecho(){charout,in;Cin>>in;Out=in;Cout<6、成为此。互斥机制:加锁?(限制其他程序进入)Echo()程序在执行时不能被中断。即原子操作或称原语。再看一个与时间有关而发生错误的例子假定一个飞机订票系统有两个终端,同时运行以下程序段,产生两个进程T1和T2.(其中Aj为余票额)VoidT1(X1){按旅客订票要求找到AjX1=Aj;if(X1>=1){X1=X1-1:Aj=X1;输出一张票}else输出“票售完”}voidT2(X2){按旅客订票要求找到AjX2=Aj;if(X2>=1){X2=X2-1:Aj=X2;输出一张票}else输出“票售完”}考虑以下的7、执行次序:(a)和(b)按(a)的序列执行时,结果是正确的。按(b)的序列执行情况,则两个旅客可能各自都买到一张同天同次航班的机票,可是,Aj的值实际上只减去了1,造成余票数的不正确。设Aj=50则x1=50此时x2=50此时x1=49此时x2=49此时Aj=49此时Aj=49特别是,当某次航班只有一张余票时,就可能把这一张票同时售给了两位旅客,显然这是不能允许的。设Aj=1则x1=1此时x2=1此时x1=0此时x2=0此时Aj=0此时Aj=0出错原因是什么?余票额是共享变量!没有建立对共享变量的使用与保护机制。由8、以上的例子说明什么?要想实现多道程序并发执行,必须设法对共享变量(资源)加入一定的管理机制和一定的保护措施,保证共享资源的协调使用,以避免出现与时间有关的错误,以保持并发程序的可再现性。思考:对共享变量(资源)如何加上这种规则(机制)呢?——这是现代操作系统必须解决的核心问题!同步机制:信号传递?互斥机制:加锁?★同步关系(亦称直接制约关系):指完成同一任务
3、序A的一个语句,最后执行程序B的第二个语句。B:cout<>in;Out=in;cout<4、P1调用echo,在得到输入数据后被中断(假设输入的字符是‘X’,保存在变量in中)。Voidecho(){charout,in;{cin>>in;Out=in;Cout<>in;Out=in;Cout<5、却输出了y.Voidecho(){charout,in;Cin>>in;Out=in;Cout<6、成为此。互斥机制:加锁?(限制其他程序进入)Echo()程序在执行时不能被中断。即原子操作或称原语。再看一个与时间有关而发生错误的例子假定一个飞机订票系统有两个终端,同时运行以下程序段,产生两个进程T1和T2.(其中Aj为余票额)VoidT1(X1){按旅客订票要求找到AjX1=Aj;if(X1>=1){X1=X1-1:Aj=X1;输出一张票}else输出“票售完”}voidT2(X2){按旅客订票要求找到AjX2=Aj;if(X2>=1){X2=X2-1:Aj=X2;输出一张票}else输出“票售完”}考虑以下的7、执行次序:(a)和(b)按(a)的序列执行时,结果是正确的。按(b)的序列执行情况,则两个旅客可能各自都买到一张同天同次航班的机票,可是,Aj的值实际上只减去了1,造成余票数的不正确。设Aj=50则x1=50此时x2=50此时x1=49此时x2=49此时Aj=49此时Aj=49特别是,当某次航班只有一张余票时,就可能把这一张票同时售给了两位旅客,显然这是不能允许的。设Aj=1则x1=1此时x2=1此时x1=0此时x2=0此时Aj=0此时Aj=0出错原因是什么?余票额是共享变量!没有建立对共享变量的使用与保护机制。由8、以上的例子说明什么?要想实现多道程序并发执行,必须设法对共享变量(资源)加入一定的管理机制和一定的保护措施,保证共享资源的协调使用,以避免出现与时间有关的错误,以保持并发程序的可再现性。思考:对共享变量(资源)如何加上这种规则(机制)呢?——这是现代操作系统必须解决的核心问题!同步机制:信号传递?互斥机制:加锁?★同步关系(亦称直接制约关系):指完成同一任务
4、P1调用echo,在得到输入数据后被中断(假设输入的字符是‘X’,保存在变量in中)。Voidecho(){charout,in;{cin>>in;Out=in;Cout<>in;Out=in;Cout<5、却输出了y.Voidecho(){charout,in;Cin>>in;Out=in;Cout<6、成为此。互斥机制:加锁?(限制其他程序进入)Echo()程序在执行时不能被中断。即原子操作或称原语。再看一个与时间有关而发生错误的例子假定一个飞机订票系统有两个终端,同时运行以下程序段,产生两个进程T1和T2.(其中Aj为余票额)VoidT1(X1){按旅客订票要求找到AjX1=Aj;if(X1>=1){X1=X1-1:Aj=X1;输出一张票}else输出“票售完”}voidT2(X2){按旅客订票要求找到AjX2=Aj;if(X2>=1){X2=X2-1:Aj=X2;输出一张票}else输出“票售完”}考虑以下的7、执行次序:(a)和(b)按(a)的序列执行时,结果是正确的。按(b)的序列执行情况,则两个旅客可能各自都买到一张同天同次航班的机票,可是,Aj的值实际上只减去了1,造成余票数的不正确。设Aj=50则x1=50此时x2=50此时x1=49此时x2=49此时Aj=49此时Aj=49特别是,当某次航班只有一张余票时,就可能把这一张票同时售给了两位旅客,显然这是不能允许的。设Aj=1则x1=1此时x2=1此时x1=0此时x2=0此时Aj=0此时Aj=0出错原因是什么?余票额是共享变量!没有建立对共享变量的使用与保护机制。由8、以上的例子说明什么?要想实现多道程序并发执行,必须设法对共享变量(资源)加入一定的管理机制和一定的保护措施,保证共享资源的协调使用,以避免出现与时间有关的错误,以保持并发程序的可再现性。思考:对共享变量(资源)如何加上这种规则(机制)呢?——这是现代操作系统必须解决的核心问题!同步机制:信号传递?互斥机制:加锁?★同步关系(亦称直接制约关系):指完成同一任务
5、却输出了y.Voidecho(){charout,in;Cin>>in;Out=in;Cout<6、成为此。互斥机制:加锁?(限制其他程序进入)Echo()程序在执行时不能被中断。即原子操作或称原语。再看一个与时间有关而发生错误的例子假定一个飞机订票系统有两个终端,同时运行以下程序段,产生两个进程T1和T2.(其中Aj为余票额)VoidT1(X1){按旅客订票要求找到AjX1=Aj;if(X1>=1){X1=X1-1:Aj=X1;输出一张票}else输出“票售完”}voidT2(X2){按旅客订票要求找到AjX2=Aj;if(X2>=1){X2=X2-1:Aj=X2;输出一张票}else输出“票售完”}考虑以下的7、执行次序:(a)和(b)按(a)的序列执行时,结果是正确的。按(b)的序列执行情况,则两个旅客可能各自都买到一张同天同次航班的机票,可是,Aj的值实际上只减去了1,造成余票数的不正确。设Aj=50则x1=50此时x2=50此时x1=49此时x2=49此时Aj=49此时Aj=49特别是,当某次航班只有一张余票时,就可能把这一张票同时售给了两位旅客,显然这是不能允许的。设Aj=1则x1=1此时x2=1此时x1=0此时x2=0此时Aj=0此时Aj=0出错原因是什么?余票额是共享变量!没有建立对共享变量的使用与保护机制。由8、以上的例子说明什么?要想实现多道程序并发执行,必须设法对共享变量(资源)加入一定的管理机制和一定的保护措施,保证共享资源的协调使用,以避免出现与时间有关的错误,以保持并发程序的可再现性。思考:对共享变量(资源)如何加上这种规则(机制)呢?——这是现代操作系统必须解决的核心问题!同步机制:信号传递?互斥机制:加锁?★同步关系(亦称直接制约关系):指完成同一任务
6、成为此。互斥机制:加锁?(限制其他程序进入)Echo()程序在执行时不能被中断。即原子操作或称原语。再看一个与时间有关而发生错误的例子假定一个飞机订票系统有两个终端,同时运行以下程序段,产生两个进程T1和T2.(其中Aj为余票额)VoidT1(X1){按旅客订票要求找到AjX1=Aj;if(X1>=1){X1=X1-1:Aj=X1;输出一张票}else输出“票售完”}voidT2(X2){按旅客订票要求找到AjX2=Aj;if(X2>=1){X2=X2-1:Aj=X2;输出一张票}else输出“票售完”}考虑以下的
7、执行次序:(a)和(b)按(a)的序列执行时,结果是正确的。按(b)的序列执行情况,则两个旅客可能各自都买到一张同天同次航班的机票,可是,Aj的值实际上只减去了1,造成余票数的不正确。设Aj=50则x1=50此时x2=50此时x1=49此时x2=49此时Aj=49此时Aj=49特别是,当某次航班只有一张余票时,就可能把这一张票同时售给了两位旅客,显然这是不能允许的。设Aj=1则x1=1此时x2=1此时x1=0此时x2=0此时Aj=0此时Aj=0出错原因是什么?余票额是共享变量!没有建立对共享变量的使用与保护机制。由
8、以上的例子说明什么?要想实现多道程序并发执行,必须设法对共享变量(资源)加入一定的管理机制和一定的保护措施,保证共享资源的协调使用,以避免出现与时间有关的错误,以保持并发程序的可再现性。思考:对共享变量(资源)如何加上这种规则(机制)呢?——这是现代操作系统必须解决的核心问题!同步机制:信号传递?互斥机制:加锁?★同步关系(亦称直接制约关系):指完成同一任务
此文档下载收益归作者所有