同步和临界区(资源竞争问题)

     实现可重入内核需要利用同步机制:如果内核控制路径对某个内核数据结构进行操作时被挂起,那么,其他的内核控制路径就不应该再对该数据结构进行操作,除非它已被重新设置成一致性(consistent)状态。否则,两个控制路径的交互作用将破坏所存储的信息。

       例如,假设全局变量V包含某个系统资源的可用项数。第一个内核控制路径A读这个变量,并且确定仅有一个可用资源项。这时,另一个内核控制路径B被激活,并读同意变量V,V值仍为1。因此,B对V减1,并开始用这个资源项,然后,A恢复执行,因为A已经读取到V的值,于是它假定自己可以对V减1并获取B已经在使用的这个资源项,结果,V的值变为-1,两个内核控制路径使用相同的资源项有可能导致灾难性的后果。

        在某个计算结果取决于如何调度两个或多个进程时,相关代码就是不正确的。我们说存在一种竞争条件(race  condition)。一般来说,对全局变量的安全访问通过原子操作(atomic operation)来保证。在前面的例子中,如果两个控制路径读V并减1是一个单独的,不可中断的操作,那么,就不可能出现数据讹误,然而,内核包含的很多数据结构是无法用单一操作访问的。例如, 用单一的操作从链表中删除一个元素是不可能的,因为内核一次至少访问两个指针。临界区(cirtical region)是这样的一段代码,进入这段代码的进程必须完成,之后另一个进程才能进入()

       这些问题不仅出现在内核控制路径之间,也出现在共享公共数据的进程之间,几种同步技术已经被采用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值