现代操作系统

进程间通信

进程间通信的三个问题

信息传递

关键活动不交叉,抢火车票问题

处理顺序问题,进程间相互依赖,生产者消费者问题

条件竞争

当两个进程和线程同时访问共享的数据的时候他的结果依赖于每个进程执行的时间顺序。

临界区

访问共享数据的那一段代码就叫临界区

忙等待互斥方法

下面的几种方法都是要全部全用CPU,所以叫做忙等待

屏蔽中断

在单核CPU中,程序屏蔽系统中断,使得程序在访问临界区的时候不会切到另一个程序中去。

锁变量

用一个全局变量来做标记,先获得的就把它标记一下,但是这样会产生条件竞争。

忙等待(busy waiting),连续测试一个变量直到某个为止。这种方式非常的浪费CPU。只有在等待时间非常短的情况下,才会使用。

自旋锁(spin lock),用于忙等待的。因为忙等待基本上就是一个无限循环然后去测试一个值,i所以像个旋转的锁。

spinlock例子
这段代码的疑问是,这个函数多进程的,那么她怎么样去读取这个turn变量。因为每个进程都有自己的地址空间,除非它使用的是共享内存的方式。

Peterson解法

严格轮换,一个进程使用完之后再交给另外一个进程每个进程每次只能执行一次。考虑两个进程同时执行到turn=process的时候,这是没关系的。

代码

TSL硬件指令

先从内存中把lock读到寄存器当中,把内存中lock值设为非零。然后CPU区把内存总线锁住,其他的CPU不能访问内存,直到指令执行结束。

互斥量

互斥量是一种简化版的信号量,只有加/解锁这两种状态。对用户空间线程来说很轻巧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • word直接复制来了,格式就不改了。至于这门课怎么复习,只要平时实验都认真完成、报告认真写,平时分都很高;考试的话...
    Jozhn阅读 10,166评论 0 8
  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 9,628评论 0 23
  • 5.4路静娟【同读一本书】《59秒心理学》 正文:究竟什么才能暴露出撒谎者呢?尽管撒谎并不一定使撒谎者感受到压力,...
    台一DDM路静娟阅读 3,875评论 0 0
  • 四 苟董终于出差回来了,满面春风,职场走了一圈,逢人就主动微笑着打招呼,这在过去并不多见,看来这趟出去办的事很顺利...
    天域黎叔阅读 2,885评论 0 3
  • 这两天一直在看一部最近大火的韩剧《请回答1988》,昨天看到的一句话却引发了我的一些想法。“贫穷不是罪,不漂亮...
    挽萤酱Wine阅读 5,835评论 3 2