Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >操作系统中的临界区可以中断吗?如果在用户部分或内核代码中实现,会有什么影响?

操作系统中的临界区可以中断吗?如果在用户部分或内核代码中实现,会有什么影响?
EN

Stack Overflow用户
提问于 2020-08-29 15:26:07
回答 1查看 172关注 0票数 0

最近,我在一次采访中被问到这个问题,如果我们通过互斥来实现中断,那么当中断时会产生临界区效应。在用户代码或内核代码中实现临界区是否有任何影响。

EN

回答 1

Stack Overflow用户

发布于 2020-12-22 20:44:46

它取决于临界区的范围和临界区的实现。临界区是应用于代码段的约束,它阻止对某些共享数据的并发访问。

关于单核微控制器

需要保护以下类型的数据。

  1. 数据仅在多线程之间共享
  2. 数据仅在多个中断之间共享线程和中断之间共享

关键部分可以通过以下方式实现

互斥锁禁用所有中断(在用户上下文和OS内核中可用) context)

  • Using OS
  1. (在用户上下文中可用)

对于选项1,由于操作系统,特别是上下文切换器是使用中断来实现的,这也将有效地禁用OS上下文切换和临时多线程。这确保只有当前线程或中断上下文可以访问数据。因此,禁用中断是对所有3种类型的共享数据的有效保护。然而,临时禁用中断会增加微控制器的中断等待时间和OS的调度等待时间,因为在重新启用中断之前,中断处理程序和OS都无法响应。

如果数据仅在线程之间共享,则可以选择使用操作系统软件互斥锁来实现临界区。操作系统限制一个线程一次访问锁定的互斥锁,如果线程仅在获取互斥锁时才访问数据,则对数据的访问是受保护的。操作系统软件互斥通过操作系统调度来保护共享数据,并且操作系统和中断在临界区期间保持完全可操作。这种类型的实现不会阻止在临界区期间处理中断,也不会阻止未受影响的线程的调度。

OS软件互斥锁在保护线程和中断之间共享的数据方面无效,因为操作系统无法通过调度来阻止中断。

在操作系统本身依赖于共享数据的情况下,或者在没有操作系统的情况下,因为OS互斥还不可用,所以经常可以看到操作系统代码或裸机代码禁用中断以获得临界区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63648669

复制
相关文章
JSON API
FreeSWITCH早在1.4时代就有了JSON API,然而,却没有引起大家的重视。其实,JSON API的设计有更好的结构化和扩展性,配合HTTP和Websocket接口,必将大有作为。
杜金房
2020/12/21
9210
Git 代码统计
当我们一起维护一个开源项目的时候,你肯定想知道那些人比较活跃,哪些人贡献比较多。这时候就需要一个简单易用的工具,下面我来介绍几款好用工具。
猿哥
2019/07/17
1.9K0
Git 代码统计
git代码统计
统计某人的代码提交量,包括增加,删除: git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
江湖前辈黄药师
2018/08/27
1K0
git代码统计
git 代码行数统计
命令需要在bash下运行,windows系统可使用git客户端附带的“git bash here”右键菜单进入bash命令行
路过君
2022/09/23
1.5K0
git代码量统计
统计每个人的增删代码数 git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s \
灯珑LoGin
2022/10/31
1.3K0
git仓库代码统计
虽然以代码行数来衡量项目或者程序员并不是一件靠谱的事,但是从统计角度看趋势对于技术管理人员还是很有帮助的!推荐一个比较好用的git仓库代码统计工具:git_stats,它用于按git提交人、提交次数、修改文件数、代码行数、注释量在时间维度上进行统计,亦可按各文件类型进行简单的统计,非常方便。实际上,这么多功能通常都是用WEB在多个页面上显示的,git_stats也是如此,它需要你先安装好ruby以生成基础的页面,再用gem安装好git_stats,最后用git_stats一条语句即可生成展示页面。这些静态页面如需共享,那么搭个nginx显示静态页面即可。废话不多说,演示下步骤:
陶辉
2019/06/21
2.3K0
git仓库代码统计
git 统计代码行数
使用方法:在需要统计的git项目中,打开git命令行窗口(Git Bash),将上面的起止日期修改为具体起止时间,复制到git的命令行窗口即可。
周杰伦本人
2022/10/25
4.9K0
Json.NET API-Linq to Json
[翻译]Json.NET API-Linq to Json Basic Operator(基本操作)2010-01-02 03:02 by chenkai, 268 visits, [url=file:///C:/Documents and Settings/Administrator/Application Data/Tencent/QQ/Misc/com.tencent.qzone/qzonepackage/blog/blank.htm#]网摘[/url], 收藏, 编辑 在Json.NET开源的组件的API文档中看到其中有个Linq To Json基本操作.详细看了其中API 中Linq to SQL命名空间下定义类方法.以及实现, 觉得参与Linq 来操作Json从某种程度上提高生成Json字符窜的效率, 特别对数据库中批量的数据. 但是也从侧面也增加程序员编码的难度(如果刚用不熟练情况下 主要是在编码中控制生成Json字符窜正确的格式),另外一个关键借助了Linq对Json数据操作和转换更加直接.Linq To SQL 空间目的使用户利用Linq更加直接创建和查询Json对象. 翻译文档如下: A:Creating Json-(利用Linq快速创建Json Object) 在Newtonsoft.Json.Linq 空间下有多个方法可以创建一个Json对象. 简单方法虽然能够创建,但是对编码而言较多略显累赘.简单创建代码如下: 1 JArray array = new JArray(); 2 JValue text = new JValue("Manual text"); 3 JValue date = new JValue(new DateTime(2000, 5, 23)); 4 5 array.Add(text); 6 array.Add(date); 7 8 string json = array.ToString(); 10 //生成的Json字符窜如下: 11 // [ 12 // "Manual text", 13 // "\/Date(958996800000+1200)\/" 14 // ] JArray是Newtonsoft.Json.Linq空间扩展的类表示一个Json数组.而JValue代表JSON值(字符串,整数,日期等) . 简单利用Linq To SQL创建一个Json Object:
DougWang
2020/02/18
1.4K0
jenkins python api与json api不同
查看jenkins的python api与json api,感觉两者相差不多,但还是有所区别,所以用BeyondCompare进行对比分析。
donghui
2019/04/19
7910
jenkins python api与json api不同
【API架构】使用 JSON API 的好处
在 API 工艺的世界里,没有比设计更受热议的领域了。从 REST、gRPC 到 GraphQL,有许多方法可以设计和标准化 Web API 交互。今天,我们将注意力转向另一种方法,JSON API,JSONAPI.org 上详细介绍的用于构建 API 的规范。
架构师研究会
2022/05/29
2.8K0
GitStats - Git 历史统计信息工具
如果你是研发效能组的一员或者在从事 CI/CD 或 DevOps,除了提供基础设施,指标和数据是也是一个很重要的一环,比如需要分析下某个 Git 仓库代码提交情况:
Peter Shen
2020/06/12
5.5K1
GitStats - Git 历史统计信息工具
Rest API: Json参数格式错误时显示Json原文
一开始想寻找其他方式,当抛出异常的时候,就从HttpServletRequest读取body内容。但是做不到,因为在做Json读取的时候,InputStream已经被读取了,无法再次获取到body内容。所以只能通过自定义MessageConverter的方式。
十毛
2019/03/27
1.9K0
Java - Jackson JSON Java Parser API
Jackson JSON Java Parser非常流行,并且也用于Spring框架。
小小工匠
2021/08/17
8660
HTTP JSON API设计规范
越来越多的Web应用程序使用JSON作为API的一种数据交换格式进行交互。本文档的目标是使HTTP JSON API的设计风格保持一致,容易被理解和维护。一个优秀的API,应该是在其生命周期内能够持续提供稳定、易用、受信任的服务,并且在API的生命周期结束时能让其平滑的消亡。
luckpunk
2023/09/10
1.1K0
Vue项目api加载json文件
在vue项目开发过程中,免不了的要进行api接口的调用,当后端接口未搭建完成时,可以使用json文件模拟数据调用来搭建功能,同时有一些相关数据也是需要本地json文件支持,于是在这里介绍自己实战项目内嵌api接口调用本地数据json的方式
宋天伦
2020/07/16
2.3K0
Go语言开发RESTFul JSON API
也许我们之前有使用过各种各样的API, 当我们遇到设计很糟糕的API的时候,简直感觉崩溃至极。希望通过本文之后,能对设计良好的RESTful API有一个初步认识。
李海彬
2018/07/26
2.7K0
Go语言开发RESTFul JSON API
AngularJS API之toJson 对象转为JSON
toJson()能把对象序列化为json 方法讲解 这个方法最多支持2个参数: angular.toJson(obj, pretty); obj 是想要转换的对象, pretty 可以调节格式化的样式,按照API的介绍这个是空格的个数。(不过在控制台,空格的个数是一样的,差别还在研究) 样例参考 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="h
用户1154259
2018/01/17
1.2K0
AngularJS API之toJson 对象转为JSON
Git项目推荐|圆形统计图制作
KKCirStatisticalFigure-iOS 用于制作圆形统计图 https://gitee.com/kukela/KKCirStatisticalFigure-iOS
码云Gitee
2018/03/29
1K0
Git项目推荐|圆形统计图制作
一行命令, 静态json变身api
作为一个前端开发者, 你可以会遇到没有测试数据的尴尬, 而这次我们用json-server, 优雅的解决这个问题 效果 关于 json-server js
zhaoolee
2018/06/14
9500
点击加载更多

相似问题

使用quad方法python进行集成

00

Scipy集成模块缺少quad_vec

1103

Python/Scipy沿轴与Quad集成

27

与Python/SciPy中的"quad“和"quadrature”集成

10

使用LowLevelCallable集成scipy quad :如何传递user_data?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文