资源保护,简单的方法就是资源持有期间关闭中断。
长时间关闭终端会影响系统对中断事件的响应,解决的办法就是引入信号量、互斥量等资源保护机制。
仅将信号量、互斥量的获取和释放操作放在关中断状态下执行。
使用以上机制会有优先级反转现象发生。abc三个线程,优先级由高到低,如果a等待c占用的资源而挂起的过程中,b抢占了c获得执行,这就是优先级反转。
为了解决这种现象,内核增加了优先级继承的机制了预防:
a等待c挂起过程中,c的优先级临时提高和a相同。
使用关中断还是信号量、互斥量可以根据实际情况判断,如果仅仅修改一个值,关中断效率最高,如果长时间使用临界区资源,则使用信号量或者互斥量保护。
信號量量 對動態資源管理,生產者和消費者,釋放信號,資源增加,獲取 信號,資源減少。
資源獲取 不到,則挂起等待。释放资源,如果有 等待者,则唤醒一个,否则信号计数加一。
互斥量 管理唯一资源 资源获取先判断释放已经用于资源,有则计数加一,返回,否则,尝试占用资源,成功,则返回,否则,挂起。释放资源:计数减一,计数非0,返回;否则,清除占用标记,如果有等待线程,则唤起一个。