Linux Primitives
这份 Presentation 文档在 High Level 纵览了 Linux 的诸多概念,很推荐阅读。
- Linux 就是一个 GNU user space,而程序则是和 GNU libc 与其它用户态的 libraries 交互的东西。当然,还有很多种 libc 的实现,我们可以选择一种 libc 的实现放在容器里面。
容器
本身不是内核的概念,它只是一组进程,有相同的 namespaces / cgroups 等等。- 进程 & 线程在内核中有相同的数据结构 task, 这货有千余个字段,大约 1k, 一般比较经常用到的是 user, pid, tgid 等字段。
- 至于用户和组,内核才不关心谁的名字是什么,说到底就是几个数字:ruid, suid, euid, fsuid
- 内核提供的虚拟文件系统可以将文件系统挂到一个目录去
- CGroups 控制/审计/限制系统资源,诸如 cpu 内存 网络等用量,它基于 文件系统的 API
- Namespaces 在内核中也依然是数据结构,可以通过
/proc/<pid>/ns
查看进程的 ns。