进程间通信(IPC)

  1. 如何传递信息?
  2. 如何确保多个进程在关键活动中不会出现交叉?
  3. 如何保证正确的顺序?

竞态条件

定义:两个或多个进程同时读写某些共享数据,最后的结果依赖于进程运行的精准时序

如何避免竞态条件?
关键在于进程同时读写共享数据,所以需要 “互斥

临界区

定义:对共享内存进行访问的程序片段


实现互斥的方案

  1. 屏蔽中断
    理由:CPU只有在发生时钟中断或其他中断时才会进行进程切换,屏蔽中断后CPU将不会切换到其他进程
    缺点:把屏蔽中断的权利交给用户进程时不明智的。如果系统是多处理器,则屏蔽中断仅仅对执行disable指令的那个CPU有效,其他CPU仍然继续运行,并且可以访问共享内存

  2. 锁变量
    Pass,跟共享内存一样的问题,会出现竞态条件

  3. 严格轮转法
    忙等待:连续测试一个变量直到某个值出现为止(循环)。这种方式浪费CPU时间,应该避免。只有在有理由认为等待时间非常短的情况下,才使用忙等待。用于忙等待的锁称为自旋锁

  4. Peterson解法
    看不懂(P69)

  5. TSL指令(Test and Set Lock)
    硬件支持,形式:TSL PX,LOCK,它将一个内存字LOCK读到寄存器RX中,然后在该内存地址上存一个非零值。读字和写字保证是不可分割的,即在该指令结束之前其他处理器均不允许访问该内存字。执行TSL指令的CPU将锁住内存总线,可以禁止其他CPU在本指令结束之前访问内存

总结:严格轮转法,Peterson解法和TSL解法都是正确的,但他们都有忙等待的缺点,忙等待浪费CPU时间。

睡眠与唤醒

你可能感兴趣的:(进程间通信(IPC))