程序是怎样跑起来的(第十一章)

访问硬件的方法
在使用C语言等高级编程语言编写windows应用程序时,很少会直接访问硬件的指令.这是因为对硬件的访问已经由windows操作系统一手包办了。然而操作系统还是为应用程序提供了间接访问硬件的方法,那就是使用系统调用.在windows中系统调用也被称为API。 windows使用输入输出指令来对硬件进行访问,其中最具代表性的两个指令就是in和out。这两个指令都是会编语言的助记符,但应用程序并不能直接使用in和out指令。因为window禁止应用程序直接访问硬件。in指令可以从指定编号的端口输入数据,并将其存入CPU内部的寄存器。out指令可以将CPU寄存器中的数据输出到指定编号的端口。计算机主机上有用于连接显示器、键盘等外部设备的接口,这些接口内部都装有用于对主机和外部设备的电信号进行相互转换的芯片。这些芯片统称为I/O控制器。I/O控制器中有用于临时存放输入输出数据的存储器,这种存储器被称为端口。一个I/O控制器可以控制一个外部设备,也可以控制多个外部设备,因此我们就需要用端口号来区分不同的端口。端口号也被称为I/O地址。IRQ是中断请求的意思,IRQ是一种让当前正在运行的程序暂停,转而运行其他程序的机制,这被称为中断处理。发出中断请求的是连接外部设备的I/O控制器,运行中断处理程序的是CPU。要识别具体是哪个设备发出的中断请求,我们需要使用名为中断号的编号。除了显示器,其他各种设备也会发出中断请求,因此需要对每个设备都分配一个中断号。如果多个外部设备同时发出中断请求,CPU就会陷入混乱,因此在I/O控制器和CPU之间还有一个中断控制器进行协调。中断控制器会将来自多个外部设备的中断请求依次交给CPU来处理。CPU接受来自中断控制器的中断请求之后,会从当前运行的主程序切换到中断处理程序。
外部设备的数量很多,因此需要依次查询。依次查询多个外部设备状态的操作称为轮询。DMA是指外部设备不经过CPU中转,直接和内存进行数据传输,常用于网络、磁盘等设备。使用DMA可以将大量数据快速传输到内存中,它能节省CPU中转所需的时间,而且还可以避免高速的CPU等待低速的外部设备,从而提高其他任务的处理效率。DMA是通过名为DMA控制器的芯片实现的。DMA控制器中有多个用于进行DMA的窗口,这些窗口通过名为DMA通道的编号来进行区分,进行DMA的外部设备也是通过分配给他们的DNA通道来进行区分的。与DMA相对,通过CPU在外部设备和内存之间传输数据的方式成为PIO。计算机中有一个用于保存要显示的信息的存储器,这一存储器称为显存。现在的PC一般配有名为显卡的专用硬件,显卡上专有独立于内存的显卡和专用的图像处理器GPU。

posted @ 2024-02-28 00:34  侯岩含  阅读(2)  评论(0编辑  收藏  举报