分类:
2006-06-07 21:23:10
3.2 Device interfacing
Motorola 6800系统,DEC VAX系统和Intel Pentium以及其它CISC的机器而言,异常处理就是通过前述的方法:在主存中有每个中断服务程序与异常处理程序的地址索引,在调用中断时候PC和PSR保存在栈中。
但是这种方法不够高效与简单。一是可以把保存在主存中的状态保存到处理器寄存器中。另外一个方法是避免频繁访问主存来寻找中断处理程序的地址。
Avoiding the saving of state in memory
在很多中断发生后,被中断的程序很可能不会再运行,比如有严重错误时会取消程序的运行,或者将控制权转给相关的库程序来给出错误消息,或者中断程序起动了更高级别的进程(导致被中断进程的挂起)。那么,在这些情况下,还把被中断程序的状态等信息保存在硬件寄存器中就没必要了,可以拷贝到内存的其它地方去。
Avoiding table lookup of an interrupt routine address
通过‘first-level interrupt handler’来避免这样的状况发生,其实就是用一个异常处理程序响应所有的异常。然后由这个程序来查看发生异常的原因及CPU的状态等。就是说,用软件代替硬件处理中断程序,由这个处理程序来决定是把控制权返回给被中断程序还是交给另外一个程序。这是早期的计算机中所使用的方法。
‘first-level interrupt handler’的地址可以写在PC中,作为硬件中断机制的一部分,以此方式来避免对中断向量表的查找。
DMA的概念:在内存与设备间传送一块数据后才向CPU要求中断,而不是每个字 符都要中断。比如硬盘控制器有一个小的处理器,可以记录磁盘地 址,内存地址和要传输的数据量等信息,由CPU向此处理器发送这 些信息以及操作信息。这之后,硬盘自己和内存打交道,而CPU可 以继续别的工作。
硬盘控制器中的处理器则利用CPU取指令/数据、执行指令的间隙进行数据传输,这被称为cycle stealing,但这样做会影响到CPU执行指令的效率,于是又有了hardware-controlled cache来缓存最近的指令与数据。
现代的硬盘更加复杂与精密,支持scatter-gather操作,允许程序员用一条命令把一些数据块写入硬盘的一块区域或从硬盘的一块区域内读入一定数量的数据块。
这是另外一种传输数据的方法,主要思想就是将物理内存地址映射到设备上,这是不需要增加I/O指定的。
一个计算机系统是离不开定时器的。一般定时器可以用来设定在一定时间段后产生中断,也可以设定每隔一定时间后产生中断。时钟的中断频率可以从1 microsecond到65 milliseconds.
一般情况下,系统中的定时器有如下用途:
l Time of day
l Managing the time for which processes run on processors
l Accounting for CPU usage
l Providing a alarm clock service for processes
l For monitoring the system and its clients