网站建设定价做曖免费网站

pingmian/2025/10/9 2:48:37/文章来源:
网站建设定价,做曖免费网站,打码挂机网站建设,北京市中海建设有限公司网站嵌入式Linux应用开发-驱动大全-同步与互斥② 第一章 同步与互斥②1.3 原子操作的实现原理与使用1.3.1 原子变量的内核操作函数1.3.2 原子变量的内核实现1.3.2.1 ATOMIC_OP在 UP系统中的实现1.3.2.2 ATOMIC_OP在 SMP系统中的实现 1.3.3 原子变量使用案例1.3.4 原子位介绍1.3.4.1… 嵌入式Linux应用开发-驱动大全-同步与互斥② 第一章 同步与互斥②1.3 原子操作的实现原理与使用1.3.1 原子变量的内核操作函数1.3.2 原子变量的内核实现1.3.2.1 ATOMIC_OP在 UP系统中的实现1.3.2.2 ATOMIC_OP在 SMP系统中的实现 1.3.3 原子变量使用案例1.3.4 原子位介绍1.3.4.1 原子位的内核操作函数 第一章 同步与互斥② 1.3 原子操作的实现原理与使用 在上面的第 2个失败例子里问题在于对 valid变量的修改被打断了。如果对 valid变量的操作不能被打断就解决这个问题了。 这可以使用原子操作所谓“原子操作”就是这个操作不会被打断。Linux有 2种原子操作原子变量、原子位。 1.3.1 原子变量的内核操作函数 原子变量的操作函数在 Linux内核文件 arch\arm\include\asm\atomic.h中。 原子变量类型如下实际上就是一个结构体(内核文件 include/linux/types.h) 特殊的地方在于它的操作函数如下(下表中 v都是 atomic_t指针) 1.3.2 原子变量的内核实现 注意SMP就是 Symmetric Multi-Processors对称多处理器UP即 Uni-Processor系统只有一个单核 CPU。 这些函数都是在 Linux内核文件 arch\arm\include\asm\atomic.h中。 atomic_readatomic_set这些操作都只需要一条汇编指令所以它们本身就是不可打断的。 问题在于 atomic_inc这类操作要读出、修改、写回。 以 atomic_inc为例在 atomic.h文件中如下定义 #define atomic_inc(v) atomic_add(1, v) atomic_add又是怎样实现的呢用下面这个宏 ATOMIC_OPS(add, , add) 把这个宏展开 #define ATOMIC_OPS(op, c_op, asm_op) \ATOMIC_OP(op, c_op, asm_op) \ATOMIC_OP_RETURN(op, c_op, asm_op) \ATOMIC_FETCH_OP(op, c_op, asm_op) 从上面的宏可以知道一个 ATOMIC_OPS定义了 3个函数。比如“ATOMIC_OPS(add, , add)”就定义了这 3个函数 atomic_add atomic_add_return atomic_atomic_fetch_add 或 atomic_fetch_add_relaxed 我们以 ATOMIC_OP(add, , add)为例看它是如何实现 atomic_add函数的对于 UP系统、SMP系统分别有不同的实现方法。 1.3.2.1 ATOMIC_OP在 UP系统中的实现 对于 ARMv6以下的 CPU系统不支持 SMP。原子变量的操作简单粗暴关中断中断都关了谁能来打断我代码如下(arch\arm\include\asm\atomic.h) 1.3.2.2 ATOMIC_OP在 SMP系统中的实现 对于 ARMv6及以上的 CPU有一些特殊的汇编指令来实现原子操作不再需要关中断代码如下(arch\arm\include\asm\atomic.h) 在 ARMv6及以上的架构中有 ldrex、strex指令ex表示 exclude意为独占地。这 2条指令要配合使用举例如下 ① 读出ldrex r0, [r1] 读取 r1所指内存的数据存入 r0并且标记r1所指内存为“独占访问”。 如果有其他程序再次执行“ldrex r0, [r1]”一样会成功一样会标记 r1所指内存为“独占访问”。 ② 修改 r0的值 ③ 写入strex r2, r0, [r1] 如果 r1的“独占访问”标记还存在则把 r0的新值写入 r1所指内存并且清除“独占访问”的标记把 r2设为 0表示成功。 如果 r1的“独占访问”标记不存在了就不会更新内存并且把 r2设为 1表示失败。 假设这样的抢占场景 ① 程序 A在读出、修改某个变量时被程序 B抢占了 ② 程序 B先完成了操作程序 B的 strex操作会清除“独占访问”的标记 ③ 轮到程序 A执行剩下的写入操作时它发现独占访问”标记不存在了于是取消写入操作。 这就避免了这样的事情发生程序 A、B同时修改这个变量并且都自认为成功了。 举报个例子比如 atomic_dec假设一开始变量值为 1程序 A本想把值从 1变为 0但是中途被程序B先把值从 1变成 0了但是没关系程序 A里会再次读出新值、修改、写入最终这个值被程序 A从 0改为-1。 在 ARMv6及以上的架构中原子操作不再需要关闭中断关中断的花销太大了。并且关中断并不适合SMP多 CPU系统你关了 CPU0的中断CPU1也可能会来执行些操作啊。 在 ARMv6及以上的架构中原子操作的执行过程是可以被打断的但是它的效果符合“原子”的定义一个完整的“读、修改、写入”原子的不会被别的程序打断。它的思路很简单如果被别的程序打断了那就重来最后总会成功的。 1.3.3 原子变量使用案例 现在可以使用原子变量实现只能有一个 APP访问驱动程序。代码如下 01 static atomic_t valid ATOMIC_INIT(1); 02 03 static ssize_t gpio_key_drv_open (struct inode *node, struct file *file) 04 { 05 if (atomic_dec_and_test(valid)) 06 { 07 return 0; 08 } 09 atomic_inc(valid); 10 return -EBUSY; 11 } 12 13 static int gpio_key_drv_close (struct inode *node, struct file *file) 14 { 15 atomic_inc(valid); 16 return 0; 17 } 18 第 5行的 atomic_dec_and_test这是一个原子操作在 ARMv6以下的 CPU架构中这个函数是在关中断的情况下执行的它确实是“原子的”执行过程不被打断。 但是在 ARMv6及以上的 CPU架构中这个函数其实是可以被打断的但是它实现了原子操作的效果如下图所示 1.3.4 原子位介绍 1.3.4.1 原子位的内核操作函数 能操作原子变量再去操作其中的某一位不是挺简单的嘛不过不需要我们自己去实现内核做好了。 原子位的操作函数在 Linux内核文件 arch\arm\include\asm\bitops.h中下表中 p是一个 unsigned long指针。 1.3.4.2 原子位的内核实现 在 ARMv6以下的架构里不支持 SMP系统原子位的操作函数也是简单粗暴关中断。以 set_bit函数为例代码在内核文件 arch\arm\include\asm\bitops.h中如下 在 ARMv6及以上的架构中不需要关中断有 ldrex、strex等指令这些指令的作用在前面介绍过。还是以 set_bit函数为例代码如下 我不再使用原子位操作来写代码留给你们练习吧。

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

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

相关文章

沈阳做个网站成本如何自己做网站发布到服务器上面

一.题目及剖析 https://www.nowcoder.com/practice/41c399fdb6004b31a6cbb047c641ed8a?tabnote 这道题涉及到数学原理,有一般公式,但我们先不用公式,看看如何用链表模拟出这一过程 二.思路引入 思路很简单,就试创建一个单向循环链表,然后模拟报数,删去对应的节点 三.代码引…

深圳市建设交易中心网站首页相关网站怎么做

1)什么是数据库测试? 数据库测试也称为后端测试。数据库测试分为四个不同的类别。数据完整性测试 数据有效性测试 数据库相关的性能 测试功能,程序和触发器 2)在数据库测试中,我们需要正常检查什么? 通常&a…

网站建设 面试网站开发课程设计总结

目录 简介 代码 功能 显示ASCII字符 ​编辑 画任意直线 画横线 画竖线 画矩形 画椭圆 画立方体 画点阵图 翻转 反相 滚动 横向滚动 纵向滚动 奇葩滚动 简介 我重新写了一个驱动,增加了一些功能,由于我的硬件是128*64oled单色I2C,我只…

做别人一样的网站模板宝塔面板wordpress

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Redis缓存保卫战:拒绝缓存击穿的进攻 前言缓存击穿的定义和原理为何会发生缓存击穿缓存击穿的危害防范缓存击穿结语: 前言 你是否曾经遇到过系统在高并发情况下出现严重性能问题&#xff…

网站开发语言在线检测怎么看一个网站是什么程序做的

文章目录一、全量同步1. 增量同步SQL2. 构建reader3. 构建writer4. 字段对应关系映射5. 构建json6. 选择同步模板7. 查询最早时间8. 修改任务信息9. 添加增量参数10. 数据清理11. 执行任务12. 查看执行日期13. 数据验证15. 查看同步脚本二、基于日期增量同步2.1. 新增新数据2.2…

四川住房建设厅官方网站建设一个网站需要几个角色

目录 一 湖仓一体(Lakehouse) 1 数据仓库 2 数据湖 3 数据仓库和数据湖 4 湖仓一体(Lakehouse)

网站建设中心联系方式自助建站原理

0x01 启动IDA new:反汇编一个新文件go:运行,直接进入IDAPrevious:载入一个我们以前编译过的程序 如果不想每次都看到这个对话框,可以取消该对话框底部的Display at startup(启动时显示)&#x…

软件的定制开发比较好的公司汕头seo排名收费

— 点击蓝字 关注我们 —英雄联盟自国服上线以来,已经陪伴玩家走过了9个年头,目前英雄联盟中的英雄数量已经达到了151位,每一位都各具特色。千珏是一位深受玩家们喜爱的英雄,其在官方英雄的定位中,属于打野英雄&#x…

济南源码网站建设信用网站建设意见

随着人工智能的快速发展,AI数字人播报成为了媒体和信息传播领域的一项创新技术。AI数字人播报是利用人工智能技术创建的一系列短视频,以新闻主播为中心,展示各种场景和情境能够以短视频的形式进行新闻的报道。这种创新的内容形式在社交媒体和…

西安公司网站设计费用广告字设计免费生成

目录 问题解答集 1 目录 2 修订历史纪录 3 1 什么是.net 4 1.1 .net的定义 4 1.2 什么是C# 4 1.3 C#与C,C的相同之处 5 2 有关Update程序 6 2.1 WinForm中Button控件的使用 6 2.2 将double类型的变量保留固定位数的小数部分 7 …

如室设计网站网站建设 素材

类和对象 类的一般形式 访问控制限定符 public 公有成员,谁都可以访问protected 保护成员,只有类自己和子类可以访问private 私有成员,只有类自己可以访问 类和结构的访问控制限定符区别 类的缺省访问控制限定为私有(private)结构的缺省访…

网站建设报告模板建瓯做网站的公司

GET和POST是HTTP协议中两种常用的请求方法,它们在如何向服务器发送数据以及数据传输方式上有所不同。下面是GET和POST的主要区别: 一、数据传输位置: GET:将数据通过URL的查询字符串部分(即URL的参数)传递…

怎么建设维护学校的网站网络游戏吧

问题:Python文件运行时报TabError: inconsistent use of tabs and spaces in indentation 原因:说明Python文件中混有Tab和Space用作格式缩进。这通常是使用外部编辑器编辑Python文件时,自动采用Tab进行格式缩进。 解决:将Tab转…

购房网站系统建设方案微信推广怎么弄

🦉 AI新闻 🚀 ChatGPT更新了Mention功能,集结若干GPTs作战,AI智能体的心智入口 摘要:OpenAI在ChatGPT中引入了一个新功能,允许用户在聊天时任意一个GPTs(即ChatGPT最新推出的AI Agent 智能应用…

做个企业网站多少钱网站公司深圳

MORMOT数据库连接池 MORMOT封装了一堆的PROPS控件,用于连接各种数据库。 MORMOT的封装是武装到了牙齿的,这堆PROPS控件居然数据库连接池也封装好了。这就为我们省了不少事,笔者非常喜欢! 下面拿TOleDBMSSQLConnectionProperties控…

做网站大概需要几个人金融网站建设方案ppt模板下载

摘要:信息时代虽然带给我们无限商机与方便,但也充斥着隐患与危险.由于网络容易受到攻击,导致机密信息的泄密,数据被篡改,轻则引发企业,部门工作陷入瘫痪,个人利益受损,重则危及国家安全和社会稳定,因此保证信息安全已经成为关系国计民生的重要问题之一.而数字签名技…

哪个网站的字体做的特别好资讯网站 整体ui

app端文章查看,静态化freemarker,分布式文件系统minIO 1)文章列表加载 1.1)需求分析 文章布局展示 1.2)表结构分析 ap_article 文章基本信息表 ap_article_config 文章配置表 ap_article_content 文章内容表 三张表关系分析 1.3)导入文章数据库 1.3.1)导入数据…

做企业网站收费多少钱apache网站拒绝访问

# 营救 ## 题目背景 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动得热泪盈眶,开起了门…… ## 题目描述 妈妈下班回家,街坊邻居说小明被一群陌生人强行押上了警车&#…

网站收录量下降中国传媒大学声明

WPF(Windows Presentation Foundation)是一个用于构建桌面应用程序的.NET框架,它支持MVVM(Model-View-ViewModel)架构模式来分离UI逻辑和业务逻辑。以下是一些常用的WPF MVVM开源框架: Prism Prism是由微软…

怎么样可以自己做网站做美食直播哪个网站好

1. 介绍 概念&#xff1a;通过 ref标识 获取真实的 dom对象或者组件实例对象 2. 基本使用 实现步骤&#xff1a; 调用ref函数生成一个ref对象 通过ref标识绑定ref对象到标签 代码如下&#xff1a; 父组件&#xff1a; <script setup> import { onMounted, ref } …