欢迎光临
我们一直在努力

IPC资源管理与POSIX简介

在System V中,有三种不同的IPC机制:共享内存,消息队列,信号量。它们在内核中对应三种完全不同的结构体。 那么,内核如何统一管理不同的IPC资源?或者,怎么把三种不同的结构体塞进同一个数组来统一管理呢?

基类 与 派生类

提取公共属性(定义基类)

无论是哪种IPC资源,它们都有权限,拥有者,以及key. 内核把这些公共属性提取出来,做成一个结构体: struct kern_ipc_perm

强制规定内存布局(实现继承)

以struct msg_queue(消息队列)为例在这里插入图片描述 在C语言的内存模型中,如果一个结构体A是结构体B的第一个成员,那么A的起始内存地址,和B的起始内存地址是完全一样的 这就相当于msg_queue继承了kern_ipc_perm

指针的强制类型转换(多态)

内核管理IPC资源的的struct ipc_id_ary里的struct kern_ipc_perm *p[0]是一个只存基类指针的数组

当内核创建了一个消息队列msg_queue时,它会把这个消息队列的首地址,存进这个p数组里 当内核想要访问这个消息队列特有的属性时,它只需要做一次强制类型转换: ((msg_queue*)p[0] )->other

而在用户态调用msgget或shmget获取id时,本质是获取这个内核数组的下标…

POSIX

POSIX的全称是portable operating system interface 与System V一样,它也是一套标准 其诞生的核心目的是:“一次编写,到处编译”,只要是兼容POSIX标准的操作系统,开发者只要调用POSIX标准规定的C/C++接口,代码就能在这些系统上无缝移植

文件I/Oopen(), read(), write(), close()
进程控制 fork(), wait(), exec() 等
多线程 pthread_create(), pthread_mutex_lock() 等
进程间通信 (IPC) POSIX 共享内存 (shm_open)、POSIX 信号量 (sem_wait) 和消息队列
网络编程 经典的 Socket(套接字)接口

POSIX是一套更现代,更简洁,更符合“一切皆文件”哲学的接口,但为了兼容老代码,System V也保留了下来

赞(0)
未经允许不得转载:171主机测评 » IPC资源管理与POSIX简介
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址