Windows中,使用C语言等高级编程语言时,很少有能直接控制硬件的指令,因为对硬件的控制是由Windows操作系统负责的。
但是,应用可以间接控制硬件,方法是使用系统调用来控制硬件。系统调用即使用API中的函数,API是DLL文件的集成,而控制硬件的小函数的实体储存在DLL库文件中。
然而,Windows操作系统本事也是软件,它是怎么控制硬件的?
向CPU传递某些指令。
支持硬件输入输出的IN指令和OUT指令
IN指令和OUT指令也是汇编语言的助记符。
IN指令:通过指令端口号的端口输入数据,储存在CPU内的寄存器中。
OUT指令:把CPU内寄存器中的数据,通过指定端口号的端口输出。
端口(port)和端口号是什么?
计算机主机中,附带了用来连接外设的连接器。
连接器的内部,有用于交换主机和外设之间的电流特性的 IC,即为I/0控制器。
不同的外设都有各自不同的I/O控制器。
I/O控制器中用于临时保存输入输出数据的内存,即为端口。
I/O控制器的内存,也成为寄存器,但与CPU中寄存器不同,它只用于临时存储数据。
各断口之间以端口号进行划分,端口号也称为 I/O地址。
可以发现,Windows操作系统,使用IN指令和OUT指令,通过端口和端口号,对硬件输入输出数据。与通过内存地址对内存的读写数据是一致的。
中断机制
IRQ(Interrupt Request):中断请求。
中断(Interrupt):暂停正在运行的程序,跳转到其他程序运行的机制。
发出中断请求的是连接外设的I/O控制器,实施中断处理程序的是CPU。
为进行区分,外设的中断请求使用不同于端口号的中断编号。
查看外设驱动器属性时,IRQ处的数值表示中断编号,而操作系统和BIOS提供响应这个中断编号的中断处理程序。
中断控制器:多个外设同时请求中断时,将它们的中断请求有序传递给CPU的IC。中断控制器位于I/O控制器和CPU之间。
DMA机制(Direct Memory Access)
DMA:不经过CPU,外设和内存直接数据交换。利用DMA,可以做到短时间内大量传输数据。
文字和图片的显示机制
VRAM(Video RAM): 内存的一部分,用于储存显示器中显示的信息。只要往VRAM中写入数据,该数据就会在显示器中显示出来。
对现在的计算器来说,VRAM不再位于主机内存中,因为那太小了。现在的VRAM位于显卡中,数百MB是必须的。
: