这里写目录标题
一、I/O设备的概念和分类
1. 什么是I/O设备
- "I/O"就是输入输出,I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件
2. I/O设备的分类
按使用特性分类
- 人机交互类外部设备:鼠标、键盘
- 存储设备:移动硬盘、光盘
- 网络通信设备:调制解调器
按传输速率分类
- 低速设备:鼠标键盘
- 中速设备:激光打印机
- 高速设备:磁盘、移动硬盘
按信息交换的单位分类
- 块设备(传输速率高,可寻址,即对它可以随即地读/写人一块):磁盘
- 字符设备(传输率较慢,不可寻址,在输入输出时常采用中断驱动方式):鼠标、键盘
二、I/O控制器
- I/O设备的机械部件主要用来执行具体的I/O操作
- I/O设备的电子部件通常时一揆啊插入主板扩充槽的印刷电路板
- CPU无法直接控制I/O设备的机械部件,因此,I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对机械部件的控制
- 这个电子部件就时I/O控制器,又称设备控制器
- I/O控制器的功能:
- 接受和识别CPU发出的指令
- 向CPU报告设备的状态
- 数据交换
- 地址识别
三、I/O控制方式
- 用什么样的方式来控制I/O设备的数据读/写
1. 程序直接控制方式
- 完成一次读/写数据操作的流程图:
- 为什么要先从数据寄存器中读到CPU寄存器,再从CPU寄存器读到内存
答:输入的数据最终要放到内存中(声明的变量在内存中存放),同理输出的数据也存放在内存中,需要从内存中取出 - 性能分析:
- CPU干预的频率:很频繁,I/O操作开始前、完成后都需要CPU介入,并且等待I/O完成的过程中CPU需要不断的轮询检查
- 数据传送的单位:每次读/写一个字,每个字的读写都要CPU的帮助
- 数据的流向:
- 读操作:I/O设备→数据寄存器→CPU(CPU寄存器)→内存
- 写操作:内存→CPU(CPU寄存器)→数据寄存器→I/O设备
- 主要缺点和优点:
- 优点:实现简单,读写指令之后循环检查即可
- 缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于忙等状态,CPU利用率低,此时,I/O也只能等待CPU,利用率也很低
2. 中断驱动方式
- (不用CPU一直问了,等完成时,通过发出中断主动告知CPU)引入中断机制,
- 由于I/O设备速度很慢,因此在CPU发出读写指令后,可将等待I/O的进程阻塞,先切换到别的进程执行
- 当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断
- 处理完后,接着恢复之前进程的环境,继续运行
- 完成一次读/写数据操作的流程图:
- 性能分析:
- CPU干预的频率:每次I/O操作之前、完成之后需要CPU介入。等待I/O完成的过程中CPU可以切换到别的进程执行
- 数据传送的单位:每次读/写一个字,每个字的读写都要CPU的帮助
- 数据的流向:
- 读操作:I/O设备→数据寄存器→CPU(CPU寄存器)→内存
- 写操作:内存→CPU(CPU寄存器)→数据寄存器→I/O设备
- 主要缺点和优点:
- 优点:与程序直接控制方式相比,I/O控制器会主动通过中断信号来告知CPU,I/O已经完成,CPU不再需要轮询,CPU可以和I/O设备并行工作,CPU利用率明显提升
- 缺点:因为每次中断处理后,只能传输一个字的数据,所以每个字都需要CPU,而频繁的中断处理会消耗比较多的CPU时间
2. DMA方式
- 与中断驱动方式相比,DMA方式有几个改进:
- 数据的传输单位是“块”。不再是一个字
- 数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为快递小哥
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预
- 完成一次读/写数据操作的流程图:
- 控制器会根据CPU提出的要求完成数据的读/写工作,整块数据的传输完成后,才向CPU发出中断信号
- 性能分析:
- CPU干预的频率:仅在传送一个或多个数据块的开始和结束时,才需要CPU干预
- 数据传送的单位:每次读写一个或多个块(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的
- 数据的流向:
- 读操作:I/O设备→内存
- 写操作:内存→I/O设备
- 主要缺点和优点:
- 优点:数据传输以 “块为单位” ,CPU介入的频率进一步降低。数据的传输不再需要经过CPU,再写入内存,数据传输效率进一步增加
- 缺点:CPU每次发出一条I/O指令,只能读写一个或多个连续的数据块,如果要读取离散的数据块,就需要发出多条I/O指令
4. 通道控制方式
- 通道:一种硬件,可以理解为“弱鸡版的CPU”,与CPU相比,通道可以执行的指令很单一,而且通道程序是放在内存中的,可见通道和CPU是共享内存的,
- 通道可以识别并执行一系列的通道指令(放在内存中的通道程序中,相当于任务清单)
- 一个通道可以控制多个I/O控制器,而一个I/O控制器又可以控制多个I/O设备
- 完成一次读/写数据操作的流程图:
- 性能分析:
- CPU干预的频率:极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读写后,才需要向CPU发出中断信号
- 数据传送的单位:每次读写一组数据块(可以是离散的)
- 数据的流向:(在通道的控制下进行)
- 读操作:I/O设备→内存
- 写操作:内存→I/O设备
- 主要缺点和优点:
- 优点:CPU、通道、I/O设备并行度高,资源利用率很高
- 缺点:实现复杂,需要专门的通道硬件支持
总结
四、I/O软件层次结构
1. I/O软件层次结构
- 理解各个层次之间的顺序(完成一次I/O请求或I/O应答的时候,各个层次软件的顺序是什么)
- 常考:
- 直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的
- 没有涉及到硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的)
- 只有设备驱动程序层和中断处理程序层于硬件有关
2. 设备独立性
- 为了提高操作系统的可适应性和可扩展性:
- 现代操作系统中实现了设备独立性,也称为设备无关性
- 应用程序独立于具体使用的物理设备
- 实现方法:
- 引入逻辑设备和物理设备
- 在应用程序中使用逻辑设备名来请求使用某类设备
- 而系统在实际执行中使用物理设备名
- 系统必须由将逻辑设备名转化为物理设备名的功能(类似于逻辑地址到物理地址)
3. 驱动程序
- 为什么不同的设备需要不同的设备驱动程序?
- 不同的设备内部硬件特性也不同(如:不同设备规定的状态寄存器中,0和1代表的信息可能是相反的),而这些特性只有厂家才知道,CPU不可能满足各式各样的设备
- 因此厂家必须提供与设备相适应的驱动程序
- CPU执行驱动程序的指令序列,来完成各项工作
五、I/O核心子系统
- I/O核心子系统需要实现的功能主要有:I/O调度、设备保护、假脱机技术(SPOOLing技术)、设备分配和回收、缓冲区管理
1. I.O调度
- 用某一个算法确定一个好的顺序来处理各个I/O请求
- 如:磁盘调度算法、打印机也可以用先来先服务、优先级、短作业优先等算法来确定I/O调度顺序
2. 文件保护
- 不同的用户对各个文件有不同的访问权限
- 在UNIX系统中,设备被看作一种特殊的文件,每个设备也会有相应的FCB,当用户请求访问某设备时,系统会根据设备FCB中的信息来判断,该用户是否有相应的权限
3. 假脱机技术
1. 脱机技术
- 手工操作阶段:纸带机输入(低速)与主机(高速)的处理速度,人机速度矛盾明显,主机要浪费很多时间来等待设备
- 批处理阶段引入了脱机技术(用磁带完成):
- 在外围机的控制下,慢速设备的数据先传输到速度比纸带快很多的磁带上,之后主机可以从快速的磁带上读入数据,从而缓解了速度矛盾
- 另一方面,即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带
- 脱机————脱离主机的控制进行的输入输出
2. 假脱机技术的实现原理
- 假脱机技术就是 用软件的方式,模拟脱机技术
- 输入井输出井
- 输入井:模拟脱机输入时的磁带,用于收容I/O设备输入的数据
- 输出井:模拟脱机输出时的磁带,用于收容用户进程输出的数据
- 在磁盘上开辟的空间
- 输入进程和输出进程
- 输入进程:模拟脱机输入时的外围控制机
- 输出进程:模拟脱机输出时的外围控制机
- 可见,假脱机技术必需要有多道程序技术的支持(输入进程和输出进程需要并发执行)
- 输入/输出缓冲区
- 在输入进程的控制下,输入缓冲区用于暂时从输入设备输入的数据,之后再转存到输入井中
- 在输出进程的控制下,输出缓冲区用于暂时从输出井送来的数据,之后再转存到输出设备中
- 注意:输入/输出缓冲区是在内存中的缓冲区
3. 共享打印机的原理(假脱机应用)
- 独占式设备:只允许各个进程串行的设备,一段时间内只能满足一个进程的请求
- 共享设备:允许多个进程“同时”使用的设备(宏观上同时使用,微观上可能是交替使用的),可以同时满足多个进程的使用要求
- 打印机是种“独占设备”,但是可以用SPOOLing技术改造成“共享设备”
- ⭐当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正地把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事:
- 在磁盘输出井中为进程申请一个空闲缓冲区(这个缓冲区是在磁盘上的),并将要打印的数据送入其中
- 为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放的位置等信息),再将该表挂到假脱机文件队列上
- 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传输到输出缓冲区,在输出到打印机进行打印。
- 虽然系统中只有一个打印机,但是每个进程在提出打印请求时,系统都会为其在输入井中申请一个缓冲区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现打印机的共享
- ⭐当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正地把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事:
六、缓冲区管理
1. 什么是缓冲区
- 缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以由内存作为缓冲区
- 用硬件作为缓冲区成本较高,但是比如快表就是使用联想寄存器,但是快表带来的性能提升很大,所以这样的成本很值得
2. 缓冲区的作用
- 缓和CPU与I/O设备时间的速度不匹配的问题
- 减少对CPU的中断频率,放宽对CPU中断相应时间的限制
- 如果是字符型设备,则每输出完一个字符就要向CPU发出中断信号,单CPU处理中断的代价是很大的
- 若使用了缓冲技术,CPU可以把要输出的数据快速地放入缓冲区,之后就可以做别的事
- 解决数据粒度不匹配的问题
- 输出进程每次可以生成一块数据,但I/O设备每次只能输出一个字符
- 若使用了缓冲技术,就可以将输出的数据块放入缓冲区,让I/O设备从缓冲区里一个字符一个字符地取数据
- 提高CPU与I/O设备之间的并行性
3. 单缓冲
- 注意:
- 当缓冲区中数据为空时,不能往缓冲区中冲入数据,只能从缓冲区中把数据读出去
- 当缓冲区为空时,可以向缓冲区中冲入数据,但必须冲满之后,才能从缓冲区把数据传出