Operating system 解释操作系统中使用的单处理器/多处理器锁定系统
所以我正在看一门操作系统的课程,目前我正在读一章关于同步的内容。 我发现这些函数是获取和释放锁的一种方法,本课程展示了这些方法,并询问为什么这在单处理器系统上有效,而在多处理器系统上无效。当然,我知道它在单处理器系统上工作,但我不知道在多处理器系统上会发生什么。请有人解释一下,谢谢 以下是两种在多处理器系统上可能不够用的方法: 锁获取方法Operating system 解释操作系统中使用的单处理器/多处理器锁定系统,operating-system,multiprocessing,locking,Operating System,Multiprocessing,Locking,所以我正在看一门操作系统的课程,目前我正在读一章关于同步的内容。 我发现这些函数是获取和释放锁的一种方法,本课程展示了这些方法,并询问为什么这在单处理器系统上有效,而在多处理器系统上无效。当然,我知道它在单处理器系统上工作,但我不知道在多处理器系统上会发生什么。请有人解释一下,谢谢 以下是两种在多处理器系统上可能不够用的方法: 锁获取方法 void lock_acquire(lock_t *lock) { disable_interrupts(); while (*lock) {
void lock_acquire(lock_t *lock) {
disable_interrupts();
while (*lock) {
enable_interrupts();
disable_interrupts();
}
*lock=1;
enable_interrupts();
锁释放方法
void lock_release(lock_t *lock) {
disable_interrupts();
*lock=0;
enable_interrupts();
}
由于禁用中断不会阻止总线上的第二个处理器访问读写之间的关键区域,因此在多处理器系统上,应使用防止此问题阻塞内存总线的
TSL
或XCHG
指令,如下所示:
mutex_lock:
TSL register,mutex
CMP register,#0
JZE ok
call thread_yield
JMP mutex_lock
ok: ret
mutex_unlock:
MOV MUTEX,#0
ret