news 2026/4/18 2:59:24

工作原理:在 I/O 系统中引入一个缓冲区,用于协调速度不匹配的设备与用户进程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工作原理:在 I/O 系统中引入一个缓冲区,用于协调速度不匹配的设备与用户进程

一、单缓冲技术
工作原理:在 I/O 系统中引入一个缓冲区,用于协调速度不匹配的设备与用户进程。数据首先从 I/O 设备传入系统缓冲区(T),然后复制到用户工作区(M),最后由用户进程进行处理(C)。
并行性优化:当处理多块数据时,当前数据块正在被用户进程处理的同时,下一块数据可以开始从设备输入到缓冲区,从而实现“处理”与“输入”的时间重叠,提高系统吞吐率。
时间分析:

  • 单块数据完成所需时间为 Max(C, T) + M(因为 C 和 T 可并行,取二者最大值,再加上数据从缓冲区传送到用户区的时间 M)。
  • 多块数据总时间 = Max(C, T) × n + M(第一块额外需要 M 时间填入缓冲区,后续可流水线执行)。

示例修正说明:若 C=10μs、T=6μs、M=2μs,则单块耗时为 Max(10,6)+2 = 12μs;10 块数据理想总时间为 10×10 + 2 = 102μs(原文中提到的162μs可能是基于不同的参数设定,如 T>C 或存在初始延迟等特殊情况)。

二、磁盘调度
调度背景:磁盘作为典型的共享存储设备,其 I/O 操作中最耗时的部分是机械移动带来的寻道时间(包括磁头移动和盘片旋转)。为提升性能,操作系统采用调度算法减少平均寻道时间。
调度层次:

  • 移臂调度(Seek Scheduling):决定磁头沿磁道移动的顺序,优先级高于旋转调度。
  • 旋转调度(Rotational Scheduling):等待目标扇区旋转至磁头下方,通常在移臂完成后进行。

常用调度算法对比:

算法核心逻辑优点缺点
先来先服务(FCFS)按请求到达顺序依次处理实现简单、公平、无饥饿现象寻道路径随机,平均寻道时间长
最短寻道时间优先(SSTF)选择距离当前磁头位置最近的请求执行显著减少寻道时间,响应快可能导致远处请求长期等待(饥饿问题)

扩展补充:其他常见算法还包括扫描算法(SCAN)、循环扫描(C-SCAN)、LOOK 和 C-LOOK,它们通过“电梯式”移动策略进一步平衡公平性与效率。

总结:单缓冲技术通过引入中间缓冲区实现了 CPU 计算与 I/O 操作的部分重叠,提升了系统资源利用率;而磁盘调度则通过智能排序 I/O 请求,有效降低机械延迟,两者都是操作系统 I/O 子系统设计中的关键优化手段。

在单缓冲技术中,处理时间(C)和传输时间(T)之所以可以部分并行,是因为CPU 和 I/O 设备是独立的硬件资源,操作系统通过引入缓冲区实现了“计算与 I/O 操作的时间重叠”。

一、为什么能并行?

  1. 硬件分离性

    • I/O 设备负责将数据从外部传送到内存中的缓冲区(耗时 T)。
    • CPU 负责从缓冲区取出数据并进行处理(耗时 C)。
    • 两者操作的对象不同:I/O 操作作用于缓冲区,CPU 操作作用于用户工作区或寄存器,因此可以在时间上重叠。
  2. 缓冲区作为中介

    • 当前一块数据被送入缓冲区后,系统可启动下一块数据的输入(由 DMA 或 I/O 控制器完成),同时 CPU 将前一块数据从缓冲区复制到用户区并处理(耗时 C 和 M)。
    • 因此,在 CPU 处理第 k 块数据的同时,I/O 设备正在将第 k+1 块数据传入缓冲区 —— 实现了计算与 I/O 的并发执行
  3. 操作系统调度支持

    • 操作系统通过中断机制感知 I/O 完成,并切换进程或唤醒等待缓冲区就绪的进程,从而协调两者的协作流程。

二、并行性的限制条件

尽管存在并行潜力,但实际能否实现有效并行受以下条件制约:

限制条件说明
缓冲区只有一个单缓冲只能存放一块数据。如果当前缓冲区正被 CPU 使用(处理中),则无法接收新数据;反之亦然。这导致当 C ≠ T 时,较慢的一方会阻塞另一方。例如:若 C > T,则 CPU 正在处理时,新的 I/O 必须等待缓冲区释放。
必须交替使用缓冲区缓冲区不能同时用于输入和处理。只有当一方完成对缓冲区的访问后,另一方才可使用。因此真正的“并行”仅体现在逻辑流程上,而非物理资源的同时占用。
最短周期受限于 Max(C, T)系统每处理一块数据所需的最小间隔为 Max(C, T) + M。因为无论哪一方快,都必须等慢的一方完成才能进入下一阶段。
无双缓冲支持若有双缓冲(两个缓冲区轮流使用),可进一步提升并行性,但在单缓冲下无法做到持续流水线运行。

举例说明:

假设 C = 10μs,T = 6μs,M = 2μs:

  • 第一块:先花 6μs 输入到缓冲区 → 再花 2μs 传送到用户区 → 最后花 10μs 处理 → 共 18μs。
  • 第二块:可在第一块“传送+处理”的前 6μs 内开始输入(即与 C 并行),但由于缓冲区仍被第一块占用,第二块输入只能在第一块处理完才开始?不对!

⚠️ 更正理解:
实际上,只有当第一块从缓冲区移出后(即 M 完成),缓冲区才空闲,第二块才能开始输入。所以第二块的输入起始时间为 T₁ + M = 6 + 2 = 8μs,而第一块处理结束于 6+2+10=18μs。
→ 在第 8~14μs 输入第二块(T=6μs),然后等待 CPU 处理。

此时发现:输入第二块用了 6μs,但 CPU 要等到 18μs 才空闲→ 出现“I/O 等待 CPU”现象。

结论:由于 C > T,CPU 成为瓶颈,I/O 设备利用率下降。并行并未完全发挥优势。

✅ 只有当T ≥ C时,I/O 时间长,CPU 可以及时处理完前一块,腾出缓冲区供后续使用,才能更好地隐藏 I/O 延迟。


总结

  • 能并行的原因:利用缓冲区解耦 I/O 与处理,借助 CPU 与设备的独立性实现时间重叠。
  • 限制条件
    1. 单缓冲只能交替使用;
    2. 后续 I/O 必须等待缓冲区释放;
    3. 实际吞吐率取决于 Max(C, T);
    4. 当 C 与 T 差异大时,并行效果受限。

要突破这些限制,可采用双缓冲环形缓冲结构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:59:01

【Unity】实现Quad瓦片(MeshRenderer)渲染图集图片

使用Mesh Renderer渲染图集图片,并保证图片不变形效果(采用GPU Instancing优化合批)创建一个Quad物体,材质Shader如下,将图集图片通过SpriteAtlas加载出来得到Sprite对象进行后面的传参操作即可进行渲染出图集图片。Te…

作者头像 李华
网站建设 2026/4/15 5:56:27

深度学习毕设项目:基于python-cnn深度学习的罗马数据集训练识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/16 10:13:33

计算机深度学习毕设实战-基于人工智能python深度学习的道路坑洼识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/11 12:56:12

FPGA应用开发和仿真【3.3】

7.1.4 离散量化信号的信噪比 不失一般性,考虑一个幅度为1、频率为1的正弦信号a(t)=sin(2πt),经过采样周期Ts的采样离散化之后,如果被DAC以零阶保持特性输出,将得到信号: 如果还经过分辨力δ的量化,取最接近的量化阶梯,将得到信号: 其中 符号表示取最接近自变量的…

作者头像 李华
网站建设 2026/4/13 15:59:45

深入解析HMAC:消息认证码的核心原理

好的!我们来对 HMAC(Hash-based Message Authentication Code,基于哈希的消息认证码) 进行一次全面、深入且结构清晰的详解。 HMAC 是现代密码学和网络安全中确保数据完整性与身份认证的核心工具。它不是用来加密数据的&#xff…

作者头像 李华
网站建设 2026/4/13 9:48:34

【课程设计/毕业设计】基于python机器学习的苹果和西红柿识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华