什么是名字空间?地址空间?存储空间?(linux操作系统、越详细越好)

什么是名字空间?地址空间?存储空间?(linux操作系统、越详细越好),第1张

在用汇编语言或高级语言编写的程序中,是通过符号名来访问子程序和数据的。把程序中符号名的集合叫做“名字空间”。汇编语言源程序经过汇编,或者高级语言源程序经过编译,得到的目标程序是以0作为参考地址的模块。然后多个目标模块由连接程序连接成一个具有统一地址的装配模块,以便最后装入内存中执行。把目标模块中的地址称为相对地址,而把相对地址的集合叫做“地址空间”。

namespace技术有6种。namespace,在Linux 内核4.6之后又添加了Cgroup这namespace,5.6 之后又添加了时钟namespace。

这里有个小细节,表格创建Mount Namespace的系统调用参数是CLONE_NEWNS,而不是CLONE_NEWMOUNT。从字面理解是创建一个命名空间的意思,这是由于历史原因导致的,因为Mount Namespace是第一个namespace,内核的开发者可能也没有预料到后续还有其它的namespace的加入,所以就先把CLONE_NEWNS给占用了。

可见,namespace的隔离其实并不充分,除了上面的隔离能力,其他的都一样。譬如,时钟在内核5.6版本之前,所有容器和操作系统都共享同一个时钟,如果修改了操作系统的时间,所有容器都时间都会变化。

namespace(中文:名字空间,别名:命名空间、名称空间)是表示着一个标识符可见范围:

一个标识符可在多个namespace中定义,它在不同namespace中的含义是互不相干的。这样,在一个新的namespace中可定义任何标识符,它们不会与任何已有的标识符发生冲突,因为已有的定义都处于其他namespace中。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/63675.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-02-28
下一篇2023-02-28

发表评论

登录后才能评论

评论列表(0条)

    保存