I/O设备管理

核心技术:
1.I/O设备抽象为文件视图
2.设备控制器
3.硬件驱动程序,中断处理程序
4.其他I/O管理方式: DMA控制方式,通道技术,I/O缓冲区技术
提高设备的利用率,提高CPU与I/O设备之间的并行操作程度

核心工作过程:
1.CPU发送指令(write,read,open,close)给硬件控制器的寄存器
2.驱动程序将指令翻译为电信号
3.控制器执行电信号指令,完成硬件操作
4.控制器返回一个中断给CPU, CPU运行中断处理程序处理中断,完成与内存的信息交换。

典例: 鼠标移动
鼠标从 (2,2 )移动到(3,5)
1.鼠标控制器得到坐标改变的电信号
2.通过鼠标驱动程序,将电信号翻译为代码
3.传给CPU,触发中断处理程序,CPU处理中断代码(发送指令给显卡)
4.CPU将代码(2,2—3,5)传给显示器控制器(显卡)
5.显卡将指令代码执行到屏幕上(光标从2,2—3,5)
6.显卡向CPU发送中断(2,2—3,5),表示执行完毕
7.CPU处理中断,将光标新位置3,5 存入内存。
在这里插入图片描述

1.I/O设备控制器:由寄存器和控制器组成,用于控制硬件。 本质是芯片
扬声器— 声卡, 显示屏——显卡, 磁盘—磁盘控制器, 鼠标——鼠标控制器

CPU发出一条指令给显卡中的寄存器,控制器就会根据寄存器里的指令通过计算电路实际的来操控硬件。 对于程序员来说,使用外设实际就是对控制器发指令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.中断处理程序
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.设备驱动程序
设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息,计算机就可以与设备进行通信基于此信息

当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
在这里插入图片描述
在这里插入图片描述
设备抽象为文件视图
在这里插入图片描述
在这里插入图片描述

其他例子及抽象总结
Printf的工作原理
Printf: 即把内存缓冲区的一段字符串输出到屏幕上
Fprintf(文件写入): 即把内存缓冲区的一段字符移到磁盘上
操作系统是管理硬件的一层软件,将硬件抽象为软件,屏蔽硬件细节,方便用户使用

CPU抽象为进程
I/O设备(磁盘)抽象为文件
内存抽象为页状虚拟内存

在这里插入图片描述


其他I/O控制方法: 解决CPU与I/O设备操作处理速度不匹配问题,提高CPU与硬件处理的并发性能。

DMA控制方式
不需要中断程序来进行与内存的数据交换。 DMA不仅控制磁盘的输入输出,还控制与内存的数据交换。
DMA方式,Direct Memory Access,也称为成组数据传送方式,有时也称为直接内存操作。DMA方式在数据传送过程中,没有保存现场、恢复现场之类的工作。
由于CPU根本不参加传送操作,因此就省去了CPU取指令、取数、送数等操作。内存地址修改、传送字 个数的计数等等,也不是由软件实现,而是用硬件线路直接实现的。所以DMA方式能满足高速I/O设备的要求,也有利于CPU效率的发挥。
在这里插入图片描述
通道程序
通道就是可以通数据的
CPU发出一条通道命令,然后由通道和外设交换数据,之后CPU就做其它的事情,通道和外设交换完数据后再向CPU汇报,CPU再处理
在这里插入图片描述
在这里插入图片描述
I/O缓冲区: 为了协调cpu和io设备(键盘,显示器)速度不协调,提出IO缓冲区

getchar()是一个阻塞函数
调用fputs的时候其实写入的是缓冲区,调用fclose的时候才真正写入到设备
如果我们希望数据不写入缓冲区,而是直接进入设备,则需要用到
fflush立刻刷新缓冲区,立刻将缓冲区的数据存入目标位置
在这里插入图片描述