操作系统
设备独立性软件
-
高速缓存与缓冲区
- 磁盘高速缓存
- 缓冲区
- 缓冲CPU与I/O设备间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
- 解决基本数据单元大小(数据粒度)不匹配的问题
- 提高CPU和IO设备之间的并行性
- 单缓冲
- 双缓冲
- 循环缓冲
- 缓冲池
-
设备分配与回收
- 设备分配的数据结构
- 设备控制表(DCT)
- 设备控制表
- 设备类型
- 设备标识符
- 设备状态
- 指向控制器表的指针
- 重复执行次数或时间
- 设备队列的队首指针
- 控制器控制表(COCT)
- 通道控制表(CHCT)
- 系统设备表(SDT)
- 设备控制表(DCT)
- 设备分配的数据结构
-
设备分配时应考虑的因素
- 设备的固有属性
- 独占设备
- 共享设备
- 虚拟设备
- 设备分配算法
- FCFS
- 最高优先级优先算法
- 设备分配中的安全性
- 安全分配方式
- 不安全分配方式
- 设备分配步骤
- 分配设备
- 分配控制器
- 分配通道
- 设备的固有属性
-
SPOOLing (假脱机技术)
- 输入井和输出井
- 输入缓冲区和输出缓冲区
- 输入进程和输出进程
- 井管理程序
磁盘和固态硬盘
-
磁盘
-
概念
- 磁头
- 磁道
- 扇区
- 盘块
磁盘是一种主要的计算机辅助存储设备,它利用磁性记录来存储和检索数字信息。为了有效地组织和访问这些数据,磁盘被划分成多个层级的结构。
- 物理结构:硬件层面
物理结构是磁盘驱动器本身的硬件构造,决定了数据是如何被物理存储的。
- 盘片 (Platter) 盘片是构成硬盘的核心部件,它是一个或多个坚硬的、通常由铝、玻璃或陶瓷制成的圆形盘片。盘片的双面都涂有磁性材料,用于存储数据。一个硬盘驱动器通常包含多个堆叠在一起的盘片。
- 主轴 (Spindle) 主轴是一个马达,所有的盘片都围绕它以恒定且极高的速度旋转(例如,每分钟7200转)。主轴的稳定性和转速对硬盘的性能至关重要。
- 磁头 (Read/Write Head) 每个盘片的每个磁性表面都有一个对应的磁头。磁头负责读取盘片上的磁性信息(转换为数据)或向盘片写入磁性信息(存储数据)。在工作时,磁头在一个微小的气垫上“飞行”,与盘片表面保持极近但又不接触的距离。
- 磁道 (Track) 当盘片旋转时,磁头保持在某个固定位置,就会在盘片上划出一个看不见的同心圆,这个圆形的路径就是磁道。数据就是沿着这些磁道存储的。每个盘面都有数千个磁道。
- 柱面 (Cylinder) 在一个多盘片的硬盘中,所有盘片上半径相同的磁道共同构成了一个柱面。想象一下,从上到下穿过所有盘片,将所有相同编号的磁道连接起来,就形成了一个空心的圆柱体。当磁头臂不移动时,它可以在同一个柱面上访问所有盘面上的数据,这比移动磁头臂去访问不同磁道要快得多。因此,相关的数据通常会存储在同一个柱面内以提高访问速度。
- 扇区 (Sector) 为了进一步管理数据,每个磁道被划分为若干个小的弧段,这些弧段被称为扇区。扇区是磁盘上进行数据读写的最小物理单位,传统上每个扇区的大小为512字节。在进行读写操作时,磁盘控制器一次至少会读取或写入一个扇区的数据。
总结一下物理结构的层级关系: 硬盘驱动器 > 盘片 > 磁道 > 扇区
- 逻辑结构:操作系统层面
操作系统为了更方便、更高效地管理磁盘空间,引入了逻辑结构的概念。它在物理结构的基础上进行了抽象。
-
盘块 (Block) / 块 操作系统与磁盘进行I/O操作时,并不会直接以物理扇区为单位。因为如果每次只读写512字节,对于今天的大文件来说效率太低,会产生大量的I/O请求。因此,操作系统将一个或多个连续的扇区组合在一起,形成一个盘块或块。盘块是操作系统进行文件I/O的基本(逻辑)单位。例如,一个盘块可能由8个扇区组成,那么它的大小就是 4KB (8 * 512B)。当程序请求读取文件时,操作系统会一次性读取至少一个盘块的数据到内存中。
-
簇 (Cluster) 簇是文件系统(如FAT32、NTFS)中用于分配磁盘空间的单位。它也是由一个或多个连续的盘块组成的。当你创建一个文件并写入数据时,文件系统会为这个文件分配一个或多个簇。即使一个文件非常小,比如只有1个字节,它也至少会占用一个完整的簇。这就导致了所谓的“空间浪费”,因为簇内未使用的空间无法被其他文件使用。簇的大小会影响磁盘空间的利用率和文件系统的性能。
- 大簇:对于存储大文件的磁盘,使用较大的簇可以减少文件碎片,提高读写性能(因为文件占用的簇是连续的),但会增加小文件的空间浪费。
- 小簇:可以更有效地利用磁盘空间来存储小文件,但对于大文件,可能会导致其被分割成更多的簇,增加寻址开销。
-
总结与类比
为了更好地理解这些概念,我们可以用一个“图书馆”来类比:
- 硬盘驱动器 就像整个 图书馆大楼。
- 盘片 就像楼里的 某一层。
- 磁道 就像这一层书架上的 一排书架。
- 扇区 就像书架上的 一本书(这是最小的物理单位)。
- 盘块 (Block) 就像图书馆规定,你借书时不能只借一本,必须借走 一摞书(比如5本)。这是操作系统I/O的最小单位。
- 簇 (Cluster) 就像图书管理员为了方便管理,把书架划分成很多个 隔间,每个隔间放一摞或多摞书。当你要存放你的资料时,管理员会给你分配一个或多个隔间。这是文件分配的最小单位。
通过这种分层结构,磁盘既能通过物理设计实现高密度存储,又能通过操作系统和文件系统的逻辑抽象,实现对数据高效、便捷的管理和访问。
-
磁盘的管理
-
磁盘的初始化
低级格式化(物理格式化)
-
分区
- 磁盘分区
- 逻辑格式化(高级格式化)
-
引导块
-
坏块
-
-
磁盘调度算法
-
磁盘的存取时间
-
寻道时间$T_S$:寻道时间是指将磁头臂(Read/Write Head)从当前所在的磁道移动到目标数据所在的磁道所需要的时间。这个时间除跨越$n$条磁道的时间外,还包括启动磁头臂的时间$s$
$$ T_s = m\times n+ s $$其中$m$是与磁盘驱动器速度有关的常熟。
-
旋转延迟时间$T_r$。当磁头已经成功定位到目标磁道后,等待盘片旋转,直到目标数据的起始扇区(Sector)转到磁头正下方所需要的时间。设磁盘的旋转速度为$r$
$$ T_r = \frac{1}{2r} $$ -
传输时间$T_t$。当目标扇区已经到达磁头下方后,实际从盘片上读取数据或向盘片写入数据所花费的时间。这个时间取决于每次所读/写的字节数$b$和磁盘的旋转速度$r$
$$ T_t = \frac{b}{rN} $$式中,$r$为磁盘每秒的转数,$N$为一个磁道上的字节数。
-
-
磁盘调度算法
- 先来先服务算法:这是最简单的调度算法。它完全按照请求到达队列的先后顺序来处理请求。不考虑磁头当前的位置和请求磁道的远近。
- 最短寻道时间优先(SSTF):SSTF算法选择与磁头当前位置最近的那个请求作为下一个服务对象。这是一种贪心算法,其目标是每次都执行寻道成本最小的操作。
- 扫描算法(SCAN):SCAN算法模仿了电梯的运行方式。磁头在一个方向上移动,沿途服务所有该方向上的请求,直到到达磁盘的最后一个磁道,然后调转方向,继续服务反向的请求。
- 循环扫描(C-SCAN):C-SCAN是SCAN算法的改进版,旨在解决SCAN算法对两端磁道不公平的问题。它规定磁头只在一个方向上扫描并服务请求(例如从0到199)。当到达一端后,它会立即返回到起始端,然后重新开始下一次扫描,返回途中不服务任何请求。
算法名称 优点 (Advantages) 缺点 (Disadvantages) 先来先服务 (FCFS) 绝对公平:所有请求按到达顺序处理,不会有请求被无限期推迟(无饥饿现象)。实现简单:算法逻辑是所有调度算法中最简单的。 效率低下:磁头移动路径完全随机,平均寻道时间很长,导致磁盘整体性能差。`性能不稳定:性能好坏完全取决于请求序列。 最短寻道时间优先 (SSTF) 性能好:平均寻道时间显著短于FCFS,系统吞吐量高。效率高:总是选择代价最小的移动,局部性能最优。 可能产生“饥饿”现象:如果新请求总是在磁头当前位置附近产生,那么远离磁头的请求可能会长时间得不到服务。响应时间不均:对不同位置请求的响应机会不均等。 扫描算法 (SCAN) / 电梯算法 性能较好:是SSTF和FCFS的一种折中,兼顾了性能和公平性。无饥饿问题:磁头会规律地来回移动,确保所有位置的请求最终都能被处理。`` 对两端磁道不公平:位于磁盘中间区域的磁道比两端磁道的服务频率更高,响应更快。等待时间不均:磁头刚经过的位置需要等待近一个来回周期才能再次被服务。 循环扫描 (C-SCAN) 等待时间更均匀:通过单向服务和快速返回,使得所有请求的等待时间更加公平和可预测。解决了SCAN的不公平问题:对所有磁道位置的请求都一视同仁,响应时间方差小。 额外的寻道开销:磁头每次扫描到末端后,都需要一次长距离的“空载”返回(从一端直接跳到另一端),这部分移动不处理任何请求,增加了总的寻道距离。
-
减少延迟时间的方法
- 盘面扇区的交替编号
- 磁盘盘面的错位命名
-
提高磁盘IO速度的方法
- 采用磁盘高速缓存
- 调整磁盘请求顺序
- 提前读
- 延迟写
- 优化物理块的分布
- 虚拟盘
- 采用磁盘阵列RAID
-
-
固态硬盘
- 固态硬盘的特性
- 磨损均衡
- 动态磨损均衡
- 静态磨损均衡
-