Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1864434
  • 博文数量: 283
  • 博客积分: 10141
  • 博客等级: 上将
  • 技术积分: 2931
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(283)

文章存档

2013年(2)

2012年(2)

2011年(17)

2010年(36)

2009年(17)

2008年(18)

2007年(66)

2006年(105)

2005年(20)

分类:

2006-06-09 13:10:54

3.3 Exceptions

       设备发出中断请求是要求系统关注的一种方式,大多数情况下与正在运行的程序是无关的。这样的中断是异步的,不可预测的。

 

3.3.1 Exceptions caused by a running program

       系统运行程序时,可能产生各种与硬件相关的错误,例如:

Ø      ALU检测到被0除的情况,或者加法与乘法运算导致溢出

Ø      地址错误

Ø      指令错误

Ø      内存溢出

       以上几种错误是由于程序运行产生的,具有可再现性,但中断一旦发生,程序就无法运行下去了。

       还有一种对于程序本身来说是不可预测的中断是’page faults’,这样的中断发生时,当前的程序要等待缺页处理完毕才能继续。

       另外一个与正在运行的程序有关的中断是有意的break,用户决定中止程序。

 

3.3.2 System (privileged) mode and user (unprivileged) mode

       出于系统安全与稳定的考虑,现代处理器至少支持两个运行级别/状态,用户模式与特权模式。在用户模式下,像开、关中断这样的操作是被禁止的。

 

3.3.3 The system call mechanism

       当用户请求执行特权模式的的指令的时候,会要求系统调用产生一个异常(软中断/陷井),然后由异常处理程序将控制权转给内核。其实,这时候的系统调用就像一个普通的程序调用+CPU模式的切换。

 

3.3.4 Summary of the use of the exception mechanism

 

3.3.5 User-level exception handling

       用户程序在运行中出现严重错误要退出的情况发生时,在退出前,要打印错误消息和日志记录,这应该在用户进程中完成,而不是交由异常处理程序来做。大多数异常处理程序是库内的程序,可以由操作系统调用。

 

3.4 Multiprocessors

       在多处理器的情况下,做异常处理要比在单处理器情况下考虑更多的问题。一个方法是所有硬件都只向其中的一个处理器发中断信号,由这个处理器管理所有的设备。另外一个方法要灵活得多,每个处理器都带有自己的栈,都可以处理中断。

       还要考虑到的情况,用户要中止某一个进程的时候,比如用户按一个按键要结束某个程序的时候,必须要让正在运行的进程所在的处理器知道,这就需要用到前边所说定时器(3.2.10)来支持’inter-processor interrupt mechanism’了。处理器每隔一段时间就会接受时钟中断来更新自己的一些数据结构并检查有没有什么超时的问题。但这样的timer可能和real time有差异。

 

阅读(1576) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~