操作系统学习笔记(11) 互斥和同步的解决方案-消息传递

来源:互联网 发布:曦力音视频转换软件 编辑:程序博客网 时间:2024/06/06 05:33

  1 进程的互斥与同步方法:消息传递
  2
  3 低级通信:进程之间交换控制信息的过程。
  4 高级通信:进程之间交换批量数据的过程。
  5
  6 进程之间的同步与互斥是低级通信。
  7
  8 常见的进程通信机制:
  9
 10     基于共享储存区方式:
 11     1。不要求数据移动,一般用于本地通信。
 12     2。通过程序设计来实现。
 13     3。OS在内存中划分一块区域作为共享区。
 14
 15     消息传递机制:
 16     1。消息的格式:{消息头,消息体}。
 17     2。进程通信的两条原语:
 18         Send(destination, message)
 19         Receive(source, message)
 20     3。消息传递的同步:(3种方式)
 21         阻塞发送,阻塞接收
 22         不阻塞发送,阻塞接收
 23         不阻塞发送,不阻塞接收
 24     邮箱机制:
 25
 26 利用消息传递实现互斥:
 27     1。采用“不阻塞发送,阻塞接收”方式。
 28     2。邮箱初始化为一个“空”消息。
 29     算法:
 30     procedure p(int i){
 31         message msg;
 32         while(true){
 33             receive(mutex, msg);
 34             <临界区>;
 35             send(mutex, msg);
 36         }
 37     }
 38
 39     int main(){
 40         create_mailbox(mutex);
 41         send(mutex, null);
 42         p(1);
 43         p(2);
 44         ...
 45         p(n);
 46
 47         retrun 0;
 48     }
 49     注意:“空”消息,代表消息体为空。
 50
 51 利用消息传递解决生产者/消费者问题:
 52     //main
 53     int main(){
 54         create_mailbox(mayproduce);//创建共享数据区
 55         create_mailbox(mayconsume);//创建共享数据区
 56         //初始化为null
 57         for(i = 1; i <= capacity; ++i){
 58             send(mayproduce, null);
 59         }
 60         producer();
 61         consumer();
 62     }
 63     //procedure producer;
 64     producer(){
 65         var pmsg = message;
 66         while(true){
 67             receive(mayproduce, pmsg);
 68             pmsg = produce;
 69             send(mayconsume, pmsg);
 70         }
 71     }
 72     //procedure consumer
 73     consumer(){
 74         var cmsg = message;
 75         while(true){
 76             receive(mayconsume, cmsg);
 77             consume(cmsg);
 78             send(mayproduce, null);
 79         }
 80     }
 81
 82

原创粉丝点击