程序是怎样跑起来的-第11章 硬件控制方法

来源:互联网 发布:数据统计 编辑:程序博客网 时间:2024/06/07 09:54

11硬件控制方法

热身问题

1.在汇编语言中,是用什么指令来同外围设备进行输出操作的?

    IN指令和OUT指令。在x86系列CPU用的汇编语言中,通过IN指令来实现IO输入,OUT指令来实现I/O输出。


2.I/O是什么的缩写?

    InputOutput。用来实现计算机主机和外围设备输入输出交互的IC称为I/O控制器或简称I/O


3.用来识别外围设备的编号称为什么?

        I/O地址或I/O端口号。所有链接到计算机的外围设备都会分配一个I/O地址编号。


4.IRQ是什么的缩写?

    Interrupt RequestIRQ指的是用来执行硬件中断请求的编号。


5.DMA是什么的缩写?

    Direct Memory AccessDMA指的是,不经过CPU中介处理,外围设备直接同计算机的主内存进行数据传输。


6.用来识别具有DMA功能的外围设备的¥[编号]称为什么?

    DMA通道。像磁盘这样用来处理大量数据的外围设备都具有DMA功能。



11.1 应用和硬件无关?

    在用C语言等高级编程语言开发的Windows应用中,大家很少能接触到直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。

    Windows提供了间接控制硬件的方法。利用操作系统提供的系统调用功能就可以实现对硬件的控制。

    Windows中,系统调用称为API。各API就是应用调用的函数。这些函数实体被存储在DLL文件中。


11.2 支撑硬件输入输出的IN指令和OUT指令

    Window控制硬件时借助的是输入输出指令。其中具有代表性的两个输入输出指令是INOUT。这些指令也是汇编语言的助记符。

    IN指令通过指定端口号的端口输入数据,并将其存储在CPU内部的寄存器中。

    OUT指令则是把CPU寄存器中存储的数据,输出到指定端口号的端口。


    什么是端口号和端口呢?

        计算机主机中,附带了用来连接显示器及键盘等外围设备的连接器。而连接器的内部,都有用来交换计算机主机同外围设备之间电流特性的IC。这些IC,统称为I/O控制器。由于电压不同,数字信号以及模拟信号的电流特性不同,计算机主机和外围设备之间无法直接连接。I/O控制器就可以解决这个问题。

        I/OInputOutput的缩写。显示器、键盘等外围设备都有各自专用的I/O控制器。I/O控制器中有用于临时保存输入输出数据的内存。这个内存就是端口。端口(port)的字面意思是港口I/O控制器内部的内存,也称为寄存器。虽然都是寄存器,主要用来临时存储数据的。


    在实现I/O控制器功能的I/C中,会有多个端口。由于计算机中连接着很多外围设备,所以就会有多个I/O控制器,当然会有多个端口。

    一个I/O控制器及可以控制一个外围设备,也可以控制多个外围设备。端口之间通过端口号进行区分。端口号也称为I/O地址。以蜂鸣器为例:

    AT兼容机中,蜂鸣器的端口号是61HH表示十六进制数)

        通过

            IN  EAX61H  把端口61H的数据存储到CPUEAX寄存器中。

            OR  WAX03H EAX寄存器的低2位设定成NO

            OUT  61HEAX EAX寄存器的内容输出到61H号端口,是蜂鸣器发出声音。



11.4 外围设备的中断请求

    IRQInterrupt Request)是中断请求的意思。IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制。该机制称为中断处理。中断处理在硬件控制中担当着重要角色。因为如果没有中断处理,就有可能出现处理无法顺畅进行的情况。

    从中断处理开始到请求中断的程序运行结束之前,被中断的程序(主程序)的处理是停止的。中断处理程序运行结束后,处理也会返回到主程序中继续。

    实施中断请求的是连接外围设备的I/O控制器,负责实施中断处理程序的是CPU。为了进行区分,外围设备中断请求会使用不同于I/O端口的其他编号,该编号称为中断编号。

    假如同时有多个外围设备进行中断请求的话,CPU也会为难。为此,我们可以在I/O控制器和CPU中间加入名为中断控制器的IC来进行缓冲。中断控制器会把从多个外围设备发出的中断请求有序地传递给CPU

    CPU接收到来自中断控制器的请求后,会把当前中在运行的主程序中断,并切换到中断处理程序。中断处理程序的第一步处理,就是把CPU所有寄存器的值保存到内存的栈中。在中断处理程序中完成外围设备的输入输出后,把栈中保存的数据还原到CPU寄存器中,然后再继续进行对主程序的处理。加入CPU寄存器的数值没有还原的话,就会影响主程序运行,甚至崩溃。


11.5 用中断实现实时处理

    在主程序运行过程中,大部分外围设备,都会频繁地发出中断请求。其原因就是为了实时处理从外围设备输入的数据。虽然不利用中断也可以从外围设备输入数据。但这种情况下,主程序就必须要持续不断地检查外围设备是否有数据输入。

    由于外围设备有很多个,因此就有必要按照顺序来调查。按照顺序调查多个外围设备状态称为轮询。对几乎不产生中断的系统来说,轮询是比较合适的处理。不过,这对计算机来说就不合适了。


11.6 DMA可以实现短时间内传送大量数据

    DMADirect Memory Access)是指不通过CPU的情况下,外围设备直接和主内存进行数据传送。磁盘等都用到了这个DMA机制。通过利用DMA,大量数据就可以在短时间内转送到主内存。因为CPU作为中介的时间被节省了。

每个使用DMA的外围设备都有一个编号,称为DMA通道,CPU借助DMA通道,来识别是哪一个外围设备使用了DMA

    I/O端口号、IRQDMA通道可以说是识别外围设备的3点组合。不过,IRQDMA通道并不是所有的外围设备都是必须具备的。计算机主机通过软件控制硬件时所需要的信息的最低限,是外围设备的I/O端口号。IRQ只对需要中断处理的外围设备是必须的,DMA通道则只对需要DMA机制的外围设备来说是必须的。


11.7 文字及图片的实现机制

    显示器中显示的信息一直存储在某内存中。该内存称为VRAMVideo RAM)。在程序中,只要往VRAM中写入数据,该数据就会在显示器中显示出来。

    在现代计算机中,显卡等专用硬件中一般都配置有与主内存想独立的VRAMGPUGraphics Processing Unit,图形处理器,也称为图形芯片)。内存VRAM中存储的数据就是显示器上显示的信息。

    用软件控制硬件听起来好像很难,但实际上只是利用输入输出指令同外围设备进行输入输出的处理而已。中断处理是根据需要来使用的选项功能,DMA则直接交给外围设备即可。

    虽然计算机领域的新技术在不断涌现,但计算机能处理的事情,始终只是对输入的数据进行运算,并把结果输出,这一点是不会发生变化的。

1 0