semaphore
每个semaphore用一个sem_array来代表,每个sem_array里包含一个或者多个sem结构,sem代表一个原子信号量,用户使用的semaphore跟内核使用的semaphore有个很大的区别在于,用户的semaphore可以包含多个信号值,每个信号值用sem来代表。如果进程使用semop()操作时带上了SEM_UNDO标志,那么进程对信号量的操作将会被一个sem_undo结构记录,这样当进程因为错误而终止时,系统可以使用sem_undo结构将信号量的值恢复到进程未使用的状态。
ipc_message & posix message queue
每个message用一个msg_queue结构来进行代表,queue里的信息使用msg_msg来表示。posix message queue的实现方式跟ipc_message(system v)是不同的,它使用一个特殊文件系统mqueue来实现的,这个文件系统可以被挂载到文件系统中。每个队列使用一个mqueue_inode_info来表示的,它跟一个mqueue文件系统的inode进行关联,也是通过address_space使用page cache来使用内存的。
ipc_sharedMemory
一个共享的内存用一个shmid_kernel结构来进行表示,它里面有个field指向file结构,file指向shm特殊文件系统的inode结构,共享的内存page frame使用的是page cache,通过address_space结构跟inode进行关联。这样的做的原因有2点:
1.可以使用vfs系统接口,也就是文件操作接口来进行操作
2.可以利用vfs的实现结构,从而实现代码重用