计算机必须在内存或RAM(随机访问内存random access memory)运行,内存是处理器可以直接访问的唯一大容量存储区域。
内存和处理器本身内置寄存器是cpu能直接访问的唯一存储介质。
指令load能将内存中的字移到cpu内部的寄存器中。而指令store能将寄存器的内容移动到内存。除了显式使用load和store,cpu可自动从内存中装入指令以执行。
内存比较小,并且是易失性存储设备,所以计算机系统提供辅助存储器作为内存的扩充。
对于I/O,每个I/O控制器都有寄存器来报存命令和所要传输的数据。通常,特殊的I/O指令允许在这些寄存器和系统内存之间进行数据传输。为了允许对这些I/O设备更方便的访问,许多计算机体系结构都提供内存映射I/O,内存地址的一块范围被单独分开,并映射到设备管理器。通过读写这些内存地址就能实现与设备寄存器之间的数据传输。
通用计算机系统有一个cpu和多个设备控制器组成,他们通过共同的总线连接起来。每个设备控制器负责特定类型的设备,可有多个设备与其连接。设备控制器维护一定量的本地缓冲存储和一定用途的寄存器。设备控制器负责在其所控制的外部设备与本地缓存之间进行数据传递。通常操作系统为每个设备控制器提供一个设备驱动程序。
为了开始I/O操作,设备驱动程序在设备控制器中装载适当的寄存器。相应的,设备控制器检查这些寄存器的内容以决定采取什么操作(如从键盘读取一个字符),控制器开始从设备向本地缓存传输数据,一旦数据传输完成,设备控制器会通过中断告诉驱动程序已完成操作,然后,驱动程序返回对操作系统的控制。
一旦I/O开始,就可能有两种行动过程。对于最简单的情况,开始进行I/O,在I/O完成后,控制权返回给用户进程,这种情况称为同步I/O。另一种可能,称为异步I/O,无须等待I/O完成,就将控制权返回给用户程序。接着I/O继续进行,同时其他系统操作照常进行。
等待I/O完成可以采用:wait指令使cpu空闲直到下一个中断开始。等待循环。
一种更好地选择是开始I/O之后,就继续执行其他操作系统或者用户程序代码。如果需要,系统调用就要允许用户程序等待I/O的完成。如果没有用户程序就绪可执行,操作系统也没有其他工作可做,那么需要wait或空闲循环以及能够在同一时刻跟踪多个I/O请求,为此,操作系统采用了设备状态表。
这种I/O中断驱动适合少量数据,DMA(直接内存访问)可以用于大量数据移动,设备控制器能在本地缓冲和内存之间传送一整块数据,而无需cpu的干预,且每块只产生一个中断,而不是一个字节一个中断。
原文地址:http://blog.csdn.net/sunmc1204953974/article/details/45288109