• 硬件控制方法


    问题

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

      IN指令和OUT指令

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

      Input/Output

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

      I/O地址或I/O端口号

    4. IRQ是什么的缩写?

      中断请求Interrupt Request

    5. DMA是什么的缩写?

      Direct Memory Access

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

      DMA通道

    应用和硬件无关?

    硬件的控制是由Windows全权负责的。利用操作系统提供的系统调用功能就可以实现对硬件的控制。

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

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

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

    计算机主机中,附带了用来连接外围设备的链接器。而各连接器的内部,都连接有用来交换计算机主机同外围设备之间电流特性的IC。这些IC,统称为I/O控制器。由于电压不同,数字信号及模拟信号的电流特性也不同,计算机主机和外围设备是无法直接连接的,I/O控制器就很有必要了。I/O控制器中有用于临时保存输入输出数据的内存,这个内存就是端口,也称为寄存器,但它与CPU的寄存器在功能上是不同的,它主要是用来临时存储数据的。多个端口之间通过端口号进行区分,端口号也称为I/O地址。IN指令和OUT指令在端口号指定的端口和CPU之间进行数据的输入输出,这和通过内存地址来进行主内存的读写是一样的道理。

    编写测试用的输入输出程序

    在大部分C语言的处理汇总,只要使用_asm{}括起来,就可以在其中技术助记符。也就是说,这样就可以编写C语言和汇编语言混合的源代码。

    外围设备的中断请求

    IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制,称为中断处理。

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

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

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

    用中断来实现实时处理

    虽然利用中断也可以从外围设备输入数据,但主程序就必须要持续不断地检测外围设备是否有数据输入。

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

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

    DMA是指不通过CPU的情况下,外围设备直接和主内存进行数据传送。之所以这么快速,是因为CPU作为中介的时间被节省了。

    I/O端口号、IRQ、DMA通道可以说是识别外围设备的3点组合。不过,I/O端口号是必需的,而IRQ只对需要中断处理的外围设备是必需的,DMA通道只对需要DMA机制的外围设备是必需的。假如多个外围设备都设定成同样的端口号、IRQ及DMA通道的话,计算机就无法正常工作,出现“设备冲突”的提示。

    文字及图片的显示机制

    显示器显示文字及图形的机制,就是显示器中显示的信息一直存储在某内存中,即VRAM。在程序中,只要往VRAM中写入数据,该数据就会在显示器中显示出来。实现该功能的程序,是由操作系统或BIOS提供,并借助中断来进行处理的。

    在现在的计算机中,显卡等专用硬件中一般都配置有与主内存想独立的VRAM和GPU。这是因为,对经常需要描绘图形的Windows来说,数百兆的VRAM是必需的。

  • 相关阅读:
    ASP.NET Web API 2 框架揭秘
    跨境之二 对外服务接口接收订单数据(跨境通关申报系统)
    关于程序员的59条搞笑但却真实无比的编程语录
    linux终端常用快捷键
    [ json editor] 如何在网页中使用Json editor 插件
    【简洁之美】裴波那切数列生成器 python
    python 实现树结构的打印
    windows python文件拷贝到linux上执行问题
    python 中变量的命名方法
    <select> 标签使用
  • 原文地址:https://www.cnblogs.com/fr-ruiyang/p/14633485.html
Copyright © 2020-2023  润新知