《程序是怎样跑起来的》第十一章
本章主要讲的是访问硬件的方法。在我们使用C语言等高级编程语言编写WINDOWS应用程序时很少会见到直接访问硬件的指令,这是因为对硬件的访问已经由WINDOWS操作系统一手包办了。然而,操作系统还是为应用程序提供了间接访问硬件的方法,那就是使用系统调用在WINDOWS中,系统调用也被称为API,每个API都是一个能够被应用程序调用的函数,这些函数本体位于DLL文件中。
WINDOWS使用输入输出指令来对硬件进行访问,其中最具代表性的两个指令就是in和out这两个指令都是汇编语言的助记符,但应用程序并不能直接使用in和out指令,因为WINDOWS禁止应用程序直接访问硬件。in指令可以从指定编号的端口输入数据,并将其存入CPU内部的寄存器。out指令可以将CPU寄存器中的数据输出到指定编号的端口。计算机主机上有用于连接显示器,键盘等外部设备的接口,这些接口内部都装有用于对主机和外部设备的电信号进行相互转换的芯片。这些芯片通称为I/O控制器,由于数据格式和电压不同,所以计算机主机并不能和外同步设备直接相连。为此我们需要使用I/O控制器。
IRO就是中断请求的意思,它是一种让当前正在运行的程序暂停,转而运行其他程序的机制,这被称为中断处理,中断处理在硬件控制中扮演着很重要的角色。如果没有中断处理,有些任务无法顺利进行。在进行中断处理时,被中断的程序会暂停运行,直到中断处理程序运行完毕。发出中断请求的是连接外部设备的I/O控制器运行中断处理程序的是CPU要识别具体是哪个设备发出的中断请求,我们需要使用名为中断号的编号,而不是端口号设备管理器属性的IRO项目中显示的0xFFFFFFF7(-9),就表示由显示器发出的中断请求信号编号为0xFFFFFFF7(-9)。把显示器其他各种设备也会发出中断请求,因此需要对每个设备都分配一个中断号。如果多个外部设备同时发出中断请求CPU就会陷入混乱,因此在I/O控制器和CPU之间还有一个中断控制器进行协调。中断控制器会将来自多个外部设备的中断请求依次交给CPU来处理。
Dma是指外部设备不经过CPU中转,直接和内存进行数据传送,常用网络磁盘等设备使用。Dma可以将大量数据快速传送到内存中,它能够节省CPU中转所需的时间,而且还可以避免高速的CPU等待低速的设备。从提高其他任务的处理效率dma是通过名为dma控制器的芯片实现的dma控制器中有多个用于进行dma的窗口,这些窗口通过名为dma通道的编号来进行区分crd MA的外部设备,也是通过分配给他们的d分区分的那个与dma相同或CPU的外部设备和内存之间传输数据的方式称为PIO。计算机中有一个用于保存要显示的信息的存储器,这存储器称为显存程序,只要将数据写入显存,数据就可以在显示器上显示出来。

浙公网安备 33010602011771号