1 進(jìn)程通信概念
??進(jìn)程通信就是進(jìn)程之間的信息交換。
??進(jìn)程是分配系統(tǒng)資源的單位(包括地址空間)指蚜,因為各進(jìn)程擁有的內(nèi)存地址空間相互獨立庆寺。
??為了保證安全,一個進(jìn)程不能直接訪問另一進(jìn)程的地址空間券时。但是進(jìn)程之間的信息交換又是必須實現(xiàn)的。為了保證進(jìn)程間安全通信伏伯,操作系統(tǒng)提供了一些方法橘洞。
??操作系統(tǒng)為進(jìn)程通信實現(xiàn)了三種方式:共享存儲、消息傳遞说搅、管道通信炸枣。
2 進(jìn)程通信方式
??2.1 共享存儲
??操作系統(tǒng)為需要通信的進(jìn)程創(chuàng)建一個共享空間,進(jìn)程可以向共享空間中發(fā)送信息或接收信息弄唧。但是進(jìn)程對共享空間的訪問必須是互斥的适肠,即只有一個進(jìn)程對共享空間的訪問釋放,其他進(jìn)程才能訪問共享空間候引。
??共享存儲分為:基于數(shù)據(jù)結(jié)構(gòu)的共享和基于存儲區(qū)的共享迂猴。
??(1) 基于數(shù)據(jù)結(jié)構(gòu)的共享:如共享空間里只能放一個長度為10的數(shù)組,這種共享方式速度慢背伴,限制多沸毁,是一種低級通信方式峰髓。
??(2) 基于存儲區(qū)的共享:在內(nèi)存中畫出一塊共享區(qū)域,數(shù)據(jù)的形式息尺、存放的位置都由進(jìn)程控制携兵,而不是操作系統(tǒng)。相比之下搂誉,這種共享方式速度更快徐紧,是一種高級通信方式。
??2.2 管道通信
??“管道”是指用于連續(xù)讀寫進(jìn)程的一個共享文件炭懊,又名pipe文件并级,其實就是在內(nèi)存中開辟一個大小固定的緩沖區(qū)。
??管道只能采用半雙工通信侮腹,所謂半雙工就是在某一個時間段內(nèi)只能實現(xiàn)單向的傳輸嘲碧。如果要實現(xiàn)雙向同時通信,則需要像上圖一樣設(shè)置兩個管道父阻。
??各個進(jìn)程同樣要互斥訪問管道愈涩。
??數(shù)據(jù)以字符流的形式寫入管道,當(dāng)管道寫滿時加矛,寫進(jìn)程的write()系統(tǒng)調(diào)用會被阻塞,等待讀進(jìn)程將數(shù)據(jù)取走斟览。讀進(jìn)程將數(shù)據(jù)全部取走后苛茂,管道變空味悄,此時讀進(jìn)程的read()系統(tǒng)調(diào)用將被阻塞侍瑟。
??如果管道沒寫滿涨颜,就不允許讀庭瑰。如果管道沒被讀空弹灭,就不允許寫穷吮。
??數(shù)據(jù)一旦被讀出捡鱼,就從管道中被拋棄驾诈,這就意味著讀進(jìn)程只能有一個乍迄,否則可能會有讀錯數(shù)據(jù)的可能性就乓。
??2.3 消息傳遞
?? 進(jìn)程間的數(shù)據(jù)交換以格式化的消息(Message)為單位生蚁。進(jìn)程通過操作系統(tǒng)提供的“發(fā)送消息/接收消息”兩個原語進(jìn)行數(shù)據(jù)交換邦投。
??消息傳遞分為:直接通信方式和間接通信方式屯援。
??直接通信方式:將消息直接掛到接收進(jìn)程的消息緩沖隊列上狞洋。
??間接通信方式:先將消息發(fā)送到中間實體(信箱)中吉懊,因此也稱“信箱通信方式”借嗽。
??進(jìn)程之間的發(fā)送的信息都存儲在信箱(中間實體)中,由于每消息頭中都包含了消息的發(fā)送進(jìn)程ID和接收進(jìn)程ID惨寿,所以信箱中的消息只會被與消息頭中接收進(jìn)程ID相同的進(jìn)程接收裂垦。
3 小結(jié)
??本文完
??如發(fā)現(xiàn)錯誤包蓝,請指正2馕9枨啤腕唧!