分类:
2006-06-09 13:10:54
3.3 Exceptions
设备发出中断请求是要求系统关注的一种方式,大多数情况下与正在运行的程序是无关的。这样的中断是异步的,不可预测的。
系统运行程序时,可能产生各种与硬件相关的错误,例如:
Ø ALU检测到被0除的情况,或者加法与乘法运算导致溢出
Ø 地址错误
Ø 指令错误
Ø 内存溢出
以上几种错误是由于程序运行产生的,具有可再现性,但中断一旦发生,程序就无法运行下去了。
还有一种对于程序本身来说是不可预测的中断是’page faults’,这样的中断发生时,当前的程序要等待缺页处理完毕才能继续。
另外一个与正在运行的程序有关的中断是有意的break,用户决定中止程序。
出于系统安全与稳定的考虑,现代处理器至少支持两个运行级别/状态,用户模式与特权模式。在用户模式下,像开、关中断这样的操作是被禁止的。
当用户请求执行特权模式的的指令的时候,会要求系统调用产生一个异常(软中断/陷井),然后由异常处理程序将控制权转给内核。其实,这时候的系统调用就像一个普通的程序调用+CPU模式的切换。
用户程序在运行中出现严重错误要退出的情况发生时,在退出前,要打印错误消息和日志记录,这应该在用户进程中完成,而不是交由异常处理程序来做。大多数异常处理程序是库内的程序,可以由操作系统调用。
3.4 Multiprocessors
在多处理器的情况下,做异常处理要比在单处理器情况下考虑更多的问题。一个方法是所有硬件都只向其中的一个处理器发中断信号,由这个处理器管理所有的设备。另外一个方法要灵活得多,每个处理器都带有自己的栈,都可以处理中断。
还要考虑到的情况,用户要中止某一个进程的时候,比如用户按一个按键要结束某个程序的时候,必须要让正在运行的进程所在的处理器知道,这就需要用到前边所说定时器(