0731学习日志

操作系统

设备独立性软件

  1. 高速缓存与缓冲区

    1. 磁盘高速缓存
    2. 缓冲区
      1. 缓冲CPU与I/O设备间速度不匹配的矛盾
      2. 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
      3. 解决基本数据单元大小(数据粒度)不匹配的问题
      4. 提高CPU和IO设备之间的并行性
    3. 单缓冲
    4. 双缓冲
    5. 循环缓冲
    6. 缓冲池
  2. 设备分配与回收

    1. 设备分配的数据结构
      1. 设备控制表(DCT)
        1. 设备控制表
        2. 设备类型
        3. 设备标识符
        4. 设备状态
        5. 指向控制器表的指针
        6. 重复执行次数或时间
        7. 设备队列的队首指针
      2. 控制器控制表(COCT)
      3. 通道控制表(CHCT)
      4. 系统设备表(SDT)
  3. 设备分配时应考虑的因素

    1. 设备的固有属性
      1. 独占设备
      2. 共享设备
      3. 虚拟设备
    2. 设备分配算法
      1. FCFS
      2. 最高优先级优先算法
    3. 设备分配中的安全性
      1. 安全分配方式
      2. 不安全分配方式
    4. 设备分配步骤
      1. 分配设备
      2. 分配控制器
      3. 分配通道
  4. SPOOLing (假脱机技术)

    • 输入井和输出井
    • 输入缓冲区和输出缓冲区
    • 输入进程和输出进程
    • 井管理程序

    SPOOLing & Buffering

磁盘和固态硬盘

  1. 磁盘

    1. 概念

      • 磁头
      • 磁道
      • 扇区
      • 盘块

      磁盘是一种主要的计算机辅助存储设备,它利用磁性记录来存储和检索数字信息。为了有效地组织和访问这些数据,磁盘被划分成多个层级的结构。

      1. 物理结构:硬件层面

      物理结构是磁盘驱动器本身的硬件构造,决定了数据是如何被物理存储的。

      • 盘片 (Platter) 盘片是构成硬盘的核心部件,它是一个或多个坚硬的、通常由铝、玻璃或陶瓷制成的圆形盘片。盘片的双面都涂有磁性材料,用于存储数据。一个硬盘驱动器通常包含多个堆叠在一起的盘片。
      • 主轴 (Spindle) 主轴是一个马达,所有的盘片都围绕它以恒定且极高的速度旋转(例如,每分钟7200转)。主轴的稳定性和转速对硬盘的性能至关重要。
      • 磁头 (Read/Write Head) 每个盘片的每个磁性表面都有一个对应的磁头。磁头负责读取盘片上的磁性信息(转换为数据)或向盘片写入磁性信息(存储数据)。在工作时,磁头在一个微小的气垫上“飞行”,与盘片表面保持极近但又不接触的距离。
      • 磁道 (Track) 当盘片旋转时,磁头保持在某个固定位置,就会在盘片上划出一个看不见的同心圆,这个圆形的路径就是磁道。数据就是沿着这些磁道存储的。每个盘面都有数千个磁道。
      • 柱面 (Cylinder) 在一个多盘片的硬盘中,所有盘片上半径相同的磁道共同构成了一个柱面。想象一下,从上到下穿过所有盘片,将所有相同编号的磁道连接起来,就形成了一个空心的圆柱体。当磁头臂不移动时,它可以在同一个柱面上访问所有盘面上的数据,这比移动磁头臂去访问不同磁道要快得多。因此,相关的数据通常会存储在同一个柱面内以提高访问速度。
      • 扇区 (Sector) 为了进一步管理数据,每个磁道被划分为若干个小的弧段,这些弧段被称为扇区。扇区是磁盘上进行数据读写的最小物理单位,传统上每个扇区的大小为512字节。在进行读写操作时,磁盘控制器一次至少会读取或写入一个扇区的数据。

      总结一下物理结构的层级关系: 硬盘驱动器 > 盘片 > 磁道 > 扇区

      1. 逻辑结构:操作系统层面

      操作系统为了更方便、更高效地管理磁盘空间,引入了逻辑结构的概念。它在物理结构的基础上进行了抽象。

      • 盘块 (Block) / 块 操作系统与磁盘进行I/O操作时,并不会直接以物理扇区为单位。因为如果每次只读写512字节,对于今天的大文件来说效率太低,会产生大量的I/O请求。因此,操作系统将一个或多个连续的扇区组合在一起,形成一个盘块。盘块是操作系统进行文件I/O的基本(逻辑)单位。例如,一个盘块可能由8个扇区组成,那么它的大小就是 4KB (8 * 512B)。当程序请求读取文件时,操作系统会一次性读取至少一个盘块的数据到内存中。

      • 簇 (Cluster) 簇是文件系统(如FAT32、NTFS)中用于分配磁盘空间的单位。它也是由一个或多个连续的盘块组成的。当你创建一个文件并写入数据时,文件系统会为这个文件分配一个或多个簇。即使一个文件非常小,比如只有1个字节,它也至少会占用一个完整的簇。这就导致了所谓的“空间浪费”,因为簇内未使用的空间无法被其他文件使用。簇的大小会影响磁盘空间的利用率和文件系统的性能。

        • 大簇:对于存储大文件的磁盘,使用较大的簇可以减少文件碎片,提高读写性能(因为文件占用的簇是连续的),但会增加小文件的空间浪费。
        • 小簇:可以更有效地利用磁盘空间来存储小文件,但对于大文件,可能会导致其被分割成更多的簇,增加寻址开销。
      1. 总结与类比

        为了更好地理解这些概念,我们可以用一个“图书馆”来类比:

        1. 硬盘驱动器 就像整个 图书馆大楼
        2. 盘片 就像楼里的 某一层
        3. 磁道 就像这一层书架上的 一排书架
        4. 扇区 就像书架上的 一本书(这是最小的物理单位)。
        5. 盘块 (Block) 就像图书馆规定,你借书时不能只借一本,必须借走 一摞书(比如5本)。这是操作系统I/O的最小单位。
        6. 簇 (Cluster) 就像图书管理员为了方便管理,把书架划分成很多个 隔间,每个隔间放一摞或多摞书。当你要存放你的资料时,管理员会给你分配一个或多个隔间。这是文件分配的最小单位。

        通过这种分层结构,磁盘既能通过物理设计实现高密度存储,又能通过操作系统和文件系统的逻辑抽象,实现对数据高效、便捷的管理和访问。

    2. 磁盘的管理

      1. 磁盘的初始化

        低级格式化(物理格式化)

      2. 分区

        1. 磁盘分区
        2. 逻辑格式化(高级格式化)
      3. 引导块

      4. 坏块

    3. 磁盘调度算法

      1. 磁盘的存取时间

        1. 寻道时间$T_S$:寻道时间是指将磁头臂(Read/Write Head)从当前所在的磁道移动到目标数据所在的磁道所需要的时间。这个时间除跨越$n$条磁道的时间外,还包括启动磁头臂的时间$s$

          $$ T_s = m\times n+ s $$

          其中$m$是与磁盘驱动器速度有关的常熟。

        2. 旋转延迟时间$T_r$。当磁头已经成功定位到目标磁道后,等待盘片旋转,直到目标数据的起始扇区(Sector)转到磁头正下方所需要的时间。设磁盘的旋转速度为$r$

          $$ T_r = \frac{1}{2r} $$
        3. 传输时间$T_t$。当目标扇区已经到达磁头下方后,实际从盘片上读取数据或向盘片写入数据所花费的时间。这个时间取决于每次所读/写的字节数$b$和磁盘的旋转速度$r$

          $$ T_t = \frac{b}{rN} $$

          式中,$r$为磁盘每秒的转数,$N$为一个磁道上的字节数。

      2. 磁盘调度算法

        1. 先来先服务算法:这是最简单的调度算法。它完全按照请求到达队列的先后顺序来处理请求。不考虑磁头当前的位置和请求磁道的远近。
        2. 最短寻道时间优先(SSTF):SSTF算法选择与磁头当前位置最近的那个请求作为下一个服务对象。这是一种贪心算法,其目标是每次都执行寻道成本最小的操作。
        3. 扫描算法(SCAN):SCAN算法模仿了电梯的运行方式。磁头在一个方向上移动,沿途服务所有该方向上的请求,直到到达磁盘的最后一个磁道,然后调转方向,继续服务反向的请求。
        4. 循环扫描(C-SCAN):C-SCAN是SCAN算法的改进版,旨在解决SCAN算法对两端磁道不公平的问题。它规定磁头只在一个方向上扫描并服务请求(例如从0到199)。当到达一端后,它会立即返回到起始端,然后重新开始下一次扫描,返回途中不服务任何请求。
          算法名称 优点 (Advantages) 缺点 (Disadvantages)
          先来先服务 (FCFS) 绝对公平:所有请求按到达顺序处理,不会有请求被无限期推迟(无饥饿现象)。实现简单:算法逻辑是所有调度算法中最简单的。 效率低下:磁头移动路径完全随机,平均寻道时间很长,导致磁盘整体性能差。`性能不稳定:性能好坏完全取决于请求序列。
          最短寻道时间优先 (SSTF) 性能好:平均寻道时间显著短于FCFS,系统吞吐量高。效率高:总是选择代价最小的移动,局部性能最优。 可能产生“饥饿”现象:如果新请求总是在磁头当前位置附近产生,那么远离磁头的请求可能会长时间得不到服务。响应时间不均:对不同位置请求的响应机会不均等。
          扫描算法 (SCAN) / 电梯算法 性能较好:是SSTF和FCFS的一种折中,兼顾了性能和公平性。无饥饿问题:磁头会规律地来回移动,确保所有位置的请求最终都能被处理。`` 对两端磁道不公平:位于磁盘中间区域的磁道比两端磁道的服务频率更高,响应更快。等待时间不均:磁头刚经过的位置需要等待近一个来回周期才能再次被服务。
          循环扫描 (C-SCAN) 等待时间更均匀:通过单向服务和快速返回,使得所有请求的等待时间更加公平和可预测。解决了SCAN的不公平问题:对所有磁道位置的请求都一视同仁,响应时间方差小。 额外的寻道开销:磁头每次扫描到末端后,都需要一次长距离的“空载”返回(从一端直接跳到另一端),这部分移动不处理任何请求,增加了总的寻道距离。
      3. 减少延迟时间的方法

        1. 盘面扇区的交替编号
        2. 磁盘盘面的错位命名
      4. 提高磁盘IO速度的方法

        1. 采用磁盘高速缓存
        2. 调整磁盘请求顺序
        3. 提前读
        4. 延迟写
        5. 优化物理块的分布
        6. 虚拟盘
        7. 采用磁盘阵列RAID
    4. 固态硬盘

      1. 固态硬盘的特性
      2. 磨损均衡
        1. 动态磨损均衡
        2. 静态磨损均衡