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

操作系统---I/O核心子系统与磁盘

文章目录

  • 1. I/O核心子系统
    • 1.1 I/O调度
    • 1.2 设备保护
    • 1.3 假脱机技术(SPOOLing技术)
      • 1.3.1 什么是脱机技术
      • 1.3.2 假脱机技术的原理
      • 1.3.3 共享打印机原理
      • 1.3.4 总结
    • 1.4 设备的分配与回收
      • 1.4.1 考虑的因素
      • 1.4.2 静态分配和动态分配
      • 1.4.3 设备分配管理中的数据结构
        • Ⅰ 设备控制表
        • Ⅱ 控制器控制表
        • Ⅲ 通道控制表
        • Ⅳ 系统设备表
        • Ⅴ 梳理
      • 1.4.4 设备分配的步骤
      • 1.4.5 设备分配步骤的改进
      • 1.4.6 总结
    • 1.5 缓冲区管理
      • 1.5.1 何为缓冲区?有何作用?
      • 1.5.2 缓冲策略
        • Ⅰ 单缓冲
        • Ⅱ 双缓冲
        • Ⅲ 单/双缓冲在通信时的区别
        • Ⅳ 循环缓冲区
        • Ⅴ 缓冲池
      • 1.5.3 总结
  • 2. 磁盘
    • 2.1 磁盘的结构
    • 2.2 磁盘调度
      • 2.2.1 一次磁盘读/写操作需要的时间
      • 2.2.2 磁盘调度算法
        • Ⅰ 先来先服务(FCFS)
        • Ⅱ 最短寻找时间优先(SSTF)
        • Ⅲ 扫描算法(SCAN)
        • Ⅳ 循环扫描算法(C-SCAN)
      • 2.2.3 总结
    • 2.3 减少延迟时间的方法
      • 2.3.1 具体方法
      • 2.3.2 磁盘地址结构的设计
      • 2.3.3 总结
    • 2.4 磁盘的管理
      • 2.4.1 磁盘初始化
      • 2.4.2 引导块
      • 2.4.3 坏块的管理
      • 2.4.4 总结
    • 2.5 固态硬盘(SSD)
      • 2.5.1 内部结构
      • 2.5.2 重点记忆
      • 2.5.3 理想情况下,固态硬盘的寿命

1. I/O核心子系统

在这里插入图片描述

1.1 I/O调度

  • 所谓I/O调度,即:用某种算法来确定一个好的顺序来处理各个I/O请求
  • 如:各种磁盘调度算法(下节介绍),当多个磁盘I/O请求到来时,用某种调度算法确定满足I/O请求的顺序
  • 同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/O调度顺序

1.2 设备保护

  • 操作系统实现了文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)
  • 在一些操作系统中,设备被看做是一种特殊的文件,每个设备也会有其对应的FCB。当用户请求访问某个设备时,系统根据FCB中的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能
  • 简单概括,用文件保护的方式来实现设备保护

1.3 假脱机技术(SPOOLing技术)

在这里插入图片描述

1.3.1 什么是脱机技术

  • 手工操作阶段,主机直接从I/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备,如下:

在这里插入图片描述

  • 于是在批处理阶段,引入了脱机输入/输出技术(用磁带完成)

在这里插入图片描述

  • 引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁盘;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁盘
  • Tips:为什么称为“脱机” — — 脱离主机的控制进行的输入/输出操作

1.3.2 假脱机技术的原理

  • 虽然脱机技术能缓解CPU与慢速I/O设备的速度矛盾,但其需要额外的物理设备(如磁盘)以及繁琐的操作,于是人们就引入了假脱机技术,使其能仅在一台计算机内就实现内外I/O操作
  • 假脱机技术,又称SPOOLing技术,是用软件的方式模拟脱机技术。

SPOOLing系统由输入和输出井输入和输出进程以及输入和输出缓冲区组成,除了输入和输出井是在磁盘上,其余都是在内存上,具体如下:

在这里插入图片描述

SPOOLing技术与脱机技术的对应关系:

在这里插入图片描述

1.3.3 共享打印机原理

在这里插入图片描述

  • 总结来说,就是在磁盘的输出井内,为每个要使用打印机资源的用户进程各自开辟一部分空间,用于存储其各自要打印的数据(这就是逻辑上虚拟成多台设备),此时打印机对于用户进程的请求都是同意的,于是欺骗了进程,也就是欺骗了用户,从而实现共享

1.3.4 总结

在这里插入图片描述

1.4 设备的分配与回收

在这里插入图片描述

1.4.1 考虑的因素

在这里插入图片描述
固有属性可分三种:独占设备、共享设备、虚拟设备

  • 独占设备 — — 一个时段只能分配给一个进程(如打印机)
  • 共享设备 — — 可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用
  • 虚拟设备 — — 采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用SPOOLing技术实现的共享打印机)

分配算法:先来先服务、优先级高者优先、短任务优先

从安全性上考虑,设备分配有两种方式:
在这里插入图片描述

1.4.2 静态分配和动态分配

  • 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源(破坏了“请求和保持”条件,不会发生死锁)
  • 动态分配:进程运行过程中动态申请设备资源(可能发生死锁)

1.4.3 设备分配管理中的数据结构

在这里插入图片描述

Ⅰ 设备控制表

设备控制表(Device Control Table — — DCT):系统为每个设备配置一张DCT,用于记录设备情况

在这里插入图片描述

Ⅱ 控制器控制表

控制器控制表(Controller Control Table — — COCT):每个设备控制器都会对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理

在这里插入图片描述

Ⅲ 通道控制表

通道控制表(Channel Control Table — — CHCT):每个通道都会对应一张CHCT,操作系统根据CHCT的信息对通道进行操作和管理

在这里插入图片描述

Ⅳ 系统设备表

系统设备表(System Device Table — — SDT):记录了系统中全部设备的情况,每个设备对应一个表目

在这里插入图片描述

Ⅴ 梳理

在这里插入图片描述

1.4.4 设备分配的步骤

    1. 根据进程请求的物理设备名查找SDT(注:物理设备名是进程请求分配设备时提供的参数)
    1. 根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程
    1. 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
    1. 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程

注意:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送

在这里插入图片描述
缺点:

    1. 用户编程必须使用“物理设备名”,底层细节对用户步透明,不方便编程
    1. 若换了一个物理设备,则程序无法运行
    1. 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待

改进:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名

1.4.5 设备分配步骤的改进

  • 逻辑设备表(LUT)建立了逻辑设备名与物理设备名之间的映射关系
  • 某用户进程第一次使用设备时使用逻辑设备名向操作系统发出请求,操作系统根据用户进程指定的设备类型(逻辑设备名)查找系统设备表,找到一个空闲设备分配给进程,并在LUT中增加相应表项
  • 如果之后用户进程再次通过相同的逻辑设备名请求使用设备,则操作系统通过LUT表即可知道用户进程实际要使用的是哪个物理设备了,并且也能知道该设备的驱动程序入口地址

在这里插入图片描述

1.4.6 总结

在这里插入图片描述

1.5 缓冲区管理

在这里插入图片描述

1.5.1 何为缓冲区?有何作用?

  • 缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区
  • 使用硬件作为缓冲区成本较高容量也较小,一般仅用在对速度要求非常高的场合(如内存管理中所用的联想寄存器 — — 快表,由于对页表的访问频率极高,因此使用速度很快的快表来存放页表项的副本)
  • 一般情况下,更多的是用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区

在这里插入图片描述

1.5.2 缓冲策略

前提引入:

    1. 无论是哪种缓冲策略,当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。若题目没有特别说明,一个缓冲区的大小就是一个块
    1. 常考题型:计算每处理一块数据平均需要多久?
    1. 技巧:假定一个初始状态,分析下次到达相同状态需要多少时间,这就是处理一块数据平均所需时间
    1. 工作区:用户进程的内存空间中,会分出一片工作区来接受输入/输出数据(一般也默认工作区大小与缓冲区相同)
Ⅰ 单缓冲

采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区,如下所示:

在这里插入图片描述
假定初始状态:工作区满,缓冲区空

① 当 T > C(输入 > 处理)时,此时处理一块数据平均用时 = T + M

在这里插入图片描述

② 当 T < C(输入 < 处理)时,平均用时 = C + M

在这里插入图片描述

综上:采用单缓冲策略,处理一块数据平均耗时为 Max(C,T)+ M

Ⅱ 双缓冲

采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区,如下所示:

在这里插入图片描述

假定初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空

① 当 T > C + M(输入 > 处理 + 传送),平均用时 = T

在这里插入图片描述
② 当 T < C + M (输入 < 处理 + 传送),平均用时 = C + M

在这里插入图片描述
综上:采用双缓冲策略,处理一个数据块的平均耗时为 Max(T,C + M)

Ⅲ 单/双缓冲在通信时的区别

单缓冲:

在这里插入图片描述
双缓冲:

在这里插入图片描述

Ⅳ 循环缓冲区

在这里插入图片描述

Ⅴ 缓冲池
  • 缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)
  • 另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据(hin)、用于提取输入数据(sin)、用于收容输出数据(hout)、用于提取输出数据(sout)

在这里插入图片描述
有四种情况:

    1. 输入进程请求输入数据

在这里插入图片描述

    1. 计算进程想要取得一块输入数据

在这里插入图片描述

    1. 计算进程想要将准备好的数据冲入缓冲区

在这里插入图片描述

    1. 输出进程请求输出数据

在这里插入图片描述

1.5.3 总结

在这里插入图片描述

2. 磁盘

在这里插入图片描述

2.1 磁盘的结构

在这里插入图片描述

2.2 磁盘调度

在这里插入图片描述

2.2.1 一次磁盘读/写操作需要的时间

在这里插入图片描述

综上,操作系统只能通过控制寻道时间(利用不同的磁盘调度算法)来影响一次磁盘I/O的时间

2.2.2 磁盘调度算法

Ⅰ 先来先服务(FCFS)

FCFS:根据进程请求访问磁盘的先后顺序进行调度

在这里插入图片描述

Ⅱ 最短寻找时间优先(SSTF)

SSTF:优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能保证总的寻道时间最短。(贪心算法的思想,只是选择眼前最优,但是总体未必最优)

在这里插入图片描述

Ⅲ 扫描算法(SCAN)

SSTF会产生饥饿的原因在于:磁头有可能在一个小区域内循环往复地移动。为了防止这个问题,引入了SCAN算法。

SCAN:只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内测磁道的时候才能往外移动。由于磁头移动的方式很像电梯,因此也叫电梯算法

在这里插入图片描述

改进 — — LOOK调度算法:

在这里插入图片描述

Ⅳ 循环扫描算法(C-SCAN)

SCAN算法对于各个位置磁道的响应频率不平均,于是引入了C-SCAN算法

C-SCAN:规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求

在这里插入图片描述

改进 — — C-LOOK调度算法:

在这里插入图片描述

2.2.3 总结

在这里插入图片描述

2.3 减少延迟时间的方法

在这里插入图片描述

2.3.1 具体方法

① 交替编号:

在这里插入图片描述

② 错位命名:

在这里插入图片描述

2.3.2 磁盘地址结构的设计

在这里插入图片描述

2.3.3 总结

在这里插入图片描述

2.4 磁盘的管理

在这里插入图片描述

2.4.1 磁盘初始化

在这里插入图片描述

2.4.2 引导块

在这里插入图片描述

2.4.3 坏块的管理

在这里插入图片描述

2.4.4 总结

在这里插入图片描述

2.5 固态硬盘(SSD)

2.5.1 内部结构

在这里插入图片描述
在这里插入图片描述

2.5.2 重点记忆

在这里插入图片描述

2.5.3 理想情况下,固态硬盘的寿命

在这里插入图片描述
至此,操作系统完结撒花!!!

参考:《王道计算机考研 操作系统》
bilibili: https://www.bilibili.com/video/av70156862

http://www.dtcms.com/a/267393.html

相关文章:

  • Linux操作系统之文件(四):文件系统(上)
  • pyspark大规模数据加解密优化实践
  • NVMe高速传输之摆脱XDMA设计13:PCIe初始化状态机设计
  • 2025 Centos 安装PostgreSQL
  • Java类变量(静态变量)
  • LangChain:向量存储和检索器(入门篇三)
  • 【Qt】qml组件对象怎么传递给c++
  • appnium-巨量测试
  • LVGL移植(外部SRAM)
  • ESP32-S3开发板播放wav音频
  • 应急响应靶机-linux1-知攻善防实验室
  • 介绍electron
  • 若依学习笔记1-validated
  • Qt工具栏设计
  • Tensorboard无法显示图片(已解决)
  • 编程中的英语
  • CHAIN(GAN的一种)训练自己的数据集
  • Ubuntu基础(监控重启和查找程序)
  • 【Elasticsearch】深度分页及其替代方案
  • 基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现
  • .NET9 实现排序算法(MergeSortTest 和 QuickSortTest)性能测试
  • Redis--黑马点评--基于stream消息队列的秒杀优化业务详解
  • 升级到MySQL 8.4,MySQL启动报错:io_setup() failed with EAGAIN
  • 每日算法刷题Day42 7.5:leetcode前缀和3道题,用时2h
  • Node.js worker_threads:并发 vs 并行
  • 洛谷刷题9
  • 如何在idea里快速地切换Windows CMD、git bash、powershell
  • 谷物干燥的滚筒式烘干机的设计cad【11张】三维图+设计说明书+绛重
  • LinkedList剖析
  • OneCode 图表组件核心优势解析