Linux 下傳統(tǒng)的進(jìn)程間通信原理
在Linux中跨進(jìn)程通信涉及到幾個(gè)基本的概念
- 進(jìn)程間隔離
- 進(jìn)程空間劃分:用戶空間(User Space)/內(nèi)核空間(Kernel Space)
- 系統(tǒng)調(diào)用:用戶態(tài)/內(nèi)核態(tài)
進(jìn)程間隔離零如,進(jìn)程與進(jìn)程間內(nèi)存是不共享的镀娶。進(jìn)程A想要直接訪問進(jìn)程B的數(shù)據(jù)是行不通吉挣,要想進(jìn)程A和進(jìn)程B之間的數(shù)據(jù)共享,就涉及到IPC通信燎悍。
消息發(fā)送方將要發(fā)送的數(shù)據(jù)存放在內(nèi)存緩存區(qū)中虑凛,通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài)梅鹦。
然后內(nèi)核程序在內(nèi)核空間分配內(nèi)存谬返,開辟一塊內(nèi)核緩存區(qū),調(diào)用 copyfromuser() 函數(shù)將數(shù)據(jù)從用戶空間的內(nèi)存緩存區(qū)拷貝到內(nèi)核空間的內(nèi)核緩存區(qū)中光涂。
同樣的庞萍,接收方進(jìn)程在接收數(shù)據(jù)時(shí)在自己的用戶空間開辟一塊內(nèi)存緩存區(qū),然后內(nèi)核程序調(diào)用 copytouser() 函數(shù)將數(shù)據(jù)從內(nèi)核緩存區(qū)拷貝到接收進(jìn)程的內(nèi)存緩存區(qū)顶捷。這樣數(shù)據(jù)發(fā)送方進(jìn)程和數(shù)據(jù)接收方進(jìn)程就完成了一次數(shù)據(jù)傳輸挂绰,我們稱完成了一次進(jìn)程間通信。