1. 为什么提供命名空间

命名空间是一种轻量级的虚拟化手段。

传统的虚拟化软件,是虚拟化多个不同的操作系统,对共享资源的限制很大。

通过提供命名空间,可以让进程与进程之间,用户与用户之间彼此看不到对方。

命名空间,相当于容器。

命名空间,本质上建立了系统的不同视图。

chroot是一种简单的命名空间,仅限于将进程限制在文件系统的某一部分。

2. 创建命名空间的方式

1). fork/clone创建新进程时,可以设置选项,使新进程与父进程共享命名空间,还是新进程创建一个独立的命名空间。

2). unshare系统调用,可以将进程的某些部分从父进程分离,其中也包括命名空间。

3. 实现:

   1: struct task_struct {

   2: ......

   3: /* namespaces */

   4:     struct nsproxy *nsproxy;

   5: ......

   6: }

   1: /*

   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 {

  14:     atomic_t count;

  15:     struct uts_namespace *uts_ns;

  16:     struct ipc_namespace *ipc_ns;

  17:     struct mnt_namespace *mnt_ns;

  18:     struct pid_namespace *pid_ns;

  19:     struct net          *net_ns;

  20: };

每个进程都有一个指针指向nsproxy结构体,多个进程可能共享一个nsproxy结构体,比如父子进程。

一个nsproxy代表一整套的命名空间实现,其中包含了几个子系统的命名空间:

UTS(UNIX Timesharing System),包含了运行内核的名称,版本,底层体系结构的信息;

IPC,包含了所有与进程间通信有关的信息;

MNT,包含了文件系统的视图;

PID,就是进程ID;

USER,就是用户;

NET,与网络相关。

各个子系统对于命名空间的实现与应用都各不相同。

Linux的命名空间的更多相关文章

  1. Linux的命名空间详解--Linux进程的管理与调度(二)【转】

    Linux Namespaces机制提供一种资源隔离方案. PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个Namespace里面的资源对其他Namesp ...

  2. Linux的命名空间详解--Linux进程的管理与调度(二)

    转自:http://blog.csdn.net/gatieme/article/details/51383322 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux- ...

  3. Linux网络命名空间

        命名空间(Linux namespace)是linux内核针对实现虚拟化引入的一个特性.创建的每个进程都有自己的命名空间,运行在其中的进程都像是在独立的操作系统中运行一样,命名空间保证了进程之 ...

  4. docke通信之Linux 网络命名空间

    一.前言 namespace(命名空间)和cgroup是软件容器化(想想Docker)趋势中的两个主要内核技术.简单来说,cgroup是一种对进程进行统一的资源监控和限制,它控制着你可以使用多少系统资 ...

  5. Docker核心实现技术(命名空间&控制组&联合文件系统&Linux网络虚拟化支持)

    作为一种容器虚拟化技术,Docker深度应用了操作系统的多项底层支持技术. 早期版本的Docker是基于已经成熟的Linux Container(LXC)技术实现的.自Docker 0.9版本起,Do ...

  6. linux命名空间详解_转

    转自: Linux的命名空间详解--Linux进程的管理与调度(二) Linux Namespaces机制提供一种资源隔离方案. PID,IPC,Network等系统资源不再是全局性的,而是属于特定的 ...

  7. Atitit  深入理解命名空间namespace  java c# php js

    Atitit  深入理解命名空间namespace  java c# php js 1.1. Namespace还是package1 1.2. import同时解决了令人头疼的include1 1.3 ...

  8. 网络虚拟化基础一:linux名称空间Namespaces

    一 介绍 如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...

  9. Linux CGroup

    catalog . 引言 . Cgroup安装配置 . Cgroup使用方式 . CGroup的子系统 1. 引言 我们已经讨论了Linux下命名空间(Namespace)的基本知识,详情请参阅另一篇 ...

随机推荐

  1. *.tar 用 tar –xvf 解压 *.gz 用 gzip -d或者gunzip 解压 *.tar.gz和*.tgz 用 tar –xzf 解压 *.bz2 用 bzip2 -d或者用bunzip2 解压 、*.tar.bz2用tar –xjf 解压

    解压: 1.*.tar 用 tar –xvf 解压, --skip-old-files跳过已经存在的文件,压缩用tar -cvf 2.*.bz2 用 bzip2 -d或者用bunzip2 解压 3.* ...

  2. 在windows命令行下安装和使用babel(es6to5)

    在自己的目录下新建一个babel-test/目录 进入这个目录 1. 安装babel命令和转换库:      npm install babel-cli      npm install babel- ...

  3. VMware Workstation Pro 15.5.0 官方版本及激活密钥

    0x01:下载连接: https://download3.vmware.com/software/wkst/file/VMware-workstation-full-15.5.1-15018445.e ...

  4. laravel定义全局变量

    laravel中config()函数可以获取 bootstrap/cache/config.php中的内容,而config文件夹下的所有配置文件夹中的内容可以通过  php artisan confi ...

  5. Kattis - barcode

    Kattis - barcode 题目原文: To prepare for ACM-ICPC 2017 in Saigon, the host univeristy – Ho Chi Minh cit ...

  6. charles使用教程

    概述 Charles是目前最强大的http调试工具,在界面和功能上远胜于Fiddler,同时是全平台支持.是收费软件,可以试用15分钟,下面提供了破解方法.   安装破解 https://www.cn ...

  7. RegionServer Splitting Implementation:regionServer 分裂过程分析

    图片: RegionServer Split Process The RegionServer decides locally to split the region, and prepares th ...

  8. Msys2编译Emacs

    Msys2编译Emacs */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} Msy ...

  9. LLppdd has a dream!

    LLppdd has a dream Time Limit: 3 s Memory Limit: 256 MB 题目背景 LLppdd经过他充满坎坷的初三后,他的成绩也充满了坎坷. 临近中考了,他希望 ...

  10. element ui step组件在另一侧加时间轴显示

    这是我开发的时候遇到的一个问题:项目需要在步骤条(竖直方向)的另一侧加时间显示,但是我在element ui 的step组件中一直没找着设置方法,所以就自己想了个办法加进来,效果如下: 代码如下,先上 ...