分享

[操作系统] I/O硬件原理

 宏勤花 2020-02-23

I/O硬件原理



1. I/O设备分类

I/O设备大致可以分为两类:块设备和字符设备。

  1. 块设备

    块设备把信息存储在固定大小的块中,每个块有自己的地址。所有传输以一个或多个完整的(连续的)块为单位。块设备的基本特征是每个块都能独立于其他块而读写。硬盘和USB都是块设备。

  2. 字符设备

    字符设备以字符为单位发送或接收一个字符流,而不考虑任何块结构。字符设备是不可寻址的,也没有任何寻道操作。打印机、鼠标以及大多数与磁盘不同的设备都可以看做字符设备。

2. 设备控制器

I/O设备一般由机械部件和电子部件两部分组成。电子部件称作设备控制器或适配器,它经常以主板上的芯片的形式出现。而机械部件就是设备本身。

设备控制器的任务是把串行的位流转换为字节块,并进行必要的错误校正工作。字节块通常首先在控制器内部的一个缓冲区中按位进行组装,然后在证明字节块没有错误后,将其复制到内存中。

3. 设备与CPU通信方法

每个设备控制器有几个寄存器用来与CPU通信。通过写入这些寄存器,操作系统可以命令设备发送数据、接收数据、开启或关闭,或者执行某些其他操作。通过读取这些寄存器,操作系统可以了解设备的状态,是否准备好接收一个新命令等。

除此之外,许多设备还有一个操作系统可以读写的数据缓冲区,可供程序或操作系统写入数据。

为了实现CPU与设备控制寄存器和数据缓冲区的通信,有两种办法可以采用

  1. 单独的I/O空间

    每个控制寄存器被分配一个I/O端口(一个8位或16位的整数)。所有的I/O端口形成一个I/O端口空间,并且受到保护使得普通用户程序不能访问。在这个方案中,I/O有自己的地址空间。

  2. 内存映射I/O

    将所有控制寄存器映射到内存空间中,每个控制寄存器被分配惟一一个内存地址,并且不会有内存被分配这一地址。

当CPU想要读入一个字的时候,不论是从内存中读入还是从I/O端口读入,都将需要的地址放到地址总线,同时还需要另一条总线指示需要的是I/O空间还是内存空间。

对于第一种方案,I/O空间和内存空间分别响应符合的需求就可以了。

对于第二种方案,因为都在内存空间中,所以内存模块和I/O设备需要将地址线和自己所服务的地址范围相比较,若符合才会响应请求。

4. 内存映射I/O

将所有控制寄存器映射到内存空间中,每个控制寄存器被分配惟一一个内存地址,并且不会有内存被分配这一地址。

内存映射I/O

优点:

  • 设备控制器只是内存中的变量,不需要特殊方法寻址。

  • 不需要特殊的保护机制阻止用户进程执行I/O操作,只需要避免将I/O控制寄存器对应的地址空间放入用户进程虚拟空间。额外的好处是可以将不同的设备驱动放在不同地址空间,防止驱动程序间的相互干扰。

  • 对于内存有用的指令,同样可以用来使用控制寄存器。

缺点:

  • 要使用额外的机制禁止对设备控制寄存器高速缓存,因为第一次引用设备可能导致它被高速缓存,随后的引用就只是从高速缓存中取值而不是查询设备了。

  • 在多总线机器中(有单独的内存总线),I/O设备无法查看内存地址,因为对内存的引用只在内存总线上。

    1. 第一种解决方法是首先将全部内存引用发送到内存,如果内存响应失败,CPU就放弃内存总线尝试其他总线。

    2. 第二种方法是在内存总线上放置探查设备,放过所有潜在地指向所关注的I/O设备的地址。造成的问题是I/O设备无法以内存所能达到的速度处理请求。

    3. 在PCI桥芯片中对地址进行过滤,预装一个范围寄存器,在寄存器中被标记为非内存的范围的地址将转发给PCI总线而不是内存。缺点是需要在预装时就确定内存范围。

5. 直接存储器存取(DMA)

无论一个CPU是否具有内存映射I/O,都需要寻址设备控制器以便与它们交换数据。CPU可以从I/O控制器每次请求一个字节数据,但是这样会浪费CPU时间,于是用到了直接存储器(Direct Memory Access, DMA)方案,这一方案需要一个叫做DMA控制器的硬件支持。

DMA

DMA控制器独立于CPU而访问系统总线。如图所示,它包含若干个可以被CPU读写的寄存器,其中包括一个内存地址寄存器、一个字节计数寄存器和一个或多个控制寄存器。控制寄存器指定要使用的I/O端口、传送方向、传送单位以及在一次传送中要传送的字节数。

工作原理:

  1. 在没有DMA时的读磁盘操作

    • 首先,控制器从磁盘驱动器串行地、一位一位地读一个块,直到将整块信息放入控制器内部缓冲区中。
    • 接着,计算校验和,以保证没有错误发生。
    • 然后,控制器产生一个中断。
    • 最后,当操作系统开始运行时,重复地从控制器的缓冲区一次一个字节地读取该块信息,并存入内存中。
  2. 使用DMA时

    • 首先,CPU设置DMA控制器的寄存器对它进行编程,所以DMA控制器直到将数据传送到哪里(即上图1)。
    • 接着,DMA控制器想磁盘控制器发出一个命令,通知它从从磁盘读数据到其内部缓冲区中,并进行校验。若数据有效,DMA控制器通过在总线上发出一个读请求到磁盘控制器发起DMA传送(即上图2)。
    • 然后,将数据写到内存中,当写操作完成时,磁盘控制器在总线上发出一个应答信号到DMA控制器。DMA控制器步增要使用的内存地址,并重复上述过程直到传送完所有数据。
      (即上图3,4)。
    • 最后,DMA中断CPU,通知CPU传送完成,当操作系统开始工作时,数据已经存在于内存中了,不需要再次复制。

模式选择:
许多总线能够以每次一字模式和块模式两种方式操作,DMA也可以。

  1. 每次一字模式

    DMA控制器请求传送一个字并且得到这个字。如果CPU也想使用总线,CPU必须等待。这一机制称为周期窃取,因为设备控制器偶尔从CPU偷走一个临时总线周期,会轻微延迟CPU。

  2. 块模式

    DMA控制器通知设备获得总线,发起一连串的传送,然后释放总线。之一机制叫做突发模式,比周期窃取效率更高,但是长时间突发传送会长时间阻塞CPU和其他设备。

  3. 飞越模式

    DMA控制器通知设备控制器直接将数据传送到主存,缺点是不灵活,不能执行设备到设备的复制。

为什么要在DMA开始之前,磁盘要将数据读入其内部缓冲区而不是使用飞越模式:

  1. 通过进行内部缓冲,磁盘控制器可以再开始传送前检验校验和,如果校验和错误,就不会传送,避免浪费。

  2. 一旦磁盘传送开始工作,从磁盘读出的数据就是以固定速率到达的,而不论控制器是否准备好接收数据。如果控制器将数据直接写到内存,则必须要为传送的每个字取得总线控制权。如果总线正忙,控制器必须等待,如果在前一个磁盘字还未被内存存储时,下一个磁盘字到达,控制器必须将其存放在某个地方。使用内部缓冲区,可以再DMA启动前避免使用总线。

6. 中断

当一个I/O设备完成工作时,就会通过在分配给它的一条总线信号线上置起信号来产生一个中断。该信号被主板上的中断控制器检测到,并决定下一步该做什么。

中断

如果这是没有其他中断未被处理,则中断控制器立即对该中断进行处理。如果有另一个中断正在被处理,或者另一个设备在总线上具有更高优先级的一条中断请求线上同时发出中断请求,该中断将暂时不被处理。

中断信号会导致CPU停止当前的工作并开始做其他的事情。为了处理中断,中断控制器在地址线上放置一个数字标明哪个设备需要关注,并且置起一个中断CPU的信号。地址线上数字被用做指向一个称为中断向量的表格的索引,以便读取一个新的程序计数器,这一程序计数器指向相应的中断服务过程的开始。

中断时,需要将程序计数器中的信息保存(也可以保存其他信息,但PC的信息必须保存以保证中断进程可以重新开始)。保存的位置可以有两种选择。

  1. 保存在内部寄存器

    在需要时操作系统可以读出内部寄存器,但是中断控制器之后无法得到应答,直到所有可能的相关信息被读出,以免第二个中断重写内部寄存器。将造成长时间死机并有可能丢失数据。

  2. 保存在CPU堆栈

使用用户堆栈可能会引发故障和不合法指针,使用内核堆栈可能会更改MMU上下文,从而造成TLB和高速缓存大部分失效,浪费时间。

7. 精确中断与不精确中断

在现代使用流水线和超标量的计算机中,中断不一定出现在每条指令执行后。即中断发生时,许多指令可能处在不同的执行阶段。中段发生时,程序计数器无法正确地反应已经执行过的指令和未执行的指令。因为许多指令可能被部分执行了

  1. 精确中断

    将机器留在一个明确的状态称为精确中断,有4特性:

    1. PC(程序计数器)保存在一个已知地方。
    2. PC所指向的指令之前的所有指令已经完全执行。
    3. PC所指向的指令之后的所有指令全都没有执行。
    4. PC所指向的指令执行状态已知。

    需要注意的是,对于PC指向的指令之后的指令,可以开始执行,但是需要在中断发生前撤销他们对寄存器或内存等造成的修改。

  2. 不精确中断

    不满足上述提到的4个特性的中断称作不精确中断。可以将一些致命的错误造成的中断设计为不精确中断。例如,除以0造成的编译错误的中断,因为不需要重新开始中断前的进程。

精确中断不精确中断


参考书目:现代操作系统第三版

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多