linux中的namespace


命名 空間是用來組織和重用代碼的。如同名字一樣的意思,NameSpace(名字空間),之所以出來這樣一個東西,是因為人類可用的單詞數太少,並且不同的人寫的程序不可能所有的變量都沒有重名現象,對於庫來說,這個問題尤其嚴重,如果兩個人寫的庫文件中出現同名的變量或函數(不可避免),使用起來就有問題了。為了解決這個問題,引入了名字空間這個概念,通過使用 namespace xxx;你所使用的庫函數或變量就是在該名字空間中定義的,這樣一來就不會引起不必要的沖突了。
通常來說,命名空間是唯一識別的一套名字,這樣當對象來自不同的地方但是名字相同的時候就不會含糊不清了。使用擴展標記語言的時候,XML的命名空間是所有元素類別和屬性的集合。元素類別和屬性的名字是可以通過唯一XML命名空間來唯一。
在XML里,任何元素類別或者屬性因此分為兩部分名字,一個是命名空間里的名字另一個是它的本地名。在XML里,命名空間通常是一個統一資源識別符(URI)的名字。而URI只當名字用。主要目的是為了避免名字的沖突。
 
namespace,命名空間,從名字上看,應該是類似於包含許多名字的空間,打個比方,三年一班的小明和三年二班的小明,雖說他們名字是一樣的,但是所在班級不一樣,那么,在全年級排行榜上面,即使出現兩個名字一樣的小明,也會通過各自的學號來區分。對於學校來說,每個班級就相當於是一個命名空間,這個空間的名稱是班級號。班級號用於描述邏輯上的學生分組信息,至於什么學生分配到1班,什么學生分配到2班,那就由學校層面來統一調度。大致應該就是這么個意思,恩。
 
Linux Namespaces機制提供一種資源隔離方案。PID,IPC,Network等系統資源不再是全局性的,而是屬於某個特定的Namespace。每個namespace下的資源對於其他namespace下的資源都是透明,不可見的。因此在操作系統層面上看,就會出現多個相同pid的進程。系統中可以同時存在兩個進程號為0,1,2的進程,由於屬於不同的namespace,所以它們之間並不沖突。而在用戶層面上只能看到屬於用戶自己namespace下的資源,例如使用ps命令只能列出自己namespace下的進程。這樣每個namespace看上去就像一個單獨的Linux系統。

 

 

在Linux系統中,可以同時存在多用戶多進程,那么對他們的運行協調管理,通過進程調度和進度管理可以解決,但是,整體資源是有限的,怎么把有限的資源(進程號、通信資源、網絡資源等等)合理分配給各個用戶所在的進程?Linux中提出了namespace機制,這是一種輕量級的虛擬化形式。再次之前,Linux中很多資源是全局管理的,例如,系統中所有進程,都是通過PID來標識的,就像每個學生的學號一樣,在整個學校范圍內,肯定是唯一標識這個學生的。用戶的ID管理,各個用戶通過全局為UID來標識,每個學校的校長也只有有一個,它的UID為0,權利最大,可以對學校內全部老師和學生發起命令。每個學生可以看到其他學生的活動,但是無權把他們趕出學校,這是可以理解的。這種集中統一的管理方式,很適合大規模人群的管理。

    隨着大數據、虛擬化的興起,Linux為了提供更加精細的資源分配管理機制,給出了namespace機制解決方法

 

 
 命名空間建立系統的不同視圖, 對於每一個命名空間,從用戶看起來,應該像一台單獨的Linux計算機一樣,有自己的init進程(PID為0),其他進程的PID依次遞增,A和B空間都有PID為0的init進程,子容器的進程映射到父容器的進程上,父容器可以知道每一個子容器的運行狀態,而子容器與子容器之間是隔離的。
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM