Linux课堂笔记 | 进程2——命名空间

元气小坏坏 提交于 2020-10-25 07:04:49

Linux 容器技术(Linux Containers,LXC)

Linux 操作系统上提供的一种操作系统级虚拟化 (Operating-system-level virtualization)技术
允许在同一 Linux 内核的基础上对不同进程族的环 境进行划分和隔离。
容器技术使用 Linux 内核提供的 namespace 机制隔离应用环境,同时使用 cgroups 机制限制进程资源
Docker 是 Docker.Inc 发布的一款开源 Linux 容器引 擎,与2013年3月首次发布


Linux cgroups 机制

cgroups 最早在2006年开始由 Google 的工程师发起, 并在2008年1月首次合并到 Linux 主线内核版本 2.6.14
目的:为加入控制组的进程提供资源的限制和审计
- 这里的”资源”包括进程所使用的 CPU,内存,磁盘 I/O 和网络

Linux 将 cgroup 实现为一个文件系统,通常位于 /sys/fs/cgroup 下

  • 目录下包含 cpu,memory,devices 等资源
  • 可以在相应资源下创建分组写入资源限制
  • 然后将进程加入分组来对进程资源进行控制。

支持

在编译时启用
-逐一指定需要支持的命名空间
-一般性支持总是会编译到内核中

默认命名空间
-没有显式指定的话,则每个进程关联到一个默 认的命名空间

创建

创建新进程
- Flag:与父进程共享命名空间 or 建立新命名空间

unshare系统调用
- 分离进程上下文中与其他进程共享的部分,包 括命名空间

实现

命名空间的实现需要两个部分
- 内核子系统命名空间 :将此前所有的全局组件包装到命名空间中
- 关联 : 将给定进程关联到所属各个命名空间

nsproxy

struct nsproxy
用于汇集指向特定于子系统的命名空间包装器的指针
这里写图片描述

这里写图片描述
通过pid 和task_struct互推

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!