欢迎来到天天文库
浏览记录
ID:39414405
大小:606.81 KB
页数:40页
时间:2019-07-02
《进程间通信与同步》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第二章进程管理进程(Process)线程(Thread)进程间通信与同步经典的IPC问题进程调度2.3进程间通信与同步进程间通信(InterProcessCommuni-cation,IPC):进程之间的信息交流与协调。并发进程之间的两种关系:相互独立:进程之间没有任何关联关系(直接的或间接的),仅有CPU竞争关系。无需通信,由进程调度器来协调(如Word、MP3);相互关联:进程之间存在着某种关联关系(直接或间接),需要相互通信。例如:共享内存变量、共享软硬件资源、数据传递、协同工作等。需要讨论的问题:进程间如何通信呢,如何来相互传递信息呢
2、?当两个或多个进程在访问共享资源时,如何确保它们不会相互妨碍——进程互斥问题;当进程之间存在着某种依存关系时,如何来调整它们运行的先后次序——进程同步问题。生活中的例子:教室座位、打饭窗口;一组同学做大作业。上述问题是否也适用于线程?2.3.1进程间通信方式低级通信:只能传递状态和整数值(控制信息)信号量(semaphore)信号(signal)高级通信:能够传送任意数量的数据共享内存(sharedmemory)消息传递(messagepassing)管道(pipe)能否共享内存单元(变量或缓冲区)?共享内存绝大多数现代的操作系统都提供了相应的方
3、法,来让各个进程共享它们地址空间当中的某些部分,即共享内存。在共享内存中,可以任意读写和使用任意的数据结构(缓冲区)。一组进程向共享内存中写,另一组进程从共享内存中读,通过这种方式实现两组进程间的信息交换。消息传递消息:由若干数据位组成;消息传递:进程之间通过发送和接收消息来交换信息;消息机制由OS来维护,包括定义寻址方式、认证协议、消息的大小等。一般提供两个操作:send(),发送一条消息;receive(),接收一条消息。如果两个任务P和Q想要进行通信,它们需要在两者之间建立一个通信链路;使用send()和receive()交换信息。管
4、道(pipe)管道通信由UNIX首创,由于其有效性,后来的一些系统相继引入了管道技术;管道通信以文件系统为基础,所谓管道即连接两个进程之间的一个打开的共享文件,专用于进程之间的数据通信;发送进程从管道的一端写入数据流,接收进程从管道的另一端按先进先出的顺序读出数据流;管道的读写操作即为文件操作fwrite/fread,数据流的长度和格式没有限制。2.3.2进程的互斥进程互斥的产生原因:进程宏观上并发执行,依靠时钟中断来实现微观上轮流执行;访问共享资源。【例子1】后台打印程序(两个进程同时想要访问共享数据)后台程序47share.txt4
5、7share.txt…next_free_slot=in;//7…第一步:进程A中断…next_free_slot=in;//7第二步:进程Bprog.n678file_bwrite“file_b”toitem7next_free_slot++;//8updatein;…8第三步:进程Awrite“file_a”toitem7next_free_slot++;//8updatein;…file_aoutin【例子2】两个进程,读-修改-写进程1进程2tmp1=count;tmp2=count;tmp1++;tmp2=tmp2+2;count=
6、tmp1;count=tmp2;请问:如果在这些进程执行之前,count变量的值为1,那么它最后的结果是多少?进程1进程2tmp1=count;(=1)interrupt...tmp2=count;(=1)tmp2=tmp2+2;(=3)count=tmp2;(=3)tmp1++;(=2)count=tmp1;(=2)情形1进程1进程2tmp2=count;(=1)interrupt...tmp1=count;(=1)tmp1++;(=2)count=tmp1;(=2)tmp2=tmp2+2;(=3)count=tmp2;(=3)
7、情形2进程1进程2tmp1=count;(=1)tmp1++;(=2)count=tmp1;(=2)tmp2=count;(=2)tmp2=tmp2+2;(=4)count=tmp2;(=4)情形3竞争状态(racecondition):两个或多个进程对同一共享数据同时进行读写操作,而最后的结果是不可预测的,它取决于各个进程具体运行情况。解决之道:在同一时刻,只允许一个进程访问该共享数据,即如果当前已有一个进程正在使用该数据,那么其他进程暂时不能访问。这就是互斥的概念。竞争状态问题的抽象描述把一个进程在运行过程中所做的事情分为两类:进程
8、内部的计算或其他的一些事情,肯定不会导致竞争状态的出现;对共享内存或共享文件的访问,可能会导致竞争状态的出现。我们把完成这类事情的那
此文档下载收益归作者所有