【问题标题】:Mutual Exclusion Conditions互斥条件
【发布时间】:2018-10-27 13:10:29
【问题描述】:

我正在阅读互斥条件,如下所示

  1. 任何两个进程都不能同时在它们的临界区中。
  2. 不对进程的相对速度或 CPU 数量做出任何假设。
  3. 任何进程都不应在其临界区之外阻塞其他进程。
  4. 任何进程都不应等待任意长时间才能进入其临界区。

谁能解释一下第二点的意思?

【问题讨论】:

  • (2)的哪一部分不清楚?一些系统有多个执行核心,一些指令的执行时间比其他的要长,一些线程的优先级可能比其他线程高。 (2) 说这些应该是“不在乎”的问题。临界区功能。
  • 这意味着如果您的互斥锁的文档说“此互斥锁只能在具有 1 个 CPU 的系统上工作”之类的内容,那么您的互斥锁不够好。 :)

标签: multithreading concurrency operating-system mutex mutual-exclusion


【解决方案1】:

对我来说,这意味着您无法确定某件事是正确的,因为它只是{少量}的指令。一个进程可能被抢占,一个 cpu 可能被挂起、遭受中断或其他模拟这些假设的延迟。

在任何可能的指令交错中,并发代码都必须是正确的。

【讨论】:

    【解决方案2】:

    假设您知道自己有一个处理器。让我们还假设您的处理器有一个原子指令 BBSC(位设置和设置时的分支),如果设置了一个位并且不分支,则该原子指令不能被中断,该分支被清除并设置该位

    然后你可以使用这样的指令来锁定

      BBSS DID_NOT_GET_LOCK, #1,LOCK_LOCATION
      ; Critical Section
    
      ; . ..  . . . .
    
     MOV #0, LOCK_LOCATION ; End critical section
    

    DID_NOT_GET_LOCK:

    在这样的单处理器系统中实现锁定变得很简单。

    如果您将多个 CPU 添加到混合中,则该锁定系统会严重失败。我描述的那条指令至少有两个内存访问:

    如果(位已设置);记忆测试 前往目的地 别的 设置位;内存集

    如果您有多个处理器,则多个进程可能会同时看到 Bit 被清除并可能进入临界区。

    【讨论】:

      【解决方案3】:

      这意味着现在CPU带有多核,因此可以进行多编程。一个 CPU 可以同时运行多个 pal 程序。 但是当你学习操作系统时,总是假设 CPU 只有一个内核并且只能执行一个程序。 所以它是这样写的,没有对多核(CPU)做任何假设。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-08
        • 2015-07-12
        • 2018-08-25
        • 1970-01-01
        • 2011-01-06
        • 2015-11-17
        • 2012-08-12
        • 2011-03-05
        相关资源
        最近更新 更多