互斥条件
Mutual Exclusion Conditions
我在看互斥条件,如下
- No two processes may at the same moment inside their critical sections.
- No assumptions are made about relative speeds of processes or number of CPUs.
- No process should outside its critical section should block other processes.
- No process should wait arbitrary long to enter its critical section.
谁能解释一下第二点的意思?
意味着现在CPU是多核的时代,可以进行多道编程了。一个 CPU 可以同时 运行 多人程序。
但是当你在学习 OS 时,总是假设 CPU 只有一个核心并且只能执行一个程序。
所以它被写成 No assumptions are made about multiple numbers of core(CPUs).
让我们假设您知道您有一个处理器。我们还假设您的处理器有一个原子指令 BBSC(Branch on bit set and set)不能被中断,如果一个位被设置并且不分支是明确的并且设置位
然后您可以使用这样的指令进行锁定
BBSS DID_NOT_GET_LOCK, #1,LOCK_LOCATION
; Critical Section
; . .. . . . .
MOV #0, LOCK_LOCATION ; End critical section
DID_NOT_GET_LOCK:
在这样的单处理器系统中实现锁定变得简单。
如果您将多个 CPU 添加到组合中,则该锁定系统会严重失败。我描述的那条指令至少有两次内存访问:
如果(位已设置);记忆测试
转到目的地
别的
设置位;记忆集
如果您有多个处理器,则多个进程可能会同时看到该位被清除并可能进入临界区。
对我来说,这意味着你无法判断某件事是正确的,因为它只是{少量}的指令。进程可能会被抢占,cpu 可能会暂停、遭受中断或其他模拟这些假设的延迟。
并发代码必须与任何可能的指令交叉正确。
我在看互斥条件,如下
- No two processes may at the same moment inside their critical sections.
- No assumptions are made about relative speeds of processes or number of CPUs.
- No process should outside its critical section should block other processes.
- No process should wait arbitrary long to enter its critical section.
谁能解释一下第二点的意思?
意味着现在CPU是多核的时代,可以进行多道编程了。一个 CPU 可以同时 运行 多人程序。 但是当你在学习 OS 时,总是假设 CPU 只有一个核心并且只能执行一个程序。 所以它被写成 No assumptions are made about multiple numbers of core(CPUs).
让我们假设您知道您有一个处理器。我们还假设您的处理器有一个原子指令 BBSC(Branch on bit set and set)不能被中断,如果一个位被设置并且不分支是明确的并且设置位
然后您可以使用这样的指令进行锁定
BBSS DID_NOT_GET_LOCK, #1,LOCK_LOCATION
; Critical Section
; . .. . . . .
MOV #0, LOCK_LOCATION ; End critical section
DID_NOT_GET_LOCK:
在这样的单处理器系统中实现锁定变得简单。
如果您将多个 CPU 添加到组合中,则该锁定系统会严重失败。我描述的那条指令至少有两次内存访问:
如果(位已设置);记忆测试 转到目的地 别的 设置位;记忆集
如果您有多个处理器,则多个进程可能会同时看到该位被清除并可能进入临界区。
对我来说,这意味着你无法判断某件事是正确的,因为它只是{少量}的指令。进程可能会被抢占,cpu 可能会暂停、遭受中断或其他模拟这些假设的延迟。
并发代码必须与任何可能的指令交叉正确。