進(jìn)程通信是指進(jìn)程之間的信息交換涯保。
一、低級(jí)通信——進(jìn)程之間的互斥和同步
? 信號(hào)量機(jī)制是有效的同步工具钞诡,但作為通信工具缺點(diǎn)如下:
(1)效率低(通信量少)
(2)通信對(duì)用戶不透明(程序員實(shí)現(xiàn)镐捧,操作系統(tǒng)只提供共享存儲(chǔ)器供代碼操作)
二、高級(jí)進(jìn)程通信
? 用戶直接利用操作系統(tǒng)提供的一組通信命令臭增,高效地傳送大量數(shù)據(jù)的通信方式懂酱。
n操作系統(tǒng)隱藏了進(jìn)程通信的細(xì)節(jié),對(duì)用戶透明誊抛,減少了通信程序編制上的復(fù)雜性列牺。
高級(jí)通信機(jī)制可歸結(jié)為四大類
①共享存儲(chǔ)器系統(tǒng)(操作存儲(chǔ)區(qū)方式)
? 相互通信的進(jìn)程共享某些數(shù)據(jù)結(jié)構(gòu)或共享存儲(chǔ)區(qū),進(jìn)程之間能夠通過這些空間進(jìn)行通信拗窃。
a.基于共享數(shù)據(jù)結(jié)構(gòu)的通信方式(低級(jí))
b.基于共享存儲(chǔ)區(qū)的通信方式(高級(jí))
②消息傳遞系統(tǒng)(發(fā)--收方式)
最廣泛使用的一種瞎领,進(jìn)程間的數(shù)據(jù)交換,以格式化的消息為單位随夸。屏蔽底層復(fù)雜操作九默。
單機(jī):操作系統(tǒng)底層編程中的消息傳遞系統(tǒng)調(diào)用;
計(jì)算機(jī)網(wǎng)絡(luò):消息稱為報(bào)文宾毒。程序員直接利用系統(tǒng)提供的一組通信命令(原語)進(jìn)行通信驼修。(④客戶機(jī)-服務(wù)器系統(tǒng))
如socket編程,利用函數(shù)庫的send、receive等命令即可實(shí)現(xiàn)網(wǎng)絡(luò)通信
③管道通信(中間文件方式)
所謂“管道”乙各,是指用于連接一讀進(jìn)程和一寫進(jìn)程以實(shí)現(xiàn)通信的一個(gè)共享文件墨礁,又名pipe文件。
向共享文件輸入的寫進(jìn)程以字符流形式將大量的數(shù)據(jù)送入管道耳峦;而接收管道輸出的讀進(jìn)程則從管道中接收(讀)數(shù)據(jù)恩静。
首創(chuàng)于UNIX系統(tǒng)。其管道機(jī)制需提供三方面的協(xié)調(diào)能力:互斥蹲坷、同步驶乾、確定對(duì)方是否存在。
④Client-Server system
一個(gè)套接字就是一個(gè)通信標(biāo)識(shí)類型的數(shù)據(jù)結(jié)構(gòu)循签,包含了通信目的的地址轻掩,端口號(hào),傳輸層協(xié)議懦底、進(jìn)程所在的網(wǎng)絡(luò)地址,以及針對(duì)C\S程序提供的不同系統(tǒng)調(diào)用(API函數(shù))等罕扎。
系統(tǒng)中所有的連接都持有唯一的一對(duì)套接字及端口連接聚唐,從而方便地區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,確保通信雙方間邏輯鏈路的唯一性腔召。
2.消息傳遞通信的實(shí)現(xiàn)方法
1)直接通信方式
? 發(fā)送進(jìn)程利用OS所提供的發(fā)送命令(原語)杆查,直接把消息發(fā)送給目標(biāo)進(jìn)程。此時(shí)臀蛛,發(fā)送進(jìn)程和接收進(jìn)程都以顯式方式提供對(duì)方的標(biāo)識(shí)符亲桦。通常利用系統(tǒng)通信命令(原語):
? Send(Receiver, message);
? Receive(Sender, message);
2)間接通信方式
? 基于共享數(shù)據(jù)結(jié)構(gòu)的實(shí)體用來暫存發(fā)送給目標(biāo)進(jìn)程的消息;接收進(jìn)程則從該實(shí)體中浊仆,取出對(duì)方發(fā)送給自己的消息客峭。通常把這種實(shí)體稱為信箱。
n消息在信箱中可以安全地保存抡柿,只允許核準(zhǔn)的目標(biāo)用戶隨時(shí)讀取舔琅。既可實(shí)時(shí)通信,又可非實(shí)時(shí)通信洲劣。
3.消息傳遞系統(tǒng)的實(shí)現(xiàn)
? 單機(jī)和網(wǎng)絡(luò)環(huán)境下的高級(jí)進(jìn)程通信廣泛采用“消息傳遞”方式备蚓,需要考慮的問題:
①通信鏈路的建立
②消息格式
③同步方式
①通信鏈路的建立
計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境下,用原語顯式建立/拆除鏈路
單機(jī)系統(tǒng)只須利用系統(tǒng)原語囱稽,進(jìn)程間鏈路由系統(tǒng)自動(dòng)管理郊尝。
②消息格式
單機(jī)系統(tǒng),發(fā)送與接收進(jìn)程在同一臺(tái)機(jī)器战惊,環(huán)境相同故格式簡單流昏;
網(wǎng)絡(luò)環(huán)境下,受不同目標(biāo)機(jī)器的環(huán)境和長距離信息傳輸?shù)纫蛩氐挠绊懀⒏袷捷^復(fù)雜横缔,消息常是“大頭+正文”
③同步方式(如何控制發(fā)送和接收的狀態(tài))
發(fā)送進(jìn)程阻塞铺遂、接收進(jìn)程阻塞(無緩沖緊密同步)
發(fā)送進(jìn)程不阻塞、接收進(jìn)程阻塞(服務(wù)器程序)
發(fā)送進(jìn)程和接收進(jìn)程均不阻塞(緩沖隊(duì)列)
2.線程的屬性
多線程OS中茎刚,一個(gè)進(jìn)程包括多個(gè)線程襟锐,每個(gè)線程都是利用CPU的基本單位。
輕型實(shí)體:只需一點(diǎn)必不可少的膛锭、能保證獨(dú)立運(yùn)行的資源粮坞。(TCB)
獨(dú)立調(diào)度和分派的基本單位:調(diào)度切換迅速且開銷小。
可并發(fā)執(zhí)行
共享進(jìn)程資源:同進(jìn)程中的線程可共享相同的進(jìn)程地址空間初狰、已打開文件莫杈、信號(hào)量機(jī)構(gòu)等。
3.線程的信息
(TCB管理什么信息奢入?)
狀態(tài)參數(shù)
標(biāo)識(shí)符筝闹、運(yùn)行狀態(tài)、優(yōu)先級(jí)腥光、寄存器狀態(tài)关顷、堆棧、專有存儲(chǔ)器武福、信號(hào)屏蔽等议双。
運(yùn)行狀態(tài)
執(zhí)行、就緒捉片、阻塞
4.線程的創(chuàng)建和終止
? 在多線程OS中平痰,應(yīng)用程序啟動(dòng)時(shí),通常只有一個(gè)線程(初始化線程)在執(zhí)行伍纫,它根據(jù)需要再創(chuàng)建若干線程宗雇。
創(chuàng)建新線程:
? 利用線程創(chuàng)建函數(shù)(或系統(tǒng)調(diào)用),提供相應(yīng)參數(shù)莹规。線程創(chuàng)建函數(shù)執(zhí)行完后逾礁,返回一個(gè)線程標(biāo)識(shí)符供以后使用。
線程被終止:
? 不立即釋放資源访惜,只有當(dāng)進(jìn)程中的其它線程執(zhí)行分離函數(shù)后嘹履,資源才分離出來能被其它線程利用。
?????????? 被終止而未釋放資源的線程仍可被需要它的線程調(diào)用债热,使其重新恢復(fù)運(yùn)行砾嫉。