• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

arm linux是如何保证原子性操作,都有哪些机制?

游~游~游 2018-09-08 浏览量:1151
arm linux是如何保证原子性操作,都有哪些机制?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 系统中原子操作是通过一个程序“独占监测”机制来实现,在系统中原子操作是可以被同一个cpu中的线程和中断打断,也可以被其他cpu的线程打断,但是“独占监测机制保证的是两个所谓的原子操作成功之后的结果是确定的,操作结果不会是一个中间值”。“独占监测”机制的实现依赖于新增加的两条汇编指令(ldrex 和 strex)和两个monitor(Local monitor 和 Global monitor)。
    ldrex : 将内存a中的数加载到寄存器中,并且对该内存的 Global monitor 标志为当前 cpu0 正在访问,将 cpu0 的 Local monitor 标志为 cpu0 正在访问内存a
    strex : 检查当前 cpu0 的 Local monitor 是否在访问内存a,Global monitor 是否标志为内存a被cpu0访问。如果是则 strex 指令执行成功,否则 strex 指令执行失败。
    • 发布于 2018-09-11
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:9
  • 在单个cpu的系统中,原子操作是通过关闭中断实现的。 
    关闭中断可以避免进程和中断,进程和进程之间的资源共享访问问题(进程的调度程序依靠中断实现调度)。
    • 发布于2018-09-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 一种是使用软件机制,不如信号量,另一种就是硬件机制,现在的arm很多都有内存互斥访问总线
    • 发布于2018-09-08
    • 举报
    • 评论 0
    • 0
    • 0

  • 原子操作需要禁用所有中断来实现,也可以在中断触发的时候不做任何响应
    • 发布于2018-09-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 把操作对象加个信号量封装起来,就能实现
    • 发布于2018-09-09
    • 举报
    • 评论 0
    • 0
    • 0

  • ARM V6及其之后原子操作是使用:LDREX、STREX指令实现的原子操作
    • 发布于2018-09-10
    • 举报
    • 评论 0
    • 0
    • 0

  • 这种都是有对应的信号量还有对应的资源保护来做的,要把对应的函数进行封装
    • 发布于2018-09-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 那就是依靠锁,锁在linux里面功能非常强大,其中包括原子操作,保证资源独占性等。
    • 发布于2018-09-30
    • 举报
    • 评论 0
    • 0
    • 0

  • 大部分就是依靠解锁还有对应的资源占用机制来处理
    • 发布于2018-10-13
    • 举报
    • 评论 0
    • 0
    • 0

  • 首先关闭所有终端,然后使用信号量进行同步。
    • 发布于2018-10-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

arm linux是如何保证原子性操作,都有哪些机制?