@[toc]
设备管理
5.1.1 IO设备的概念和分类
什么是I/O设备
将数据输入到计算机,或者可以接收计算机输出数据的外部设备
I/O设备的分类--按使用特性分类
I/O设备的分类--按传输速率分类
I/O设备的分类--按信息交换的单位分类
5.1.2 IO控制器
IO设备的机械部件
IO设备的电子部件
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的"中介",用于实现CPU对设备的控制。
这个电子部件就是I/O控制器,又称设备控制器。担当一个管家的角色。
IO控制器的功能:
- 接收和识别CPU发出的命令(老板发话)
- 向CPU报告设备的状态(回答老板)
- 数据交换(交换资料)
- 地址识别
IO控制器的组成
5.1.3 IO控制方式
程序直接控制方式
操作流程:
- CPU向控制器发出读指令。设备启动。
- 轮询检查控制器的状态(一直循环检查,直到设备准备完成)
- 设备准备好后将数据传送给控制器,并且报告自身状态
- 控制器将输入的数据放到数据寄存器中,并将状态改为已就绪状态
- CPU发现状态寄存器变了之后开始从数据寄存器中读取数据放到CPU的寄存器中,再把CPU的寄存器中的数据放入内存中
- 如CPU还要继续读入数据,在发出下一条指令
为什么将数据读入到CPU寄存器中还要放到内存中?
以一个C语言程序为例,需要读入一个变量a,a创建在内存中,读入数据后还要将数据赋值给a。
还可能是因为读入的数据接下来还要用。
CPU干预的频率
很频繁,在IO操作之前,完成之后需要CPU接入,并且在等待IO设备完成的过程中CPU需要不断地轮询检查
数据传送地单位
每次读/写一个字
数据的流向
读操作:IO设备->CPU(寄存器)->内存
写操作:内存->CPU(寄存器)->IO设备
每次读写都需要CPU的参与
优点
实现简单,在读/写指令之后,加上实现循环检查的一系列指令即可。
缺点
CPU和IO设备只能串行工作,CPU需要一直轮询检查,并且CPU长期处于忙等状态,资源利用率低。
中断驱动方式
如何解决忙等问题:让CPU不在一直轮询检查下去,IO设备完成之后在提醒CPU去读入,实现了并行。提高了资源利用率。
缺点:每次都只能读入一个字的数据,效率依然很低。
DMA方式
解决每次只能读入一个字的问题,改成读入一个块,而且中间不需要经过CPU。
缺点:每次只能读入一个数据块或连续的数据块,CPU还是需要发出多条指令。
通道控制方式
CPU只能每次发出一条指令读入一个数据块,可以将CPU要读入数据的通道程序告诉通道,让它来执行,等它执行完后在告诉我。
一个通道可以控制多个IO控制器
一个IO控制器可以控制多个IO设备
总结
5.1.4 IO软件层次结构
从用户提出请求到得到应答之间所经历的部分。
用户层软件
设备独立性软件
- 向上层提供统一的调用接口(如read/write系统调用)
- 设备的保护
- 差错处理
- 设备的分配和回收
- 数据缓冲区管理
- 建立逻辑设计名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序。
设备驱动程序
中断处理程序
5.2.2 缓冲区管理
缓冲区的作用
CPU读写速度块,IO设备读写速度慢。假如CPU写十个字节数据,每输出一个IO处理一个,但IO设备处理的非常慢,IO设备处理完后就会发出一个中断,让CPU去写下一个数据,这样产生了大量的中断,导致效率很低,资源利用率不高。
所以引入了缓冲区,CPU把要输出的数据都放到缓冲区中,IO设备自己去处理内存中的缓冲区数据。这样就缓和了CPU和IO设备之间速度不匹配的矛盾。(比如菜鸟驿站,不在一个一个送到家中,而是让人自己去取)。也减少了对CPU的中断频率,放宽对CPU中断相应时间的限制。
如果输出进程每次输出一块数据,但IO设备每次只输出一个字符,那就只能一个字符一个字符的输出,这样效率就太低了。
提高了CPU和IO设备之间的并行性能。
单缓冲
双缓冲
结论:处理一个数据块的平均耗时位Max(T,C+M)
单/双缓冲在通信时的区别
循环缓冲区
将多个大小相等的缓冲区链接成一个循环队列
in
指针指向下一个可以冲入数据的空缓冲区
out
指针指向下一个可以取出数据的满缓冲区
缓冲池
缓冲池由系统中共用的缓冲区组成,这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列),装满输出数据的缓冲数列(输出队列)
输入进程请求输入数据
- 将空缓冲队列的一个缓冲区拿出来放到收容输入的缓冲区中
- 数据充满之后放到输入队列的队尾上
计算进程想要取得一块输入数据
- 将输入队列的队头加入到提取输入的缓冲区中
- 完成后将缓冲区加入到空缓冲区的队尾上
5.2.3 设备的分配和回收
设备分配要考虑的因素
- 设备的固有属性
设备的固有属性可以分为三种:
独占设备:一个时段只能分配给一个进程(入打印机)
共享设备:可同时分配给多个进程使用(如磁盘),各进程往往时宏观上同时共享使用设备,而微观上交替使用
虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(共享打印机)
- 设备分配算法
先来先服务,优先级高者优先,短任务优先
- 设备分配的安全性
静态分配和动态分配
设备管理中的数据结构
5.2.4 假脱机技术
什么是脱机技术
脱机:脱离主机的控制进行的输入输出操作
引入了脱机技术,缓解了CPU与慢速IO设备的速度矛盾,即使CPU在忙碌,也可以提前将数据输入到磁带,即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带。
假脱机技术--输入井和输出井
假脱机技术是用软件的方式模拟脱机技术
输入井模拟脱机输入时的磁带,用于收容IO设备输入的数据
输出井模拟脱机输出时的磁带,用于收容用户进程输出的数据
假脱机技术--输入进程和输出进程
这边能输入,那边能输出,两个进程可以同时进行。
假脱机技术--输入/输出缓冲区
共享打印机原理分析
- 在磁盘的输出井中为进程申请一个空闲缓冲区,并将要打印的数据送入其中
- 为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中,在将该表挂到假脱机文件队列上。
- 当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到缓冲区,在输出到打印机进行打印。
5.3.1 磁盘的结构
磁盘、磁道、扇区
磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。
磁盘被分为一个个磁道,每个磁道存储的数据量相同。
一个磁盘又会被分为各个扇区,每个扇区存储的数据量相同。
如何在磁盘中读写数据
磁盘的物理地址
5.3.2 磁盘调度算法
一次磁盘读/写操作需要的时间
寻道时间:在读写数据前,将磁头移动到指定磁道所花的时间。
延迟时间:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
传输时间:从磁盘读出或向磁盘写入数据所经历的时间。
先来先服务算法
规则:根据进程请求访问磁盘的先后顺序进行服务。
优点:公平
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很坟山,则FCFS在性能上很差,寻道时间长。