Linux的命名空間

2022-07-24 18:00:33 字數 1343 閱讀 4643

命名空間是一種輕量級的虛擬化手段。

傳統的虛擬化軟體,是虛擬化多個不同的作業系統,對共享資源的限制很大。

通過提供命名空間,可以讓程序與程序之間,使用者與使用者之間彼此看不到對方。

命名空間,相當於容器。

命名空間,本質上建立了系統的不同檢視。

chroot是一種簡單的命名空間,僅限於將程序限制在檔案系統的某一部分。

1). fork/clone建立新程序時,可以設定選項,使新程序與父程序共享命名空間,還是新程序建立乙個獨立的命名空間。

2). unshare系統呼叫,可以將程序的某些部分從父程序分離,其中也包括命名空間。

struct task_struct

/*

2:

* a structure to contain pointers to all per-process

3:

* namespaces - fs (mount), uts, network, sysvipc, etc.

4:

*

5:

* 'count' is the number of tasks holding a reference.

6:

* the count for each namespace, then, will be the number

7:

* of nsproxies pointing to it, not the number of tasks.

8:

*

9:

* the nsproxy is shared by tasks which share all namespaces.

10:

* as soon as a single namespace is cloned or unshared, the

11:

* nsproxy is copied.

12:

*/

13:

struct nsproxy ;

每個程序都有乙個指標指向nsproxy結構體,多個程序可能共享乙個nsproxy結構體,比如父子程序。

乙個nsproxy代表一整套的命名空間實現,其中包含了幾個子系統的命名空間:

uts(unix timesharing system),包含了執行核心的名稱,版本,底層體系結構的資訊;

ipc,包含了所有與程序間通訊有關的資訊;

mnt,包含了檔案系統的檢視;

pid,就是程序id;

user,就是使用者;

net,與網路相關。

各個子系統對於命名空間的實現與應用都各不相同。

C 命名空間 預設命名空間與匿名命名空間

2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...

spring p命名空間 c命名空間

p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...

C 命名空間,也有叫命名空間

在c 中,名稱 name 可以是符號常量 變數 巨集 函式 結構 列舉 類和物件等等。為了避免在大規模程式設計中,以及在程式設計師使用各種各樣的c 庫時,這些識別符號的命名發生衝突,標準c 引入了關鍵字namespace 命名空間 名字空間 命名空間 名域 可以更好地控制識別符號的作用域。std是c...