王道笔记
一、I/O管理描述
1.1 I/O设备的概念和分类
1.1.1 什么是I/O设备
“I/O”就是“输入/输出”(Input/Output)
I/O设备机会可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。下图就是将一些常见的输入输出设备进行举例:
在UNIX系统中将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。常见的操作有:Write操作和Read操作:
1.1.2 I/O设备的分类
1.1.2.1 I/O设备按使用特性分类
I/O设备按使用特性进行分类,分为人机交互外部设备,存储设备,网络通信设备。
- 人机交互外部设备数据传输速度慢
- 存储设备数据传输速度快
- 网络通信设备数据传输速度介于两者之间
1.1.2.2 I/O设备按传输速率分类(不重要)
I/O设备按传输速率进行分类,分为低速设备,中速设备,高速设备。
- 低速设备:鼠标、键盘等——传输速率为每秒几个到几百个字节
- 中速设备:比如激光打印机等——传输速率为每秒数千到上万个字节
- 高速设备:比如磁盘等——传输速率为每秒数千字节到千兆字节
1.1.2.3 I/O设备按信息交换的单位分类
I/O设备按信息交换的单位进行分类,分为块设备和字符设备。
- 块设备:传输速率较高,可以寻址,即对这个设备可以进行随机地读写任意一块
- 字符设备:传输速率较慢,不可寻址,在输入和输出时常采用中断驱动方式
1.1.3 总结
1.2 I/O控制器
1.2.1 I/O设备的机械部件
I/O设备的机械部件主要用来执行具体I/O操作,比如我们看得见的鼠标、键盘的按钮,显示器的LED屏,移动硬盘的磁臂,磁盘盘面。
电子部件通常是一块插入主板扩充槽的印刷电路板,作为实现CPU对设备控制的“中介”
1.2.2 I/O设备的电子部件
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。这个电子部件就是I/O控制器。CPU可以控制I/O控制器,又由I/O控制器来控制设备的机械部件。
1.2.3 I/O控制器的功能
I/O控制器的功能总共有四个:接受和识别CPU发出的命令,向CPU报告设备的状态,数据交换,地址识别。
- 接受和识别CPU发出的命令:比如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器来存放命令和参数
- 向CPU报告设备的状态:I/O控制器中会有相应的状态寄存器,用于记录I/O设备的当前状态,比如:1表示空闲,0表示忙碌
- 数据交换:I/O控制器中会设置相应的数据寄存器。输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据
- 地址识别:类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”。I/O控制器通过CPU提供的“地址”来判断CPU要读写的是哪个寄存器
1.2.4 I/O控制器的组成
- I/O控制器分为三部分:CPU与控制器的接口,I/O逻辑,控制器与设备的接口
- CPU与控制器的接口:用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据。
- I/O逻辑负责接收和识别CPU的各种命令(如地址译码),并负责对设备发出命令
- 控制器与设备的接口用于实现控制器与设备之间的通信
值得注意的是:
- 一个I/O控制器可能会对应多个设备
- 数据寄存器、控制寄存器、状态寄存器可能有多个(比如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要具有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
1.2.5 内存映像I/O与寄存器独立编址
为了实现CPU和I/O端口进行通信,有两种方式,如图所示:
- 独立编址:为每一个端口分配一个I/O端口号,所有的I/O端口形成I/O端口空间,普通用户程序不能对其进行访问,只有操作系统使用特定的I/O指令才能访问端口。
- 统一编址:又称内存映射I/O,每一个端口被分配唯一的内存地址,且不会有内存被分配这一地址,通常分配给端口的地址靠近地址空间的顶端。
1.2.6 I/O端口
I/O端口是指设备控制器中可以被CPU直接访问的寄存器,主要有以下三类寄存器:
- 数据寄存器:实现CPU和外设之间的数据缓冲
- 状态寄存器:获取执行结果和设备的状态信息,以让CPU知道是否准备好
- 控制寄存器:由CPU写入,以便启动命令或更改设备模式
1.3 I/O控制方式
设备管理的主要任务之一是控制设备和内存或CPU之间的数据传送。外围设备和内存之间的输入和输出控制方式有4种,下面分别加以介绍:
需要注意的问题是:
- 完成一次读写操作的流程
- CPU干预的频率
- 数据传送的单位
- 数据的流向
- 主要缺点和主要优点
1.3.1 程序直接控制方式
CPU向控制器发出读指令,
1.4 软件层次结构
1.4.1 用户层软件
提供用户方便操作的接口(比如:Windows API)
1.4.2 设备独立性软件
设备独立性软件,又称为设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。这一层的主要功能是:
- 向上层提供统一的调用接口(比如 read/write 系统调用)。
- 设备的保护:原理类似与文件保护,设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对于设备的访问权限也是不一样的。
- 差错处理:设备独立性软件需要对一些设备的错误进行处理。
- 设备的分配和回收。
- 数据缓冲区管理:可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异。
- 建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序。
1.4.3 设备驱动程序
为什么一般连接硬件-需要下载(安装)驱动程序?
打印机、鼠标、键盘等等(都可能有自身的特性,需要安装自身提供的程序,供CPU使用)
设备驱动程序主要负责对硬件设备的具体控制,将上层发出的一系列命令(比如 read/write )转化成特定设备“能听得懂”的一系列操作,包括设置设备寄存器;检查设备状态等。
不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道,因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。
驱动程序一般会以一个独立进程的方式存在。
1.4.4 中断处理程序
1.4.5 总结
1.5 输入/输出应用程序接口和驱动程序接口
1.5.1 输入输出应用程序接口
1.5.2 阻塞IO && 非阻塞IO
1.5.3 驱动程序
为了方便各自厂商开发自己的硬件,并且能够支持操作系统使用
【操作系统】就会【制定统一的标准】,厂商就会根据这个标准再进行封装一层(驱动程序)
让【操作系统】正常使用【硬件设备】
二、设备独立性软件
2.1 IO核心子系统
2.1.1 I/O调度
2.1.2 设备保护
2.1.3 假脱机技术
2.1.4 共享打印机原理分析
2.1.5 总结
2.2 设备的分配与回收
2.2.1 设备分配
2.2.2 分配管理——数据结构
2.2.3 设备分配的步骤
2.2.4 设备分配的改进
2.2.5 总结
2.3 缓冲区管理
2.3.1 什么是缓冲区
硬件实现的缓冲区——成本高,容量小(速度快!!!)【例:快表】
软件实现的缓冲区——成本低,速度较慢
IO设备和CPU的速度不匹配(需要缓冲区)
2.3.2 缓冲区的作用
2.3.3 单缓冲
缓冲区不为空时——不可加入数据
缓冲区满了——才可以拿取数据
两者速度不匹配的情况(如下图)
2.3.4 双缓冲
2.3.5 使用单、双缓冲在通信时的区别
2.3.5.1 单缓冲
2.3.5.2 双缓冲
2.3.5.3 循环缓冲区
2.3.5.4 缓冲池
2.3.6 总结
三、磁盘和固态硬盘
3.1 磁盘的结构
3.2 磁盘调度算法
3.2.1 先来先服务算法
3.2.2 最短寻找时间优先
3.2.3 扫描算法
3.2.4 LOOK调度算法
3.2.5 循环扫描算法
3.2.6 C-LOOK调度算法
3.2.7 总结
3.3 减少磁盘延迟时间的方法
3.4 磁盘的管理
3.4.1 磁盘初始化