分类:
2006-04-18 11:06:42
3 The hardware interface, I/O and communications
3.1 Overview
As designers of concurrent systems we have to take care that nothing crucial is lost in this process: that the interface we use gives us the performance and functionality we require. And we have to know the basics of how devices are controlled.
一些硬件是某些用户专用的,而还有一些东西是共用的。这就要求操作系统进行妥善地管理了。
Synchronous events:
硬件做的一些错误检测如ALU(arithmetic logic unit)发现除0的错误,缺页错误等。
Asynchronous events:
磁盘发出信号表明完成了数据传输,网络发送了一个数据包,这些都是不要求立刻响应的事件。
3.2 Device interfacing
这节中将讲述操作系统是如何限制用户程序直接访问设备,应用程序是如何能过系统调用来请求输入输出的。显然,在进行系统调用时需要进行权限提升(to change the privilege from user to system)。
有三层接口,最底层是hardware。上面就是OS,由OS的相关模块来处理底层设备所需要的细节上的东西。操作系统建立用户更容易使用的虚拟设备。这是需要语言支持的。最上面就是由language libraries以例程调用方式提供的IO接口了。(Chpt. 4中会有详细的讲述)
一般情况下,处理器速度要比外围速度快很多,而且快得越来越多。而且随着规模的增大,这样的差距会越来越明显。
处理器与用户终端,处理器与存储系统(尤其是并发的系统中),处理器与网络的速度差距十分明显。
“It is clear that an OS has less time to handle communications devices than peripherals”。
CISC: Complex Instruction Set Computers,复杂指令集计算机
RISC: Reduced Instruction Set Computers.,精减指令集计算机
上个世纪八十年代以来,人们试图简化处理器结构与指令集。这样更容易使用指令流水线来提高性能,也使芯片能更快的投入市场。
一些烦琐的指令集与特殊的数据结构可扩展性差,不能够很好地满足需求。高级语言及复杂的编译器的出现,指令集已经处在和机器打交道的低层次上,所以更加要求指令集的简化。而且,随着处理器性能的提高与地址空间增大、物理内存成本降低,人们不再追求汇编语言时代简洁的代码(CISC的时代是希望以最少的机器指令来完成工作的,但会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利)。最终有了从CISC到RISC的变化。
以一个简单的终端为例大致描述了一个设备接口,主要包括:Input/Output buffer,Control register和Status register.没什么好记下来的。
Polling:设备被动地等待处理器检查其状态位以决定下一步操作(数据传输等)。设备管理子系统可以依次检查各个设备,也可以重点检查某些设备。 这种方法在小型系统中很有效,并且简单易行,但无法保证良好的实时性。而且,占用处理器时间来检测设备状态并不是个好方法。
Interrupts:如果设备接口中的control register置1,则此硬件支持interrupt,就是说,设备会主动向处理器发出中断信号。这样做可以有更快的响应,但是程序设计方面就会复杂得多。
考虑这样一个情况,处理器正在执行一个程序时收到设备发出的中断信号。如果处理这个信号比继续执行程序更重要,就会发生一个interrupt,进入interrupt service routine。当然,必须有办法恢复正在执行的程序,这就意味着至少程序计数器、中断程序要用到的处理器寄存器等当前处理器的状态要保存下来后才能开始中断服务例程。
显然,不同的设备所要求的响应速度是不同的。因此,每个中断信号源都有一个Priority。正常执行的程序可以被中断,而低级别的中断调用中也可以被高级别的中断打断。当前处理器执行程序的Priority由处理器的状态寄存器表示。中断信号优先级低于当前程序时,做挂起处理,直到当前程序运行完成后才会处理此中断信号。嵌套的中断使用stack structure来处理,PC(program counter)和PSR(Processor status register)在中断发生时会被保存至栈中。
每个设备都会被关联到一个中断服务程序。内存中有一块区域专门用来保存这些中断服务程序的地址(中断向量表)。当基于Priority的中断发生时,PC中会设置相应的中断服务程序的地址。由设备接口自己定义什么时候向处理器发送中断信号。异常处理程序的地址会和中断服务程序一起被设置好,控制权会从被中断的程序转向中断服务程序(这一过程由硬件保证),中断服务程序开始执行。
……