驱动开发-----io模型总结(2023-5-23)

news2024/10/5 12:44:32

1.非阻塞模型

在我们使用open函数时,将打开的驱动设置为O_NONBLOCK时,当我们用read函数去读取硬件数据时,无论硬件是否有数据,都会往下执行,不会被阻塞在这里

2.阻塞模型

在我们使用open函数时,没有设置O_NONBLOCK时,当我们用read函数去读取硬件数据时,会被阻塞在read函数位置,直到硬件数据准备就绪,才会解除阻塞。在阻塞的时候,进程会处于休眠态。

休眠态分为两种:

第一种是D uninterruptible sleep (usually IO)//该模式为不可中断休眠态,不能通过外部信号将进程结束。例如:ctrl+c,ctrl+z等

第二种是S interruptible sleep(wating for an event to complete)//该模式为可中断休眠态,能通过外部信号将进程结束。例如:ctrl+c,ctrl+z等

我们可以在终端输入ps -aux 查看各种进程的运行状态

如下图所示:

 3.io多路复用

如果一个进程需要同时监听多个硬件的数据,需要用到io多路复用。IO多路复用是基本思想为:在用户空间中将监听的事件文件描述符添加到时间集合中,调用函数进行判断集合中文件描述符对应的硬件数据是否准备就绪,准备就绪后,便将休眠的进程的唤醒。

如果休眠事件没有触发,进程切换为休眠状态(可中断休眠状态)

休眠事件被触发,进程被唤醒,准备对硬件进行读写。

IO多路复用的实现机制有三种:select,poll,epoll

select为将所有的文件描述符放入一个集合当中,如果有触发则唤醒休眠状态

操作集合函数有

void FD_CLR(int fd, fd_set *set);      将fd从集合中剔除

int  FD_ISSET(int fd, fd_set *set);     判断fd是否在集合中,在返回真,不在返回假

void FD_SET(int fd, fd_set *set);      将fd加入到集合中

void FD_ZERO(fd_set *set);          清空集合

poll:阻塞函数,让内核检测指定文件描述符集合中,是否有文件描述符准备就绪

 当文件描述符准备就绪后,该函数解除阻塞。

epoll:一颗树、一张表、三个接口

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

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

相关文章

C++学习之路-变量和基本内置类型

变量和基本内置类型 一、基本内置类型1.1 算数类型1.2 带符号类型和无符号类型1.3 类型转换含有无符号类型的表达式 1.4 字面值常量整形和浮点型字面值字符和字符串字面值转义序列指定字面值的类型 二、变量2.1 变量的定义初始化列表初始化默认初始化 2.2 变量声明和定义的关系…

斐波那契数列数列相关简化1

斐波那契数列问题介绍: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”&#xf…

包管理工具详解npm、yarn、cnpm、npx、pnpm

目录: 1 npm包管理工具 2 package配置文件 3 npm install原理 4 yarn、cnpm、npx 5 发布自己的开发包 6 pnpm使用和原理 当我们使用npm install xxxx 的时候会添加一个node_module和2个json文件: package.json是配置信息文件,  这个配…

Go完整即时通讯项目及Go的生态介绍

Go完整即时通讯项目 项目架构: 1 编写基本服务端-Server server.go package mainimport ("fmt""net" )// 定义服务端 type Server struct {ip stringport int }// 创建一个Server func NewServer(ip string, port int) *Server {return …

Jenkins + docker-compose 在 Centos 上搭建部署

一、前期准备 1. 检查 CentOS上 是否安装 docker 可以使用以下命令: sudo docker version 如果已经安装了Docker,它将显示有关Docker版本和构建信息的输出。如果未安装Docker,将收到有关命令未找到的错误消息。 2. 检查是否安装 docker-…

cookie-机制

目录 一、基础概念 二、cookie的处理方式 一、基础概念 1、cookie是存储在客户端的一组键值对 2、web中cookie的典型应用:免密登陆 3、cookie和爬虫之间的关联 有时,对一张页面进行请求的时候,如果请求的过程中不携带cookie的话&#xf…

Openai+Coursera: ChatGPT Prompt Engineering(四)

想和大家分享一下最近学习的Coursera和openai联合打造ChatGPT Prompt Engineering在线课程.以下是我写的关于该课程的前两篇博客: ChatGPT Prompt Engineering(一)ChatGPT Prompt Engineering(二)ChatGPT Prompt Engineering(三) 今天我们来学习第三部分内容&…

Java on Azure Tooling 4月更新|路线图更新及 Azure Toolkit for IntelliJ 增强

作者:Jialuo Gan - Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎来到 Java on Azure 工具产品的4月更新。让我们首先来谈谈我们对未来几个月的 Java on Azure 开发工具的投资。在这次更新中,我们…

js - 闭包

1、闭包的概念 闭包:函数嵌套函数,内层函数访问了外层函数的局部变量。 // 闭包 function func1() {let a 9;let b 8;function func2() {console.log("a", a); // a 9}func2(); } func1(); 分析: 需要访问的变量会被放到闭包…

【云原生|Kubernetes】05-Pod的存储卷(Volume)

【云原生Kubernetes】05-Pod的存储卷(Volume) 文章目录 【云原生Kubernetes】05-Pod的存储卷(Volume)简介Volume类型解析emptyDirHostPathgcePersistentDiskNFSiscsiglusterfsceph其他volume 简介 Volume 是Pod 中能够被多个容器访问的共享目录。 Kubern…

ChatGPT可以帮助开发人员的8种方式...

“适应或灭亡”是科技界的口头禅,如果您是开发人员,则尤其如此。 由于技术的动态发展,开发人员面临着比大多数人更大的压力,他们要领先于适应和精通最好的工具。ChatGPT 是最新的此类工具。 虽然有人说 ChatGPT 是“工作杀手”&…

比Figma更丝滑的“Figma网页版“

随着互联网的全面普及和全球化,设计协作工具逐渐成为团队协作中不可或缺的一部分。设计师们常需要通过在线设计协作工具来完成设计任务,而 Figma 作为协作工具的佼佼者,成为了许多设计师心中的首选。但是,对于国内设计师来说&…

Leetcode406. 根据身高重建队列

Every day a Leetcode 题目来源:406. 根据身高重建队列 解法1:贪心 题解:根据身高重建队列 我们先按照身高从大到小排序(身高相同的情况下K小的在前面),这样的话,无论哪个人的身高都小于等于…

kubeadm安装集群的时候kube-proxy是如何安装的

背景 最近升级k8s集群时遇到这个问题,集群是使用kuberadm自动化脚本安装的,之前一直认为kubeadm安装的集群这些组件除了kubelet都是静态pod跑起来的。 其实kube-proxy并不是. kube-proxy是如何安装的 在使用kubeadmin安装Kubernetes集群时&#xff0c…

Echarts通过Jquery添加下拉列表动态改变展示的数据和图表

前言 在项目中,有时候我们会一些需求,比如要用Echarts绘制一个饼状图,并且要设置一个下拉列表,当我点击某个选项的时候,饼状图里面的数据会改变,图表样式也会发生改变。我们可以配合Jquery来实现这个功能。…

数字电路基础

目录 一、不同进制之间的转换 二、逻辑代数基础 三、门电路 四、组合逻辑电路 五、半导体存储电路 六、时序电路 一、不同进制之间的转换 二-十转换: 十-二转换: 二-十六转换 十六-二转换 八-二转换 二-八转换 十六-十转换: 先转换成…

python绘制气泡图|随机生成数据

python绘图系列文章目录 往期python绘图合集: python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 python绘制柱状图并美化|不同颜色填充柱子 python随机…

log4cpp的使用

log4cpp的使用逻辑构造基本模板布局的格式化目的地对象操作文件回卷文件 log4cpp的使用 逻辑构造 目的地Appender:用于表示日志系统最后输出到哪 布局Layout:表示你输出的格式,类似与printf 优先级Priority:常见的优先级有emerg&…

【WSN覆盖】基于麻雀搜索算法的三维无线传感器网络覆盖优化 三维WSN覆盖优化【Matlab代码#26】

文章目录 【可更换其他算法,获取资源请见文章第5节:资源获取】1. SSA算法2. 三维覆盖模型3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法,获取资源请见文章第5节:资源获取】 1. SSA算法 2. 三维覆盖模型 三维覆盖模…

搜狐发布Q1财报:读懂前瞻性布局背后的长期主义

5月15日,搜狐发布了2023年第一季度财报。财报显示,搜狐总收入为1.62亿美元,其中,品牌广告收入为2300万美元;在线游戏收入为1.29亿美元。 同时,归于搜狐公司的非美国通用会计准则净亏损为1300万美元。 搜狐…