【问题标题】:Explain a uniprocessor / multiprocessor locking system used in operating systems解释操作系统中使用的单处理器/多处理器锁定系统
【发布时间】:2020-06-28 11:22:03
【问题描述】:

所以我正在研究操作系统课程,目前我正在学习关于同步的章节。 我遇到了这些函数作为获取和释放锁的一种方式,课程展示了这些方法并询问为什么这可以在单处理器系统上工作,但不能在多处理器系统上工作。当然我知道它可以在单处理器系统上工作,但我不明白在多处理器系统上会发生什么。谁能解释一下,谢谢!

以下是在多处理器系统上可能不够用的 2 种方法: 锁获取方法

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();
}

【问题讨论】:

    标签: operating-system multiprocessing locking


    【解决方案1】:

    因为禁用中断不会阻止总线上的第二个处理器在读取和写入之间访问您的关键区域,实际上在多处理器系统上您应该使用TSLXCHG 指令来防止此问题阻塞内存总线,像这样:

    mutex_lock:
     TSL register,mutex
     CMP register,#0
     JZE ok
     call thread_yield
     JMP mutex_lock
     ok: ret
    
    mutex_unlock:
     MOV MUTEX,#0
     ret
    

    【讨论】:

      最近更新 更多