linux的同步,非同步,阻塞,非阻塞
阿新 • • 發佈:2019-01-07
linux中關於IO操作有同步,非同步,阻塞,非阻塞幾種模式,這幾種模式可能有些同學會有點迷糊,把同步和阻塞混為一起,把非同步和非阻塞混一起.其實這四種模式的關係是:阻塞和非阻塞都屬於同步.
1. 基礎知識 我們都知道linux將所有的裝置都看作檔案,那麼我們對linux的裝置操作都可以看做是檔案操作.我們開啟一個檔案的時候核心會返回給我們一個檔案描述符,那麼我們對檔案的操作都是檔案描述符來操作的. 系統呼叫是如何完成IO操作的呢?網上有一個系列文章講解一次IO操作的真實過程<一個IO的傳奇一生>. linux將記憶體分為核心區,使用者區; linux核心給我們管理所有的硬體資源,應用程式通過呼叫系統呼叫和核心互動,達到使用硬體資源的目的; 應用程式通過系統呼叫read發起一個讀操作;這時候核心建立一個檔案描述符,並通過驅動程式向硬體傳送讀指令,並將讀的的資料放在這個描述符對應結構體的快取區。但這個結構體是在核心記憶體區的。需要將這個資料讀到使用者區。這樣完成了一次讀操作;