虚拟化-命名空间概念理解-linux内核架构p37

命名空间是虚拟化技术的一种方式,系统的一些全局资源由命名空间进行抽象(把系统资源放到结构中)。也就是说命名空间建立了系统的不同视图,因为每个命名空间所抽象的方式是不一样的。最终这种方式也实现了资源的隔离,相当于把一些资源放到一些容器中,各个容器是隔离的。但容器之间有些通信的方式。 Linux系统中的命名空间主要有UTS、IPC、MNT、PID以及NET。 每个命名空间包含多个进程,但在命名空间之间这些进程进程是相对独立的,如每个命名空间都有PID=0的进程。每个进程(task_struct)中有一个nsproxy指针,指向该进程的命名空间,进nsproxy结构中的count记录着该命令空间中进程的个数,从而也说明了该命名空间有多少个成员。 /* namespaces */ struct nsproxy *nsproxy;


/** A structure to contain pointers to all per-process
 * namespaces - fs (mount), uts, network, sysvipc, etc.
 *
 * 'count' is the number of tasks holding a reference.
 * The count for each namespace, then, will be the number
 * of nsproxies pointing to it, not the number of tasks.
 *
 * The nsproxy is shared by tasks which share all namespaces.
 * As soon as a single namespace is cloned or unshared, the
 * nsproxy is copied.
 */
struct nsproxy {
	atomic_t count;
	struct uts_namespace *uts_ns;
	struct ipc_namespace *ipc_ns;
	struct mnt_namespace *mnt_ns;
	struct pid_namespace *pid_ns;
	struct net 	     *net_ns;
};

<深入linux内核架构>中的描述:命名空间可以组织为层次,如图中,

一个命名空间是父命名空间,衍生了两个子命名空间。假定容器用于虚拟主机配置中,其中的每个容器必须看起来像是单独的一台Linux计算机。因此其中每一个都有自身的init进程,PID为0,其他进程的PID 以递增次序分配。两个子命名空间都有PID为0的init进程,以及PID分别为2和3的两个进程。由于相同的PID在系统中出现多次,PID号不是全局唯一的。
	虽然子容器不了解系统中的其他容器,但父容器知道子命名空间的存在,也可以看到其中执行的所有进程。图中子容器的进程映射到父容器中,PID为4到 9。尽管系统上有9个进程,但却需要15个PID来表示,因为一个进程可以关联到多个PID。至于哪个PID是"正确"的,则依赖于具体的上下文。如果命名空间包含的是比较简单的量,也可以是非层次的,例如下文讨论的UTS命名空间。在这种情况下,父子命名空间之间没有联系。

http://blog.sina.com.cn/s/blog_508d2c500100r5rj.html
http://www.cnblogs.com/lisperl/archive/2012/05/03/2480316.html
http://laokaddk.blog.51cto.com/368606/674256
http://book.51cto.com/art/201005/200881.htm
这四篇文章不错。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值