進(jìn)程通信:進(jìn)程通信是指進(jìn)程之間的信息交換。
一、低級通信——進(jìn)程之間的互斥和同步
? 信號量機制是有效的同步工具,但作為通信工具缺點如下:
(1)效率低(通信量少)
(2)通信對用戶不透明(程序員實現(xiàn),操作系統(tǒng)只提供共享存儲器供代碼操作)
二、高級進(jìn)程通信
? 用戶直接利用操作系統(tǒng)提供的一組通信命令,高效地傳送大量數(shù)據(jù)的通信方式。
操作系統(tǒng)隱藏了進(jìn)程通信的細(xì)節(jié),對用戶透明,減少了通信程序編制上的復(fù)雜性。
線程:進(jìn)程內(nèi)的一條執(zhí)行路徑。
多線程系統(tǒng)中,同一個進(jìn)程中的多個線程共享進(jìn)程資源,可并發(fā)執(zhí)行。
線程的屬性:多線程OS中,一個進(jìn)程包括多個線程,每個線程都是利用CPU的基本單位。
輕型實體:只需一點必不可少的、能保證獨立運行的資源。(TCB)
獨立調(diào)度和分派的基本單位:調(diào)度切換迅速且開銷小。
可并發(fā)執(zhí)行
共享進(jìn)程資源:同進(jìn)程中的線程可共享相同的進(jìn)程地址空間、已打開文件、信號量機構(gòu)等。
線程與進(jìn)程的比較
調(diào)度:線程作為CPU調(diào)度的基本單位,而進(jìn)程只作為其它資源分配單位。
并發(fā)性:進(jìn)程之間可以并發(fā),實質(zhì)上是不同進(jìn)程中的兩個線程并發(fā)。一個進(jìn)程的多個線程之間亦可并發(fā)。
擁有資源:進(jìn)程間資源相互獨立;同一進(jìn)程的各線程間共享。某進(jìn)程內(nèi)的線程在其它進(jìn)程不可見
系統(tǒng)開銷:線程上下文切換在同進(jìn)程環(huán)境下上下文切換要快得多。因為同進(jìn)程內(nèi)線程間共享內(nèi)存地址和打開的文件資源。
線程的管理
同步和通信機制:
1)互斥鎖
比較簡單的,控制線程互斥訪問資源;
適用于高頻度使用的關(guān)鍵共享數(shù)據(jù)和程序段;
unlock和lock兩個鎖操作原語;
2)條件變量
與互斥鎖一起使用
鎖保證互斥進(jìn)入臨界區(qū),但利用條件變量使線程阻塞
注意不滿足條件時,wait條件變量:
釋放互斥鎖
進(jìn)程阻塞在條件變量指向隊列中
被喚醒后要重新再設(shè)互斥鎖
3)信號量
私用信號量(privatesamephore)
用于同進(jìn)程的線程間同步,數(shù)據(jù)結(jié)構(gòu)存放在應(yīng)用程序的地址空間。屬于特定進(jìn)程,OS感知不到其存在。
公用信號量(publicsamephore)
用于不同進(jìn)程間或不同進(jìn)程中線程的同步,數(shù)據(jù)結(jié)構(gòu)由OS管理,存放在受保護(hù)的系統(tǒng)存儲區(qū)。