日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

optee中spinlock的实现原理详解

發(fā)布時間:2025/3/21 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 optee中spinlock的实现原理详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈


相關(guān)推薦:
optee中mutex的實現(xiàn)方式


說明: 在默認的情況下,本文講述的是armv8 aarch64體系,optee 3.12.0代碼

文章目錄

        • 1、cpu_spin_lock
        • 2、cpu_spin_unlock
        • 3、示例-舉例說明

透過事務看本質(zhì)
spin_lock的時候,如果lock等于1了,則調(diào)用wfe指令,讓cpu進入低功耗模式; 如果lock不等于1,則lock++
spi_unlock的時候,直接給lock賦0, 并釋放語義,產(chǎn)生等類似于ev指令的信號,喚醒正在處于wfe低功耗的cpu。

1、cpu_spin_lock

static inline void cpu_spin_lock(unsigned int *lock) {cpu_spin_lock_no_dldetect(lock); }static inline void cpu_spin_lock_no_dldetect(unsigned int *lock) {assert(thread_foreign_intr_disabled());__cpu_spin_lock(lock);spinlock_count_incr(); }static inline void spinlock_count_incr(void) { }/* void __cpu_spin_lock(unsigned int *lock); */ FUNC __cpu_spin_lock , :mov w2, #SPINLOCK_LOCK --(1)sevl --(2) l1: wfe --(3) l2: ldaxr w1, [x0] --(4)cbnz w1, l1 --(5)stxr w1, w2, [x0] --(6)cbnz w1, l2 --(7)ret --(8) END_FUNC __cpu_spin_lock

2、cpu_spin_unlock

static inline void cpu_spin_unlock(unsigned int *lock) {assert(thread_foreign_intr_disabled());__cpu_spin_unlock(lock);spinlock_count_decr(); }static inline void spinlock_count_decr(void) { }/* void __cpu_spin_unlock(unsigned int *lock); */ FUNC __cpu_spin_unlock , :stlr wzr, [x0] --(9)ret --(10) END_FUNC __cpu_spin_unlock

3、示例-舉例說明

假設(shè)有下列代碼,進程A和進程B都要訪問臨界區(qū)(代碼請參考上面的)

static unsigned int xxx_spinlock;cpu_spin_lock(&xxx_spinlock);// 臨界區(qū)cpu_spin_unlock(&xxx_spinlock);
  • 進程A調(diào)用cpu_spin_lock, 其執(zhí)行順序:
    (1)(2)(3)(4)(5)(6)(7)(8), 執(zhí)行后xxx_spinlock=1,其中步驟(4)是帶有語義的獨占指令
    然后進程A進入臨界區(qū)

  • 進程B調(diào)用cpu_spin_lock, 其執(zhí)行順序:
    (1)(2)(3)(4)(5)(3), 此時wfe讓cpu進入低功耗模式

  • 進程A執(zhí)行完臨界區(qū)后,調(diào)用cpu_spin_unlock,
    進程A的執(zhí)行順序:
    (9)(10),步驟(9)給[x0]清0了,即lock=0, 在執(zhí)行(9)的時候,操作的[x0]地址正是spi_lock時帶有語義的獨占指令操作的,這里就會釋放該獨占指令,將會產(chǎn)生一個類似于sev的信號
    進程B收到喚醒信號時,進程B的執(zhí)行順序:
    (5)(6)(7)(8), 進程B也進入了臨界區(qū)

我們知道spin_lock是鎖cpu之間的互斥的,對應一個cpu之間的搶占是無法鎖住的。
所以呢,optee在實現(xiàn)spin_lock時,規(guī)定了:在調(diào)用spin_lock之前,必需disable掉所有中斷,spin_unlock在放開中斷。這樣就不會有搶占的問題了

總結(jié)

以上是生活随笔為你收集整理的optee中spinlock的实现原理详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。