我目前正在参加操作系统课程,在遇到并发和互斥之前,一切都很顺利。
直到我正在阅读的文本中的这一章,我的印象是操作系统通过队列和中断处理某些I / O操作(如打印机)的调用,操作系统也处理了进程的调度。 / p>
但在本节“相互排斥:硬件支持”中,它声明了一个保证互斥的过程,它足以阻止所有中断,这可以通过中断禁用来完成,但是由于处理器是成本很高它的交错能力有限(Stallings,p.211)。
如果这是一项功能,是什么阻止程序员通过禁用中断将整个程序放在关键部分?为什么操作系统不能以前面所述的方式处理对关键资源的调用(I / O队列和中断),但我们必须依靠程序员来识别他们的关键部分?
我理解需要识别具有共享变量和内存空间的关键部分,但我感到困惑的是,为什么程序需要识别关于I / O设备(如打印机)的关键部分以及为什么操作系统可以“T。
答案 0 :(得分:2)
这不是[完全]正确的:
但在本节“相互排斥:硬件支持”中,它声明了一个保证互斥的过程,它足以阻止所有中断,这可以通过中断禁用来完成,但是由于处理器是成本很高它的交错能力有限。
处理器通常支持多种同步方式。最简单的是不间断的指令。这些通常是短指令,例如,如果已经设置了位,则设置位或分支。这些指令允许在单个处理器内进行同步。
正如您所提到的,禁用中断是另一种方法。通常,中断具有优先级。通常,您可以禁用优先级低于指定的所有中断。这允许禁用所有或一些中断。
禁用中断仅在锁定多个处理器未共享的资源时才有效。
这就是为什么你所拥有的上下文中的引用不是[完全]正确的。当存在多个处理器时,禁用处理器上的中断不会同步。但是,从理论上讲,操作系统可能会禁用所有处理器上的所有中断,但这样的系统会严重损坏脑部,因为这会妨碍多处理器系统的性能。但是,这可能会在一个快速而肮脏的学生项目操作系统中起作用。
如果这是一项功能,是什么阻止程序员通过禁用中断将整个程序放在关键部分?
只能在内核模式下禁用中断。
硬件同步的另一种方法是互锁指令。这些指令用于锁定操作数的存储器,并防止其他处理器在执行指令时访问该存储器。有时是简单的添加整数互锁和位设置(或清除)和分支互锁指令。