进程通信、线程

一、进程通信的类型

1、共享存储器系统(操作存储区方式,共享某些数据结构或共享存储区)
a、基于共享数据结构的通信方式(低级,适合传递少量数据)
进程公用某些数据结构,借以实现诸进程间的信息交换
b、基于共享存储区的通信方式(高级)
进程可通过对共享存储区中数据的读或写来实现通信

2、消息传递系统(发–收方式)
进程间的数据交换,以格式化的消息为单位(例如:计算机网络中的消息称为报文)

3、管道通信(中间文件方式)
连接一读进程和一写进程以实现通信的一个共享文件。写进程以字符流形式将大量的数据送入管道;而接收管道输出的读进程则从管道中接收(读)数据。

4、Client-Server system
a、套接字(Socket)
一个套接字就是一个通信标识类型的数据结构,包含了通信目的的地址,端口号,传输层协议、进程所在的网络地址,以及针对C\S程序提供的不同系统调用(API函数)等。系统中所有的连接都持有唯一的一对套接字及端口连接。
b、远程过程调用(远程方法调用)
RPC的基本通信模型是基于Client/Server进程间相互通信模型的一种同步通信形式;它对Client提供了远程服务的过程抽象,其底层消息传递操作对Client是透明的。

二、消息传递通信的实现方法
1、直接通信方式(利用OS所提供的发送命令(原语),直接把消息发送给目标进程)
原语:Send(Receiver, message);Receive(Sender, message);
例:

Producer:
repeat
           …
           produce an item in nextp;
           …
           send(consumer, nextp);
until  false;
Consumer:
repeat
           receive(producer, nextc);
           …
           consume the item in nextc;
until  false;

2、间接通信方式
基于共享数据结构的实体用来暂存发送给目标进程的消息;接收进程则从该实体中,取出对方发送给自己的消息。
原语:Send(mailbox, message);Receive(mailbox, message);

三、消息传递系统的实现方法
单机和网络环境下的高级进程通信广泛采用“消息传递”方式,需要考虑的问题:
1、通信链路的建立
2、消息格式
3、同步方式

四、消息缓冲队列通信机制
广泛应用于本地进程通信。
1、不需管理链路
2、定义简单数据结构(亦即消息格式)
3、实现发送和接收的操作原语

数据结构:
type message buffer = record
sender; 发送者进程标识符
size; 消息长度
text; 消息正文
next; 指向下一消息缓冲区的指针
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); 获取接收进程内部标识符
        wait(j.mutex);
        insert(j.mq, i); 将消息缓冲区插入目标消息队列
        signal(j.mutex);
        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、调度:线程作为CPU调度的基本单位,而进程只作为其它资源分配单位。
2、并发性:进程之间可以并发,实质上是不同进程中的两个线程并发。一个进程的多个线程之间亦可并发。
3、拥有资源:进程间资源相互独立;同一进程的各线程间共享。某进程内的线程在其它进程不可见
4、系统开销:线程上下文切换在同进程环境下上下文切换要快得多。因为同进程内线程间共享内存地址和打开的文件资源;

六、线程的管理
1)互斥锁
2)条件变量
3)信号量
适用于逐渐复杂的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值