阻塞和非阻塞I/O是設備訪問的兩種不一樣模式,驅動程序能夠靈活的支持用戶空間對設備的這兩種訪問形式。linux
阻塞操做是指在執行設備操做時,若不能得到資源,則掛起進程直到知足可操做的條件後在進行操做。被掛起的進程進入休眠狀態,被從調度器的運行隊列移走,直到等待的條件被知足。spa
而非阻塞操做的進程在不能進行設備操做時,並不掛起,他或者放棄,或者不停的查詢,直到能夠進行操做爲止。隊列
注:阻塞聽起來意味着低效率,其實否則,若是設備部阻塞,則用戶想獲取設備資源時,只能不停的查詢,這反而會增長CPU資源的耗費,而阻塞方式是,不能獲取資源的進程將進入休眠,他將CPU資源讓給其餘的進程。進程
阻塞會進入休眠,所以必須有一個地方可以喚醒休眠的進程,不然,這個進程就「壽終正寢」了。這個地方最大的多是在中斷,由於硬件的資源的得到每每伴隨着中斷。下列演示了以阻塞和非阻塞方式讀取串口的一個字符資源
在linux驅動程序中,能夠使用等待隊列(wait queue)來實現阻塞進程的喚醒。