上海交通大学网络教育学院--计算机专业--操作系统作业---操作系统实验报告_进程与进程通信
1、 实验题目
2、 实验目的
掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。
3、 实验环境
Windows XP SP3
4、 实验原理
邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用send()向对方邮箱发邮件 receive()从自己邮箱取邮件, send()和 receive()的内部操作用户无需关心。因为邮箱在内存中实现,其空间有大小限制。其实send()和 receive()的内部实现主要还是要解决生产者与消费者问题。
5、 实验内容
进程通信的邮箱方式由操作系统提供形如send()和receive()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。
5.1、 Mutex和Semaphore区别
在windows环境下两者有着类似之处但不完全相同。
Semaphore可以比喻成是一个银行(临界区)有N人的服务窗口(最大允许同步进程数量),如果申请的客户(进程)少于N就可以办理业务,如果客户满了,就要等待某一个客户服务的结束。
Mutex可以比喻成是一个银行只有1各服务窗口,如果客户A正在办理,那么后续客户申请时只能等待,只有当客户A办理结束离开服务窗口时,后续客户依据申请顺序逐一获得被服务的资格。
Mutex在没有被任何线程所拥有时是有信号的,这时任何线程可以使用Wait functions去获取该对象的所有权。当Mutex被某个线程拥有后就处于没信号状态,并且只有当该线程使用ReleaseMutex释放该互斥对象时,它才能被其它线程获得。
在windows环境下一个线程中试图释放另个线程所拥有的Mutex是不会成功的,Mutex只能被所有者线程所释放。
在前面的例子中就是不允许插队。