概述
计算机系统由 硬件 和 软件 组成,这篇文章主要简单介绍计算机的硬件系统。硬件系统由5大基础设备组成:运算器、控制器、存储器、输入设备、输出设备。
因为输入输出设备本身有非常的多,无法一一介绍,因此本文主要简单介绍一下输入输出其中用到的一些技术,如核心中断等。
内存接口编址法
这个不属于外部输入输出设备的范畴,但也是输入输出技术中比较重要的部分,计算机中可以有多个不同的内存与接口的编址方法,最常见的是下面这两种:
-
内存与接口地址独立编址
使内存地址与接口地址是完全独立并相互隔离的两个空间,访问数据所使用的指令也完全不同,用于接口的指令指用于接口读写。其优点在于易于使用、好辨认,但缺点就是关于接口的指令少、功能弱。
-
内存与接口地址统一编址
使内存与接口地址均放置在公共空间中,在公共地址空间中进行划分,但分配给内存的地址只能用于内存,接口亦然。其优点在于所有用于内存的指令可用于接口,大大增强对接口的操作性,而且指令也不再区分,但缺点是会使地址空间被分解,有时候会导致内存地址不连续,且程序上无法简单看出该指令操作的是内存或是接口。
直接程序控制
外设数据的输入输出过程直接由CPU在程序的控制下完成,这种方法又分为无条件传送和程序查询两种方式:
-
无条件传送
外设会随时的准备接收CPU发来的输出数据,也可以随时的向CPU提供输入数据。
-
程序查询方式
通过CPU执行的程序来查询外设是否准备好接收或输入。根据回馈的状态使CPU针对性的工作。通常来说,一个计算机系统会有多种外设,根据查询方式工作有两大缺点:
- 降低CPU工作效率,CPU需要不停的查询外设状态,但在实际应用中,速度慢的外设工作期间,CPU应能执行其他任务以最大化效率。
- 对突发事件无实时响应能力。
中断方式
由中断方式时,CPU无需频繁查询I/O系统状态,而是可以继续其他的工作,当I/O设备准备好时利用中断请求信号来通知CPU。CPU接收到信号后保存正在执行程序的状态,随后转入I/O中断程序的运行,完成数据交换后再次回到被打断的程序继续执行。
这种方式CPU无需等待I/O系统也无需频繁查询而大大提高了效率。中断有多种方式来实现。
中断处理方法
系统中一般不只有一个中断源,当系统中有多个中断源时,最常用的处理方法有如下五种:
-
多中断信号线(Multiple Interrupt Lines)
每个中断源都有自己的中断请求信号线。
-
中断软件查询(Software Poll)
当检测到中断信号后,转入中断服务程序,该程序负责轮询所有中断源判断中断信号的来源。如果是多信号源则设备响应的优先级由软件确定。
-
菊花链(Daisy Chain)
使所有的I/O设备共享一根中断信号线,模块之间以链式连接,当CPU检测到中断请求时,向该线发送中断确认信号,信号在设备间传播,直至中断请求发送者处时,该设备向CPU发送自己的ID以确认。因此逻辑上来讲,位于菊花链前端的设备具有更高的优先级。
-
总线仲裁(Bus Arbitration)
让I/O设备发送中断请求前要先取得总线控制权,也就是将裁决权交由总线仲裁机制。
-
中断向量表(Interrupt Vector Table)
用向量表保存各个中断源的中断服务程序地址,当设备发出中断请求时,由 中断控制器(INTC, Interrupt Controller) 确定中断号。再根据中断号在IVT中查找中断服务程序地址,同时INTC再把中断请求信号交给CPU。中断源的优先级由INTC控制。
中断优先级控制
多个中断源系统中,各个中断设备对系统服务的要求紧迫程度可能不同,为了合理利用CPU,就需要按轻重缓急来安排任务。
在中断优先控制系统中,需要给最紧迫的中断源分配更高的优先级,而给不那么紧迫的分配低一些的优先级,中断控制中有两种情况需解决:
- 不同优先级的多个中断源同时提出中断请求,CPU应优先响应优先级最高的中断源。
- 当CPU正对某个中断源服务时,又有比它优先级高的中断请求,CPU应能暂时中断当前程序而转去优先级更高的中断服务程序,结束后在返回。这叫做中断嵌套。
直接存储器存储(DMA)
计算机与外界交换数据时,不论是何种方式,都需要经由CPU通过执行程序实现,这就限制了数据传输的速度。
而 直接内存存取(DMA, Direct Memory Access) 是指数据在内存与I/O设备间直接成块的传送,无需CPU的干涉,只需在启动时由CPU发出指令及当传输结束时CPU可用轮询或中断机制来得到执行结果。也就是说数据的交换实际上 由DMA硬件直接控制总线 执行且不经由CPU。
综上可知,DMA的主要优点是速度快,因此现代绝大部分计算机系统均采用了DMA,其结构见下图:
以上图片来自 《计算机组成原理与体系结构》
DMA的传送过程如下:
- 由设备向DMA控制器(DMAC)发出DMA传送请求。
- DMA控制器经由HOLD信号输入端向CPU发出DMA传送请求。
- CPU在完成当前总线周期后立即对信号响应,其包括两方面,一是CPU将有效的保持响应信号经由HLDA输出到DMAC上,告诉DMAC它的响应已得到回应;二是CPU将总线信号设置为高阻,这意味着CPU放弃对总线控制权。
- DMAC获得来自CPU的信号,同时获得对总线的控制权。其向外设发送DMAC响应信号,让外设知道即将开始数据传送。
- DMAC送出地址与控制信号,实现数据高速传输。
- 当DMAC将设置好的字节数传送完毕,就会将HOLD信号置为无效。此时CPU检测到HOLD信号即知道DMAC已完成数据传送,CPU会将HLDA信号也置为无效,同时重新取得总线控制权。接着CPU此前的总线周期继续执行工作。
DMA最核心的地方在无需CPU干预数据传输,整个系统的总线直接交由DMAC控制。在DMA传输过程中需要占用系统总线,其占用的方法有CPU停止法、总线周期分时法、总线周期挪用法等,但不论采用哪一种方法,在DMA传输期间CPU均不能使用总线。
通道
DMA技术大大减轻了CPU对I/O操作控制的负担,提升了CPU的工作效率,而通道则进一步提高CPU的工作效率。
通道即一个具有特殊功能的处理器,又叫做 输出输出管理器(IOP, Input/Output Processor)。它分担了CPU的一部分功能,实现对外围设备的统一管理,完成外围设备与主存间的数据传送。但这种效率的提升是以增加更多的硬件为代价的。
下图是通道的结构图:
以上图片来自 《计算机组成原理与体系结构》
其中,存储管理部件是内存的控制部件,它的主要任务是根据设计的优先级决定下个周期由谁来使用系统总线访问内存。大多数的I/O设备都是旋转性设备,读写信号具有实时性,不及时处理就会丢失数据,所以当通道和CPU同时要求访存时通道的优先级高于CPU。而在多个通道同时访存时,选择通道和数组多路通道的优先级高于字节多路通道。
通道有以下5项具体任务:
- 接收CPU的I/O指令,按要求与外设通信。
- 从内存选取属该通道程序的指令,译码后向设备控制器发送指令。
- 组织外设与内存之间进行数据传输,并根据需要提供缓存空间。
- 由外设中得到的状态信息形成本通道的状态信息,根据要求将状态信息送入内存,供CPU使用。
- 将外设及通道本身的中断请求,按次序及时的通告给CPU。
现在还有一种叫做 外围处理机(PPU, Peripheral Processor Unit) 的设备,它是通道的进一步发展,完全独立于主机工作。有的外围处理机干脆选用已有的通用计算机来实现。一般这种方式用于分布式系统或大型计算机系统中。