虛擬化–作業系統級 LXC Linux Containers核心輕量級虛擬化技術
軟體平臺:Ubuntu 14.04
容器有效地將由單個作業系統管理的資源劃分到孤立的組中,以更好的在孤立的組之間有衝突的資源使用需求。與其他的虛擬化比較,這樣既不需要指令級模擬,也不需要即時編譯。容器可以在寒心CPU本地執行指令,而不需要任何專門的解釋機制。此外半虛擬化和系統呼叫替換的複雜性。
LXC的實現是基於核心中的namespace和cgroup實現的。
namespace:
和C++中的namespace概念相似。在Linux作業系統中,系統資源如:程序、使用者賬戶、檔案系統、網路都是屬於某個namespace。每個namespace下的資源對於其他的namespace資源是透明的,不可見的。因為在作業系統層上就會出現相同的pid的程序,多個相同uid的不同賬號。
核心中的實現:
namespace是針對每一個程序而言的,所以在task_struct結構的定義中有一個指向nsproxy的指標
1 | /* namespaces */ |
2 | struct nsproxy *nsproxy; |
該結構體的定義如下:
01 | /* |
02 | * A structure to contain pointers to all per-process |
03 | * namespaces - fs (mount), uts, network, sysvipc, etc. |
04 | * |
05 | * The pid namespace is an exception -- it's accessed using |
06 | * task_active_pid_ns. The pid namespace here is the |
07 | * namespace that children will use. |
08 | * |
09 | * 'count' is the number of tasks holding a reference. |
10 |
|