0%

《操作系统》Linux之命名空间

命名空间是Linux提供的一种虚拟化功能

创建新的命名空间有两种方式:

  1. clone系统调用在创建新进程的时候,可以传递一些标志
  2. 调用unshare也可以创建新的命名空间,不和已存在的任何其他进程共享命名空间

进程也可以使用系统调用setns,绑定到一个已经存在的命名空间

比如clone时传递CLONE_NEWIPC标志,就是新建一个IPC命名空间,新进程将处于这个IPC命名空间中运行,好比给把这个进程蒙在鼓里,这个进程已经不能知道真实的IPC有关的任何数据了

类似的还有其他的鼓

进程结构体中有一个nsproxy的字段,指向了一个命名空间代理实例,命名空间代理指向所有的命名空间实例,关系如下:

IPC命名空间

用来隔离 System V IPC 对象和 POSIX message queues

提供进程间通信的隔离能力

Network命名空间

提供网络隔离能力

Mount命名空间

提供磁盘挂载点和文件系统的隔离能力

PID命名空间

提供进程隔离能力

Time命名空间

User命名空间

提供用户隔离能力

UTS命名空间

提供主机名隔离能力

Cgroup命名空间

提供对进程进行资源限制的能力

总结

种类 Golang中标志 控制对象 作用
Cgroup CLONE_NEWCGROUP Cgroup root directory 提供对进程进行资源限制的能力
IPC CLONE_NEWIPC System V IPC, POSIX message queues 提供进程间通信的隔离能力
Network CLONE_NEWNET Network devices, stacks, ports, etc. 提供网络隔离能力
Mount CLONE_NEWNS Mount points 提供磁盘挂载点和文件系统的隔离能力
PID CLONE_NEWPID Process IDs 提供进程隔离能力
Time CLONE_NEWTIME Boot and monotonic clocks
User CLONE_NEWUSER User and group IDs 提供用户隔离能力
UTS CLONE_NEWUTS Hostname and NIS domain name 提供主机名隔离能力



微信关注我,及时接收最新技术文章