一、進程通信
1.高級進程通信的類型:
- 共享存儲器系統(操作存儲區方式)
基於共享數據結構的通信方式(低級)
基於共享存儲區的通信方式(高級) - 消息傳遞系統(發–收方式)send receive
- 管道通信(中間文件方式)字符流形式
- Client-Server system : 套接字(Socket)、遠程過程調用(遠程方法調用)
進程之間的互斥和同步——低級通信(效率低、通信對用戶不透明)
2.消息傳遞通信的實現方法
1)直接通信方式
通常利用系統通信命令(原語):
Send(Receiver, message);
Receive(Sender, message);
2)間接通信方式
基於共享數據結構的實體用來暫存發送給目標進程的消息;接收進程則從該實體中,取出對方發送給自己的消息。通常把這種實體稱爲信箱。
3.消息緩衝隊列通信機制
本機通信消息結構,如下:
type message buffer = record
sender; 發送者進程標識符
size; 消息長度
text; 消息正文
next; 指向下一消息緩衝區的指針
end
4.PCB中需要記錄有關通信的信息項
type ProcessControlBlock =record
…
mq; 消息隊列隊首指針
mutex; 消息隊列互斥信號量
sm; 消息隊列資源信號量
…
end
//發送原語:
procedure send(receiver, a)
begin
getbuf(a.size, i); 根據a.size申請緩衝區
i.sender :=a.sender; 將發送區a中的信息複製到 i
i.size :=a.size;
i.text :=a.text;
i.next :=0;
獲取接收進程內部標識符
getid(PCB set, receiver, j);
insert(j.mq, i); 將消息緩衝區插入目標消息隊列
signal(j.sm);
end
//接收原語:
procedure receive(b)
begin
j:=internal name; j爲接收進程內部標識符
wait(j.sm);
wait(j.mutex);
remove(j.mq, i); 將消息隊列中的第i個消息移出
signal(j.mutex);
b.sender :=i.sender;
b.size :=i.size; 將消息緩衝區i中的信息
b.text :=i.text; 複製到接收區b
end
二、線程
1.線程的屬性
多線程OS中,一個進程包括多個線程,每個線程都是利用CPU的基本單位。
2.同步和通信機制
互斥鎖
條件變量
條件變量
3.線程的實現方式
內核線程KST(kernel-level thread)
用戶線程ULT(user-level thread)
組合方式