热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

测试和设置(或其他原子RMW操作)是否是任何架构上的特权指令?

如何解决《测试和设置(或其他原子RMW操作)是否是任何架构上的特权指令?》经验,为你挑选了1个好方法。

硬件提供原子指令,如测试和设置,比较和交换,负载链接存储条件.这些特权指示吗?也就是说,只能操作系统执行它们(因此需要系统调用)?

我认为他们没有特权,可以在用户空间中调用.但http://faculty.salina.k-state.edu/tim/ossg/IPC_sync/ts.html似乎另有建议.但是,在某些条件下,futex(7)可以在没有系统调用的情况下实现锁定,这意味着它必须在没有特权的情况下执行指令(如测试和设置).

矛盾?如果是这样,哪个是对的?



1> Peter Cordes..:

那页错了.它似乎声称无锁原子操作一般在ISA上具有特权,但事实并非如此.我从来没有听说过一个原子测试和设置或任何其他无锁操作需要内核模式.

如果是这种情况,则需要C++ 11无锁原子读 - 修改 - 写操作才能编译为系统调用,但它们不适用于x86,ARM,AArch64,MIPS,PowerPC或任何其他普通CPU .(在https://godbolt.org/上试试).

它也会使"轻量级"锁定(试图在没有系统调用的情况下锁定)成为不可能.(http://preshing.com/20111124/always-use-a-lightweight-mutex/)

正常的ISA允许用户空间执行原子RMW操作,在线程之间共享的内存上,甚至在单独的进程之间. 我不知道在x86上禁用用户空间的原子RMW的机制.即使在任何ISA上都有这样的东西,它也不是正常的操作模式.

只读或只写访问通常在所有ISA上的对齐位置上自然是原子的,达到一定的宽度(为什么x86上自然对齐的变量上的整数赋值?),但原子RMW确实需要硬件支持.


在x86上,TAS是lock bts,没有特权.(前缀的文档lock).x86有很多其他原子操作,比如lock add [mem], reg/immediate,lock cmpxchg [mem], reg甚至在需要返回值时lock xadd [mem], reg实现fetch_add.(对于'int num',num ++可以是原子的吗?)

大多数RISC都有LL/SC,包括ARM,MIPS和PowerPC,以及所有旧的不再常见的RISC ISA.


futex(2)是一个系统调用.如果你调用它,它所做的一切都是在内核模式下.

它是由重量轻的情况下,锁定用的回退机制存在争用,它提供了OS辅助睡眠/觉醒.因此,它futex本身并不能在用户空间中做任何事情,而是围绕锁定实现futex可以避免在无竞争或低争用情况下进行系统调用.

(例如,在锁定可用的情况下,在用户空间中旋转几次.)

这是futex(7)手册页描述的内容.但是如果你实际上没有进行系统调用,我觉得把它称为"futex操作"有点奇怪.我猜它是在内存代码可能会代表正在等待的其他线程查看的内存上运行的,因此用于修改用户空间代码中的内存位置的必要语义取决于futex.


@ flow2k:是的,用户空间中的原子RMW.但是`futex(7)`正在记录如何围绕`futex(2)`构建锁或其他操作的一般概念.除了系统调用包装器之外,没有名为`futex()`的库函数; 如果有它将被称为`futex(3)`.无论如何是的,这个答案的重点是`futex(2)`是你如何睡觉,如果你发现锁已经在像这个x86 asm spinlock(在用户空间中工作)的实现中采取:[通过内联锁定内存操作组件(/sf/ask/17360801/​​46263)
推荐阅读
  • 在CentOS 7上部署WebRTC网关Janus
    在CentOS 7上部署WebRTC网关Janus ... [详细]
  • 在 CentOS 7 中,为了扩展可用软件包的数量,通常需要配置多个第三方软件源。这些第三方源包括 EPEL、Nux Dextop 和 ELRepo 等,它们提供了大量官方源中未包含的软件包,从而增强了系统的功能性和灵活性。通过正确配置这些源,用户可以轻松安装和管理更多种类的软件,满足不同的需求。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在尝试为 Unity 编译一个简单的 Java 库时,运行 `ant jar` 命令后遇到了 Java I/O 异常。具体错误信息为“无法启动程序 ${aAPT},错误代码 2”,这通常表示指定的文件或目录不存在。此问题可能是由于环境配置不正确或路径设置有误导致的。建议检查相关路径和环境变量,确保所有依赖项都已正确安装和配置。 ... [详细]
  • STAR: 转录组数据分析中的高效比对工具介绍
    欢迎关注“生信修炼手册”!STAR 是一款专为 RNA-seq 数据设计的高效比对工具,以其卓越的速度和高灵敏度著称。该软件在处理大规模转录组数据时表现出色,能够显著提高比对效率和准确性。此外,GATK 推荐使用 STAR 进行预处理步骤,以确保后续分析的可靠性。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • 在Ubuntu系统中安装Android SDK的详细步骤及解决“Failed to fetch URL https://dlssl.google.com/”错误的方法
    在Ubuntu 11.10 x64系统中安装Android SDK的详细步骤,包括配置环境变量和解决“Failed to fetch URL https://dlssl.google.com/”错误的方法。本文详细介绍了如何在该系统上顺利安装并配置Android SDK,确保开发环境的稳定性和高效性。此外,还提供了解决网络连接问题的实用技巧,帮助用户克服常见的安装障碍。 ... [详细]
  • 本文深入探讨了使用Puppet进行软件包分发与管理的方法。首先介绍了fpm这一跨平台的软件包制作工具,其简便的操作流程使得软件包的创建变得轻松快捷。fpm的项目地址为:https://github.com/jordansissel/fpm。通过结合Puppet和fpm,可以实现高效、可靠的软件包管理和部署。 ... [详细]
  • 本文详细介绍了在DS-5开发工作室中集成最新编译器工具链的方法与步骤。通过逐步指导,帮助用户高效地配置和使用最新的编译器,以提升开发效率和代码质量。此外,还提供了常见问题的解决方案和最佳实践建议,确保用户能够顺利进行开发环境的升级。 ... [详细]
  • 在 Windows 10 系统下配置 Python 3 和 OpenCV 3 的环境时,建议使用 Anaconda 分发版以简化安装过程。Anaconda 可以从其官方网站(https://www.anaconda.com/download)下载。此外,本文还推荐了几本关于 Python 和 OpenCV 的专业书籍,帮助读者深入理解和应用相关技术。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
author-avatar
静越家家619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有