利用操作系统提供的系统调用功能就可以实现对硬件的控制。在 Windows 中,系统调用称为 API。
IN 指令通过指定端口号的端口输入数据,并将其存储在 CPU 内部的寄存器中。OUT 指令则是把 CPU 寄存器中存储的数据,输出到指定端口号的端口。计算机主机中,附带了用来连接显示器及键盘等外围设备的连接器。而各连接器的内部,都连接有用来交换计算机主机同外围设备之间电流特性的 IC。这些 IC,统称为 I/O 控制器。由于电压不同,数字信号及模拟信号的电流特性也不同,计算机主机和外围设备是无法直接连接的。I/O 是 Input/Output 的缩写。显示器、键盘等外围设备都有各自专用的 I/O 控制器。I/O 控制器中有用于临时保存输入输出数据的内存。这个内存就是端口。端口(port)的字面意思是“港口”。由于端口就像是在计算机主机和外围设备之间进行货物(数据)装卸的港口,所以因此得名。I/O 控制器内部的内存,也称为寄存器。虽然都是寄存器,但它和 CPU 内部的寄存器在功能上是不同的。CPU 内部的寄存器是用来进行数据运算处理的,而 I/O 寄存器则主要是用来临时存储数据的。在实现 I/O 控制器功能的 IC 中,会有多个端口。由于计算机中连接着很多外围设备,所以就会有多个 I/O 控制器,当然也会有多个端口。一个 I/O 控制器既可以控制一个外围设备,也可以控制多个外围设备。各端口之间通过端口号进行区分。端口号也称为 I/O 地址。IN 指令和 OUT 指令在端口号指定的端口和 CPU 之间进行数据的输入输出。这和通过内存地址来进行主内存的读写是一样的道理。
IRQ(Interrupt Request)是中断请求的意思。IRQ 是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现处理无法顺畅进行的情况。从中断处理开始到请求中断的程序(中断处理程序)运行结束之前,被中断的程序(主程序)的处理是停止的。这种情况就类似于在处理文档的过程中有电话打进来,电话就相当于中断处理。假如没有中断功能的话,就必须等到文档处理完毕才可以接听电话。这样就太不方便了。由此可见,中断处理有着很大的价值。就像接听完电话后返回到原来的文档作业一样,中断处理程序运行结束后,处理也会返回到主程序中继续。实施中断请求的是连接外围设备的 I/O 控制器,负责实施中断处理程序的是 CPU。为了进行区分,外围设备的中断请求会使用不同于 I/O 端口的其他编号,该编号称为中断编号。在控制面板中查看软盘驱动器的属性时,IRQ 处显示的数值 06,表示的就是用 06 号来识别软盘驱动器发出的中断请求。另一方面,操作系统及 BIOS[5] 则会提供响应中断编号的中断处理程序。假如同时有多个外围设备进行中断请求的话,CPU 也会为难。为此,我们可以在 I/O 控制器和 CPU 中间加入名为中断控制器的 IC 来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序地传递给 CPU。
由于外围设备有很多个,因此就有必要按照顺序来调查。按照顺序调查多个外围设备的状态称为轮询。对几乎不产生中断的系统来说,轮询是比较合适的处理。
DMA 是指在不通过 CPU 的情况下,外围设备直接和主内存进行数据传送。磁盘等都用到了这个 DMA 机制。通过利用 DMA,大量数据就可以在短时间内转送到主内存。I/O 端口号、IRQ、DMA 通道可以说是识别外围设备的 3 点组合。不过,IRQ 和 DMA 通道并不是所有的外围设备都必须具备的。计算机主机通过软件控制硬件时所需要的信息的最低限,是外围设备的 I/O 端口号。IRQ 只对需要中断处理的外围设备来说是必需的,DMA 通道则只对需要 DMA 机制的外围设备来说是必需的。假如多个外围设备都设定成同样的端口号、IRQ 及 DMA 通道的话,计算机就无法正常工作了。这种情况下,就会出现“设备冲突”的提示。
如果用一句话来简单地概括显示器显示文字及图形的机制,那就是显示器中显示的信息一直存储在某内存中。该内存称为 VRAM(Video RAM)。在程序中,只要往 VRAM 中写入数据,该数据就会在显示器中显示出来。实现该功能的程序,是由操作系统或 BIOS 提供,并借助中断来进行处理的。在现在的计算机中,显卡等专用硬件中一般都配置有与主内存相独立的 VRAM 和 GPU(Graphics Processing Unit,图形处理器,也称为图形芯片)。