一些核心同步API 1

2021-08-20 10:59:37 字數 1234 閱讀 7058

typedef structatomic_t

//將原子變數v增加i

static inline void atomic_add(int i, atomic_t *v)

//將原子變數v增加i,判斷增加後v是不是負數

static inline int atomic_add_negative(int i, atomic_t *v)

//將原子變數v增加i,並返回加後的值

static inline int atomic_add_return(int i, atomic_t *v)

//u不等於v,則將v+a

static inline int __atomic_add_unless(atomic_t *v, int a, int u)

return c;

}//將old與v所在的記憶體中的值相比較,如果相等,則將new存到v所表示的位址單元中

//如果不相等,則該位址的值不變

static inline int atomic_cmpxchg(atomic_t *v, int old, int new)

//將原子變數v減1

static inline void atomic_dec(atomic_t *v)

//將原子變數v減1,並判斷減1後是否為0,返回1警告是0,⚠

static inline int atomic_dec_and_test(atomic_t *v)

//同atomic_dec,atomic_dec_and_test

static inline void atomic_inc(atomic_t *v)

static inline int atomic_inc_and_test(atomic_t *v)

//讀原子值

static inline int atomic_read(const atomic_t *v)

//設定v的值為i,無返回值

static inline void atomic_set(atomic_t *v, int i)

//同atomic_add,atomic_add_return

static inline void atomic_sub(int i, atomic_t *v)

static inline int atomic_sub_and_test(int i, atomic_t *v)

static inline int atomic_sub_return(int i, atomic_t *v)

一些核心同步API 2

獲取訊號量,成功後sem的計數器減1 不成功後程序將進入睡眠狀態而一直等待下去 注意區分down interruptible down killable 由於會使程序進入睡眠狀態 不響應任何訊號量,阻塞 所以不建議使用 void down struct semaphore sem 獲取訊號量,失敗進...

一些核心模組API 2

核心符號表 就是在核心的內部函式或變數中,可供外部引用的函式和變數的符號表。其實說白了就是乙個索引檔案,它存在的目的就是讓外部軟體可以知道kernel檔案內部實際分配的位置。給乙個記憶體位址address,查詢乙個核心符號,並將該符號的基本資訊,符號名name,偏移offset 大小size,所屬模...

一些核心排程API(2)

根據tcb,獲取對應的記憶體資訊,儲存在專門描述tcb記憶體資訊的 mm struct 中 struct mm struct get task mm struct task struct task task unlock task return mm tcb專門的記憶體資訊儲存區 struct mm...