阻塞與非阻塞訪問。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,...