当前位置: 技术问答>linux和unix
信号量是如何共享的?
来源: 互联网 发布时间:2017-03-31
本文导语: 我知道信号量实现的大概过程,但是我就是不知道我在A进程中申请一个信号量,如果和A没有亲属关系的B进程是如何得到这个信号量的?如果信号量是内核的资源,那么信号量的主要属性是什么?别的进程是如何确定...
我知道信号量实现的大概过程,但是我就是不知道我在A进程中申请一个信号量,如果和A没有亲属关系的B进程是如何得到这个信号量的?如果信号量是内核的资源,那么信号量的主要属性是什么?别的进程是如何确定这个信号量的“地址”?
|
我知道信号量实现的大概过程,但是我就是不知道我在A进程中申请一个信号量,如果和A没有亲属关系的B进程是如何得到这个信号量的
---------------------------------
你在A中要申请一个命名信号量,那么B一定要知道这个命名才可以使用。也就是说他们必须使用固定的,预先定义好的命名。
如果信号量是内核的资源,那么信号量的主要属性是什么?
-------------------------------------------------
命名信号量必须是内核资源,信号量和其他IPC资源一样都是持久存在的,除非被显示的释放(进程退出并不会释放),否则永远驻留在系统中。信号量的属性参看kernel_src/ipc目录下内容
别的进程是如何确定这个信号量的“地址”?
-------------------------------
通过已知的命名
|
比如说system v的信号量 , semget,segop,semctl操作的
内核中的sem结构可以看下内核中的头文件里的结构体.可能还有部分对此的管理存储等在内核的实现文件.c文件中
linux/sem.h
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/sem.h?v=2.6.11.8
和linux/ipc.h
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/ipc.h
虽然sem.h和ipc.h在/usr/include/sys/下也存在。但这里只是一个与调用系统调用的接口,,真正的实现在内核中。 百度/GOOGLE linux系统调用
在内核的arch/x86/include/asm/unistd.h中定义了所有的系统调用。其中semget,semop,semctl都在这里面。这也能说明信号量的实现是在内核中了。
http://lxr.free-electrons.com/source/arch/arm/include/asm/unistd.h?v=2.6.32
不知道我说明白了没有。
内核中的sem结构可以看下内核中的头文件里的结构体.可能还有部分对此的管理存储等在内核的实现文件.c文件中
linux/sem.h
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/sem.h?v=2.6.11.8
和linux/ipc.h
http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/include/linux/ipc.h
虽然sem.h和ipc.h在/usr/include/sys/下也存在。但这里只是一个与调用系统调用的接口,,真正的实现在内核中。 百度/GOOGLE linux系统调用
在内核的arch/x86/include/asm/unistd.h中定义了所有的系统调用。其中semget,semop,semctl都在这里面。这也能说明信号量的实现是在内核中了。
http://lxr.free-electrons.com/source/arch/arm/include/asm/unistd.h?v=2.6.32
不知道我说明白了没有。