UNIX网络编程进程间通信
《UNIX网络编程进程间通信》从新温故和记录
聂炳玉
不断学习,不断提升
展开
-
14.System V 共享内存区
1、概述System V共享内存区在概念上类似于Posix共享内存区。代之以调用shmopen后调用mmap的是,先调用shmget,再调用shmat。对于每个共享内存区,内核维护如下的信息结构,它定义在<sys/shm.h>头文件中:struct shmid_ds{ struct ipc_perm shm_perm; /* operation permi...原创 2020-04-20 18:55:24 · 308 阅读 · 1 评论 -
13.Poxis 共享内存区
1、概述Posix.1提供了两种在无亲缘关系进程间共享内存区的方法。内存映射文件(memory-mapped file):由open函数打开,由mmap函数把得到的描述符映射到当前进程地址空间中的一个文件。内存映射文件也可以在无亲缘关系的进程间共享。 共享内存区对象(shared-memory object):由shmopen打开一个Posix.1 IPC名字(也许是在文件系统中的一个路...原创 2020-04-19 22:54:57 · 683 阅读 · 0 评论 -
12.共享内存区介绍
1、概述共享内存区是可用IPC形式中最快的。一旦这样的内存区映射到共享它的进程的地址空间,这些进程间数据的传递就不再涉及内核。然而往该共享内存区存放信息或从中取走信息的进程间通常需要某种形式的同步。2、mmap、munmap 和 msync 函数(mmap性能总结 https://blog.csdn.net/qq_33611327/article/details/81738195)...原创 2020-04-19 22:27:25 · 713 阅读 · 0 评论 -
11.System V信号量
1、概述我们在第10章中讲述信号量的概念时,现在讨论:二值信号量(binary semaphore):其值或为0或为1的信号量。这与互斥锁类似,若资源被锁住则信号量值为0,若资源可用则信号量值为1。接着把这种信号量扩展为计数信号量(counting semaphore):其值在0和某个限制值(对于Posix信号量,该值必须至少为32767)之间的信号量。这两种类型的信号量中,等待(...原创 2020-04-19 17:28:30 · 465 阅读 · 0 评论 -
10. Poxis 信号量
1、概述信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。本书讨论三种类型的信号量。Posix有名信号量:使用Posix IPC名字标识,可用于进程或线程间的同步。 Posix基于内存的信号量:存放在共享内存区中,可用于进程或线程间的同步。 System V信号量:在内核中维护,可用于进程或线程间的同步。我们暂时只考虑不同进程间的同步。首先...原创 2020-04-19 17:01:03 · 706 阅读 · 0 评论 -
09.记录上锁
1、概述记录锁是读写锁的一种扩展类型,它可用于有亲缘关系或无亲缘关系的进程之间共享某个文件的读与写。被锁住的文件通过其描述符访问,执行上锁操作的函数是fcntl。这种类型的锁通常在内核中维护,其属主是由属主的进程ID标识的。这意味着这些锁用于不同进程间的上锁,而不是用于同一进程内不同线程间的上锁。2、Posix fcntl 记录上锁记录上锁的Posix接口是 fcntl 函数。...原创 2020-04-19 16:05:13 · 200 阅读 · 0 评论 -
08.读写锁
1、概述读写锁的分配规则如下:只要没有线程持有某个给定的读写锁用于写,那么任意数目的线程可以持有该读写锁用于读。 仅当没有线程持有某个给定的读写锁用于读或用于写时,才能分配该读写锁用于写。某些应用中读数据比修改数据频繁,这些应用可从改用读写锁代替互斥锁中获益。任意给定时刻允许多个读出者存在提供了更高的并发度,同时在某个写入者修改数据期间保护该数据,以免任何其他读出者或写入者的干扰。...原创 2020-04-19 15:56:56 · 202 阅读 · 0 评论 -
07.互斥锁和条件变量
1、 概述互斥锁和条件变量总是可用来同步一个进程内的各个线程的。如果一个互斥锁或条件变量存放在多个进程间共享的某个内存区中,那么它还可以用于这些进程间的同步。2、互斥锁:上锁与解锁互斥锁指代相互排斥(mutual exclusion),它是最基本的同步形式。互斥锁用于保护临界区(critical region), 以保证任何时刻只有一个线程在执行其中的代码(假设互斥锁由多个线程共...原创 2020-04-19 12:43:01 · 777 阅读 · 0 评论 -
06.System V 消息队列
1、概述System V消息队列使用消息队列标识符(message queue identifier)标识。具有足够特权的任何进程都可以往一个给定队列放置一个消息,具有足够特权的任何进程都可以从一个给定队列读出一个消息。跟Posix消息队列一样,在某个进程往一个队列中写入一个消息之前,不求另外某个进程正在等待该队列上一个消息的到达。对于系统中的每个消息队列,内核维护一个定义在<sys...原创 2020-04-19 12:29:17 · 453 阅读 · 0 评论 -
05.Posix消息队列
1、概述消息队列可认为是一个消息链表。有足够写权限的线程可往队列中放置消息,有足够读权限的线程可从队列中取走消息。每个消息都是一个记录,它由发送者赋予一个优先级。在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。这跟管道和FIFO是相反的,对后两者来说,除非读出者已存在,否则先有写入者是没有意义的。一个进程可以往某个队列写入一些消息,然后终止,再让另外一个进程...原创 2020-04-19 10:52:15 · 524 阅读 · 0 评论 -
04.管道和FIFO
1. 管道所有式样的Unix都提供管道。它由pipe函数创建,提供一个单路(单向)数据流#include <unistd.h>int pipe(int fd[2]);// 返回:若成功则为0,若出错则为-1该函数返回两个文件描述符: fd[0]和fd[1]。前者打开来读,后者打开来写。例子:父进程(客户端)将文件名写入管道,子进程(服务器)读取数据(文件名)并...原创 2020-04-18 23:50:53 · 301 阅读 · 0 评论 -
03.System V IPC
1、概述以下三种类型的IPC合称为System V IPC: System V消息队列; System V信号量; System V共享内存区。 图3-1汇总了所有System V IPC函数。2、key_t 键和 ftok 函数三种类型的System V IPC使用 key_t 值作为它们的名字。头文件<sys/types.h>把key_...原创 2020-04-18 22:53:15 · 214 阅读 · 0 评论 -
02.Posix IPC
1、概述 以下三种类型的IPC合称为"Posix IPC"Posix消息队列; Posix信号量; Posix共享内存区。 图2-1汇总了所有Posix IPC函数。2、IPC名字 mg_open、sem_open和shm_open这三个函数的第一个参数就是这样的一个名字,它可能是某个文件系统中的一个真正的路径名,也可能不是。它必须符合已有的路...原创 2020-04-18 22:41:56 · 293 阅读 · 0 评论 -
01.进程间通信简介
1、概述 IPC是进程间通信(interprocess communication)的简称。传统上该术语描述的是运行在某个操作系统之上的不同进程间各种消息传递(message passing)的方式。本书还讲述多种形式的同步(synchronization),因为像共享内存区这样的较新式的通信需要某种形式的同步参与运作。1.2 消息传递类型管道(pipe):既可在程序...原创 2020-04-18 22:17:29 · 214 阅读 · 0 评论 -
00.《UNIX网络编程进程间通信》开篇
将有道笔记中记录的《UNIX网络编程进程间通信》搬到博客中。该专栏记录主要来源于《UNIX网络编程卷2:进程间通信》。原创 2020-04-18 22:13:34 · 132 阅读 · 0 评论