0%

5.0:IO子系统

I/O特点

设备接口类型

字符设备

以字节为单位顺序访问,每次只能一个字节输入,访问通常由get(),put()执行,使用文件访问接口和语义。

块设备

以均匀的数据块闻单位访问,访问通常使用原始IO或文件系统接口,内存映射文件访问。比如存储设备,磁盘磁带等

网络设备

格式化报文交换,IO命令是send/receive,通过网络接口支持多种网络协议。比如以太网、无线、蓝牙等。

同步和异步I/O

  • 阻塞IO:请求->驱动->硬件(等待)->中断请求->驱动->用户

  • 非阻塞IO:请求->驱动->硬件->驱动->用户 (不管结果)

  • 异步IO:

    • 请求->驱动->硬件->驱动->用户 (通知硬件收发)

    • 硬件->中断请求->驱动->用户 (硬件收发返回结果)

I/O结构

CPU与IO的连接

  • 北桥(高速)与显卡,内存相连,南桥(低速)与PCI总线等IO设备相连。

  • 设备控制器

    • 设备上有IO控制器,提供了CPU和设备的接口

    • 有总线接口、数据与状态寄存器

    • 进行内存映射(设备成为内存的一部分)

CPU和设备的通信方式

  • 轮询:不用中断控制器,CPU直接访问IO端口或内存映射

  • 设备中断:采用中断方式

  • DMA:外部设备把数据直接放到内存单元

IO的指令与内存映射IO

  • IO指令是通过IO端口号访问设备寄存器。在CPU执行out、in,对应了读写指令和设备控制。

  • 内存映射IO是把设备的寄存器或存储映射到内存物理地址空间,通过内存load和store指令完成IO操作,由MMU设置映射。

内核IO结构

设备->设备控制器->驱动->IO子系统->内核

IO请求生存周期

img

I/O数据传输

数据传输方式

程序控制IO

简单但是消耗的CPU时间,适用于简单的小型IO。

DMA

设备控制器直接访问系统总线,CPU参与设置开始结束过程,适用于高吞吐量的IO。

设备通知CPU机制

中断、轮询

中断IO的处理流程

  • CPU每执行一条指令都会检查中断请求

  • 请求中断→响应中断→关闭中断→保留断点→中断源识别→保护现场→中断服务子程序→恢复现场→中断返回。

磁盘调度

磁盘的工作机制

  • 读取或写入时,磁头被定位到期望的磁道,并从所期望的柱面和扇区开始

  • 寻道时间,定位到期望的磁道。(时间最长,是优化的主要目标)

  • 旋转延迟,磁头到达指定扇区

  • 磁盘IO传输时间:等待设备可用、寻道时间、旋转延时、数据传输的时间。

磁盘调度算法

  • 思路:通过优化磁盘访问的顺序,减少寻到时间

  • 先进先出:公平对待所有进程,接近随机访问的性能。

  • 最短服务时间优先:选择最短寻道时间。

  • 扫描算法:单方向扫,到尾,掉头,接着扫。

  • 循环扫描算法:扫描的改进,不掉头,到尾回起点。

  • C-Look:循环扫描的改进,到达最后一个请求,就返回

  • N-step-SCAN:对付磁头黏着(某处有大量的请求,其他的等很久),多队列,FIFO处理队列间,扫描处理队列内

  • 双队列扫描:N-step-SCAN的简化,即N=2

磁盘缓存

单缓存与双缓存

  • 单:进、出一个区;
  • 双:进、出不同区

访问频率置换算法(LRU与LFU的结合)

把栈分为新、中、久;

  • 新:计数不变(避免密集访问后尾大不掉)

  • 旧:只在旧区中,找计数最小的,置换(避免误杀新人)

  • 中:缓存区