我在第十一章明白了硬件的控制方法。在x86系列cpu用的汇编词汇中,通过IN指令来实现I/O输入,OUT指令来实现I/O输出。用来实现计算机主机和外围设备输入输出交互的IC称为I/O控制器或简称为I/O。所有连接计算机的外围设备都会分配一个I/O地址编号。IRQ指的是用来执行硬件中断请求的信号。硬件的控制是由Windows全权负责的。Windows提供了通过应用来间接控制硬件的方法,利用操作系统提供的系统调用功能就可以实现对硬件的控制,在Windows中,系统调用成为API。各API就是应用调用的函数。这些函数的实体被存储在DLL文件中。
支撑硬件输入输出的IN指令和OUT指令。IN指令和OUT指令的语法如图所示;
IN指令通过指定端口号的端口输入数据,并将其存储在CPU内部的寄存器中,OUT指令则是把CPU寄存器中存储的数据,输出到指定端口号的端口。计算机主机中,附带了用来连接显示器及键盘等外围设备的连接器,而各连接器的内部,都连接有用来交换计算机主机同外围设备之间电流特性的IC。这些IC,统称为I/O控制器。I/O是Input/Output的缩写。显示器、键盘等外围设备都有各自专用的I/O控制器。I/O控制器中有用于临时保存输入输出数据的内存,这个内存就是端口。I/O控制器内部的内存,也称为寄存器。在实现I/O控制器功能的IC中,会有多个端口。由于计算机中连接着很多外围设备,所以就会有多个I/O控制器,当然也会有多个端口。一个I/O控制器既可以控制一个外围设备,也可以控制多个外围设备。各端口之间通过端号进行区分,端号也称为I/O地址。IRQ是中断请求的意思。IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制成为中断处理。中断处理在硬件控制重担当着重要角色。从中断处理开始到请求中断的程序运行结束之前,被中断的程序的处理是停止的。这种情况就类似于在处理文档的过程中有电话打进来,电话就相当于中断处理。实施中断请求的是连接外围设备的I/O控制器,负责实施中断处理程序的是CPU。为了进行区分,外围设备的中断请求会使用不同于I/O端口的其他编号,改编号称为中断编号。在控制面板中查看软件驱动器的属性时,IRQ处显示的数值是06,表示的就是用06号来识别软盘驱动器发出的中断请求。另一方面,操作系统及BIOS则会提供相应中断编号的中断处理程序。假如同时有多个外围设备进行中断请求的话,CPU会为难。因此,我们可以I/O控制器和CPU中间加入名为中断控制器的IC来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序地传递给CPU。CPU接收到来自中断控制器的中断请求后,会把当前正在运行主程序中断,并切换到中断处理的程序。中断处理的第一步处理,就是把CPU所有寄存器的数值保存到内存的栈中。在中断处理程序中完成外围设备的输入输出后,把栈中保存的数值还原到CPU寄存器中,然后再继续进行对主程序的处理。DMA是指在不通过CPU的情况下,外围设备直接和内存进行数据传送。磁盘等都用了这个DMA机制。通过利用DMA,大量数据就可以在短时间内转送到主内存。
我在的十二章了解到了计算机如何思考。作为计算机大脑的CPU,其本身并不具有思考功能。程序的使用目的大体划分为两类。一类是大家作为工具来使用的程序,另一个使用目的使用程序来代替执行人类的思考过程。用程序来表示人类的思考方式。用程序来表示人类的思考习惯。