C++編程經驗(10):無鎖編程其實沒那么玄乎
735
2025-04-07
大家都知道Docker容器的本質是宿主機上的進程,Docker通過namespace實現了資源隔離,通過cgroup實現了資源限制,通過寫時復制機制實現了高效的文件操作,那么更進一步namespace是怎樣隔離?很多人估計非常茫然。
在linux內核提供了6種namespace隔離的系統調用,它們基本完成了容器所需要做的隔離,如下表所示:
下面我們就以上幾種隔離展開說明:
1、UTS(UNIX Time-sharing System)namespace提供了主機名與域名的隔離,這樣每個Docker就可以擁有獨立的主機名和域名了,在網絡上可以視為一個獨立的節點,而非宿主機上的一個進程。Docker中,每個鏡像基本都是以自身所提供的服務名稱來命名鏡像的hostname,且不會對宿主機產生影響。
2、進程間通信(Inter-Process Communication,IPC)涉及的IPC資源包括常見的信號量、消息隊列和共享內存。申請IPC資源就是申請了一個全局唯一的32位ID,所以IPC namespace中實際上包含了系統IPC標識符以及實現POSIX消息隊列的文件系統。在同一個IPC namespace下進程彼此可見,不同IPC namespaceg下的進程則互相不可見。
3、PID namespace對進程PID進行了重新標號,即兩個不同namespace下的進程可以擁有相同的PID。第個PID namespace都有自己的計數器。內核 為所有的PID namespace維護了一個樹狀結構,最頂層的系統初始時創建的,被稱做root namespace.它創建的新的PID namespace被稱做child namespace,而原先的PID namespace稱為新創建節點的parnet namespace。通過這種方式,不同的PID namesapce會形成一個層級體系。所屬的父節點可以看到子節點中的進程,并可以通過信號等方式對子節點的進程產生影響,,反過來,子節點看不到父節點PID namespac中的任何內容。
(待續)
任務調度 Docker
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。