1. 程式人生 > >linux裝置驅動中的阻塞與非阻塞(一)

linux裝置驅動中的阻塞與非阻塞(一)

以上是驅動中的讀取和寫入操作,當寫程序發現數據已滿,不能寫入時,且上層應用是以阻塞的方式開啟裝置檔案時,所以必須要寫入資料才能返回,否則不能返回,那麼就有兩種實現機制,要不就是不停地忙等待,等待裝置可以寫入時,便寫入,然後返回,可是這樣做的話,非常影響CPU的執行效率,大大降低了CPU的效能,所以linux核心中採取了等待佇列的實現方式,就是當一個阻塞程序寫入資料時,發現不能寫入時,會把這個程序掛起,放到等待佇列中休眠,然後一直在休眠,直到有個讀程序,把緩衝區的資料讀取完畢後,然後讀程序會把寫程序喚醒,告訴寫程序緩衝區可以寫入資料了,於是寫程序繼續寫入操作,並且返回。舉個例子,小明餓了,要吃飯,於是跑去媽媽那裡,說要吃飯,媽媽說放沒有做好,你說小明是繼續在這裡一直等著媽媽把飯做好,還是先去睡一覺好呢,如果我是小明,我就先去睡一覺,然後媽媽把飯做好了,就把小明叫醒,小明,可以吃飯了,於是小明起來,跑去吃飯。當讀程序阻塞時,也是這樣,就不分析了。