当前位置: 首页 > news >正文

操作系统复习总结5

操作系统复习总结,仅供笔者复习使用,参考教材:

  • 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社
  • 《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社

本文主要内容为:输入输出管理;

计算机系统概述 部分见 操作系统复习总结1;
进程与线程 部分见 操作系统复习总结2;
内存管理 部分见 操作系统复习总结3;
文件管理 部分见 操作系统复习总结4;
输入输出管理 部分见 操作系统复习总结5;

目录

  • 1. I/O 管理概述
    • 1.1 I/O 设备
    • 1.2 I/O 控制方式
    • 1.3 I/O 软件层次结构
  • 2. 设备独立性软件
    • 2.1 磁盘高速缓存与缓冲区
      • 2.1.1 磁盘高速缓存
      • 2.1.2 缓冲区
    • 2.2 设备的分配与回收
    • 2.3 SPOOLing 技术
  • 3. 磁盘和固态硬盘
    • 3.1 磁盘
      • 3.1.1 磁盘的管理
      • 3.1.2 磁盘调度算法
    • 3.2 固态硬盘
      • 3.2.1 磨损均衡

1. I/O 管理概述

1.1 I/O 设备

I/O 设备管理是操作系统设计中最凌乱也最具挑战性的部分,它包含了很多领域的不同设备及与设备相关的应用程序,因此没有通用且一致的设计方案。

  • I/O 设备分类:按信息交换的单位分类,I/O 设备可分为:

    • 块设备:信息交换以数据块为单位,属于有结构设备,如磁盘等。磁盘设备的基本特征是传输速率较高、可寻址,即对它可随机地读 / 写任意一块;
    • 字符设备:信息交换以字符为单位,属于无结构类型,如交互式终端机、打印机等。它们的基本特征是传输速率低、不可寻址,并且时常采用中断 I/O 方式;

    按传输速率分类,I/O 设备可分为:

    • 低速设备:传输速率仅为每秒几字节到数百字节的一类设备,如键盘、鼠标等;
    • 中速设备:传输速率为每秒数千字节至数万字节的一类设备,如激光打印机等;
    • 高速设备:传输速率在数百千字节至千兆字节的一类设备,如磁盘机、光盘机等;
  • I/O 接口:I/O 接口又称 设备控制器,位于 CPU 与设备之间,它既要与 CPU 通信,又要与设备通信,还要按 CPU 发来的命令控制设备工作,主要由设备控制器与 CPU 的接口、设备控制器与设备的接口、I/O 逻辑三部分组成;
    在这里插入图片描述

  • I/O 端口:设备控制器中可被 CPU 直接访问的寄存器,主要有以下三类寄存器:

    • 数据寄存器:实现 CPU 和外设之间的数据缓冲;
    • 状态寄存器:获取执行结果和设备的状态信息,以让 CPU 知道是否准备好;
    • 控制寄存器:由 CPU 写入,以便启动命令或更改设备模式;

1.2 I/O 控制方式

I/O 设备管理的主要任务之一是控制设备和内存或 CPU 之间的数据传送。外围设备和内存之间的 I/O 控制方式有 4 种:程序直接控制、中断驱动、直接存储器存取、通道控制。

  • 程序直接控制:计算机从外部设备读取的每个字,CPU 需要对外设状态进行循环检查,直到确定该字已经在 I/O 控制器的数据寄存器中;
    在这里插入图片描述

  程序直接控制方式虽然简单且易于实现,但其缺点也显而易见,CPU 的利用率相当低。因为在程序直接控制方式中,CPU 的高速性和 I/O 设备的低速性,致使 CPU 绝大部分时间都处于等待 I/O 设备完成数据 I/O 的循环测试中,造成了 CPU 资源的极大浪费。

  • 中断驱动:允许 I/O 设备主动打断 CPU 的运行并请求服务,从而解放 CPU,使得其向 I/O 控制器发送读命令后可以继续做其他有用的工作;
    在这里插入图片描述

  中断驱动方式比程序直接控制方式有效,但由于数据中的每个字在存储器与 I/O 控制器之间的传输都必须经过 CPU,这就导致了中断驱动方式仍然会消耗较多的 CPU 时间。

  • 直接存储器存取 (DMA):在 I/O 设备和内存之间开辟直接的数据交换通路,彻底解放 CPU,简化了中断驱动方式中 I/O 设备与内存之间的数据交换必须要经过 CPU 中的寄存器导致的速度受限。DMA 方式传递数据的基本单位是数据块,传送的数据是设备直接和内存交换的,并且仅在传送数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在 DMA 控制器的控制下完成的;
    在这里插入图片描述
    要在主机与控制器之间实现成块数据的直接交换,须在 DMA 控制器中设置如下 4 类寄存器:
    • 命令 / 状态寄存器 (CR):接收从 CPU 发来的 I/O 命令、有关控制信息,或设备的状态;
    • 内存地址寄存器 (MAR):在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址;
    • 数据寄存器 (DR):暂存从设备到内存或从内存到设备的数据;
    • 数据计数器 (DC):存放本次要传送的字节数;
      在这里插入图片描述

  DMA 方式与中断方式的主要区别是,中断方式在每个数据需要传输时中断 CPU,而 DMA 方式则是在所要求传送的一批数据全部传送结束时才中断CPU;此外,中断方式的数据传送是在中断处理时由 CPU 控制完成的,而 DMA 方式则是在 DMA 控制器的控制下完成的。

  • 通道控制:I/O 通道是指专门负责输入/输出的处理机,是 DMA 方式的发展,可以进一步减少 CPU 的干预。通道控制把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关控制和管理为单位的干预。同时,又可以实现 CPU、通道和 I/O 设备三者的并行操作从而更有效地提高整个系统的资源利用率。例如,当 CPU 要完成一组相关的读(或写)操作及有关控制时,只需向 I/O 通道发送一条 I/O 指令,以给出其所要执行的通道程序的首地址和要访问的 I/O 设备,通道接到该指令后,执行通道程序便可完成 CPU 指定的 I/O 任务,数据传送结束时向 CPU 发出中断请求。

  I/O 通道与一般处理机的区别是:通道指令的类型单一,没有自己的内存,通道所执行的通道程序是放在主机的内存中的,也就是说通道与 CPU 共享内存。
  I/O 通道与 DMA 方式的区别是:DMA 方式需要 CPU 来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。另外,每个 DMA 控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。

1.3 I/O 软件层次结构

I/O 软件往下与硬件有着密切关系,往上又与虚拟存储器系统、文件系统和用户直接交互,它们都需要 I/O 软件来实现 I/O 操作。为使复杂的 I/O 软件能具有清晰的结构、良好的可移植性和易适应性,目前已普遍采用层次式结构的 I/O 软件。

  • I/O 软件层次结构:将系统中的设备管理模块分为若干层,每层都是利用其下层提供的服务,完成输入/输出功能中的某些子功能,并屏蔽这些功能实现的细节,向高层提供服务。在层次式结构的 I/O 软件中,只要层次间的接口不变,对某一层次中的软件的修改都不会引起其下层或高层代码的变更,仅最低层才涉及硬件的具体特性;
    在这里插入图片描述

    • 用户层 I/O 软件:实现与用户交互的接口,用户可直接调用在用户层提供的、与 I/O 操作有关的库函数,对设备进行操作;
    • 设备独立性:也称设备无关性,使得应用程序独立于具体使用的物理设备。在应用程序中,使用逻辑设备名来请求使用某类设备;而在系统实际执行时,必须将逻辑设备名映射成物理设备名使用。设备独立性提高了设备分配的灵活性和设备的利用率;
    • 设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备的保护及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间;
    • 设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动 I/O 设备工作的驱动程序。通常,每类设备配置一个设备驱动程序,它是 I/O 进程与设备控制器之间的通信程序,通常以进程的形式存在;

      设备驱动程序向上层用户程序提供一组标准接口,设备具体的差别被设备驱动程序所封装,用于接收上层软件发来的抽象 I/O 要求,如 read 和 write 命令。转换为具体要求后,发送给设备控制器,控制 I/O 设备工作;它也将由设备控制器发来的信号传送给上层软件,从而为 I/O 内核子系统隐藏设备控制器之间的差异。

    • 中断处理程序:用于保存被中断进程的 CPU 环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回到被中断进程;

  当用户要读取某设备的内容时:
(1)通过操作系统提供的 read 命令接口,这就经过了用户层;
(2)由于操作系统提供给用户使用的接口,一般是统一的通用接口,即所有设备都可以响应的统一命令。因此用户发出 read 命令后要先经过设备独立层进行解析,然后交往下层;
(3)由于不同类型的设备对 read 命令的行为会有所不同,因此需要针对不同的设备,把 read 命令解析成不同的指令,这就经过了设备驱动层;
(4)命令解析完毕后,需要中断正在运行的进程,转而执行 read 命令,这就需要中断处理程序;
(5)最后,命令真正抵达硬件设备,硬件设备的控制器按照上层传达的命令操控硬件设备,完成相应的功能。

2. 设备独立性软件

设备独立性软件也叫设备无关性软件,用于实现用户程序与设备驱动器的统一接口、设备命令、设备的保护及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。

2.1 磁盘高速缓存与缓冲区

为了协调 I/O 设备与系统间的读写速度,引入了磁盘高速缓存和缓冲区的概念。磁盘高速缓存存放的是低速设备上的某些数据的复制数据,即高速缓存上有的低速设备上面必然有;缓冲区存放的是低速设备和高速设备之间传递的数据,这些数据在低速设备(或高速设备)上却不一定有备份,缓冲区只为这些数据在两种设备间提供缓冲。

2.1.1 磁盘高速缓存

操作系统中使用磁盘高速缓存技术来提高磁盘的 I/O 速度,磁盘高速缓存技术指的是利用 内存中的存储空间 来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存逻辑上属于磁盘,物理上则是驻留在内存中的盘块。

高速缓存在内存中分为两种形式:一种是在内存中开辟一个单独的空间作为磁盘高速缓存,大小固定;另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘 I/O 时共享。

2.1.2 缓冲区

在设备管理子系统中,为了缓和 CPU 与 I/O 设备间速度不匹配的矛盾,减少对 CPU 的中断频率,解决基本数据单元大小(即数据粒度)不匹配的问题,提高 CPU 和 I/O 设备之间的并行性,引入了缓冲区。

缓冲的实现方法有两种:采用硬件缓冲器和缓冲区。但硬件缓冲器成本太高,只在一些关键部位使用,因此一般都采用位于内存区域的缓冲区。根据系统设置缓冲器的个数,缓冲技术可以分为单缓冲、双缓冲、循环缓冲和缓冲池。

  • 单缓冲:在主存中设置一个缓冲区,当设备和处理机交换数据时,先将数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据,在缓冲区写入或取出的过程中,另一方需等待
    在这里插入图片描述
  • 双缓冲:设置两个缓冲区,I/O 设备输入数据时先装填到缓冲区 1,在缓冲区 1 填满后才开始装填缓冲区 2。I/O 设备装填缓冲区 2 时处理机可以从缓冲区 1 中取出数据送入用户进程,当缓冲区 1 中的数据处理完后,若缓冲区 2 已填满,则处理机又从缓冲区 2 中取出数据送入用户进程,而 I/O 设备又可以装填缓冲区 1。注意,必须等缓冲区 2 充满才能让处理机从缓冲区 ⒉取出数据;
    在这里插入图片描述
  • 循环缓冲:包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形。循环缓冲用于输入/输出时,还需要有两个指针 in 和 out。对输入而言,首先要从设备接收数据到缓冲区中,in 指针指向可以输入数据的第一个空缓冲区;当运行进程需要数据时,从循环缓冲区中取一个装满数据的缓冲区,并从此缓冲区中提取数据,out 指针指向可以提取数据的第一个满缓冲区。输出则正好相反;
  • 缓冲池:由多个系统公用的缓冲区组成,缓冲区按其使用状况可以形成三个队列:空缓冲队列、装满输入数据的缓冲队列(输入队列)和装满输出数据的缓冲队列(输出队列)。还应具有 4 种缓冲区:用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区及用于提取输出数据的工作缓冲区:
    在这里插入图片描述
    当输入进程需要输入数据时,便从空缓冲队列的队首摘下一个空缓冲区,把它作为收容输入工作缓冲区,然后把输入数据输入其中,装满后再将它挂到输入队列队尾;当计算进程需要输入数据时,便从输入队列取得一个缓冲区作为提取输入工作缓冲区,计算进程从中提取数据,数据用完后再将它挂到空缓冲队列尾;当计算进程需要输出数据时,便从空缓冲队列的队首取得一个空缓冲区,作为收容输出工作缓冲区,当其中装满输出数据后,再将它挂到输出队列队尾;当要输出时,由输出进程从输出队列中取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区,当数据提取完后,再将它挂到空缓冲队列的队尾。

2.2 设备的分配与回收

  • 设备分配:根据用户的 I/O 请求分配所需的设备。分配的总原则是充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁。不同的分配方式可以将设备分为独占设备、共享设备和虚拟设备:

    • 独占式使用设备:设备分配给进程后便由其独占,直至该进程释放该设备;
    • 分时式共享使用设备:可同时分配给多个进程,通过分时共享使用;
    • 虚拟式使用设备:以 SPOOLing 方式使用外部设备,实现了虚拟设备功能,可以将设备同时分配给多个进程;
  • 设备分配的数据结构:设备分配依据的主要数据结构有设备控制表 (DCT)、控制器控制表 (COCT)、通道控制表 (CHCT) 和系统设备表 (SDT);

    • 设备控制表:一个设备控制表就表征一个设备,而这个控制表中的表项就是设备的各个属性。凡因请求本设备而未得到满足的进程,应将其 PCB 按某种策略排成一个设备请求队列,设备队列的队首指针指向该请求队列队首 PCB;
      在这里插入图片描述
    • 控制器控制表和通道控制表:设备控制器控制设备与内存交换数据,设备控制器又需要请求通道为它服务,因此每个 COCT 有一个表项存放指向相应 CHCT 的指针,而一个通道可为多个设备控制器服务,因此 CHCT 中必定有一个指针,指向一个表,这个表上的信息表达的是 CHCT 提供服务的那几个设备控制器。CHCT 与 COCT 的关系是一对多的关系;
      在这里插入图片描述
    • 系统设备表:整个系统只有一张 SDT,它记录已连接到系统中的所有物理设备的情况,每个物理设备占一个表目;
      在这里插入图片描述
  • 设备分配的安全性:设备分配中应防止发生进程死锁;

  • 逻辑设备名到物理设备名的映射:在系统中设置一张逻辑设备表 (Logical Unit Table, LUT),用于将逻辑设备名映射为物理设备名。LUT 表项包括逻辑设备名、物理设备名和设备驱动程序入口地址。当进程用逻辑设备名来请求分配设备时,系统为它分配一台相应的物理设备,并在 LUT 中建立一个表目,当以后进程再利用该逻辑设备名请求 I/O 操作时,系统通过查找 LUT 来寻找对应的物理设备和驱动程序;

2.3 SPOOLing 技术

为了缓和 CPU 的高速性与 I/O 设备低速性之间的矛盾,引入了 脱机输入/输出 技术,它是操作系统中采用的一项将独占设备改造成共享设备的技术。该技术利用专门的外围控制机,将低速 I/O 设备上的数据传送到高速磁盘上,或者相反。SPOOLing 技术全称 Simultaneous Peripheral Operation On-Line(外部设备联机并行操作),实现了虚拟设备功能,可以将设备同时分配给多个进程。这种技术实质上就是实现了对设备的 I/O 操作的批处理。
在这里插入图片描述

输入/输出进程用于模拟脱机输入/输出时的外围控制机。用户要求的数据从输入设备经过输入缓冲区送到输入井,当 CPU 需要输入数据时,直接从输入井读入内存。用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备。

  以共享打印机为例,当用户进程请求打印输出时,SPOOLing 系统同意打印,但是并不真正立即把打印机分配给该进程,而由假脱机管理进程完成两项任务:
(1)在磁盘的输出井中为之申请一个空闲盘块,并将要打印的数据送入其中暂存;
(2)为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到假脱机文件队列上。
  这两项工作完成后,虽然还没有任何实际的打印输出,但是对于用户进程而言,其打印任务已完成。对用户而言,系统并非立即执行真实的打印操作,而只是立即将数据输出到缓冲区,真正的打印操作是在打印机空闲且该打印任务已排在等待队列队首时进行的。
  上述实例可以直观感受到 SPOOLing 技术空间换时间的优越性:若没有 SPOOLing 技术,CPU 要向打印机输出要打印的数据,打印机的打印速度比较慢,CPU 就必须迁就打印机,在打印机把数据打印完后才能继续做其他的工作,浪费了 CPU 的不少时间。在 SPOOLing 技术下,CPU 要打印机打印的数据可以先输出到磁盘的输出井中,然后做其他的事情。若打印机此时被占用,则 SPOOLing 系统就会把这个打印请求挂到等待队列上,待打印机有空时再把数据打印出来。

3. 磁盘和固态硬盘

3.1 磁盘

磁盘(Disk)是表面涂有磁性物质的 物理盘片,通过一个称为 磁头 的导体线圈从磁盘存取数据。在读 / 写操作期间,磁头固定,磁盘在下面高速旋转。磁盘盘面上的数据存储在一组同心圆中,称为 磁道。每个磁道与磁头一样宽,一个盘面有上千个磁道。磁道又划分为几百个 扇区,每个扇区固定存储大小,一个扇区称为一个盘块。相邻磁道及相邻扇区间通过一定的间隙分隔开,以避免精度错误。由于扇区按固定圆心角度划分,所以密度从最外道向里道增加,磁盘的存储能力受限于最内道的最大记录密度。
在这里插入图片描述

磁盘安装在一个 磁盘驱动器 中,它由磁头臂、用于旋转磁盘的主轴和用于数据输入 / 输出的电子设备组成。多个盘片垂直堆叠,组成磁盘组,每个盘面对应一个磁头,所有磁头固定在一起,与磁盘中心的距离相同且一起移动。所有盘片上相对位置相同的磁道组成柱面。扇区是磁盘可寻址的最小单位,磁盘上能存储的物理块数目由扇区数、磁道数及磁盘面数决定,磁盘地址用 “柱面号 ⋅ \cdot 盘面号 ⋅ \cdot 扇区号” 表示。
在这里插入图片描述

  因扇区的单位太小,为了提高效率,操作系统将多个相邻的扇区组合在一起,形成一簇(在 Linux 中称为块)。为了更高效地管理磁盘,一簇只能存放一个文件的内容,文件所占用的空间只能是簇的整数倍;如果文件大小小于一簇(甚至是 0 字节),也要占用一簇的空间。

3.1.1 磁盘的管理

  • 磁盘初始化:一个新的磁盘只是一个磁性记录材料的空白盘,在可以存储数据之前,必须将它分成扇区,以便磁盘控制器能够进行读写操作,这个过程称为低级格式化(或称物理格式化)。低级格式化为每个扇区使用特殊的数据结构填充磁盘,每个扇区的数据结构通常由头部、数据区域(通常为 512B)和尾部组成。头部和尾部包含了一些磁盘控制器的使用信息;

  • 分区:分区是将计算机磁盘划分为不同部分的过程,每个部分被称为一个 分区。分区的过程主要分为两步:
    (1)将磁盘分为由一个或多个柱面组成的分区(即我们熟悉的 C 盘、D 盘等形式的分区),每个分区的起始扇区和大小都记录在磁盘主引导记录的分区表中;
    (2)第二步对物理分区进行逻辑格式化(即创建文件系统),操作系统将初始的文件系统数据结构存储到磁盘上,这些数据结构包括空闲空间和已分配的空间以及一个初始为空的目录;

      每个分区可以被视为一个逻辑上独立的硬盘,常见的分区类型包含系统分区、数据分区、应用程序分区等。分区的目的是更有效地管理存储空间,使不同类型的数据可以分开存储,并且可以更好地进行文件管理和数据组织。分区还可以用于实现多个操作系统在同一台计算机上的共存,每个操作系统可以位于不同的分区中。

  • 引导块:位于磁盘的第一个扇区,也被称为 引导扇区启动块,用来存储引导加载程序(也叫自举程序),负责初始化硬件、加载操作系统内核等任务,以启动操作系统加载过程;

    • 自举程序:计算机启动时需要运行一个初始化程序,称为 自举程序引导加载程序,它初始化 CPU、寄存器、设备控制器和内存等硬件,接着启动操作系统。自举程序启动操作系统时,先找到磁盘上的操作系统内核,将它加载到内存,并转到起始地址,从而开始操作系统的运行。自举程序存放在 ROM 中,通常只在 ROM 中保留很小的自举装入程序,而将完整功能的引导程序保存在磁盘的启动块上,启动块位于磁盘的固定位置;
    • 启动分区:也叫 引导分区,是一个特定的磁盘分区,用于存储引导加载程序和操作系统启动相关的文件。在大多数操作系统中,启动分区和 系统分区 是同一个分区,如 Windows 中的 C 盘;
    • 系统磁盘:具有启动分区的磁盘称为 启动磁盘系统磁盘
      在这里插入图片描述

3.1.2 磁盘调度算法

一次磁盘读写操作的时间由寻道时间、旋转延迟时间和传输时间决定:

  • 寻道时间 T s T_s Ts:磁头在读写信息前,移动到指定磁道所需要的时间。 T s = m × n + s T_s=m \times n + s Ts=m×n+s,其中 n n n 是跨越磁道数, m m m 是磁盘驱动器速度相关的常数, s s s 是启动磁臂的时间;
  • 旋转延迟时间 T r T_r Tr:磁头在某一磁道上定位到指定扇区所需要的时间。 T r = 1 2 r T_r=\frac{1}{2r} Tr=2r1,其中 r r r 是磁盘的旋转速度;
  • 传输时间 T t T_t Tt:从磁盘读出或向磁盘写入数据所经历的时间。 T t = b r N T_t=\frac{b}{rN} Tt=rNb,其中 b b b 是所读写的字节数, r r r 是磁盘的旋转速度, N N N 是一个磁道上的字节数;

在磁盘存取时间的计算中,寻道时间与磁盘调度算法相关;而延迟时间和传输时间都与磁盘旋转速度线性相关。目前常用的磁盘调度算法有以下几种:

  • 先来先服务 (First Come First Served, FCFS):根据进程请求访问磁盘的先后顺序进行调度:
    在这里插入图片描述
    FCFS 的优点是具有公平性,若只有少量进程需要访问,且大部分请求都是访问簇聚的文件扇区,则有望达到较好的性能;若有大量进程竞争使用磁盘,则这种算法在性能上往往接近于随机调度;

  • 最短寻找时间优先 (Shortest Seek Time First, SSTF):选择与当前磁头所在磁道距离最近的磁道,以便使每次的寻找时间最短:
    在这里插入图片描述
    SSTF 总是选择最小寻找时间并不能保证平均寻找时间最小,因此能提供比 FCFS 算法更好的性能。不过这种算法会产生“饥饿”现象;

  • 扫描算法 (SCAN):又称电梯调度算法,在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象,实际上就是在 SSTF 的基础上 规定了磁头运动的方向
    在这里插入图片描述
    SCAN 算法对最近扫描过的区域不公平,因此它在访问局部性方面不如 FCFS 算法和 SSTF 算法好;

    • LOOK 调度:对 SCAN 算法进行改进,磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点:
      在这里插入图片描述
  • 循环扫描 (Circular SCAN, C-SCAN:在扫描算法的基础上规定磁头单向移动来提供服务,回返时直接快速移动至起始端而不服务任何请求:
    在这里插入图片描述
    由于 SCAN 算法偏向于处理那些接近最里或最外的磁道的访问请求,使用改进型的 C-SCAN 算法可以避免这个问题;

    • C-LOOK 调度:对 C-SCAN 算法进行改进,磁头移动只需要到达最远端的一个请求即可返回,不需要到达磁盘端点:
      在这里插入图片描述

3.2 固态硬盘

固态硬盘 (SSD) 是一种基于闪存技术的存储器。和 U 盘并无本质差别,只是容量更大,存取性能更好。一个 SSD 由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层扮演了磁盘控制器的角色,将来自 CPU 的逻辑块读写请求翻译成对底层物理设备的读写控制信号。
在这里插入图片描述

如图所示,一个闪存由 B 块组成,每块由 Р 页组成。数据是以页为单位读写的。只有在一页所属的块整个被擦除后,才能写这一页。某块进行若干次重复写后,就会磨损坏,不能再使用。

比起传统磁盘,SSD 有很多优点,它由半导体存储器构成,没有移动的部件,因而随机访问速度比机械磁盘要快很多,也没有任何机械噪声和震动,能耗更低、抗震性好、安全性高等。

3.2.1 磨损均衡

固态硬盘最大的缺点就是闪存的擦写寿命是有限,一般是几百次到几千次。如果直接用普通闪存组装 SSD,那么实际的寿命表现可能非常令人失望 —— 读写数据时会集中在 SSD 的一部分闪存,这部分闪存的寿命会损耗得特别快。一旦这部分闪存损坏,整块SSD也就损坏了。这种 磨损不均衡 的情况,可能会导致一块 256GB 的 SSD,只因数兆空间的闪存损坏而整块损坏。

为了弥补 SSD 的寿命缺陷,引入了磨损均衡。SSD 磨损均衡技术大致分为两种:
(1)动态磨损均衡:写入数据时,自动选择较新的闪存块(即擦除次数较少的闪存块),让老的闪存块先歇一歇;
(2)静态磨损均衡:这种技术更为先进,就算没有数据写入,SSD 也会监测并自动进行数据分配,让老的闪存块承担无须写数据的存储任务,同时让较新的闪存块腾出空间,平常的读写操作在较新的闪存块中进行。如此一来,各闪存块的寿命损耗就都差不多;

有了这种算法加持,SSD 的寿命就比较可观了。例如,对于一个 256GB 的 SSD,如果闪存的擦写寿命是 500 次,那么就需要写入 125TB 数据,才寿终正寝。就算每天写入 10GB 数据,也要三十多年才能将闪存磨损坏。

相关文章:

操作系统复习总结5

操作系统复习总结,仅供笔者复习使用,参考教材: 《操作系统原理》 - 何静媛编著. 西安电子科技大学出版社《操作系统考研复习指导》2024年 - 王道论坛组编. 电子工业出版社 本文主要内容为:输入输出管理; 计算机系统…...

【LeetCode】406.根据身高重建队列

题目 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数组…...

渗透测试漏洞原理之---【任意文件包含漏洞】

文章目录 1、文件包含概述1.1 文件包含语句1.1.1、相关配置 1.2、动态包含1.2.1、示例代码1.2.2、本地文件包含1.2.3、远程文件包含 1.3、漏洞原理1.3.1、特点 2、文件包含攻防2.1、利用方法2.1.1、包含图片木马2.1.2、读取敏感文件2.1.3、读取PHP文件源码2.1.4、执行PHP命令2.…...

day28 异常

to{}catch{} try{}catch{}的流传输 try {fis new FileInputStream("file-APP\\fos.txt");fos new FileOutputStream("fos.txt");int a ;while ((a fis.read())! -1){fos.write(a);}System.out.println(a); } catch (IOException e) {e.printStackTrace()…...

Pico使用C/C++选择使用哪个I2C控制器,以及SDA和SCL针脚

本文一开始讲述了解决方案,后面是我做的笔记,用来讲述我的发现流程和探究的 Pico I2C 代码结构。 前提知识 首先要说明一点:Pico 有两个 I2C,也就是两套 SDA 和 SCL。这点你可以在针脚图中名字看出,比如下图的 Pin 4…...

C++动态内存管理

动态内存 在C/C程序中(线程)栈空间是有限的,大部分变量使用的都是动态分配来的堆内存,这些动态申请来的堆内存是需要开发者通过代码去自行管理的。如何管理好这些动态申请来的内存,是C/C开发中的一个重点难点问题。 m…...

SpringBoot—日志

目录 日志使用日志日志级别设置日志级别设置分组指定日志文件路径日志切割归档使用第三方日志框架log4j2配置文件【分级存储】logback配置文件【分级存储】 实例代码 日志 使用日志 给controller添加日志信息 要给controller类上添加Slf4j注解,然后使用log.info(…...

如何在,Linux中安装Luajit2.*

1.文件下载The LuaJIT Project 2.将下载文件上传到对应的服务器:例如/opt 3.进入对应的文件夹 4.make PREFIX/usr/local,设置安装路径 5.make install,编译安装 6.进入安装目录,cd /usr/local/include/luajit-2.0 7.luajit -v…...

单片机-如何让数码管动态显示

数码管硬件图 1、数码管 连接 74HC245 芯片 单片机IO口输出难稳定,需要数码管与单片机连接需要增加驱动电路, 使用 74HC245 abcdefgDP并联导出 74HC245 对数码管进行驱动,P0 是输出电流 来驱动各个段的 驱动芯片 增加电阻 是为了防止电流…...

在Visual Studio 2017上配置并使用OpenGL

1 在Visual Studio 2017上配置并使用OpenGL 在GLUT - The OpenGL Utility Toolkit:GLUT - The OpenGL Utility Toolkit中点击“GLUT for Microsoft Windows 95 & NT users”,选择“If you want just the GLUT header file, the .LIB, and .DLL file…...

【C++】多态学习

多态 多态的概念与定义多态的概念构成多态的两个条件虚函数与重写重写的两个特例 final 和 override重载、重写(覆盖)、重定义(隐藏)的对比抽象类多态的原理静态绑定与动态绑定 单继承与多继承关系下的虚函数表(派生类)单继承中的虚函数表查看多继承中的虚函数表查看 菱形继承与…...

大数据之Maven

一、Maven的作用 作用一:下载对应的jar包 避免jar包重复下载配置,保证多个工程共用一份jar包。Maven有一个本地仓库,可以通过pom.xml文件来记录jar所在的位置。Maven会自动从远程仓库下载jar包,并且会下载所依赖的其他jar包&…...

自制centos7.9的wsl发行版

自制centos7.9的wsl发行版 参考:https://zhuanlan.zhihu.com/p/482538727 Windows10提供了一个wsl工具用于直接在windows上运行Linux子系统。 CentOS国内镜像下载:https://mirrors.aliyun.com/centos/ 这里选择了7.9.2009版本:https://mirr…...

使用VisualStudio制作上位机(五)

文章目录 使用VisualStudio制作上位机(五)第四部分:GUI界面数据显示使用VisualStudio制作上位机(五) Author:YAL 第四部分:GUI界面数据显示 这一部分,主要实现GUI的界面显示。 上一文已经实现了CAN数据的接收,并将数据更新到数组里。所以在做界面的显示时,只需要在…...

ChatGPT在医疗领域可应用于改善与患者的沟通

注意:本信息仅供参考,发布该内容旨在传递更多信息的目的,并不意味着赞同其观点或证实其说法。 自从ChatGPT在2022年末对公众开放以来,OpenAI的这款生成式AI聊天机器人在医疗领域展示出了巨大潜力。它已经通过了美国医学执照考试&a…...

直播预告|博睿学院第四季即将开讲:博睿数据资深运维团队现身说法!

博睿学院第四季开讲啦!本季博睿学院的课程将于本周四(8月31日)16点正式启动。本季我们邀请到了博睿数据平台支撑中心的四位资深运维专家现身说法,来为我们分享一体化智能可观测平台Bonree ONE的实践干货。 他们,见多识…...

端到端自动驾驶综述

End-to-end Autonomous Driving: Challenges and Frontiers 文章脉路 Introduction 从经典的模块化的方法到端到端方法的一个对比, 讲了各自的优缺点, 模块化的好处是各个模块都有自己明确的优化的目标, 可解释性较强, 且容易debug, 缺点是各个模块优化的目标并不是最终的驾…...

mysql索引、事务、存储引擎

一、索引 索引的概念: 索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。使用索引后可以不用扫描全表来定位某行的数据,而是…...

【CMU15445】Fall 2019, Project 2: Hash Table 实验记录

目录 实验准备实验测试 实验准备 官方说明:https://15445.courses.cs.cmu.edu/fall2019/project2/ 实验测试 Task 1: mkdir build cd build make hash_table_page_test ./test/hash_table_page_testTask 2: make hash_table_test ./test…...

PMP证书是不是烂大街了?

大家都知道,PMP证书是项目管理领域的金字招牌。近年来,随着项目管理的重要性日益凸显,越来越多的人开始关注和学习PMP证书。无论是企业招聘还是个人职业发展,PMP证书都成为了一张炙手可热的敲门砖。 那么,PMP证书到底…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

ios苹果系统,js 滑动屏幕、锚定无效

现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...