输I/O管理

7/29/2022 可恶的408

IO管理概述

设备

  • 设备分类

交换单位分类

  1. 块设备
  2. 字符设备

传输速率分类

  1. 低速
  2. 中速
  3. 高速
  • IO接口

位于CPU与设备之间,与CPU和设备通信,执行CPU发来的命令,控制设备工作

  1. 设备控制器和CPU接口
  2. 设备控制器和设备接口
  3. IO逻辑
  • IO端口

设备控制器里可以直接被CPU访问的寄存器

  1. 数据寄存器
  2. 状态寄存器
  3. 控制寄存器

为实现通信

  1. 独立编址
  2. 统一编址

IO控制方式

  • 程序直接控制方式
  • 中断驱动方式
  • DMA方式
  • 通道控制方式

IO软件层次结构

  1. 用户层IO软件,实现与用户交互的接口,用户可以直接调用在用户层提供的、与IO操作相关的有关库函数,对设备进行操作
  2. 设备独立性软件,用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护和设备分配与释放等。同时为设备管理和数据传输提供必要的传输空间。设备独立性也称设备无关性,使得应用程序独立于具体使用的物理设备。引入逻辑设备概念;在驱动程序上设置一层设备独立软件,执行所有共有操作(设备分配与回收、设备名映射、设备保护、缓冲区管理、差错控制、提供逻辑块...)、向用户曾提供统一接口;
  3. 设备驱动程序,与硬件直接相关,负责具体实现系统对设备发出的操作命令,驱动IO设备工作;每设备一个驱动程序,向上层用户程序提供一组标准接口,设备具体差别被设备驱动程序封装,用于接收上层抽象的IO请求,转换为具体请求,发送给设备控制器,控制IO设备;也将设备控制器发来的信号传送给上层软件,为IO内核子系统隐藏设备控制器间的差异;
  4. 中断处理程序,....
  5. 硬件

应用程序IO接口

IO系统与高层接口,根据设备类型又分为好多接口

  1. 字符设备接口
  2. 块设备接口
  3. 网络设备接口
  4. 阻塞/非阻塞IO

设备独立软件

与设备无关的软件

IO系统最高层软件,下层是设备驱动程序,包含所有设备公共操作的软件

高速缓存和缓冲区

  1. 磁盘钙塑缓存Disk Cache,用内存中的存储空间暂存从磁盘读出来的一系列盘块中的信息,逻辑上属于磁盘,物理上是驻留在内存中盘块
  2. 缓冲区
  • 单缓冲,MAX(C,T)+MMAX(C,T)+M
  • 双缓冲,MAX(T,C+M)MAX(T,C+M)
  • 循环缓冲,多个大小相等的缓冲区,每个缓冲区有一个链接指针指向下一个缓冲区,最后一个缓冲区指向第一个缓冲区,in/out指针,
  • 缓冲池,空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲对略(输出队列),四种缓冲区,收容输入数据、提取输入数据、收容输出数据、提取输出数据的工作缓冲区

设备的分配和回收

  1. 概述

设备分配时根式用户的IO请求分配所需的设备,原则充分发挥设备使用效率、尽可能忙碌、避免死锁

  • 独占式设备
  • 分时式共享
  • SPOOLing
  1. 设备分配的数据结构
  • 设备控制表Device Control Table,一个DCT表示一个设备,表项为设备的属性,含指向COCT指针
  • 控制器控制表Controller Control Table,有一个表项存放相应的CHCT,
  • 通道控制表Channel Control Table,含一个指针,指向控制器控制表链表,COCT和CHCT为多对1
  • 系统设备表System Device Table,一个系统一张,记录连接到系统的物理设备,表项中含有DCT
  1. 分配策略
  • 原则,发挥效率、避免死锁、隔离用户程序和具体设备
  • 方式,静态和动态
  • 算法。静态和动态(先请求先分配、优先级)
  1. 安全性

是否防止发生死锁

  • 安全分配
  • 不安全分配
  1. 逻辑设备到物理设备的映射

逻辑设备表Logical Unit Table,表项包含逻辑设备名、物理设备名、设备驱动程序入口地址;

一个系统一张或一个用户一张

SPOOLing技术

为缓和CPU高速性和IO设备低速性之间的矛盾,迎入脱机输入/输出技术,他是操作系统总采用一项独占设备改造为共享设备的技术,该技术利用了专门的外围机,将低速IO设备上的数据传到高速磁盘上,或者相反;SPOOLing技术则使用软件模拟外围机

  • 输入井和输出井,磁盘开辟两个区域、模拟脱机输入/输出时的磁盘,一个进程的输入(出)数据保存为一个文件,所有进程的输入(出)数据i按揭成一个文件输入(出)链表;
  • 输入缓冲区和输出缓冲区,内存中开辟的两个缓冲区,暂存输入设备送来的数据,之后送到输入井;暂存输出井的送来的数据,以后再送到输出设备
  • 输入进程和输出进程,模拟脱机输入/输出时的外围控制机,要求输入设备将数据经过输入缓冲区送到输入井,CPU需要输入数据时,从输入井中读入内存;用户要求输出数据先从内存送到输出井,带输出设备空闲时,将输出井中的数据从输出缓冲区送到输出设备

设备驱动程序接口

操作系统定义一组驱动程序必须支持的函数!每个驱动程序标准不统一很烦; 驱动程序中一般有含有一张表格,表格具有针对这些函数指向驱动程序自身的指针; 装在驱动程序,操作系统记录这个函数指针表的地址,操作系统需要调用一个函数,可以通过这张表格间接调用

磁盘和固态硬盘

磁盘

  • 磁头
  • 磁道
  • 扇区
  • 磁头臂、主轴、IO电子设备
  • “柱面号·扇面号·扇区号”

盘子转来转去,磁头挪来挪去

磁盘管理

  1. 磁盘初始化,低级格式化(物理格式化),分扇区、使用特殊的数据结构填充磁盘(头部、数据区域512/256B、尾部,头尾包含磁盘控制信息);
  2. 分区,在存储前,操作系统要将自己的数据结构记录在磁盘上,第一步,把磁盘分为一个或多个柱面组成的分区,每个分区的ishi扇区和大小都记录在磁盘的主引导记录分区表里;第二步,对物理分区进行逻辑格式化(创建文件系统),操作系统将文件系统的数据结构存储到磁盘上,包括一些空闲分区和已分配分区和一个初始的空目录;扇区好几个合成簇
  3. 引导块,计算机启动时要运行一个初始化程序(自举程序),初始化CPU、寄存器、设备控制器和内存等。再启动操作系统。自举程序找到磁盘上的操作系统的内核,把他加载到内存,并转到起始地址,从而开始操作系统的运行;自举程序通常放在ROM中,为了便于修改,通常只在ROM保留很小一部分的自举装入程序,完整功能的引导块保存在磁盘的启动块上;具有启动分区的磁盘叫做启动磁盘或系统磁盘;
  4. 坏块,标记不用,备用替换

磁盘调度算法

  • 寻道时间,磁头挪挪挪的时间
  • 旋转延迟时间,磁头定位到扇区(扇区转到磁头下面)
  • 传输时间,读出或写入的时间,磁盘转转砖的时间
  1. 先来先服务First Come First Service
  2. 最短寻道时间优先Shortest Seek Time First
  3. 扫描SCAN,坐电梯,必须做到楼顶和楼底才能换方向
  4. 循环扫描CircularSCAN,C-SCAN算法,楼顶楼底互通,
  5. LOOK算法,改进SCAN,不做到楼顶就可以向下
  6. C-LOOK算法,间接C-SCAN,不用到楼顶再通到楼底可以直接穿过
  • 交替编号,对扇区,转一个读一个处理一会,处理完继续读下一个,刚好!
  • 错位命名,对盘面,一个盘转完,刚好读下一个盘

固态硬盘

  1. 特性

与U盘无本质差别,一个SSD由一个或多个闪存芯片(替代机械驱动器)和闪存翻译层接口(将CPU的逻辑块读写请求翻译成对底层设备的读写控制型号,磁盘控制器)组成

数据以页为单位读写,只有一页所属的块被擦除了才能写,一旦擦除可以直接再写,若干次重复写后,就会磨损坏,不能再使用

随机写很慢(但还是比传统快),原因是擦除比较慢,比访问高了一个数量级,试图修改一个包含数据的,这个块中的所有含有数据的页都必须被复制到一个新(擦除过)的块,才能对那一页写;

  1. 磨损均衡

闪存擦写有寿命,大约为几百到几千次;

  • 动态磨损均衡,写入数据时选择一块比较新的闪存块,老的歇一歇
  • 静态磨损均衡,更先进,没有数据写入,SSD也会自动进行数据分配,让老的闪存块无需承担写数据的存储任务,让新的存储块腾空间