管道:
mkfifo 和匿名管道。主要在父子进程上面进行进程间通信比较方便。实际上存储在内核缓存区里面。
无论是匿名管道,还是命名管道,在内核都是一个文件。只要是文件就要有一个 inode。这里我们又用到了特殊 inode、字符设备、块设备,其实都是这种特殊的 inode。
在这种特殊的 inode 里面,file_operations 指向管道特殊的 pipefifo_fops,这个 inode 对应内存里面的缓存。
当我们用文件的 open 函数打开这个管道设备文件的时候,会调用 pipefifo_fops 里面的方法创建 struct file 结构,他的 inode 指向特殊的 inode,也对应内存里面的缓存,file_operations 也指向管道特殊的 pipefifo_fops。
写入一个 pipe 就是从 struct file 结构找到缓存写入,读取一个 pipe 就是从 struct file 结构找到缓存读出。
消息队列:一个进程间通信的队列
信号量 + 共享内存
共享内存需要信号量来进行一个同步操作
共享内存分配过程
这里shmem文件和vm_file到shmemdata的文件是一切皆文件的思想。就是分装了一层抽象。
信号
三种行为:一种