【操作系统百科】进程与 fork/exec 的历史包袱
fork 在 1971 年的 PDP-7 上是一句几十行的汇编;五十年后在一台 256GB 内存的服务器上同一句 fork() 要复制几百万个页表条目。本文讲 fork 的语义、COW 的账本、vfork/clone3/posix_spawn 的替代谱系,以及 fork 与多线程、大内存、JIT、容器相性差在哪里。
发布来自土法炼钢兴趣小组的知识、笔记、进展和应用。主题包括数据结构和算法、编程语言、网络安全、密码学等。
共 4 篇文章 · 返回首页
fork 在 1971 年的 PDP-7 上是一句几十行的汇编;五十年后在一台 256GB 内存的服务器上同一句 fork() 要复制几百万个页表条目。本文讲 fork 的语义、COW 的账本、vfork/clone3/posix_spawn 的替代谱系,以及 fork 与多线程、大内存、JIT、容器相性差在哪里。
容器不是魔法。它就是几个系统调用。本文用 C 从 clone() 开始,逐个开启 PID/UTS/Mount/IPC namespace,看隔离到底是怎么回事。50 行代码,你就拥有了一个'容器'的雏形。
上一篇我们用 clone() 隔离了 PID、主机名和挂载点,但那个'容器'连 lo 都 ping 不通。本文从 CLONE_NEWNET 出发,用 veth pair + bridge + iptables MASQUERADE,一步步给容器接上网。
五篇文章攒了一堆内核积木:namespace、netns、rootfs、cgroup、overlayfs。现在是时候用 Go 把它们拼成一个能跑的容器运行时了。不到 500 行代码,create/start/exec/kill/delete,五个命令走完容器的一生。