[现代操作系统] I/O之硬件原理

操作系统I/O结构详解:从硬件机制到四种控制方式与性能优化 操作系统性能往往受制于CPU与外设之间的速度鸿沟,而I/O结构正是解决这一矛盾的关键机制。从设备控制器、端口到中断处理,从轮询、中断驱动到DMA与通道,每一层设计都在平衡效率与开销。理解I/O软件分层与缓冲调度,不仅能解释文件系统和设备驱动的工作方式,更是应对操作系统面试与考研高频考点的核心基础。本文系统拆解I/O硬件与软件架构,剖析四种控制方式的取舍,并展示一次完整读写路径中的实际工程问题。 阅读详情

I/O 硬件原理

I/O 设备

块设备 (block device)

把信息存储在固定大小的块中, 每个块都有自己的地址. 每个块可以独立于其他块读写. 如 硬盘, CD-ROM , USB 盘 …

字符设备 (character device)

字符设备以字符为单位发送或接收一个字符流, 而不考虑任何块结构. 它是不可寻址的.
如打印机, 网络接口, 鼠标 (用作指点设备)…

设备控制器 (device controller / adapter)

I/O 设备一般由两部分组成: 机械部分和电子部分.
电子部分就是设备控制器. 常以插入 (PCI) 扩展槽中的印刷电路板的形式出现.

控制器与设备之间的接口是很低层次的接口. 它的任务就是把串行的位流转换为字节块, 并进行必要的错误校正.

内存映射 I/O

每个控制器有几个寄存器, OS 可以读写来了解, 更改设备的状态信息. 控制器还有 OS 可以读写的 数据缓冲区.

问题来了: CPU 如何与设备的控制寄存器和数据缓冲区通信.

方案

  • 方法一: 每个控制寄存器被分配一个 I/O 端口 (所有端口形成端口空间, 受保护不被普通用户访问). 然后可以设置指令来读写,
    如 IN REG, PORT将读取控制器寄存器 PORT 中的内容到 CPU 寄存器 REG

  • 方法二: 内存映射 I/O. 将所有控制寄存器映射到内存空间, 都被分配唯一的地址, 且这些内存地址不会再分配.

工作原理

CPU 读入一个字时, 不论是从内存还是 I/O 端口, 都将目的地址放在总线的地址线上, 总线控制线置 READ 信号看. 还要用一条线表明是 I/O 空间 还是内存空间. 如果是 I/O 空间, I/O 设备将响应请求.

优点

  • 如果需要特殊的 I/O 指令读写设备控制寄存器, 那么访问这些寄存器需要使用汇编代码, 调用这样的过程需要增加开销,
    对于 ` 内存映射 I/O , 设备控制寄存器只是内存中的变量, 和其他变量一样寻址, 可以直 C 语言编写驱动程序

  • 对于内存映射 I/O , 不需要特殊的保护机制来阻止用户进程执行 I/O 操作. 操作系统只需注意不要将内存映射的地址映射到用户虚拟地址空间. 更有利的是, 如果有多个设备, 可以将内存映射 I/O 映射到不同的页, 可以分配特定的页给用户, 使其使用驱动程序, 而且不担心各驱动程序之间的影响

缺点

  • 不能对设备控制器的寄存器进行 cache, 因为设备的状态改变, 软件将没有办法发现. 所以硬件必须对每个页面具备选择性的禁用 chche. 增加了复杂性

  • 在内存映射机器上, 具有单独的内存总线会使 I/O 设备没有办法查看内存地址, 因为内存地址旁路到内存总线上, 没有办法响应.

DMA(直接存储器存取, Direct Memory Access)

独立于 CPU 访问系统总线

工作原理

也就是不用浪费 CPU 处理缓冲区到内存的时间, 相当于另有一个” CPU ” 专门处理 磁盘 到 内存 的 I/O

对 CPU 的延迟

周期窃取 (Cycle Stealing)

注意 上面的操作是字模式传送, 在 DMA 请求传送一个字并且得到这个字时, CPU 不能使用总线, 必须等待.

突发模式 (burst mode)

上面是字传输模式, 对于块模式下的传送, DMA 会发起一连串的传送, 然后才释放总线. 这比周期窃取效率更高.

上面 的模式是飞越模式(fly-by mode), 即 DMA 控制器直接通知设备控制器将数据传送到 主存, 只请求一次总线

某些 DMA 使用其他模式. 让设备控制器将字发送到 DMA, 然后 DMA 再 请求总线将数据发送到其他地方 (其他设备, 主存…), 这样会多消耗一个总线周期, 但是更加灵活: 可以 设备->设备, 内存->内存(内存读, 然后 内存写)

不使用 DMA 的考虑:
* CPU 比 DMA 快得多, 当限制因素不是 I/O 设备的读写速度时, 没必要使用 DMA
* 去除 DMA 而用 CPU 使用软件做所有工作可以节省硬件的开销

中断

当一个 I/O 设备完成 jcgz 它的工作后, 它就产生一个中断, 通过在分配给它的一条总线信号线上置起信号.
中断

如果有多个中断请求, 按优先级, 如果还没有被处理, 设备一直发出中断知道得到 CPU 服务

中断控制器通过在地址先上放置一个数字(中断向量 interrupt vector)表明哪个设备需要关注, 同时向 CPU 发出中断

中断信号导致 CPU 停止当前工作, 并处理其他事情. 根据中断向量跳转到需要的中断服务程序

问题

开始中断服务之前, 硬件需要保存信息

哪些信号需要保存?

至少程序计数器, 至多可见的寄存器, 一些内部寄存器…

保存在哪里?
  • 如果放在内部寄存器, 那么中断控制器之后无法得到应答, 知道所有可能的相关信息被读出, 以免第二个中断重写内部寄存器保存状态. 这样在中断被禁止时将导致长时间的死机, 并可能丢失中断和数据
  • 如果在堆栈中, 使用谁的堆栈?
    • 如果使用当前堆栈, 可能是用户进程的, 堆栈指针可能是不合法的.
    • 可能指向一个页面的末端, 若干次内存写之后, 可能超出页面发生页面故障. 那么在何处保存状态以处理页面故障?
    • 如果用内核堆栈. 切换到和心态可能要求改变 MMU 上下文, 并且可能使 cache 和 TLB 的大部分失效. 静态地或动态地重新状态所有东西将增加处理一个中断的时间, 因而浪费 CPU 的时间
谁来保存?

对谁可见就谁来保存

考虑流水线, 超标量 (内部并行)

在流水线满的时候, 如果出现一个中断, 由于许多指令处于不同的正在执行的截断. 程序计数器可能无法正确反应已经执行的指令和未执行之间的边界.
在超标量机器上, 指令可能分解成微操作, 为操作可能乱序执行
* 精确中断 (precise interrupt): 将机器留在一个明确状态

  • 不精确中断 (imprecise interrupt)
    不满足上面的条件
操作系统核心原理与实现技术课件合集 操作系统(Operating System, OS)是计算机硬件与用户之间的中间层,负责管理系统资源、调度任务执行、提供硬件抽象接口及支持多用户并发操作。其核心职能包括进程管理、内存分配、文件存储控制与设备驱动,通过系统调用接口为应用程序提供统一服务。在冯·诺依曼体系结构中,OS位于硬件之上,屏蔽底层复杂性,使开发者无需直接操作物理设备即可实现高效编程。进程可以被形式化地定义为:一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统进行资源分配和调度的基本单位。 阅读详情

相关推荐

【转】国产PLC学习套件,附CPU板和IO板原理图/PCB图/BOM-电路方案

附件内容分享的是阿莫某网友的最终版PLC学习套件,见附件下载其原理图和PCB源文件。这个是开源PLC学习套件,目的是让大家学习和理解PLC运行内核。设计资料仅供学习参考。附件内容截图:

分布式Profinet IO模块

PROFINET IO模块通常是面向过程的,可以用于监测和控制工业过程中的各种设备和参数,如传感器、阀门、运动控制器等。3. 大量数据传输:PROFINET IO模块可以进行大量的数据传输,包括过程数据、状态数据、控制指令等,从而实现控制系统对生产过程的全面监测和控制。2. 精确控制:PROFINET IO模块可以控制和监测各种设备和参数,如传感器、阀门、电机等,实现对工业过程的精确控制。6. 安全性和稳定性:PROFINET IO模块具有高度的安全性和稳定性,能够保障数据的安全和系统的稳定性。

963

C#实现串口通讯程序

1、自动获取本地串口。2、根据传入串口基本属性参数打开串口。3、串口数据的发送接收功能(ASCII和HEX格式)。4、ASCII和HEX相互转换。csharp体验AI代码助手代码解读复制代码[Category("UserProperty")] [Description("轮廓半径")] public int Radius { get => radius;

2401_89221445的博客 1765

PROFINET分布式I/O总线模块的优势有哪些?

Profinet协议是基于工业以太网的一种工厂自动化的通信标准。它包括了诸如科迎法的多协议I/O模块系统和控制器,以及带Profinet主控制器之间的整个数据交换。Profinet有哪些优势呢? 灵活的网络拓扑结构 PROFINET I/O设备配备集成交换机,并且可安装在线性结构(如经典的现场总线系统)中。 此外,PROFINET还支持标准的以太网拓扑结构,如星形、树形和环形结构。像这样的网络安装可以很容易地适应机器和工厂结构。星形或树形结构中使用了外部交换机,这反过来对整个系统的性能产生了积极.

3359

fMRI脑影像特征提取——静息态与任务态,ALFF/fALFF和ReHo(Dpabi,Rest1.8)

任务态和静息态是大脑的两种状态,前者主要是指大脑在执行记忆、识别以及运动等具体任务时的状态,静息态则是指大脑不执行具体认知任务、保持安静、放松、清醒时的状态,是大脑所处的各种复杂状态中最基础和最本质的状态。任务态fMRI分析有非常悠远的历史,而静息态fMRI自1995年biswal教授及其同事率先报告静息态fMRI具有生理意义后,越来越多的人进入了静息态的研究领域。任务态fMRI主流的分析方法是模型驱动(GLM+HRF),也可以引用静息态fMRI

意疏的学习笔记 6万+

SPSS回归分析(线性:一元(简单)和多重;非线性logistic)

SPSS线性回归分析回归分析一、线性模型(针对连续因变量,线性关系)(一)简单线性回归(一元线性回归)1、绘制散点图2、建立简单(一元)线性回归模型3、建立模型后,检查预测结果(二)多重回归分析1、绘制矩阵分布散点图(论文专用你懂的)2、建立多重回归模型point 1:自变量加入方法:逐步(步进)法3、建立模型后,检查预测结果二、非线性模型(将非线性问题转换为线性问题)1、logistic分析的回归模型1.1 建立回归模型1.2 利用回归模型进行预测 根据之前的学习,通过评价实验得到了主观数据, 通过 描述

weixin_44394352的博客 5万+

操作系统-计算机网络-让我们,从头到尾,通透网络IO模型(多路复用 select poll epoll等)

用一幅图来小结一下建连的操作:connect:需要阻塞等待三次握手的完成。accept:需要等待可用的已完成的连接,如果已完成连接队列为空,则被阻塞。因为建连和通信涉及到的 accept、connect、read、write 这几个方法都可能会发生阻塞。阻塞会占用当前执行的线程,使之不能进行其他操作,并且频繁阻塞唤醒切换上下文也会导致性能的下降。

S_ZaiJiangHu的博客 1277

编码约定的自由度:重新思考Hamming码在实际工程中的灵活应用

本文探讨Hamming码在实际工程中的灵活应用,突破标准实现的思维定式。通过分析不同编码约定的优缺点和资源受限环境下的设计权衡,展示如何根据嵌入式系统、通信协议等具体需求定制汉明码实现,优化编解码效率并降低硬件开销。

perl8的博客 177

计算机组成原理(输入输出系统-----I/O接口)

通过I/O接口进行协调主机与外部设备之间的数据传输;

yyzhjs的博客 613

LabVIEW安装NI-DAQmx的方法(适合2021版和2022版)

LabVIEW安装NI-DAQmx的方法(适合2021版和2022版)

qq_65101190的博客 2万+

基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端

【代码】基于 ESP32-CAM 与 TinyML 的食堂餐盘自动识别与营养分析终端。

weixin_42300449的博客 165

IO的详细介绍

IO是输入input输出output的首字母缩写形式,直观意思是计算机输入输出,它描述的是计算机的数据流动的过程,因此IO第一大特征是有数据的流动;另外,对于一次IO,它究竟是输入还是输出,是针对不同的主体而言的,不同的主体有不同的描述。例如,甲乙两人交谈,甲将大脑中的想法通过声带震动,继而通过声波传入乙的耳朵,乙通过耳膜的震动再由神经将信号解析到大脑,这个数据流动的过程对甲而言是输出,对乙而言是输入。因此,理解IO一定要弄清楚所要研究的本体。学习的目的就是为了将数据存储以及对于文件的操作。

lhd_lhd_lhd的博客 3630

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码

天天酷科研的博客 239

【现代操作系统】之I/O硬件原理

什么是I/O硬件原理 不同人对I/O的理解是不同的,对于电子工程师而言,I/O硬件就是芯片,导线,电源,电机和其它组成硬件的物理部件。对程序员而言,I/O是一种软件接口,他们关心的是硬件可以接受的命令和怎样向硬件发出命令,以及硬件返回的信息和完成的功能。 I/O设备 I/O设备大致可分为两类:块设备和字符设备。 块设备:信息被存储在固定大小的块中,每个块都有自己的地址,数据传输以块为单位。硬盘、C...

Shijia Yin 1311

第39步 深度学习图像识别:Inception V3建模(Tensorflow)

第39步 深度学习图像识别:Inception V3建模(Tensorflow)

Jet4505的博客 3167

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

吉林大学 现代操作系统 期末复习 第五章 输入/输出

当然,在低级初始化时,可能会进行柱面斜进,因为每次进行连续读取时,当前磁道读完了,可能需要读取下一个磁道,如果磁道起始终止位置一样的话,那么大概率在把磁头移过去时,第0号扇区已经过去了,因为移动磁头需要时间。当控制器读取到扇区上的数据时,进行ECC校检之后,会把数据写回到主存,这个过程需要时间,所以可能下一个扇区就在磁头下溜走了,所以可以错开一个存放,给控制器一点时间,或者错开两个,前者是单交错,后者是双交错。一般来说,0号分区是主引导记录,现代操作系统也支持GPT,即GUID分区表,以实现更大的分区。

weixin_61197809的博客 1192

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

现代操作系统 第五章 IO输入/输出

IO 输入/输出 IO 硬件设备 IO的硬件对于不同的人立即方式是不同的,对于电子工程师:IO硬件就是芯片,导线,电源,电机和其他组成硬件的物理部件; 对程序员而言:注意IO硬件提供给软件的接口,如硬件能够接受的命令,能够实现的功能以及它能够报告的错误 I/O设备 I/O设备大致可以分为两类:块设备(block device)和字符设备(character device)。 块设备的基本特征是每个块都能独立于其他块而读写。 字符设备以字符为单位发送或接收一个字符流,而不考虑任何块结构。 设备控制器 I/O设

qq_29498749的博客 1630

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

操作系统I/O子系统全解:从设备控制器到io_uring的性能优化指南

在计算机系统中,I/O性能往往是应用整体吞吐与延迟的关键瓶颈。操作系统通过设备控制器、中断、DMA等机制协调CPU与硬件的数据传输,并借助系统调用、虚拟文件系统、页缓存和I/O调度器构建起完整的软件栈。理解阻塞、非阻塞、I/O多路复用及异步I/O等模型,有助于工程师在高并发网络服务和存储场景中做出合理设计。实际性能分析时,iostat、pidstat等工具配合对设备队列、脏页、中断分布等现象的观察,能够帮助定位瓶颈并采取有效优化策略。作为现代异步I/O的重要实现,io_uring通过共享环形队列大幅减少系统

weixin_33393017的博客 268

【现代操作系统】第一章:引论

【现代操作系统】第一章:引论∑ 标签(空格分隔):【现代操作系统】 第一章:引论 操作系统:为用户程序提供一个更清晰的计算机模型,并管理输入/输出设备。 用户与之交互的程序,如果基于文本通常称为shell,如果基于图标则称为图形用户界面(GUI,Graphical User Interface). 每个人都会对诸如Windows,Linux,macOS等操作系统有所体验,但这些交互是很肤...

grefwfdxz 550

操作系统恐龙书第十版课后习题精解:I/O管理与设备控制实战剖析

本文深入剖析了操作系统经典教材《操作系统概念》(恐龙书)中关于I/O管理与设备控制的课后习题。通过探讨设备控制器功能划分、中断与轮询策略、DMA机制以及用户程序与内核的I/O协作等核心问题,揭示了I/O子系统作为连接软硬件的关键桥梁,其设计如何深刻影响系统性能与稳定性,为理解现代操作系统底层原理提供了实战视角。

h6j7k8l9p0的博客 418

现代操作系统笔记(一)

引论什么是操作系统编辑器语法新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 什么是操作系统 操作系统作用:管理硬件设备并为用户程序提供一个到硬件的接口。 硬件:物理设备、微体系结构 编辑器语法 你好! 这是你第一次使用 M

chuhongwei1的博客 289

操作系统概述

现代操作系统由CPU,Memory,I/O设备等构成1.操作系统概念2. CPU:从内存中提取指令并执行2.2 CPU的组成部件2.3.组织形式2.4.CPU的两种模式3.内存3.1 缓存3.1.1缓存系统需要解决的问题3.1.2两种缓存3.2 主存3.3虚拟内存4.进程4.1 进程4.1.1 概念4.1.2 地址空间4.1.3 线程5. I/O设备5.1设备控制器5.1.1 设备驱动程序5.2 实现输入和输出的方式5.2.1 忙等待(busy waiting)5.2.2 中断5.2.3 DMA 1.操作系

weixin_43188143的博客 193

现代操作系统第一章学习笔记

操作系统:他的任务是为应用程序提供一个更好、更简单、更清晰的计算机模型,并管理贮存、磁盘等所有设备。计算机系统总的来说分为软件和硬件,如下图所示。多数计算机有两种运行模式:内核态和用户态。软件中最基础的部分是操作系统, 它运行在内核态。操作系统具有对所有硬件的完全访问权限,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态,只能使用部分机器指令。特别指出,那些会影响机器的控制或可进行I/O操作的指令,在用户态中的程序是禁止的。无法直接运行指令,则只能通过操作系统提供的接口来达到目的。

陌养的编程之路 447

现代操作系统读书笔记

引论 计算机硬件简介 处理器: 1,寄存器:通用寄存器、程序计数器、堆栈指针、程序状态字寄存器(PSW) 2,模型:流水线模型(缺点:一旦一条指令被取进流水线中,它就必须被执行完毕),超标量CPU(这种设计有多个执行单元,这种模型隐含的一个缺点是指令有可能不按顺序执行) 3,模式:多数CPU都有两种模式:内核态和用户态 4,多线程和多核芯片:多线程允许CPU保持两个不同的线程状态,然后在纳秒级...

AndyLee_X的博客 393

Linux操作系统原理

                        Linux操作系统原理                                           作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。   一.计算机经历的四个时代 1.第一代:   真空管计算机,输入和输出:穿孔卡片,对计算机操作起来非常不便,做一件事可能需要十几个人去共同去完成,年份大概是:1945-1955...

weixin_34232363的博客 923

[操作系统]操作系统V01:基础原理

本文系统阐述了操作系统的基础原理,包括其核心功能与架构。主要内容涵盖:操作系统的角色定位与内核架构设计;进程线程管理与CPU调度算法;虚拟内存管理机制;文件系统与I/O管理;并发同步与死锁处理;以及安全保护机制。通过分析进程状态转换、存储层次结构和调度算法等关键技术,揭示了操作系统如何实现硬件资源抽象与管理。文章配有4个示意图和3个技术对比表,为理解现代操作系统的设计原理提供了系统的理论框架。

TechEdu2026的博客 378
上一篇: [现代操作系统] 操作系统引论
下一篇: [现代操作系统] I/O 软件
mbinary
博客等级 码龄9年 39粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值