I/O子系统

I/O子系统是操作系统中负责与外设打交道的部分。
一. IO特点

  1. 对I/O设备的接口分类
    I/O子系统
    对不同的设备的访问有不同特征
    I/O子系统
    块设备的读写是以一个数据块为基本单位
    I/O子系统
  2. 3种IO操作的方式——CPU与设备的交互操作系统要参与CPU与IO设备的交互
    (1)阻塞IO:从发出请求到数据回来,进程处于等待状态。
    用户进程与设备进行IO交互时,用户发送IO请求,请求送到操作系统内核中设备驱动,设备驱动把请求转换成实际的硬件控制命令,控制硬件进行相应操作。硬件操作完成之后,产生中断,由内核中中断处理例程进行响应,最后送到设备驱动然后回到用户态,用户得到相应结果。
    I/O子系统
    (2) 非阻塞IO:进程把命令发出去,不等待
    读写操作把命令发出去之后立即返回。
    I/O子系统
    (3)异步IO
    读数据时用户把相应缓冲区设置好,告诉内核之后就返回了。操作系统内核在完成相应处理并把读到的数据放到缓冲区之后,通知用户。
    写数据标记好我的数据在哪里后通知内核就返回了,操作系统完成写到相应设备之后通知用户。
    I/O子系统
    二. IO结构
    1.CPU和IO设备的连接:
    I/O子系统
    通过IO端口号识别我想访问的是哪个设备
    I/O子系统
    2.操作系统中IO子系统的结构
    I/O子系统
    用户进程进行IO请求的过程:(用户进程的请求就相当于CPU的IO请求)
    用户发出IO请求,操作系统里的IO子系统首先判断是否有现成结果,没有就给驱动发IO请求。设备驱动把IO请求转换成设备的控制命令,直接给硬件设备控制硬件操作,同时设备驱动处于等待状态。硬件设备处理完之后产生中断,中断处理例程对它做出响应…
    I/O子系统
    三. IO数据传输——3种方式:轮询,中断,DMA方式。
    1.CPU与设备控制器的数据传输
    I/O子系统
    通过DMA和中断方式完成读取磁盘数据的过程:
    CPU在执行用户代码时,产生磁盘读取请求。在内核里请求转到设备驱动;
    设备请求转换为对磁盘控制器的操作;
    磁盘控制器读取数据,初始化DMA传送;
    把数据通过PCI总线传给DMA控制器;
    DMA控制器把数据传到指定的内存区域;
    DMA控制器完成传送后产生中断请求,CPU响应中断请求,判断操作是否结束,回到应用程序中。
    I/O子系统
    2.IO设备通知操作系统的机制
    I/O子系统
    (1)轮询
    I/O子系统
    (2)设备中断——CPU布置好IO操作之后可以忙活别的,IO设备进行相应IO请求处理,处理完产生中断,触发CPU,让CPU响应。
    I/O子系统
    I/O子系统
    四. 磁盘调度——多个IO请求,对哪个先访问
    I/O子系统
    I/O子系统
    磁盘IO传输时间取决于寻道时间,可能同时会有很多进程对同一磁盘的IO请求,要优化磁盘访问请求顺序来减少寻道时间。
    I/O子系统
    1.FIFO算法:对于多个进程对对同一磁盘的IO请求,先来的请求先访问磁盘。
    I/O子系统
    I/O子系统
    2.SSTF算法:对于多个进程对同一磁盘的IO请求,访问请求的位置离当前磁臂位置越近越先访问。
    I/O子系统
    I/O子系统
    3.SCAN算法:对于多个进程对同一磁盘的IO请求,磁臂先朝同一方向移动(IO请求的位置在这个方向的先访问到),再转向
    I/O子系统
    I/O子系统
    五. 磁盘缓存——把磁盘里的数据哪些放到内存里做缓存
    磁盘缓存是放在内存里的磁盘数据的缓存。
    I/O子系统
    单缓存和双缓存指的是内存里的缓存区是一个还是两个。
    单缓存:IO设备往缓存区里写数据时,CPU就不能从缓存区里读数据(类似生产者消费者问题)。同一时刻CPU和IO设备只能有一个能对缓存区进行操作。
    双缓存:CPU和IO设备可以同时通过两个缓存读写数据。如果一头写完一头读空可以切换缓存区。
    I/O子系统