将数据输入到计算机,或者可以接收计算机输出数据的外部设备






CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的"中介",用于实现CPU对设备的控制。
这个电子部件就是I/O控制器,又称设备控制器。担当一个管家的角色。
IO控制器的功能:

IO控制器的组成



操作流程:

为什么将数据读入到CPU寄存器中还要放到内存中?
以一个C语言程序为例,需要读入一个变量a,a创建在内存中,读入数据后还要将数据赋值给a。
还可能是因为读入的数据接下来还要用。

CPU干预的频率
很频繁,在IO操作之前,完成之后需要CPU接入,并且在等待IO设备完成的过程中CPU需要不断地轮询检查
数据传送地单位
每次读/写一个字
数据的流向
读操作:IO设备->CPU(寄存器)->内存
写操作:内存->CPU(寄存器)->IO设备
每次读写都需要CPU的参与
优点
实现简单,在读/写指令之后,加上实现循环检查的一系列指令即可。
缺点
CPU和IO设备只能串行工作,CPU需要一直轮询检查,并且CPU长期处于忙等状态,资源利用率低。
如何解决忙等问题:让CPU不在一直轮询检查下去,IO设备完成之后在提醒CPU去读入,实现了并行。提高了资源利用率。


缺点:每次都只能读入一个字的数据,效率依然很低。
解决每次只能读入一个字的问题,改成读入一个块,而且中间不需要经过CPU。



缺点:每次只能读入一个数据块或连续的数据块,CPU还是需要发出多条指令。
CPU只能每次发出一条指令读入一个数据块,可以将CPU要读入数据的通道程序告诉通道,让它来执行,等它执行完后在告诉我。
一个通道可以控制多个IO控制器
一个IO控制器可以控制多个IO设备


总结

从用户提出请求到得到应答之间所经历的部分。













CPU读写速度块,IO设备读写速度慢。假如CPU写十个字节数据,每输出一个IO处理一个,但IO设备处理的非常慢,IO设备处理完后就会发出一个中断,让CPU去写下一个数据,这样产生了大量的中断,导致效率很低,资源利用率不高。
所以引入了缓冲区,CPU把要输出的数据都放到缓冲区中,IO设备自己去处理内存中的缓冲区数据。这样就缓和了CPU和IO设备之间速度不匹配的矛盾。(比如菜鸟驿站,不在一个一个送到家中,而是让人自己去取)。也减少了对CPU的中断频率,放宽对CPU中断相应时间的限制。
如果输出进程每次输出一块数据,但IO设备每次只输出一个字符,那就只能一个字符一个字符的输出,这样效率就太低了。
提高了CPU和IO设备之间的并行性能。



结论:处理一个数据块的平均耗时位Max(T,C+M)


将多个大小相等的缓冲区链接成一个循环队列
in指针指向下一个可以冲入数据的空缓冲区
out指针指向下一个可以取出数据的满缓冲区

缓冲池由系统中共用的缓冲区组成,这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列),装满输出数据的缓冲数列(输出队列)
输入进程请求输入数据
计算进程想要取得一块输入数据

设备的固有属性可以分为三种:
独占设备:一个时段只能分配给一个进程(入打印机)
共享设备:可同时分配给多个进程使用(如磁盘),各进程往往时宏观上同时共享使用设备,而微观上交替使用
虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(共享打印机)
先来先服务,优先级高者优先,短任务优先



脱机:脱离主机的控制进行的输入输出操作
引入了脱机技术,缓解了CPU与慢速IO设备的速度矛盾,即使CPU在忙碌,也可以提前将数据输入到磁带,即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带。

假脱机技术是用软件的方式模拟脱机技术
输入井模拟脱机输入时的磁带,用于收容IO设备输入的数据
输出井模拟脱机输出时的磁带,用于收容用户进程输出的数据

这边能输入,那边能输出,两个进程可以同时进行。






磁盘的表面由一些磁性物质组成,可以用这些磁性物质来记录二进制数据。
磁盘被分为一个个磁道,每个磁道存储的数据量相同。
一个磁盘又会被分为各个扇区,每个扇区存储的数据量相同。




寻道时间:在读写数据前,将磁头移动到指定磁道所花的时间。
延迟时间:通过旋转磁盘,使磁头定位到目标扇区所需要的时间。
传输时间:从磁盘读出或向磁盘写入数据所经历的时间。


规则:根据进程请求访问磁盘的先后顺序进行服务。
优点:公平
缺点:如果有大量进程竞争使用磁盘,请求访问的磁道很坟山,则FCFS在性能上很差,寻道时间长。
















