学什么?
- I/O input / output
- 输入:鼠标 键盘 手柄 触摸屏 摄像头 MTC 扫描仪
- 输出:显示器 打印机 耳机 音响
- 既是输入也是输出:光驱 网卡 磁盘 U盘
- 硬件:设备如何把数据返回到PC机,但是不同种类的设备,适合不同的控制方式,引出了I/O控制方式(数据怎么输入输出)
- 软件:输入输出时面对的多种问题,CPU与I/O速度不匹配,基本数据单元大小也不匹配 引出了,缓存技术;缓冲技术(内存);假脱机技术;spooling技术 ;因为使用硬件的进程数量很多,但是硬件设备比较少,如何对设备进行分配和回收?
- I/O系统层次管理 -> 代码实现框架 各司其职,低耦合性,便于代码的修改和软件的更新、高效移植
IO管理硬件知识
IO管理设备分类(硬件分类)
- 按照数据的传输速度进行分类(使用场合决定的 -> 人类设计)
- 高速设备 以MB/GB为单位 磁带、磁盘、光盘、U盘、网卡等
- 中速设备 以KB为单位 打印机(串口设备)
- 低速设备 以B为单位 键盘、鼠标、手柄等
- 注意事项:
- 和人类接触的设备为低速设备
- 中速设备: 机械设备,速度介于电子设备(CPU、内存)和人类之间
- 高速设备:尽可能快
- 按照信息交换的单位分
- 块设备 以数据块为单位传输 U盘、硬盘、SD卡、网卡等 高速设备
- 字符设备 以字符为单位传输 键盘、鼠标、手柄、打印机等 低速/中速设备
IO控制方式
控制方式的发展过程
- 程序直接控制方式:cpu主动询问 费时费力,cpu利用率很低
- 中断驱动方式:CPU被动通知,cpu利用率稍微提高,cpu取数据 最为常用
- DMA方式:CPU被动通知,DMA控制器硬件,dma取数据,cpu利用取回的数据;dma需要知道取几个数据,以及数据取完之后,不同数据的存放地址,取数据操作结束之后,通知CPU进行下一步操作;减少了cpu被通知的次数,减少cpu中断的次数;缺点:cpu需要对DMA下达很多的指令,进一步优化
- 通道方式:cpu的被动通知,减少cpu对dma下达的指令数;cpu利用率进一步提高;使用协处理器对DMA施加命令,整体完成之后才通知cpu
- 从上往下 CPU的利用率提高,设计复杂度提高,成本也提高
程序直接控制方式
- cpu周期性运行输入进程(50ms),当输入进程检测到键盘输入的数据之后,利用进程间通信的方式将数据传输给需要的进程
- 该方式效率很低,几乎不再使用
- mcu dsp 等还在使用
- 通常用在低速设备中,高速设备容易丢失数据(键盘输入速度赶不上 cpu处理速度)
中断类控制方式
中断驱动方式
- 新增控制总线 (中断信号在其中传输,提高成本)
- 中断处理程序不是 进程
- 键盘输入程序,引发控制总线的中断,中断会触发中断处理程序,中断处理程序会从数据总线获取数据,将数据传给其他进程
- 广泛使用,使用在低速设备,比如键盘、手柄、鼠标等
- 中断控制总线 数量有限,如果没有了,只能使用程序直接控制的方式
DMA方式
- DMA 一般用于块设备、高速设备
- DMA控制器的四个寄存器
- 内存地址寄存器MAR 记录内存开始的地址 地址
- 数据计数寄存器DC 一次需要从外设读取的数据字节数 长度
- 数据寄存器DR 接收物理外设输入的数据,将接收的数据再传给对应需要的进程,起到缓存的占用
- 命令状态寄存器CR 控制读,读完执行的指令
- 步骤
- 1,磁盘向CPU发出DMA传输请求
- 2,cpu接收请求,执行DMA配置程序,对四个寄存器的地址进行设置
- 3,DMA控制器读取磁盘(设备)数据到数据寄存器DR,一个一个字节的读
- 4,DMA控制器根据MAR的数值,寻找内存存放的位置,开始搬运数据
- 5,DMA控制器开始搬运数量为 数据寄存器DC 存储的数值大小的值
- 6,一组数据搬运完成之后,则DMA控制器产生中断信号给cpu
- 7,cpu执行中断程序,利用信号量通知其他程序 数据传输完一组
- 8,如果数据全部传输完毕,则传输自动结束;如果还有需要传输的数据,则重新执行 1-8
- 优势
- 减少了CPU被通知的次数 具体体现在上述流程的 4-5
- 只有所有数据读完才执行一次中断处理程序 而不会每来一个数据就会产生一个字段
通道方式
- 新增通道协处理器
- 每传输一次数据 会进行一次DMA配置
- 步骤
- 1,磁盘(设备)向cpu发出通道传输请求
- 2,cpu接收请求,激活通道协处理器,并告知通道协处理器的位置
- 3,通道协处理器执行通道程序进行DMA配置
- 4,DMA控制器 开始读取数据到 数据寄存器DR
- 5,DMA控制器根据MAR的数值,寻找内存存放的位置,开始搬运数据
- 6,DMA控制器开始搬运数量为 数据寄存器DC 存储的数值大小的值
- 7,如果还有下一组数据 则继续执行 3-7
- 8,如果没有下一组数据,则说明几组数据传输完成,通道协处理器向cpu发出中断信号
- 9,中断程序通知其他进程,几组数据全部传输完成
缓存技术
- 缓存的原因:通过在高速存储器里面保存低速存储器的副本,来提高cpu对数据的访问速度
- 例如
- 快表是页表的缓存
- 请求分页中,cache中的页面是内存中工作集页面的缓存
- 内存中工作集页面是磁盘中程序页面的缓存
- 现在 快速 的里面找,如果没有才会到慢速的设备里面寻找
为什么引入缓存技术
- 对低速设备产生的数据进行堆积,放在缓存区中,积少成多,然后cpu对其进行集中性处理
- 目的和好处
- 缓和cpu和IO设备速度不匹配的矛盾
- 解决基本数据单元大小不匹配的问题
- 减少IO对cpu中断频率(缓冲区大小 如DMA传输)
- 提高cpu与IO设备的并行性
单缓冲区
- 设置缓冲区和工作区,比如播放器是将缓冲区的内容取到工作区之后,对工作区的数据进行操作,然后缓冲区继续缓冲数据。就可以实现,播放器一边播放,一边缓冲数据。播放和缓存同时进行
- 软存区为空的时候,才可以输入数据,直到充满为止
- 缓存区满的时候,才可以取出,直到为空的时候为止
- 生产时间 > 消费时间 -> 处理一块缓存区数据的平均时间 = 取用时间 + 生产时间
- 生产时间 < 消费时间 -> 处理一块缓存区数据的平均时间 = 取用时间 + 消费时间
- 处理一块缓存区数据的平均时间 = 取用时间 + MAX(消费时间 , 生产时间)
- 处理一块缓存区数据的平均时间 = MAX(生产时间,消费时间 + 取用时间)
双缓冲区
- 相较于先前 单缓冲区,利用了 播放器将数据从缓冲区到工作区这段时间 (取时间)
- 生产时间 > 取用时间 + 消费时间 -> 取用时间 + 生产时间
- 生产时间 < 取用时间 + 消费时间(产生断层,数据中断) -
- 结论一致 处理一块缓存区数据的平均时间 = MAX(生产时间,消费时间 + 取用时间)
- 生产时间 > 取用时间 + 消费时间 IO设备可以连续输入数据,cpu会等待
- 生产时间 < 取用时间 + 消费时间 IO设备不可以连续输入数据,cpu繁忙
循环缓冲区
- 使用循环链表 的形式首尾相连,每个缓冲区的大小相等
- 两个指针 in 和 out,in负责输入数据,out负责取出数据
- 会产生追赶问题,in和out指针
- 生产 > 输出,不可以连续输入,cpu忙,处理数据
- 生产 < 输出,可以连续输入,cpu等待
缓冲池
- 缓冲池中的缓冲区是公用的
- 分别设置 输入队列、输出队列和空闲队列
- 收容输入 取空闲队列的头部的容器块,装载来自服务器的数据;
- 提取输入 将装载数据的容器块,送到指定的进程工作区,然后将没有数据的容器块重新放到排队队列等待装载数据
- 收容输出 取空闲队列的头部的容器块,装载来自进程工作区产生的数据
- 提取输出 将装载数据的容器块,送到指定的进程服务器,然后将没有数据的容器块重新放到排队队列等待装载数据
SpooLing技术
- 输入设备 将数据放到内存中的输入缓冲区,当缓冲区满的时候,由spi进程将缓冲区的数据保存到磁盘中的输入井中的脱机输入文件里。如果其他进程要使用,则读取脱机输入文件即可
- 其他进程输出数据的时候,先将其保存到输入井中的脱机输出文件里,再由SPO进程依次将输出文件数据输出到内存的输出缓冲区,再输出到输出设备里面
- 例子 共享打印机
- 优势:掉电不会丢失
设备的分类
- 从软件思维对设备分类
- 独占式设备 -> 打印机
- 虚拟设备 -> spooling虚拟出来的设备
- 分时共享设备 -> 磁盘网卡
设备的数据结构
- OS 内核
- 硬件系统
- 设备 = 机械部分 + 电子部分
- 查询过程 SDT -> DCT -> COCT -> CHCT
- SDT 系统设备表 PC机已有设备
- DCT 设备控制表 具体设备,比如键盘、鼠标
- COCT 控制器控制表
- CHCT 通道控制表
IO层级结构
- 软件分层思想
- 用户层IO软件 ->api接口
- 设备独立性软件 ->将不同的设备进行封装,统一接口,如linux将所有的设备都视为文件 Dev目录下,设备的文件
- 设备驱动软件 ->控制设备的程序 不同的设备 需要不同的操作程序
- 中断处理程序 ->中断处理 IO控制方式
- 硬件 ->机械部分 + 电子部分 = 设备