
I/O系统的组成
I/O系统的结构
微机I/O系统
- 总线型I/O系统结构,CPU与内存之间可以直接进行信息交换,但是不能与设备直接进行信息交换,必须经过设备控制器。
 
主机I/O系统
- I/O系统可能采用四级结构,包括主机、通道、控制器和设备。
 - 一个通道客户已控制多个设备控制器,一个设备控制器也可以控制多个设备。
 
I/O设备的分类
按传输速录分类
- 低速设备
 
-  
- 键盘和鼠标
 
 
- 中速设备
 
-  
- 打印机
 
 
- 高速设备
 
-  
- 磁带机、磁盘机、光盘机
 
 
按信息交换的单位分类
- 块设备
 
-  
- 数据的存取以数据块为单位,如磁盘
 
 
- 字符设备
 
-  
- 传送字节流,没有使用块结构,如鼠标
 
 
按设备的共享属性分类
- 独占设备
 
-  
- 是必须作为临界资源以互斥方式访问的设备
 
 
-  
-  
- 如打印机
 
 
 -  
 
- 共享设备
 
-  
- 是允许多个进程共同访问的设备
 
 
-  
-  
- 如硬磁盘
 
 
 -  
 
- 虚拟设备
 
-  
- 是通过某种虚拟技术把一台物理设备变成若干逻辑设备,从用户的角度看,多个用户拥有各自的设备,可以随时向设备发出访问请求并得到系统应答
 
 
设备控制器
I/O设备分为机械和电子两部分,设备控制器对应电子部分,通常是可编程的
- 什么是设备控制器
 
-  
- 设备控制器是CPU与I/O设备之间的接口,接收I/O的命令并控制设备完成I/O工作
 - 设备控制器是一个可编址设备,连接多个设备时可有多个设备地址
 
 
- 设备控制器的功能
 
-  
- 接收和识别命令
 - 数据交换
 - 设备状态的了解和报告
 - 地址识别
 - 数据缓冲
 
 
-  
-  
- 设备控制器可以存储数据,作为CPU和I/O之间的缓冲
 
 
 -  
 
- 设备控制器的组成
 
-  
- 设备控制器与处理机的接口
 
 
-  
-  
- 数据线、控制器、和地址线
 
 
 -  
 
-  
- 设备控制器与设备的接口
 
 
-  
-  
- 设备与设备控制器接口中的3类信号为数据、状态和控制信号
 
 
 -  
 
-  
- I/O逻辑
 
 
-  
-  
- 主要有指令译码器和地址译码器两部分功能部件构成
 
 
 -  
 
I/O通道
I/O通道式一种特殊的处理机,它具有执行I/O指令的能力,并通过执行通道程序来控制I/O操作
引入通道能够使CPU从控制I/O的任务重解脱,使CPU与I/O并行工作,提高CPU的利用率和系统的吞吐量
I/O控制方式
轮询
早期的计算机系统,因为没有中断机制,处理器对输入/输出的控制不得不采取程序轮询的方式
中断
现代计算机系统广泛采用中断控制方式完成对I/O的控制
DMA控制方式
对于磁盘驱动器这类的设备,每次数据传输量较大,采用中断控制方式,传输一个数据块就需要进行多次中断处理
DMA控制需要特殊结构的设备控制器
- 命令/状态寄存器CR
 - 内存地址寄存器MAR
 - 数据计数器DC
 - 数据寄存器DR
 
缓冲管理
缓冲的引入
在数据到达速率与数据离去速率不同的地方,都可以引入缓冲区。引入缓冲区的主要原因有
- 处理数据流的生产者与消费者之间的速度差异
 - 协调传输数据大小不一致的设备
 
单缓冲
对于面向块的设备
- 输入数据被传送进入系统缓冲区,当传送完成是,进程把该快移到用户空间,并立即请求另一块系统缓冲区。
 - 用户进程可以在下一块数据正在读入系统缓冲区时,处理用户去中的那一块数据
 
对于面向流的I/O
- 键盘。打印机和传感器等都属于面向流的设备
 
双缓冲
当一个进程往这一个缓冲区中传送数据(或从这个缓冲区中读取数据)时,操作系统正在清空(或填充)另一个缓冲区,这种技术称为双缓冲,或缓冲交换
循环缓冲
双缓冲方案可以平滑I/O设备和进程之间的数据流,如果某个特定进程的性能是关注的焦点,常常会希望相关I/O操作能够跟得上这个进程。如果这个进程突然快速执行了大量的I/O,仅有双缓冲就不够了
- 循环缓冲的组成
 
-  
- 多个缓冲区
 
 
-  
-  
- 空缓冲区R:生产者进程下一个可用的空缓冲区
 - 已装满数据的缓冲区G:用于指示消费者进程下一个可用的装有产品的缓冲区
 - 现行工作缓冲区C:消费者进程正在使用的工作缓冲区
 
 
 -  
 
-  
- 多个指针
 
 
-  
-  
- Nextg
 
 
 -  
 
-  
-  
-  
- 用于指示消费者进程下一个可用的装有数据的缓冲区
 
 
 -  
 
 -  
 
-  
-  
- Nexti
 
 
 -  
 
-  
-  
-  
- 用于指示生产者进程下一个可用的空缓冲区
 
 
 -  
 
 -  
 
-  
-  
- Current
 
 
 -  
 
-  
-  
-  
- 用于指示进程正在使用的工作缓冲区
 
 
 -  
 
 -  
 
- 循环缓冲的使用
 
-  
- Getbuf过程
 
 
-  
-  
- 消费者进程要使用缓冲区中的数据时,该过程将Nextg指向的缓冲区提供给进程使用,并吧他改成有Current指针指向的现行工作缓冲区,同时使Nextg指向下一个可用的装有数据的缓冲区G
 - 而当生产者进程要使用空缓冲区来装数据时,也通过调用Getbuf过程,把Nexti指示的空缓冲区提供给生产者进程使用,然后使Nexti指向下一个空缓冲区R
 
 
 -  
 
-  
- Releasebuf过程
 
 
-  
-  
- 当进程使用完缓冲区之后,调用Releasebuf过程释放缓冲区
 
 
 -  
 
- 进程同步
 
-  
- Nexti指针追上Nextg
 
 
-  
-  
- 生产者进程速度大于消费者进程速度
 
 
 -  
 
-  
-  
-  
- 阻塞生产者进程,等待消费者进程为生产者进程释放空缓冲区R
 
 
 -  
 
 -  
 
-  
- Nextg指针追上Nexti
 
 
-  
-  
- 消费者进程速度大于生产者进程速度
 
 
 -  
 
-  
-  
-  
- 阻塞消费者进程,等待生产者进程为消费者进程释放装有数据的缓冲区G
 
 
 -  
 
 -  
 
- 缓冲池
 
-  
- 缓冲池的组成
 
 
-  
-  
- 3种类型的缓冲区
 
 
 -  
 
-  
-  
-  
- 空缓冲区
 - 装满输入数据的缓冲区
 - 装满输出数据的缓冲区
 
 
 -  
 
 -  
 
-  
-  
- 3种队列
 
 
 -  
 
-  
-  
-  
- 空缓冲队列emq
 - 输入队列inq
 - 输出队列outq
 
 
 -  
 
 -  
 
-  
-  
- 4种工作缓冲区
 
 
 -  
 
-  
-  
-  
- 收容输入数据的缓冲区
 - 提取输入数据的缓冲区
 - 收容输出数据的缓冲区
 - 提取输出数据的缓冲区
 
 
 -  
 
 -  
 
-  
- Getbuf过程和Putbuf过程
 - 缓冲区的工作方式
 
 
-  
-  
- 收容输入
 
 
 -  
 
-  
-  
-  
- 在进程需要收容输入数据时,需要先从空缓冲队列提取一个空缓冲区,将输入数据写入缓冲后,再把装入了输入数据的缓冲区插入到输入队列中去
 
 
 -  
 
 -  
 
-  
-  
-  
-  
- Getbuf(emq)
 - 将输入数据写入缓冲区
 - putbuf(inq,hin)
 
 
 -  
 
 -  
 
 -  
 
-  
-  
- 提取输入
 
 
 -  
 
-  
-  
-  
- 当进程需要输入数据时(如计算进程需要提取输入数据,然后对数据进行计算处理),先从输入队列提取输入缓冲区,然后从中提取输入数据,最后把缓冲区作为空缓冲区插入空缓冲队列。
 
 
 -  
 
 -  
 
-  
-  
-  
-  
- Getbuf(inq)
 - 从缓冲区提取数据
 - putbuf(emq,sin)
 
 
 -  
 
 -  
 
 -  
 
-  
-  
- 收容输出
 
 
 -  
 
-  
-  
-  
- 在进程需要收容输出数据时,要先从空缓冲队列提取一个空缓冲区,将输入数据写入缓冲后,再把装入了输出数据的缓冲区插入到输出队列中去。
 
 
 -  
 
 -  
 
-  
-  
-  
-  
- Getbuf(emq)
 - 将输入数据写入缓冲区
 - putbuf(outq,hout)
 
 
 -  
 
 -  
 
 -  
 
-  
-  
- 提取输出
 
 
 -  
 
-  
-  
-  
- 当进程需要输出数据时(如打印进程需要提取输出数据送入打印机),先从输出队列提取输出缓冲区,然后从中提取输出数据,最后把这个缓冲区插入空缓冲队列。
 
 
 -  
 
 -  
 
-  
-  
-  
-  
- Getbuf(outq)
 - 输出数据
 - putbuf(emq,sout)
 
 
 -  
 
 -  
 
 -  
 
设备分配
设备分配中的数据结构
设备控制表DCT
控制器控制表COCT
通道控制表CHCT
系统设备表SDT
设备分配
设备的固有属性
- 独占设备
 - 共享设备
 - 可虚拟设备
 
设备分配算法
- 先来先服务
 - 基于优先权的分配算法
 
设备分配方式
- 安全分配方式
 
-  
- 这种分配方式中,每当进程发出I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。
 
 
- 不安全分配方式
 
设备独立性
设备独立性的概念
- 为了提高操作系统的可适应性和可扩展性,在现代操作系统中都毫无例外地实现了设备独立性,也称设备无关性。
 
-  
- 逻辑设备
 - 物理设备
 - 系统必须具有将逻辑设备名称转换为物理设备名称的功能
 
 
实现设备独立性带来的好处
- 应用程序与物理设备无关
 - 易于处理输入/输出设备的故障
 - 提高了系统的可靠性,增加了设备分配的灵活性
 
设备独立软件
- 执行所有设备的共有操作
 - 向用户层软件提供统一的接口
 
独占设备的分配程序
分配设备
分配控制区
分配通道
SPOOLing技术
什么是SPOOLing(假脱机技术)
- SPOOLing系统的组成
 
-  
- 输入井和输出井
 - 输入缓冲区和输出缓冲区
 - 输入进程SPi和输出进程SPo
 
 
利用SPOOLing技术实现共享打印机
I/O软件原理
设备管理软件的功能
- 实现I/O设备的独立性
 - 错误处理
 - 异步传输
 - 缓冲管理
 - 设备的分配和释放
 - 实现I/O控制方式
 
中断处理程序
设备驱动程序
与硬件无关的I/O软件
磁盘管理
磁盘结构
数据的组织和格式
- 存储面
 
-  
- 磁道
 - 扇区
 
 
磁盘的类型
- 固定头磁盘
 - 移动头磁盘
 
磁盘的访问时间
- 寻道时间
 - 旋转延迟时间
 - 传输时间
 
磁盘调度
先来先服务
扫描算法
循环扫描算法
NStepSCAN和FSCAN调度算法
提高磁盘I/O速度的方法
提前读
延迟写
优化物理块的分布
虚拟盘
- 虚拟盘通常用于存放临时文件,如编译程序产生的目标程序等
 
磁盘高速缓存
- 一组逻辑上属于磁盘,而物理上是驻留在内存中的盘块
 
