日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux内核微妙时,Linux内核模块时间同步函数汇总

發布時間:2025/3/21 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux内核微妙时,Linux内核模块时间同步函数汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在linux內核模塊中能用到的函數比用戶空間多,但是它的函數往往被用得很少。當然在內核中葉可以調用用戶空間的函數只要直接調用系統調用的封裝函數就行,如下:

如調用long gettimeofday(struct timeval tv, struct timezone tz);函數可以直接調用封裝體:

_syscall1(long,gettimeofday, struct timeval,tv,struct timezone ,tz);

這個是現在內核的系統調用標準形式,syscall后面接的數字表示這個系統調用類型,系統調用將參數個數的多少進行了分類。

當然也可以直接使用內核特有的函數,這樣效率更高:

獲得當前時間函數:

頭文件: time.h

屬性:系統符號導出函數

從jiffies得到時間

void do_gettimeofday(struct timeval *tv);

從xtimer墻上時間得到時間

struct timerspec current_kernel_time(void);

延時:

長延遲

頭文件:jeffies.h / time.h

while(time_before(jiffies,jiffies+msecs_to_jiffies(delay_time)){

schedule();

}

納秒,微妙,毫?秒延遲,必須是短延遲,時間過長會報錯

頭文件: delay.h

void ndelay(unsigned long nesec);

void udelay(unsigned long usecs);

void mdelay(unsigned long msecs);

void msleep(unsigned int millisecs);

void ssleep(unsigned int seconds);

超時:

頭文件: wait.h

long wait_event_timerout(wait_queue_head_t q, condition, long timeout);

long wait_event_interruptible_timerout(wait_queue_head_t q, condition, long timeout);

定時器

頭文件:timer.h

定時器數據結構:

struct timer_list{

unsigned long expires;??????????? ?/* 超時時間*/

void (*fun)(unsigned long);????? /*超時做的事情的函數指針*/

unsigned long data;???????????????? /*函數數據參數*/

};

初始化定時器

void init_timer(struct timer_list *timer);

添加定時器

void add_timer(struct timer_list *timer);

銷毀定時器

int del_timer(struct timer_list *timer);

信號量函數:

頭文件:semaphore.h

屬性:初始化函數是頭文件靜態,其他函數時系統符號導出

1. 初始化信號量

static inline void sema_init(struct semaphore *sem, int val);

第一個參數信號量,第二個參數信號量初始值。

2. 獲得信號量

void down(struct semaphore *sem);

3.釋放信號量

void up(struct semaphore *sem);

4.在一定時間限制內獲得信號量,返回值返回是得到信號量返回的還是超時返回

int down_timeout(struct semaphore *sem, long jiffies);

5. 非阻塞測試是否有可以得到信號量,返回值表明是否獲得了信號量。

int down_trylock(struct semaphore *sem)

6.可打斷的獲得信號量,返回值表示是一般返回還是被打斷

int down_interruptible(struct semaphore *sem)

7.獲得可打斷信號量,針對致命打斷如 kill信號,返回如上

int down_killable(struct semaphore *sem)

軟中斷:

tasklet

1.初始化

頭文件:無

屬性:系統符號導出

void tasklet_init(struct tasklet_struct *t,void (*func)(unsigned long), unsigned long data);

第一個參數是tasklet結構體指針,第二個參數是執行任務的函數,第三個參數是數據結構體指針。

2.調度tasklet

頭文件:interrupt.h

屬性:頭文件靜態

static inline void tasklet_schedule(struct tasklet_struct *t);

3.結束tasklet

屬性:系統符號導出

extern void tasklet_kill(struct tasklet_struct *t);

4.高精準定時器tasklet

tasklet_hrtimer_init, tasklet_hrtimer_start,tasklet_hrtimer_cancel

工作隊列workqueue

1. 創建并初始化工作隊列

INIT_WORK(_work, _func);

頭文件:workqueue.h

屬性:頭文件宏定義

或者create_workqueue,這個好像沒有上面那個全面,不是很清楚。

2. 銷毀工作隊列

頭文件:workqueue.h

void destroy_workqueue(struct workqueue_struct *wq)

3. 重置工作隊列

頭文件:workqueue.h

int cancel_work_sync(struct work_struct *work);

4. 調度工作隊列,下面兩個函數一樣,s調用q

頭文件:workqueue.h

int schedule_work(struct work_struct *work)

int queue_work(struct workqueue_struct *wq, struct work_struct *work)

總結

以上是生活随笔為你收集整理的linux内核微妙时,Linux内核模块时间同步函数汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。