欢迎来到天天文库
浏览记录
ID:57058148
大小:109.00 KB
页数:35页
时间:2020-07-30
《Linux内核与编程课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、提纲结束进程间通信概述目标问题——哲学家进餐问题问题描述错误与不好的解法并行度较高的解法Linux高级IPC机制概述SystemV信号灯SystemV共享内存区实现的其他问题实习题进程间通信概述(1):引子#include#includeintresult;main(){pid_tpid;result=0;pid=fork();if(pid<0)exit(-1);if(pid){pid=fork();if(pid<0)exit(-1);if(pid==0){sleep(3);result=result+20;ex
2、it(0);}}else{sleep(3);result=result+10;exit(0);}while(wait((int*)0)!=-1);printf("%d",result);exit(0);}输出结果是什么?进程间通信概述(2)进程是相互独立的,进程间的通信需要专门的机制。进程之间的通信可以经由文件系统,但实际使用较为复杂(例如,需要锁机制)。UNIXIPC(InterProcessCommunication)机制是各种进程通信方式的统称。Linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。进程间通信概述(3)对于UNIX的发
3、展,贝尔实验室和BSD在进程间通信方面的侧重点有所不同:贝尔实验室对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“SystemVIPC”,通信进程局限在单个计算机内;BSD则主要考虑跨计算机的进程间通信,形成了基于套接口(socket)的进程间通信机制。进程间通信概述(4)返回最初的UNIXIPCSystemVIPC基于Socket的IPCLinuxIPCPOSIXIPC最初的UnixIPC:信号、管道、FIFO;SystemVIPC:消息队列、信号量、共享内存区;POSIXIPC:消息队列、信号量、共享内存区。哲学家进餐问题的描述五个哲学家围坐在一张圆桌周围,每个哲学家
4、面前都有一碗米饭,相邻的两碗之间有一支筷子(如图)。哲学家的生活包含两种活动:即吃饭和思考。当一个哲学家觉得饿时,他就试图分两次去取他左边和右边的筷子,每次拿起一支,但不分次序。如果成功地获得了一双筷子,他就开始吃饭,吃完以后放下筷子继续思考。这样,问题就是,为每个哲学家写一段程序来描述其行为,要求不死锁。返回错误与不好的解法(1)解法一:可能进入“死锁”状态#defineN5voidphilosopher(inti){while(TRUE){think();take-chopstick(i);take-chopstick((i+1)%N);eat();put-chopstick(i)
5、;put-chopstick((i+1)%N);}}若每个哲学家进程都运行到此句后发生进程切换,则进入死锁。错误与不好的解法(2)#defineN5voidphilosopher(inti){while(TRUE){think();do{take-chopstick(i);if(can-take-chopstick((i+1)%N))break;elseput-chopstick(i);}while(TRUE);eat();put-chopstick(i);put-chopstick((i+1)%N);}}解法二:可能进入“饥饿”状态不妨假设此函数能做到“测试且设置”。这种解法可能会造
6、成下面情况:哲学家们不断地重复“拿起各自左边的筷子又放下”的动作,谁也不能进餐。注意:这时和解法一的状态不同,这时进程都没有阻塞。错误与不好的解法(3)#defineN5typedefintsemaphore;semaphoremutex=1;voidphilosopher(inti){while(TRUE){think();down(mutex);take-chopstick(i);take-chopstick((i+1)%N);eat();put-chopstick(i);put-chopstick((i+1)%N);up(mutex);}}返回解法三:可行但效率低下本解法从理论上
7、可行,但从实际角来看,有一局限性:同一时刻只能有一位哲学家进餐。而这里有五支筷子,实际上应能允许两位哲学家同时进餐。并行度较高的解法(1)#defineN5#defineLEFT(i+N-1)%N#defineRIGHT(i+1)%N#defineTHINKING0#defineHUNGRY1#defineEATING2typedefintsemaphore;intstate[N];semaphoremutex=1;semaphores[N];
此文档下载收益归作者所有