操作系统读书笔记___进程间通信模型

版权声明:私藏源代码是违反人性的罪恶行为!博客转载无需告知,学无止境。 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);    //释放消息缓冲区
}

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/85447474
今日推荐