【问题标题】:What is the frontier between mutex and critical section?互斥锁和临界区的边界是什么?
【发布时间】:2015-10-08 19:19:53
【问题描述】:

我以前知道临界区不能用于进程,因为它们不是内核对象。但在现代操作系统中,我看到了两种可以与进程一起使用的实现。

使用 TSL 实现:

enter region:
    TSL REGISTER,LOCK | copy lock to register and set lock to 1
    CMP REGISTER,#0 | was lock zero?
    JNE enter region | if it was not zero, lock was set, so loop
    RET | return to caller; critical region entered
leave region:
    MOVE LOCK,#0 | store a 0 in lock
    RET | return to caller

用 XCHG 实现:

enter region:
    MOVE REGISTER,#1 | put a 1 in the register
    XCHG REGISTER,LOCK | swap the contents of the register and lock variable
    CMP REGISTER,#0 | was lock zero?
    JNE enter region | if it was non zero, lock was set, so loop
    RET | return to caller; critical region entered
leave region:
    MOVE LOCK,#0 | store a 0 in lock
    RET | return to caller

那么关键部分是否可以用于流程真的取决于实现吗?而互斥量和临界区的边界在哪里,我们可以把上面的代码称为临界区还是互斥量的代码?

谢谢。

【问题讨论】:

    标签: operating-system kernel ipc mutex critical-section


    【解决方案1】:

    关键部分可用于用户进程内核模式代码。所需要的只是一种强制临界区互斥属性的方法。

    您引用的两个代码块实现使用原子操作(tslxchg)的关键部分。所以代码本身并不是关键部分。关键部分强制互斥。

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2010-10-27
      • 2021-04-16
      • 2016-10-25
      • 2017-09-30
      相关资源
      最近更新 更多