【发布时间】: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