IO原理

目录

  • IO的概念
  • IO设备分类
  • IO设备组成
  • 设备控制器
  • 直接存储器存储(DMA)
  • 内存映射IO
  • 中断
  • IO存取执行原理

IO的概念

I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分。
在POSIX兼容的系统上,例如Linux系统,I/O操作可以有多种方式,比如DIO(Direct I/O),AIO(Asynchronous,I/O 异步I/O),Memory-Mapped I/O(内存映设I/O)等,不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。
输入输出I/O流可以看成对字节或者包装后的字节的读取就是拿出来放进去双路切换

IO设备分类

I/O设备一般分为两种:
块设备:每个块都有自己的地址,传输依次是以块为单位进行的通常在512-32768之间,典型的就是磁盘
字符设备:没有固定的地址,每次以字符为单位接收或发送一个字符流。如键盘,鼠标

IO设备组成

I/O设备一般由机械部分和电子部分组成,电子部分就称为设备控制器或者适配器

设备控制器

设备控制器是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理机从繁杂的设备控制事务中解脱出来。
一个设备控制器可以控制2,4,8或者更多个设备。设备控制器是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。
控制器主要任务是将串行的位流转换成字节块,并进行必要的校验工作。

直接存储器存储(DMA)

直接存储器存取是一种高速数据传输的方法,数据可以从一个通道,不经过CPU的处理就直接在存储器或输入输出设备之间进行传输。
工作原理:
一个设备接口试图通过总线直接向另一个设备发送数据(一般是大批量的数据),它会先向CPU发送DMA请求信号。外设通过DMA的一种专门接口电路――DMA控制器(DMAC),向CPU提出接管总线控制权的总线请求,CPU收到该信号后,在当前的总线周期结束后,会按DMA信号的优先级和提出DMA请求的先后顺序响应DMA信号。CPU对某个设备接口响应DMA请求时,会让出总线控制权。于是在DMA控制器的管理下,外设和存储器直接进行数据交换,而不需CPU干预。数据传送完毕后,设备接口会向CPU发送DMA结束信号,交还总线控制权。

内存映射IO

MMIO(Memory mapping I/O)即内存映射I/O,它是PCI规范的一部分,I/O设备被放置在内存空间而不是I/O空间。从处理器的角度看,内存映射I/O后系统设备访问起来和内存一样。这样访问AGP/PCI-E显卡上的帧缓存,BIOS,PCI设备就可以使用读写内存一样的汇编指令完成,简化了程序设计的难度和接口的复杂性。I/O作为CPU和外设交流的一个渠道,主要分为两种,一种是Port I/O,一种是MMIO(Memory mapping I/O)

中断

当某个I/O结束的时候就会产生中断,主板上有一个中断控制器,每个设备都与中断控制器相连接,中断控制器通过总线与cpu相连接,当中断发生的时候中断控制器接收到I/O端口发出的信号,如果说没有其他中断处理就处理这个中断
中断控制器在地址线上放置一个数字表明是哪一个中断,然后导致cpu停止当前正在运行的进程,将程序计数器等信息入栈,然后根据地址线上的数字查找中断向量表,找到需要运行的中断处理程序。

IO存取执行原理

在这里插入图片描述
上图显示了一个简化的“逻辑”图,它表示块数据如何从外部源,例如一个磁盘,移动到进程的存储区域(例如RAM)中。首先,进程要求其缓冲通过read()系统调用填满。这个系统调用导致内核向磁盘控 制硬件发出一条命令要从磁盘获取数据。磁盘控制器通过DMA直接将数据写入内核的内存缓冲区,不需要主CPU进一步帮助。当请求read()操作时,一旦磁盘控制器完成了缓存的填 写,内核从内核空间的临时缓存拷贝数据到进程指定的缓存中。

在上面介绍中,从内核空间拷贝到最终用户缓存看起来增加了额外的工作。为什么不告诉磁盘控制器直接发送数据到用户空间的缓存呢?好吧,这是由虚拟内存实现的。如下所示:
IO原理_第1张图片
通过将内核空间地址映射到相同的物理地址作为一个用户空间的虚拟地址,DMA硬件(只能访问物理内存地址)可以填充缓存。这个缓存同时对内核和用户空间进程可见。

你可能感兴趣的:(操作系统)