9 1非同步通知的概念和作用

2021-05-22 18:31:58 字數 878 閱讀 9118

阻塞與非阻塞訪問。poll()函式提供了較好的解決裝置訪問的機制,但是如果有了非同步通知整套機制,就更加完整了。

中斷:上半部:中斷處理程式

下半部:軟中斷 tasklet  工作佇列 workqueue<-work_struct

程序: runqueue 執行佇列

struct runqueue{

struct task_struct

阻塞:wait_event_interruptibel()

wake_up_interruptible()

非阻塞:

poll() select()

併發競態

spinlock()       自旋鎖 

down_interruptible()   訊號量

up(&sem)

非同步通知:

一旦裝置就緒,則主動通知應用程式。

訊號時非同步的,乙個程序不必通過任何操作來等待訊號的到達,事實上,程序也不知道訊號到底什麼時候到達。   

linux訊號:

使用訊號進行程序間通訊(ipc)是unix系統中的一種傳統機制,linux 系統也支援這種機制。

乙個訊號**捉的意思是  當乙個訊號到達時有 相應的**處理它。如果乙個訊號沒有被這個程序所捕獲,核心採用預設行為處理 。

訊號的接收:

在使用者程式中 ,為了捕捉訊號,可以使用signal()函式來設定對應訊號的處理函式

void (*signal)(int signal,void (*handler)(int )))(int);

如果signal()呼叫成功,它返回最後一次為訊號signum繫結的處理函式handler值,失敗返回sig_err.

使用訊號實現非同步通知的應用程式

顯示如下:

同步和非同步的概念?

程序同步用來實現程式併發執行時候的可再現性。一 程序同步及非同步的概念 1 程序同步 就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。也就是必須一件一件事做,等前一件做完了才能做下一件事.就像早上起床後,先洗涮,然後才能吃飯,不能在洗涮沒有完成時,就開始吃飯.按照這個定義,其實絕大多數...

Linux裝置驅動中的非同步通知和非同步IO

前面兩章分別提到io模型中的阻塞與非阻塞linux驅動 六 裝置驅動中的阻塞與非阻塞io,io多路復用驅動中輪詢操作實現,這一章我們再來看看非同步io,這樣,io模型就可以都搞定了。回顧一下在應用程式中使用非同步io的步驟 1,應用程式 1 設定非同步標誌位 int flags fcntl fd,f...

Linux核心的非同步通知

非同步通知類似於中斷,主要用於實現驅動通過傳送訊號通知應用程式。應用層 void my signal fun int signum int main int argc,char argv fcntl fd,f setown,getpid 告訴驅動要發訊號給本應用程式。oflags fcntl fd,...