硬件控制方法

问题

  1. 在汇编语言中,是用什么指令来同外围设备进行输入输出操作的?

    IN指令和OUT指令

  2. I/O是什么的缩写?

    Input/Output

  3. 用来识别外围设备的编号称为什么?

    I/O地址或I/O端口号

  4. IRQ是什么的缩写?

    中断请求Interrupt Request

  5. DMA是什么的缩写?

    Direct Memory Access

  6. 用来识别具有DMA功能的外围设备的编号称为什么?

    DMA通道

应用和硬件无关?

硬件的控制是由Windows全权负责的。利用操作系统提供的系统调用功能就可以实现对硬件的控制。

支撑硬件输入输出的IN指令和OUT指令

IN指令通过指定端口号的端口输入数据,并将其存储在CPU内部的寄存器中。

OUT指令则是把CPU寄存器中存储的数据,输出到指定端口号的端口。

计算机主机中,附带了用来连接外围设备的链接器。而各连接器的内部,都连接有用来交换计算机主机同外围设备之间电流特性的IC。这些IC,统称为I/O控制器。由于电压不同,数字信号及模拟信号的电流特性也不同,计算机主机和外围设备是无法直接连接的,I/O控制器就很有必要了。I/O控制器中有用于临时保存输入输出数据的内存,这个内存就是端口,也称为寄存器,但它与CPU的寄存器在功能上是不同的,它主要是用来临时存储数据的。多个端口之间通过端口号进行区分,端口号也称为I/O地址。IN指令和OUT指令在端口号指定的端口和CPU之间进行数据的输入输出,这和通过内存地址来进行主内存的读写是一样的道理。

编写测试用的输入输出程序

在大部分C语言的处理汇总,只要使用_asm{}括起来,就可以在其中技术助记符。也就是说,这样就可以编写C语言和汇编语言混合的源代码。

外围设备的中断请求

IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制,称为中断处理。

实施中断请求的是连接外围设备的I/O控制器,负责实施中断处理程序的是CPU。为了进行区分,外围设备的中断请求会使用不同于I/O端口的其他编码,即中断编号。

假如同时有多个外围设备进行中断请求的话,CPU也会为难。为此,我们可以在I/O控制器和CPU中间加入名为中断控制器的IC来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序地传递给CPU。

CPU接收到来自中断控制器的中断请求后,会把当前正在运行的主程序中断,并切换到中断处理程序。中断处理程序的第一步处理,就是把CPU所有寄存器的数据保存到内存的栈中。在中断处理程序中完成外围设备的输入输出后,把栈中保存的数值还原到CPU寄存器中,然后再继续进行对主程序的处理。

用中断来实现实时处理

虽然利用中断也可以从外围设备输入数据,但主程序就必须要持续不断地检测外围设备是否有数据输入。

由于外围设备有很多个,因此就有必要按照顺序来调查。按照顺序调查多个外围设备的状态称为轮询。对几乎不产生中断的系统来说,轮询是比较合适的处理。不过,对计算机来说就不适合了。

DMA可以实现短时间内传送大量数据

DMA是指不通过CPU的情况下,外围设备直接和主内存进行数据传送。之所以这么快速,是因为CPU作为中介的时间被节省了。

I/O端口号、IRQ、DMA通道可以说是识别外围设备的3点组合。不过,I/O端口号是必需的,而IRQ只对需要中断处理的外围设备是必需的,DMA通道只对需要DMA机制的外围设备是必需的。假如多个外围设备都设定成同样的端口号、IRQ及DMA通道的话,计算机就无法正常工作,出现“设备冲突”的提示。

文字及图片的显示机制

显示器显示文字及图形的机制,就是显示器中显示的信息一直存储在某内存中,即VRAM。在程序中,只要往VRAM中写入数据,该数据就会在显示器中显示出来。实现该功能的程序,是由操作系统或BIOS提供,并借助中断来进行处理的。

在现在的计算机中,显卡等专用硬件中一般都配置有与主内存想独立的VRAM和GPU。这是因为,对经常需要描绘图形的Windows来说,数百兆的VRAM是必需的。

posted @ 2021-04-08 17:29  睿阳  阅读(418)  评论(0编辑  收藏  举报