Linux核心等待佇列

2022-04-11 04:02:14 字數 1117 閱讀 2257

在linux驅動程式設計中,可以使用等待佇列來實現程序的阻塞,等待佇列可看作儲存程序的容器,在阻塞程序時,將程序放入等待佇列,當喚醒程序時,從等待等列中取出程序。

linux 2.6核心提供了如下關於等待佇列的操作:

1、定義等待佇列

wait_queue_head_t my_queue

2、初始化等待佇列

init_waitqueue_head(&my_queue)

3、定義並初始化等待佇列

declare_wait_queue_head(my_queue)

4、有條件睡眠

* wait_event(queue,condition)

當condition(乙個布林表示式)為真時,立即返回;否則讓程序進入task_uninterruptible模式的睡眠,並掛在queue引數所指定的等待佇列上。

* wait_event_interruptible(queue,condition)

當condition(乙個布林表示式)為真時,立即返回;否則讓程序進入task_interruptible的睡眠,並掛在queue引數所指定的等待佇列上。

* int wait_event_killable(wait_queue_t queue, condition)

當condition(乙個布林表示式)為真時,立即返回;否則讓程序進入task_killable的睡眠,並掛在queue引數所指定的等待佇列上。

5、無條件睡眠(老版本,建議不再使用)

* sleep_on(wait_queue_head_t *q)

讓程序進入不可中斷的睡眠,並把它放入等待佇列q。

* interruptible_sleep_on(wait_queue_head_t *q)

讓程序進入可中斷的睡眠,並把它放入等待佇列q。

6、從等待佇列中喚醒程序

* wake_up(wait_queue_t *q)

從等待佇列q中喚醒狀態為task_uninterruptible,task_interruptible,task_killable 的所有程序。

*wake_up_interruptible(wait_queue_t *q)

從等待佇列q中喚醒狀態為task_interruptible 的程序。

linux核心等待佇列方法

當你在使用者空間需要讀寫一大片資料的時候,這個就用上了。以下來自 假設我們在 kernel 裡產生乙個 buffer,user 可以經由 read,write 等 system call 來讀取或寫資料到這個 buffer 裡。如果有乙個 user 寫資料到 buffer 時,此時 buffer 已...

Linux 核心等待佇列解析

在閱讀tun驅動時看到,有一些類似 add wait queue 的函式,這些函式正是執行等待佇列的相關操作,要說等待佇列還得從核心程序排程說起,核心排程系統內程序,分配時間片,但是有些程序如從網絡卡中讀資料,在網絡卡有資料到達之前程序處於阻塞狀態,如果此時給相應程序分配時間片做排程,無疑是浪費系統...

Linux 裝置驅動 核心等待佇列

在 linux 驅動程式設計中,可以使用等待佇列來實現程序的阻塞.等待佇列可以看作儲存程序的容器,在阻塞程序時,將程序放入等待佇列 當喚醒程序時,從等待佇列中取出程序.linux 2.6 核心提供了如下關於等待佇列的操作 wait queue head t my queue init waitque...