2.6 通信、线程
一、进程通信
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)
- 组合方式