第三讲进程通信与控制PPT格式课件下载.ppt
《第三讲进程通信与控制PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《第三讲进程通信与控制PPT格式课件下载.ppt(132页珍藏版)》请在冰豆网上搜索。
Coutin;
Cout=1)X1X1-1:
AjX1;
输出一张票输出一张票else输出输出“票售完票售完”voidT2(X2)按旅客订票要求找到按旅客订票要求找到AjX2Aj;
if(X2=1)X2X2-1:
AjX2;
输出一张票输出一张票else输出输出“票售完票售完”考虑以下的执行次序:
(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出错原因是什么?
出错原因是什么?
余票额是共享变量!
没有建立对共享变量余票额是共享变量!
没有建立对共享变量的使用与保护机制。
的使用与保护机制。
由以上的例子说明什么?
要想实现多道程序并发执行,必须设法对要想实现多道程序并发执行,必须设法对共享变量(资源)加入一定的管理机制和共享变量(资源)加入一定的管理机制和一定的保护措施,保证共享资源的一定的保护措施,保证共享资源的协调使协调使用用,以避免出现与时间有关的错误,以保,以避免出现与时间有关的错误,以保持并发程序的可再现性。
持并发程序的可再现性。
思考:
对共享变量(资源)如何加上思考:
对共享变量(资源)如何加上这种规则(机制)呢?
这种规则(机制)呢?
这是现这是现代操作系统必须解决的核心问题!
代操作系统必须解决的核心问题!
同步机制:
信号传递?
互斥机制:
加锁?
同步关系同步关系(亦称直接制约关系)(亦称直接制约关系):
指完成同一任务的伙伴进程间,因需指完成同一任务的伙伴进程间,因需要在某些位置上协调它们的工作而相互等要在某些位置上协调它们的工作而相互等待、相互交换信息所产生的制约关系。
待、相互交换信息所产生的制约关系。
如:
接力跑比赛中,运动员之间要配合默接力跑比赛中,运动员之间要配合默契。
一棒一棒接着跑。
契。
3.2进程的互斥与同步例例:
在计算机系统中对同一缓冲区的:
在计算机系统中对同一缓冲区的数据的输入与输出操作。
缓冲区满才能输数据的输入与输出操作。
缓冲区满才能输出,缓冲区空才能输入。
出,缓冲区空才能输入。
缓冲区缓冲区输入输入进程进程输出输出进程进程互斥关系互斥关系(亦称间接制约关系)(亦称间接制约关系):
即进程间因相互竞争使用独占型资源即进程间因相互竞争使用独占型资源(互斥资源)所产生的制约关系。
(互斥资源)所产生的制约关系。
例(例(11):
上例中):
上例中ECHOECHO程序中的变量程序中的变量OUTOUT和和ININ,例(例(22):
飞机订票系统中的余票额):
飞机订票系统中的余票额AjAj必必须互斥使用。
须互斥使用。
例(例(33):
多个用户进程同用一台打印机):
多个用户进程同用一台打印机时。
时。
既同步又要互斥的例子:
11、客车上的司机和售票员各司其职、客车上的司机和售票员各司其职为完成同一个运送乘客的任务相互配为完成同一个运送乘客的任务相互配合。
合。
互斥:
司机开车时售票员不要开门,互斥:
司机开车时售票员不要开门,售票员开门时司机不要开车;
售票员开门时司机不要开车;
同步:
司机停车时售票员才能开门,同步:
司机停车时售票员才能开门,售票员关门时司机才能开车)。
售票员关门时司机才能开车)。
正常行车正常行车到站停车到站停车启动汽车启动汽车售票售票开车门开车门关车门关车门司机进程司机进程售票员进程售票员进程互斥与同步的例子:
互斥与同步的例子:
22、有限缓冲区问题。
存时不要、有限缓冲区问题。
存时不要取,取时不要存。
有数据才能取,取时不要存。
有数据才能取,有空区才能存。
取,有空区才能存。
PkP2C1C2CmP1存存取取互斥与同步的例子:
33、读者与写者问题。
、读者与写者问题。
(Readers/WritersReaders/Writers问题)问题)44、哲学家就餐问题。
(就餐和思、哲学家就餐问题。
(就餐和思考需同步与互斥)考需同步与互斥)一一、两个基本概念:
、两个基本概念:
临界资源临界资源(criticalresource):
):
一次仅允一次仅允许一个进程使用的资源。
许一个进程使用的资源。
上例如:
上例ECHO程序中的共享变量程序中的共享变量IN,OUT,飞机订票系统的余票额飞机订票系统的余票额Aj等。
等。
3.33.3临界资源和临界区临界资源和临界区临界段(区)临界段(区)(criticalsection):
各进程各进程必须互斥执行的程序段。
必须互斥执行的程序段。
飞机余票额如:
飞机余票额Aj的操作的程序段。
的操作的程序段。
u二、临界资源须互斥使用例例11打印机:
打印机:
P1,P2P1,P2两进程使用同一打印机。
两进程使用同一打印机。
如果不互斥使用会交叉输出。
例例22共享变量:
共享变量:
共享变量是临界资源。
CobeginvoidA()N=count;
N=N+100;
count=N;
voidB()M=count;
M=M+200;
count=M;
Coend;
如下例对共享变量如下例对共享变量countcount的互斥访问。
的互斥访问。
互互斥斥执执行行例例:
若若count为为300,如互斥执如互斥执行结果行结果count为为600,临界区临界区临界区临界区CobeginvoidA()N=count;
若不互斥若不互斥,可能结果为可能结果为500.(设(设count初值为初值为300)不不互互斥斥执执行行设设A在此处中断,在此处中断,执行完执行完B三、进程互斥进入临界区的一般结构三、进程互斥进入临界区的一般结构进入临界段之前要申请,获得批进入临界段之前要申请,获得批准方可进入;
准方可进入;
退出临界段之后要声明,以便其退出临界段之后要声明,以便其他进程进入。
他进程进入。
While
(1)进入区进入区临界区临界区退出区退出区剩余区(其余代码)剩余区(其余代码);
例如上例对共享变量例如上例对共享变量countcount的互斥访问。
临界区临界区临界区临界区Entrycode(Entrycode(请求独占请求独占)exitcode(exitcode(释放释放)Entrycode(Entrycode(请求独占请求独占)exitcode(exitcode(释放释放)例如:
对打印机(临界资源)的互斥使用例如:
对打印机(临界资源)的互斥使用Entrycode(Entrycode(请求独占请求独占)exitcode(exitcode(释释放放)使用打印机的程序段使用打印机的程序段P1P1临界区临界区Entrycode(Entrycode(请求独占请求独占)exitcode(exitcode(释释放放)使用打印机的程序段使用打印机的程序段P2P2临界区临界区临界资源临界资源四、临界区进入准则(同步机制)四、临界区进入准则(同步机制)准则准则11:
空闲让进。
若无进程进入空闲空闲让进。
若无进程进入空闲的临界区,一次仅允许一个进程进入。
的临界区,一次仅允许一个进程进入。
准则准则22:
忙则等待。
任何时候,处于临忙则等待。
任何时候,处于临界区内的进程不可多于一个,如果已有界区内的进程不可多于一个,如果已有进程进入自己的临界区,则其他进程必进程进入自己的临界区,则其他进程必须等待。
须等待。
准则准则33:
有限等待。
进入临界区的进程有限等待。
进入临界区的进程要在有限时间内退出,以便其他进程及要在有限时间内退出,以便其他进程及时进入自己的临界区。
时进入自己的临界区。
准则准则44:
让权等待。
如果进程不能进入让权等待。
如果进程不能进入自己的临界区,则应让出自己的临界区,则应让出CPUCPU,避免进程,避免进程出现出现“忙等忙等”现象。
现象。
3.4互斥实现方法互斥实现方法一、利用硬件方法解决进程互斥问题一、利用硬件方法解决进程互斥问题11、禁止中断禁止中断临界段不能被中断,以保证互斥。
临界段不能被中断,以保证互斥。
while
(1)while
(1);
缺点缺点:
(:
(11)代价较高,执行效率低;
)代价较高,执行效率低;
(22)不能用于多处理机系统。
)不能用于多处理机系统。
22、专用机器指令、专用机器指令(11)“TestandSetTestandSet”指令指令该指令功能描述为:
该指令功能描述为:
intts(staticintlock)intts(staticintlock)intts=lock;
intts=lock;
lock=1;
return(ts);
这里:
tsts函数作为一个原语执行(即不存在函数作为一个原语执行(即不存在中断)。
中断)。
locklock有两种状态:
当有两种状态:
当lock=0lock=0时,时,表示该资源空闲;
当表示该资源空闲;
当lock=1lock=1时,表示该资源正时,表示该资源正在被使用。
在被使用。
例例1:
利用:
利用testset指令实现互斥的循环进程描述:
指令实现互斥的循环进程描述:
P(i):
While
(1)while(ts(lock)No-op;
lock=0;
Main()lock=0;
cobeginp
(1);
P
(2);
P(n);
p
(1);
coend.假设进程假设进程P2欲进程临界区,调用过欲进程临界区,调用过程程P
(2),执行),执行ts(lock)后返回后返回ts为假,并置为假,并置lock=1,故故P2进入进入临界区,若此时有进程临界区,若此时有进程P1欲进入临欲进入临界区,调用界区,调用P
(1),执行测试执行测试ts(l