namespace翻译为命名空间,简单理解为给类、变量、函数等限定一个区域。
namespace翻译为命名空间,顾名思义,就是把一些类、变量、函数包含在一个空间中,在调用的时候使用作用域限定符号来调用,防止出现同名类、变量、函数无法分清的情况。也可以用来区分一个程序中各个模块的功能,类似于类。
在Linux系统中,可以同时存在多用户多进程,那么对他们的运行协调管理,通过进程调度和进度管理可以解决,但是,整体资源是有限的,怎么把有限的资源(进程号、通信资源、网络资源等等)合理分配给各个用户所在的进程?Linux中提出了namespace机制,这是一种轻量级的虚拟化形式。再次之前,Linux中很多资源是全局管理的,例如,系统中所有进程,都是通过PID来标识的,就像每个学生的学号一样,在整个学校范围内,肯定是唯一标识这个学生的。用户的ID管理,各个用户通过全局为UID来标识,每个学校的校长也只有有一个,它的UID为0,权利最大,可以对学校内全部老师和学生发起命令。每个学生可以看到其他学生的活动,但是无权把他们赶出学校,这是可以理解的。这种集中统一的管理方式,很适合大规模人群的管理。
Linux内核namespace机制
Linux Namespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于某个特定的Namespace。每个namespace下的资源对于其他namespace下的资源都是透明,不可见的。因此在操作系统层面上看,就会出现多个相同pid的进程。系统中可以同时存在两个进程号为0,1,2的进程,由于属于不同的namespace,所以它们之间并不冲突。而在用户层面上只能看到属于用户自己namespace下的资源,例如使用ps命令只能列出自己namespace下的进程。这样每个namespace看上去就像一个单独的Linux系统。