图源:文心一言
考研笔记整理,纯复习向,思维导图基本就是全部内容了,不会涉及较深的知识点~~
编辑: 梅头脑
参考用书:王道考研《2024年 计算机组成原理考研复习指导》《2024年 操作系统考研复习指导》
参考视频:7.1_1_输入输出系统和IO控制方式_哔哩哔哩_bilibili
前言
思维导图
计组 第6章 总线
计组 第7章 I/O系统 + 系统 第5章 I/O管理
目录
I/O设备
按信息交换单位分类
按资源分配管理分类
I/O接口
主要功能
基本结构
I/O指令
端口及编址
I/O方式
程序查询方式
程序中断方式
DMA方式
通道方式
计算题目
I/O软件层次结构
层次结构
系统处理流程
设备独立性软件
SPOOLing技术
设备驱动接口
结语
- 数据传输:数据信息、状态信息、控制信息等
- 控制和定时:解决主机与外设时序配合问题
- 数据缓冲:匹配CPU与外设传输速度
- 信号格式转换:匹配计算机与外设信号格式
主机侧【系统总线】
- 数据线
- 数据寄存器:CPU读写,存放输入输出数据,实现数据缓冲
- 状态寄存器:CPU读取,存放外设的执行结果和状态信息
- 控制寄存器:CPU写入,存放外设的启动命令和更改外设的模式
- 地址线
- 地址译码与I/O控制逻辑:I/O接口寄存器地址
- 控制线
- 地址译码与I/O控制逻辑:读/写信号、仲裁信号【例,中断请求信号】、握手信号
设备侧【接口电缆】
- 外设界面控制逻辑【驱动程序协助】
- 控制线:控制寄存器中的命令字进行译码
- 数据线:收集并发出数据缓冲线到外设的数据
- 状态线:收集外设状态到状态寄存器
图源:IO 设备的分类与概念、IO控制器_io控制器和io设备的区别-CSDN博客
- 功能:对数据缓冲寄存器、状态/控制寄存器的访问操作,通常发生在通用寄存器和I/O端口之间
- 权限:只能在操作系统内核的底层I/O软件中使用,是一种特权指令
- 端口
- 概念:接口电路中可被CPU直接访问的寄存器,例如数据缓冲寄存器、状态/控制寄存器
- 分类:数据端口【读写操作】、状态端口【读操作】、控制端口【写操作】
- 接口
- 概念:若干I/O端口+相应的控制逻辑=I/O接口,I/O接口也叫做【设备控制器】或【I/O适配器】
- 编址
- 统一编址:I/O端口当作内存的地址进行分配,通过地址码区分存储单元和I/O设备,使用统一的访存指令可访问I/O端口
- 独立编址:I/O端口的地址空间与主存地址空间是两个独立的地址空间,需要设置专门的I/O指令访问I/O端口
图源:IO 设备的分类与概念、IO控制器_io控制器和io设备的区别-CSDN博客
- 主要特点:(1)控制完全由CPU执行程序实现,CPU与I/O串行工作;(2)数据传送由软件完成
- 响应时间:(1)独占查询;(2)定时查询
- 内部异常:是CPU执行指令引起的中断
- 故障【软件中断】:指令执行引起的异常,如缺页、除数为0、运算溢出等
- 自陷【软件中断】:用于在用户态下调用操作系统内核程序
- 终止【硬件中断】:CPU遇到无法执行的硬件故障,如控制器出错,存储器校验错
- 备注:内核调用操作系统是自陷中断,内核态转用户态是操作系统实现,用户态转内核态是硬件实现
- 外部异常【狭义中断】:非CPU执行指令引起的中断
- 可屏蔽中断INTR
- 不可屏蔽中断NMI
- 中止现行程序
- 处理中断请求
- 返回断点,继续执行原程序
图源:计算机组成原理-总线_YuanbaoQiang的博客-CSDN博客
- 软件识别:异常状态寄存器,检测异常和中断类型
- 硬件识别:CPU通过中断源获得中断类型号,据此计算出对应向量的地址,查询中断向量表计算出对应中断服务程序的入口地址,送入PC
- 备注:中断向量表存放在内存中,通常开机时操作系统初始化
- 响应过程【硬件实现】
- 关中断:保存程序的断点和现场信息,不能相应更高级中断源的中断请求
- 保存断点:将原程序的断点和程序状态【PC寄存器和PSW寄存器】的内容保存在栈和特定寄存器中
- 引出中断服务程序:识别中断源,将对应的服务程序入口地址送入程序计数器PC
- 处理过程【系统实现】
- 保存现场【工作的通用寄存器】
- 执行中断服务程序
- 恢复现场
- 开中断、中断返回:继续执行原程序
图源:I/O方式 —— 程序中断方式_starter_zheng的博客-CSDN博客
- 不可屏蔽中断 > 内部异常 > 可屏蔽中断,内部异常:硬件故障 > 软件故障
- DMA中断 > I/O设备传送,IO设备传送:高速 > 低速,输入 > 输出【避免数据覆盖】,实时 > 普通
- 访管【用户态系统调用】 > 程序性【进程抢占CPU】
- 屏蔽字触发器:改变可屏蔽中断的优先级,1表示屏蔽该中断源的请求,0表示可以正常申请;中断源不能中断自身,因此也设置为1
- 屏蔽器寄存器:所有屏蔽触发器组合在一起
- 保存现场【工作的通用寄存器】和屏蔽字
- 开中断:允许更高请求得到相应,实现中断嵌套
- 执行中断服务程序
- 关中断:保证恢复现场和屏蔽字时不被中断
- 恢复现场和屏蔽字
- 开中断、中断返回:继续执行原程序
图源:中断优先级/嵌套 详解_ZC·Shou的博客-CSDN博客
- 主存地址寄存器:存放要交换数据的主存地址
- 传送长度计数器:记录传送数据的长度,自动发送中断请求信号
- 数据缓冲寄存器:暂存每次传送的数据
- DMA请求触发器:I/O设备准备好数据后,给出控制信号使DMA请求触发器置位
- 中断机构:一个数据块传送完成后触发中断机构,向CPU提出中断请求
- 控制/状态逻辑
- 停止CPU访存:DMA使用时,CPU停止访问
- 周期挪用:CPU与IO同时访存时,I/O设备挪用一个或几个存取周期
- 交替访存:C1周期专供DMA访存,C2周期专供CPU访存
- 可以参考 王道书6.1.3 三总线结构
- 预处理:由CPU完成测试、初始化等必要的准备工作;I/O设备准备好数据后向DMA控制器发送请求,DMA数据缓冲寄存器写满后向CPU发送总线请求
- 数据传送:以单字节或字为基本单位,或以数据块为基本单位【如硬盘】传送数据,传送期间总线控制权由DMA控制器掌握
- 后处理:DMA控制器向CPU发出中断请求,CPU执行中断服务程序做DMA结束处理
- 注意:区分 DMA请求【数据预处理与传送阶段,优先级高于CPU,根据传送方式决定访存周期】 与 DMA中断【后处理阶段,数据块传送结束,申请中断】
- 主要特点:(1)CPU、通道、I/O设备三者并行操作(2)I/O通道方式是DMA方式的发展
图源:计算机组成原理_YuanbaoQiang的博客-CSDN博客
- 时间百分比(%) = CPU每秒处理中断的时钟周期(Hz) / CPU每秒时钟频率(Hz)= 每秒中断时钟周期(s)/ 单位时间(s)
- CPU每秒处理中断的时钟周期(Hz) = 外设每秒中断次数(Hz) x CPU每次处理中断时钟周期
- 外设每秒请求中断次数(Hz) = 外设每秒传输数据速率(B/s) / 外设每次传送数据块大小(B)= 单位时间(s) / 外设每次准备数据块的时间(s)
- 外设每次准备数据块的时间(s)= 外设每次传送数据块大小(B)/ 外设每秒传输数据速率(B/s),注:CPU 检查时间 ≤ 外设准备数据块的时间,否则会覆盖
- CPU每次处理中断时钟周期 = CPU执行中断指令数量(条)x 每条指令时钟周期CPI
- DMA周期挪用每秒请求次数(次)= 外设每秒请求数据量(B)/ DMA缓冲区寄存器容量(B)
- 磁盘每秒请求数据量(B)= 磁盘页面大小(B)x 每秒访问磁盘次数(次)
- CPU每秒访问磁盘次数(次)= CPU每秒访存次数(次)x Cache缺页率(%) x 主存缺页率(%)
- 这个是课上机智的咸鱼为了理解18年真题带我们画的配图,虽然咸鱼教的很好,但我也不确定自己水水的浆糊脑袋有没有理解到位,可能会有错误...不过应该可以贴在这里吧——
- 用户层I/O软件:用户可调用与I/O操作有关的库函数【系统调用】
- 设备独立性软件:使应用程序独立于系统程序
- 设备驱动程序:可与硬件直接交互,根据系统指令驱动I/O设备工作
- 中断处理程序:可与硬件直接交互,保存断点,转入中断服务程序
- 硬件:执行具体I/O操作
图源:操作系统17———IO系统之概述_冰炭不投day的博客-CSDN博客
- 用户I/O层软件→设备独立性软件→设备驱动程序→中断处理程序→硬件
- 设置硬件【例,快表】
- 内存的空间作为缓冲池,供请求和分页系统和磁盘I/O时共享【常见】
- 硬件缓冲器
- 内存缓冲区
- 单缓冲区,处理用时:Max(处理时长,输入时长)+传送时长
- 双缓冲区,处理用时:Max(处理时长+传送时长,输入时长)
- 循环缓冲:缓冲区构成循环队列
- 缓冲池
- 缓冲队列:空缓冲队列、输入队列、输出队列;
- 缓冲区
- 收容收入【空缓冲队列→输入队列】
- 提取收入【输入队列→空缓冲队列】
- 收容输出【空缓冲队列→输出队列】
- 提取输出【输出队列→空缓冲队列】
图源:5.2.4 OS之缓冲区管理_os循环缓冲区_BitHachi的博客-CSDN博客
- 设备控制表【对应设备数量】
- 设备类型
- 设备标识符【物理名称】
- 设备状态【等待/不等待、忙/闲】
- 指向控制器表的指针
- 重复执行的次数或时间【多次I/O不成功则判定失败】
- 设备队列的队首指针【进程PCB组成队列】
- 控制器控制表【控制设备与内存交换数据】
- 控制器标识符
- 控制器状态
- 与控制器连接的通道表指针
- 控制器队列的队首指针
- 控制器队列的对位指针
- 通道控制表【一个通道可为多个控制器控制表服务】
- 通道标识符
- 通道状态
- 与通道连接的控制器表首址
- 通道队列的队首指针
- 通道队列的对位指针
- 系统设备表【系统只有一张】:记录已连接到系统中所有物理设备的情况
图源:IO设备分配与回收-嗨客网
- 静态分配:一次性分配所有资源,不会死锁,但效率低
- 动态分配:在进程执行过程中根据执行需要进行,算法不合适可能死锁,但效率高
- 安全分配方式:进程I/O请求后便进入阻塞态,CPU与设备串行运行,效率很低
- 不安全分配方式:进程I/O请求后仍继续运行,有可能会造成死锁,需要设计合适的设备分配算法
- 输入:I/O设备的输入数据经过内存的输入缓冲区传送到输入井,挂在输入队列;CPU需要输入数据时,从输入井读入内存
- 输出:I/O设备的输出数据经过内存传送到输出井,挂在输出队列;输出设备空闲时,从输出井经过输出缓冲区送到输出设备
图源:操作系统知识点串联_King来写代码的博客-CSDN博客
- 统一设备驱动城区与操作系统的接口
- 用户编程时使用的设备与实际设备无关【独立性】
️博文到此结束,写得模糊或者有误之处,欢迎小伙伴留言讨论与批评,督促博主优化内容~
博文若有帮助,欢迎小伙伴动动可爱的小手默默给个赞支持一下,支持博主继续头秃码字~
博主也有整理数据结构学习笔记,在这里:
数据结构_梅头脑_的博客-CSDN博客https://blog.csdn.net/weixin_42789937/category_12262100.html?spm=1001.2014.3001.5482https://blog.csdn.net/weixin_42789937/category_12262100.html?spm=1001.2014.3001.5482
默默吐槽,这个排版真是...啊我自己都看不下去,下次想想插图有没有什么更好的办法...
发现有小伙伴留言点赞有点开心,想了很久还是修改了排版——发现用块引用以后配图问题就好多了,虽然还是有点怪怪的,但至少不是那种别扭到自己都看不下去那种了~~