Linux 中的内存原语是什么?

Linux 中的内存原语是什么?

我正在阅读Docker 的实际应用还有这样一句话:

Docker 默认为每个容器创建唯一的 IPC 命名空间。 Linux IPC 命名空间分区共享内存原语,例如命名共享内存块和信号量以及消息队列。

尽管有这些例子,我还是不明白背后的概念是什么内存原语,您能解释一下这个术语吗?

答案1

人命名空间有一节关于IPC命名空间

IPC 命名空间隔离某些 IPC 资源,即 System V IPC 对象(请参阅超级会员(7))和(自 Linux 2.6.30 起)POSIX 消息队列(请参阅mq_概述(7))。这些 IPC 机制的共同特征是 IPC 对象由文件系统路径名以外的机制标识。

man svipc说它有三种类型的对象;共享内存对象、消息队列和信号量集(信号量是信号量的更一般情况)互斥体)。每个对象都有一个数字 ID,而不是文件系统路径。

POSIX 消息队列由名称标识,类似于文件名。 (Linux 实现使用通过访问的虚拟文件/dev/mqueue/)。

System V IPC 应被视为过时且难以使用。

请注意,Linux IPC 命名空间确实不是隔离 POSIX SHM。 Linux 实现通过 访问对象/dev/shm/,这是一个tmpfs虚拟文件系统。如果要隔离 POSIX SHM,可以使用挂载命名空间来更改挂载在 的文件系统/dev/shm/

答案2

机器问题将运用过程控制、信号管理、管道和共享内存的原语。 Unix 中的原语列出如下:

 • Process Control
     fork:
     exec:
 • Signal Management
     sigset:
     kill:
 • Pipes and Files
     pipe:
     mknod:
     unlink:
     read/write:
 • Shared Memory
     shmget:
     shmat:
 • Semaphores (System V style)
     semget:
     semop:
 • ipcs: This command reports on the status of inter-process communication facilities. Allows you to monitor the correct use and operation of the interprocess communication primitives in your program.

• ipcrm: Remove a message queue, semaphore set, or shared memory ID. This comes in handy if your program does not clean up things correctly.

• kill: Terminate or signal a process. Comes in handy to clean up your processes.

• ps: Report on process status. This at least lists all your processes.

参考

相关内容