IO管理概述
设备
- 设备分类
交换单位分类
- 块设备
- 字符设备
传输速率分类
- 低速
- 中速
- 高速
- IO接口
位于CPU与设备之间,与CPU和设备通信,执行CPU发来的命令,控制设备工作
- 设备控制器和CPU接口
- 设备控制器和设备接口
- IO逻辑
- IO端口
设备控制器里可以直接被CPU访问的寄存器
- 数据寄存器
- 状态寄存器
- 控制寄存器
为实现通信
- 独立编址
- 统一编址
IO控制方式
- 程序直接控制方式
- 中断驱动方式
- DMA方式
- 通道控制方式
IO软件层次结构
- 用户层IO软件,实现与用户交互的接口,用户可以直接调用在用户层提供的、与IO操作相关的有关库函数,对设备进行操作
- 设备独立性软件,用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护和设备分配与释放等。同时为设备管理和数据传输提供必要的传输空间。设备独立性也称设备无关性,使得应用程序独立于具体使用的物理设备。引入逻辑设备概念;在驱动程序上设置一层设备独立软件,执行所有共有操作(设备分配与回收、设备名映射、设备保护、缓冲区管理、差错控制、提供逻辑块...)、向用户曾提供统一接口;
- 设备驱动程序,与硬件直接相关,负责具体实现系统对设备发出的操作命令,驱动IO设备工作;每类设备一个驱动程序,向上层用户程序提供一组标准接口,设备具体差别被设备驱动程序封装,用于接收上层抽象的IO请求,转换为具体请求,发送给设备控制器,控制IO设备;也将设备控制器发来的信号传送给上层软件,为IO内核子系统隐藏设备控制器间的差异;
- 中断处理程序,....
- 硬件
应用程序IO接口
IO系统与高层接口,根据设备类型又分为好多接口
- 字符设备接口
- 块设备接口
- 网络设备接口
- 阻塞/非阻塞IO
设备独立软件
与设备无关的软件
IO系统最高层软件,下层是设备驱动程序,包含所有设备公共操作的软件
高速缓存和缓冲区
- 磁盘钙塑缓存Disk Cache,用内存中的存储空间暂存从磁盘读出来的一系列盘块中的信息,逻辑上属于磁盘,物理上是驻留在内存中盘块
- 缓冲区
- 单缓冲,
- 双缓冲,
- 循环缓冲,多个大小相等的缓冲区,每个缓冲区有一个链接指针指向下一个缓冲区,最后一个缓冲区指向第一个缓冲区,in/out指针,
- 缓冲池,空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲对略(输出队列),四种缓冲区,收容输入数据、提取输入数据、收容输出数据、提取输出数据的工作缓冲区
设备的分配和回收
- 概述
设备分配时根式用户的IO请求分配所需的设备,原则充分发挥设备使用效率、尽可能忙碌、避免死锁
- 独占式设备
- 分时式共享
- SPOOLing
- 设备分配的数据结构
- 设备控制表Device Control Table,一个DCT表示一个设备,表项为设备的属性,含指向COCT指针
- 控制器控制表Controller Control Table,有一个表项存放相应的CHCT,
- 通道控制表Channel Control Table,含一个指针,指向控制器控制表链表,COCT和CHCT为多对1
- 系统设备表System Device Table,一个系统一张,记录连接到系统的物理设备,表项中含有DCT
- 分配策略
- 原则,发挥效率、避免死锁、隔离用户程序和具体设备
- 方式,静态和动态
- 算法。静态和动态(先请求先分配、优先级)
- 安全性
是否防止发生死锁
- 安全分配
- 不安全分配
- 逻辑设备到物理设备的映射
逻辑设备表Logical Unit Table,表项包含逻辑设备名、物理设备名、设备驱动程序入口地址;
一个系统一张或一个用户一张
SPOOLing技术
为缓和CPU高速性和IO设备低速性之间的矛盾,迎入脱机输入/输出技术,他是操作系统总采用一项独占设备改造为共享设备的技术,该技术利用了专门的外围机,将低速IO设备上的数据传到高速磁盘上,或者相反;SPOOLing技术则使用软件模拟外围机
- 输入井和输出井,磁盘开辟两个区域、模拟脱机输入/输出时的磁盘,一个进程的输入(出)数据保存为一个文件,所有进程的输入(出)数据i按揭成一个文件输入(出)链表;
- 输入缓冲区和输出缓冲区,内存中开辟的两个缓冲区,暂存输入设备送来的数据,之后送到输入井;暂存输出井的送来的数据,以后再送到输出设备
- 输入进程和输出进程,模拟脱机输入/输出时的外围控制机,要求输入设备将数据经过输入缓冲区送到输入井,CPU需要输入数据时,从输入井中读入内存;用户要求输出数据先从内存送到输出井,带输出设备空闲时,将输出井中的数据从输出缓冲区送到输出设备
设备驱动程序接口
操作系统定义一组驱动程序必须支持的函数!每个驱动程序标准不统一很烦; 驱动程序中一般有含有一张表格,表格具有针对这些函数指向驱动程序自身的指针; 装在驱动程序,操作系统记录这个函数指针表的地址,操作系统需要调用一个函数,可以通过这张表格间接调用
磁盘和固态硬盘
磁盘
- 磁头
- 磁道
- 扇区
- 磁头臂、主轴、IO电子设备
- “柱面号·扇面号·扇区号”
盘子转来转去,磁头挪来挪去
磁盘管理
- 磁盘初始化,低级格式化(物理格式化),分扇区、使用特殊的数据结构填充磁盘(头部、数据区域512/256B、尾部,头尾包含磁盘控制信息);
- 分区,在存储前,操作系统要将自己的数据结构记录在磁盘上,第一步,把磁盘分为一个或多个柱面组成的分区,每个分区的ishi扇区和大小都记录在磁盘的主引导记录分区表里;第二步,对物理分区进行逻辑格式化(创建文件系统),操作系统将文件系统的数据结构存储到磁盘上,包括一些空闲分区和已分配分区和一个初始的空目录;扇区好几个合成簇
- 引导块,计算机启动时要运行一个初始化程序(自举程序),初始化CPU、寄存器、设备控制器和内存等。再启动操作系统。自举程序找到磁盘上的操作系统的内核,把他加载到内存,并转到起始地址,从而开始操作系统的运行;自举程序通常放在ROM中,为了便于修改,通常只在ROM保留很小一部分的自举装入程序,完整功能的引导块保存在磁盘的启动块上;具有启动分区的磁盘叫做启动磁盘或系统磁盘;
- 坏块,标记不用,备用替换
磁盘调度算法
- 寻道时间,磁头挪挪挪的时间
- 旋转延迟时间,磁头定位到扇区(扇区转到磁头下面)
- 传输时间,读出或写入的时间,磁盘转转砖的时间
- 先来先服务First Come First Service
- 最短寻道时间优先Shortest Seek Time First
- 扫描SCAN,坐电梯,必须做到楼顶和楼底才能换方向
- 循环扫描CircularSCAN,C-SCAN算法,楼顶楼底互通,
- LOOK算法,改进SCAN,不做到楼顶就可以向下
- C-LOOK算法,间接C-SCAN,不用到楼顶再通到楼底可以直接穿过
- 交替编号,对扇区,转一个读一个处理一会,处理完继续读下一个,刚好!
- 错位命名,对盘面,一个盘转完,刚好读下一个盘
固态硬盘
- 特性
与U盘无本质差别,一个SSD由一个或多个闪存芯片(替代机械驱动器)和闪存翻译层接口(将CPU的逻辑块读写请求翻译成对底层设备的读写控制型号,磁盘控制器)组成
数据以页为单位读写,只有一页所属的块被擦除了才能写,一旦擦除可以直接再写,若干次重复写后,就会磨损坏,不能再使用
随机写很慢(但还是比传统快),原因是擦除比较慢,比访问高了一个数量级,试图修改一个包含数据的,这个块中的所有含有数据的页都必须被复制到一个新(擦除过)的块,才能对那一页写;
- 磨损均衡
闪存擦写有寿命,大约为几百到几千次;
- 动态磨损均衡,写入数据时选择一块比较新的闪存块,老的歇一歇
- 静态磨损均衡,更先进,没有数据写入,SSD也会自动进行数据分配,让老的闪存块无需承担写数据的存储任务,让新的存储块腾空间