嵌入式学习之Linux驱动:IO模型(1)概览

news2025/7/9 14:32:47

文章目录

  • 什么是IO呢?
  • IO执行过程
  • IO模型引入
  • IO模型的种类
    • 阻塞IO
    • 非阻塞IO
    • IO多路复用
    • 信号驱动IO
    • 异步IO

什么是IO呢?

IO的英文全称是input和output,翻译过来就是输入和输出。
在冯诺依曼结构中,将计算机分成为5个部分:运算器、控制器、存储器、输入设备、输出设备。其中输入设备指的是向计算机输入数据或信息,如鼠标,键盘都是输入设备。输出设备指的是用于接收计算机输出信息的设备,如电脑显示器。
在这里插入图片描述

IO执行过程

操作系统(Linux)负责对计算机的资源进行管理,应用程序运行在操作系统上,处在用户空间。应用程序不能直接对硬件进行操作,只能通过操作系统提供的API来操作硬件。

所以当我们在进行IO操作的时候,如读写磁盘的操作,进程需要切换到内核空间才可以执行这样的操作。并且应用程序不能直接操作内核空间的数据,需要把内核空间的数据拷贝到用户空间。

一个完整的IO过程包含以下几个步骤:

  1. 应用程序向操作系统发起IO调用请求(系统调用)。
  2. 操作系统准备数据,把IO的数据加载到内核缓冲区。
  3. 操作系统拷贝数据,把内核缓冲区的数据从内核空间拷贝到用户/应用空间。

IO模型引入

但是在IO执行过程中,由于CPU和内存的速度远远高于外设的速度,所以就存在速度严重不匹配的情况。

举个例子,比如我要给磁盘写入100M的数据,CPU输出100M的数据可能只需要几秒钟,但是磁盘如果要接收100M的数据可能需要几分钟。
怎么处理这个矛盾呢?就可以使用IO模型进行编程。

IO模型的种类

IO模型有阻塞IO,非阻塞IO,信号驱动IO,IO多路复用,异步IO,其中前四个被称之为同步IO。

是否等待IO的执行结果就是同步IO与异步IO的区别,等待IO的执行结果就是同步,不等待就是异步。

阻塞IO

阻塞的意思就是一直等着。
在C语言中非常有代表性的库函数就是scanf函数

在这里插入图片描述

非阻塞IO

非阻塞IO就是不等着。

在这里插入图片描述

IO多路复用

多了一个select函数,select函数里面的一个参数是文件描述符的集合。通过它来对这些文件进行监听。当某个文件描述就绪的时候就对这个文件描述符进行处理。

在这里插入图片描述

信号驱动IO

在这里插入图片描述

异步IO

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109028.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

太阳能电池板自动清洗机器人的制作分享

本文素材来源于宁夏大学 作者:李伟荣、李学辉、金茹芳、沙小平 指导老师:康彩、张冬 一、执行总结 1.1项目概述 在“十三五”发展的大形势下,由于现在国家大力发展清洁能源,而太阳能发电受到了很大重视,但是目前并没…

Cartesian product

In mathematics, specifically set theory, the Cartesian product of two sets A and B, denoted A  B, is the set of all ordered pairs (a, b) where a is in A and b is in B.[1] In terms of set-builder notation, that is {\displaystyle A\times B{(a,b)\mid a\in …

线性模型-优化方法及推导过程

本文包含大量不严谨的公式写法,只是推式子时候打草记录一下… 线性模型(Linear Model)是机器学习中应用最广泛的模型,指通过样本特征的线性组合来进行预测的模型。给定一个DDD维的样本特征的线性组合来进行预测的模型,给定一个DDD维样本x[x1,…

接口自动化测试(Python+Requests+Unittest)

(1)接口自动化测试的意义、前后端分离思想 接口自动化测试的优缺点: 优点: 测试复用性。 维护成本相对UI自动化低一些。 为什么UI自动化维护成本更高? 因为前端页面变化太快,而且UI自动化比较耗时(比如等待页面元素的…

回眸 2022,展望 2023

回眸 2022,展望 2023 回眸 2022 先进行回眸吧!2022 感觉过得太快了,就好像昨天刚刚过年一样!但是时间不会欺骗任何人,过了多久就是多久!它不会管你是因为什么而耽误,也不会管你是因为什么而荒…

浏览器跨域-原因及解决方案

1.浏览器跨域 如何判断一个浏览器的请求是否跨域? 在A地址(发起请求的页面地址)向B地址(要请求的目标页面地址)发起请求时, 如果A地址和B地址在: 协议 域名 端口 不全相同,则说明请…

太神了!开源大佬的SpringBoot+微服务架构笔记,一般人真肝不出来

时间飞逝,转眼间毕业七年多,从事 Java 开发也六年了。我在想,也是时候将自己的 Java 整理成一套体系。 这一次的知识体系面试题涉及到 Java 知识部分、性能优化、微服务、并发编程、开源框架、分布式等多个方面的知识点。 写这一套 Java 面试…

Category (mathematics)

In mathematics, a category (sometimes called an abstract category to distinguish it from a concrete category) is a collection of “objects” that are linked by “arrows”. A category has two basic properties: the ability to compose the arrows associatively…

51单片机实训day2——创建Proteus工程以及Proteus基本控件的使用|单片机最小系统电路设计:电源配置 复位电路 晶振电路

以管理员身份打开软件!!!以管理员身份打开软件!!!以管理员身份打开软件!!! 内 容:Proteus工程创建 学 时:2学时 知识点:熟悉Proteu…

AbstractProcessor相关的API记录

java文件操作相关的两个类: JCTree 树节点、TreeMaker 树节点构建器。 JCTree JCTree的一个子类就是java语法中的一个节点,类、方法、字段等这些都被封装成了一个JCTree子类。 JCTree详细的介绍:抽象语法树AST的全面解析(二&…

【数据驱动测试】从方法探研到最佳实践

导读 在自动化测试实践中,测试数据是制造测试场景的必要条件,本文主要讲述了在沟通自动化框架如何分层,数据如何存储,以及基于单元测试pytest下如何执行。并通过实践案例分享,提供数据驱动测试的具体落地方案。 基本…

训练yolo系列+deepsort模式的跟踪器(一):训练deepsort

由于是检测+跟踪模式,因此检测器和跟踪器是分开训练的。本节中我们先手把手的训练deepsort跟踪器。在此要感谢mikel大佬所提供的源码,由于代码更新的比较频繁,各种版本错误和运行错误在本节中会重点说明。mikel-brostrom/Yolov5_StrongSORT_OSNet: Mult-object tracking and…

python之环境切换问题实践总结

前言 这个标题是实践总结,为什么呢,因为这个问题困扰了我整整一个月,都没有解决。现在终于解决了,写一篇文章记录一下,也看看有没有小伙伴遇到一样的问题,或者在我下次还会发生这样的实情事可以第一时间解…

GAMES101 Assignment 3

前言 通过阅读实验提供的代码框架,可以加深对渲染管线的理解。assignment1,2我并没有做,我们课程图形学本来有实验计划,然而老师专门让我们做GAMES101的这个实验,其意义可见一斑。 阅读过程中遇到许多困难,看了许多资…

线性杂双功能PEG试剂Biotin-PEG-Silane,Silane-PEG-Biotin,生物素-PEG-硅烷

英文名称:Biotin-PEG-Silane,Silane-PEG-Biotin 中文名称:生物素-聚乙二醇-硅烷 生物素-PEG-硅烷是一种含有生物素和硅烷的线性杂双功能PEG试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。生物素能与亲和素和链霉亲和素结合&…

多期DID和事件研究法含文献和do代码

多期DID和事件研究法含文献和do代码 1、方法:多期DID 2来源:JDE发表的一篇多期DID和事件研究法相关的文章, 文章名为为"Here waits the bride? The effect of Ethiopias child marriage law"。 3、数据内容:数据包…

钱为什么会贬值?

一、什么是钱贬值? 当我们在谈钱贬值的时候,我们是在说什么? 是指的今天5块钱可以买5个苹果,1个月后5块钱只可以买3个苹果.(以商品为评价基准) 是指的今天1美元可以换6元人民币,1个月后1美元…

数据库实验5 数据库设计实验

前言:不知道啥原因,最后设计出来少了一个表,无语 实验5 数据库设计实验 1.实验目的 掌握数据库设计基本方法及数据库设计工具。 2.实验内容和要求 掌握数据库设计基本步骤,包括数据库概念结构设计、逻辑结构设计,物理结构设计,数据库模式…

Flarum部署:从源码到docker到放弃

警告: 此篇文章前半段记录了我用代码部署flarum遇到的一些问题和解决办法,但是可能是由于我是在不熟悉php的框架结构,最终我还是选择了使用docker进行部署,请斟酌是否继续阅读本文。 Hello,大家好,我是内网…

开源项目-OA自动化管理系统

哈喽,大家好啊,今天给大家带来一个开源系统-办公自动化管理系统 简介: OA( Office Automation System)办公自动化系统是一个企业用来管理日常事务的系统,它一般用来管理各种流程(报销、请假. . .)审批,通讯…