版权声明:私藏源代码是违反人性的罪恶行为!博客转载无需告知,学无止境。 https://blog.csdn.net/qq_41822235/article/details/85447474
一、进程间通信
1.1 定义
进程间通信是指进程间的信息交换。高级通信工具主要有:共享内存、管道、消息、客户机-服务器系统。
1.2 消息缓冲队列机制
消息缓冲区数据结构:
typedef struct message_buffer
{
int sender; //发送进程标识符
int size; //消息长度
char *text; //消息正文
struct message_buffer *next; //指向下一个消息缓冲区的指针
};
PCB数据结构:
typedef struct process_control_block
{
...
struct message_buffer *mq; //消息队列
semaphore mutex; //消息队列互斥信号量
semaphore sm; //消息队列资源信号量
...
};
1.3 send原语
void send(reciever, a) //接收者id,发送区首址
{
//将发送区的内容复制到缓冲区中(1)
getbuff(a.size, i);
i.sender = a.sender;
i.size = a.size;
copy(i.text, a.text);
i.next = NULL;
//将缓冲区插入到接收者的消息队列中(2)
getid(PCBset, receiver.j); //获得接收进程的内部标识符
wait(j.mutex); //entry section
insert(&j.mq, i); //critical section
signal(j.mutex); //exit section
signal(j.sm); //资源信号量+1
}
1.4 recieve原语
void recieve(b) //b为接收区首址
{
wait(j.sm);
wait(j.mutex); //entry section
remove(j.mq, i); //critical section
signal(j.mutex); //exit section
b.sender = i.sender;
b.size = i.size;
copy(b.text, i.text);
releasebuff(i); //释放消息缓冲区
}