关于namespace

namespace和cgroup被称为当下轻量虚拟化技术的核心。

namespace实现资源隔离。
cgroup实现资源限制,主要是针对cpu和mem。

那linux系统下namespace是如何实现资源隔离的呢?
具体都隔离了哪些方面?

资源类型

提到资源隔离,所包含的资源类型包括:cpu 内存 网络 存储空间 进程和上下文环境。
隔离其实就是隔离这些因素。

linux的namespace给我们提供了这些资源的隔离能力:

分别是:

  • system V IPC 信号量、消息队列、共享内存
  • 网络栈、设备、端口号
  • 文件挂载点
  • 进程编号
  • 用户和组
  • 主机名

查看资源的namespace

通过 $ ll /proc/<进程PID>/ns 可以看到当前进程的namespace信息。

root@ubuntu-server:~# ll /proc/2499/ns
total 0
dr-x--x--x 2 root root 0 Jun 11 06:02 ./
dr-xr-xr-x 9 root root 0 Jun 11 06:01 ../
lrwxrwxrwx 1 root root 0 Jun 11 06:02 cgroup -> 'cgroup:[4026531835]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 ipc -> 'ipc:[4026531839]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 mnt -> 'mnt:[4026531841]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 net -> 'net:[4026531840]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 pid_for_children -> 'pid:[4026531836]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 time_for_children -> 'time:[4026531834]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 user -> 'user:[4026531837]'
lrwxrwxrwx 1 root root 0 Jun 11 06:02 uts -> 'uts:[4026531838]'

系统调用函数

  • unshare 实现在原进程上切换namespace。
  • clone 在创建进程的同时,创建namespace
  • setns 将当前进程加入到已有的namespace中。

这三个函数实现了在进程创建时、后实现对namespace的切换。

https://www.cnblogs.com/sparkdev/p/9365405.html

posted @   zongzw  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示