进程间通信[二]

命名管道
mkfifo filename

创建管道

共享内存
systemV

就是一段内存映射到两个进程之中,这段内存就是双方都可以看到同一块公共空间,变具备了进程间通信的前提条件。把映射去掉,然后释放空间,这就是释放共享内存。

共享内存属于操作系统,也是先描述再组织。理解共享内存=共享内存块+共享内存对应的内核数据结构。

进程间通信[二]_第1张图片

shmget创建共享内存。

形成再在shmget里面填充的key值

 当进程结束进程还存在  ipcs -m查看共享内存资源,因为他的生命周期随内核。不删就会随着操作系统一直存在所以需要手动删除,或者代码删除

我们需要删除共享内存

ipcrm -m id 号

代码删除

进程间通信[二]_第2张图片 删除的话最后一个属性不需要关注。//共享内存大小最好是页(page:4096)的大小整数倍。

这个里面有一个perms代表权限,0代表没有权限读取共享内存。共享内存映射到系统叫attach。去掉叫detach. 

进程通信的本质不同的进程是看到同一份资源,比如管道,共享内存,但是这也带来了一个时序问题,造成数据不一致。

1.把多个进程看到的同一份资源成为临界资源。

2.把自己进程,访问临界资源的代码成为临界区。

3.为了更好的进行进阶区的访问,可以让多执行流,在访问时候的时候,任何适合,都只能有一个进程进入临界区——互斥。每一个进程进入临界资源的时候,都需要先申请信号量。

这时候就要设计一个叫信号量的东西了。

所以多个执行流,执行的时候会互相干扰。在非临界区是不影响的。

你可能感兴趣的:(Linux,linux,运维,服务器)