读书笔记:此章作者主要讲述了有关访问硬件的方法,和硬件输入指令。11.1:在用于x86架构CPU的汇编语言中,用in指令进行1/0输入,用out指令进行I/0输出。
.负责在计算机主机与外部设备之间进行输入输出的芯片称为1/0控制器,简称I/0。
为了区分连接到计算机上的不同外部设备,每个设备会被分配一个1/0地址。
.IRQ是指用于区分发出中断请求的外部设备的编号。
.DMA是指外部设备不经过CPU中转,直接与计算机内存传输数据。
.网络、磁盘等数据量大的外部设备会使用DMA,不同设备会通过DMA通道来进行区分
操作系统还是为应用程序提供了间接访问硬件的方法,那就是使用系统调用。在Windows中,系安统调用也被称为API。个API都是一个能够被应用程序调用的函数,这些函数的本体位于DLL文件中。
11.2:负责硬件输入输出的in指令和out指令
Windows使用输入输出指令来对硬件进行访问曲,其中最具代表性的两个指令就是in和out。这两个指令都是汇编语言的助记符,但应用程序并不能直接使用in和out指令,因为Windows禁止应用程序直接访问硬件。
下面来讲一讲端口号和端口是什计算机主机上有用于连接显示么。、键盘等外部设备的接口,这些接器、口内部都装有用于对主机和外部设备的电信号进行相互转换的芯片,这些芯片统称为1/0控制器(简称为1/0)。由于数据格式和电压不同,所以计算机主机并不能和外部设备直接相连,为此我们需要使用I/0控制器。
1/0是Input/0utput(输入/输出)的缩写,显示器、键盘等设备都有专用的1/0控制器。1/0控制器中有用于临时存放输入输出数据的存储器,这种存储器被称为端口。
11.3外部设备的中断请求
IRQ是一种让当前正在运行的程序暂停,转而运行其他程序的机制这被称为中断处理。中断处理在硬件控制中扮演着重要的角色。如果没有中断处理,有些任务就无法顺利进行。
发出中断请求的是连接外部设备的1/0控制器,运行中断处理程序的是CPU。要识别具体是哪个设备发出的中断请求,我们需要使用名为中断号的编号,而不是端口号。
11.4 通过中断实现实时处
那么,在主程序运行过程中,到底会发生多少次中断呢?其实,几乎所有的外部设备都会频繁地发出中断请求,这是因为外部设备输入的数据需要实时进行处理。当然,不使用中断也可以从外部设备输入数据,但在这种情况下主程序就需要不断查询外部设备有没有要输入的数据
外部设备的数量很多,因此需要依次查询。依次查询多个外部设备状态的操作称为轮询(poling)。轮询适用于那些不频繁产生中断的系统但不适用于个人计算机。
11.5能够快速传输大量数据的DMA
除了1/0和中断处理,还有一个机制希望大家了解,那就是DMA。DMA是指外部设备不经过CPU中转直接和内存进行数据传输,常用于网络、磁盘等设备。使用DMA可以将大量数据快速传输到内存中,它能够节省CPU中转所需的时间,而且还可以避免高速的CPU等待低速的外部设备,从而提高其他任务的处理效率。
DMA是通过名为 DMA控制器(DMA Controller, DMAC)的芯片实现的。DMA控制器中有多个用于进行DMA的窗口,这些窗口通过名为 DMA通道的编号来进行区分,进行DMA的外部设备也是通过分配给它们的DMA通道来进行区分的。与DMA相对,通过CPU在外部备和内存之间传输数据的方式称为P10(Programmed1/0)。
11.6计算机中有一个用于保存要显示的信息的存储器,这一存储器称为显存(VideoRAM,VRAM)。程序只要将数据写入显存,数据就可以在显示器上显示出来。