Linux Namespaces是资源隔离技术,在2.6.23合并到内核,而在3.12内核加入对用户空间的支持。Namespaces是容器技术的基础,因为有了命名空间的隔离,才能限制容器之间的进程通信,像虚拟内存对于物理内存那样,开发者无需针对容器修改已有的代码。使用Namespaces阅读以下教程前建议看看,https://blog.jtlebi.fr/2013/12/22/introduction-to-linux-namespaces-part-1-uts/。
一般我们运行程序都是Fork一个进程后马上执行Exec加载程序,而Fork的时候实际上用的是父进程的堆栈空间,Linux通过Copy On Write技术极大地减少了Fork的开销。Copy On Write的含义是只有真正写的时候才把数据写到子进程的数据,Fork时只会把页表复制到子进程,这样父子进程都指向同一个物理内存页,只有再写子进程的时候才会把内存页的内容重新复制一份。
POSIX(Portable Operation System Interface)听起来好高端,就是一种操作系统的接口标准,至于谁遵循这个标准呢?就是大名鼎鼎的Unix和Linux了,有人问Mac OS是否兼容POSIX呢,答案是Yes苹果的操作系统也是Unix-based的。有了这个规范,你就可以调用通用的API了,Linux提供的POSIX系统调用在Unix上也能执行,因此学习Linux的底层接口最好就是理解POSIX标准。
死锁(Deadlock)就是一个进程拿着资源A请求资源B,另一个进程拿着资源B请求资源A,双方都不释放自己的资源,导致两个进程都进行不下去。示例程序我们可以写代码模拟进程死锁的例子。package mainfunc main() { ch := make(chan int) <-ch}运行结果root@fa13d0439d7a:/go/src# go run deadlock.gofatal error: all goroutines are asleep - deadlock!