设备
- IO 硬件
- IO 设备分类
- 字符设备:以字符为单位传输数据,主要是交互设备。
- 块设备:以块为单位传输数据。主要是硬盘。
- 网络通信设备:比字符设备块,比块设备慢。
- 时钟:按照固定时间间隔产生中断。
- 设备控制器
- IO 设备的电子部分,处于 CPU 和 IO 设备之间,控制设备工作。
- 重要的寄存器:
- 控制寄存器:接收 CPU 的读写命令。
- 状态寄存器:保存当前状态。
- 数据缓存寄存器
- 数据缓冲区:如 VRAM。
- 磁盘控制器:
- 把读的串行的位流组装为字节,存入内部数据缓冲区中形成以字节为单位的块。
- 对块验证后,再一次一个字节地存入内存。
- 数据传输的控制方式
- 程序查询
- 程序不断轮询设备控制器,需要 CPU 忙等,是串行方式。
- 中断
- 向设备控制器发送命令,完成时用中断回调,CPU 和设备并行工作。
- 直接存储器访问/DMA
- 允许 DMA 控制地址总线,控制设备缓冲区与内存的数据交换。
- CPU 只干预开始和结束。
- 通道
- 一种专用的 IO 处理器,有自己的指令,通道指令形成通道程序。
- 字节多路通道:以字节为单位传输数据,可以分时地执行多个通道程序。
- 用于大量慢速设备。
- 选择通道:每次传输一批数据,速度快,一段时间只能执行一个通道程序,不能分时。
- 用于固定头磁盘等。
- 数组多路通道:
- 先为一台设备执行通道指令,再为另外一台执行。
- 同时结合字节多路通道的分时、选择通道的高速。
- 用于多台活动头磁盘机。
- 程序查询
- IO 设备分类
- IO 软件
- 层次结构
- 用户空间的软件
- 独立于设备的软件
- 设备驱动程序
- 中断处理程序
- 硬件
- 用户空间的软件
- 大部分是 OS 提供的,小部分是库函数。
- 独立于设备的软件
- 设备命名:把设备符号名映射到具体的驱动程序。
- 设备保护:把 IO 指令设为特权指令,用系统调用使用设备。
- 提供设备无关的块尺寸
- 提供缓冲
- 分配和调度设备:
- 分配分为静态分配或动态分配,动态分配利用率高。
- 设备分为独占、共享、虚拟设备。
- Spooling 技术用于虚拟设备,利用磁盘空间共享,把对设备的访问缓冲到磁盘上。
- 错误处理:大部分由设备驱动程序处理。
- 设备驱动程序
- 每个设备驱动程序处理一种设备,可以获取设备控制器的情况。
- 提供一套与文件操作类似的 API。
- 功能:初始化设备、启动设备传输数据,中断处理。
- 中断处理程序
- 进程启动 IO 操作后会被阻塞,IO 完成后产生中断。
- CPU 响应中断,自动执行中断处理程序。
- 中断处理程序检查设备状态:
- 若正常完成,则唤醒进程。检查并启动剩余的 IO 请求。
- 若出错,则重试,或上报错误。
- 返回被中断进程继续执行,或转进程调度。
- 层次结构
- IO 类型
- 同步 IO:进程发起 IO 后必须阻塞等待,IO 完成后继续执行。
- 异步 IO:无需阻塞等待,IO 完成后通知进程。
- 通过设置进程地址空间内的某个变量。
- 通过触发信号或软件中断。
- 通过回调函数。
- 磁盘管理
- 磁盘类型
- 固定头磁盘:每条磁道都有磁头。
- 移动头磁盘:只有一个磁头,需要寻道。
- 访问时间
- 总访问时间 = 寻道时间 + 旋转延迟时间 + 读写时间。
- 寻道时间和旋转延迟时间占据主要部分。
- 调度算法
- 先来先服务
- 优点:实现简单,调度公平。
- 缺点:效率低,磁头移动频繁,完全不考虑队列中的请求。
- 最短寻道时间优先
- 总是选择到当前距离最短的一个磁道。
- 扫描法
- 磁头不断地在两端之间来回移动,过程中处理各磁道的读写请求。
- 循环扫描法
- 磁头从一个端向另外一个端扫描,到达另外一端后立刻移动回去,整体只单向扫描。
- 查询法
- 类似扫描法,但是不移动到末端,只移动到当前方向上最远的一个请求磁道。
- 循环查询法
- 循环法和查询法的结合。
- 先来先服务
- 磁盘类型