Linux的命名空间
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的命名空间的更多相关文章
- Linux的命名空间详解--Linux进程的管理与调度(二)【转】
Linux Namespaces机制提供一种资源隔离方案. PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace.每个Namespace里面的资源对其他Namesp ...
- Linux的命名空间详解--Linux进程的管理与调度(二)
转自:http://blog.csdn.net/gatieme/article/details/51383322 日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux- ...
- Linux网络命名空间
命名空间(Linux namespace)是linux内核针对实现虚拟化引入的一个特性.创建的每个进程都有自己的命名空间,运行在其中的进程都像是在独立的操作系统中运行一样,命名空间保证了进程之 ...
- docke通信之Linux 网络命名空间
一.前言 namespace(命名空间)和cgroup是软件容器化(想想Docker)趋势中的两个主要内核技术.简单来说,cgroup是一种对进程进行统一的资源监控和限制,它控制着你可以使用多少系统资 ...
- Docker核心实现技术(命名空间&控制组&联合文件系统&Linux网络虚拟化支持)
作为一种容器虚拟化技术,Docker深度应用了操作系统的多项底层支持技术. 早期版本的Docker是基于已经成熟的Linux Container(LXC)技术实现的.自Docker 0.9版本起,Do ...
- linux命名空间详解_转
转自: Linux的命名空间详解--Linux进程的管理与调度(二) Linux Namespaces机制提供一种资源隔离方案. PID,IPC,Network等系统资源不再是全局性的,而是属于特定的 ...
- Atitit 深入理解命名空间namespace java c# php js
Atitit 深入理解命名空间namespace java c# php js 1.1. Namespace还是package1 1.2. import同时解决了令人头疼的include1 1.3 ...
- 网络虚拟化基础一:linux名称空间Namespaces
一 介绍 如果把linux操作系统比作一个大房子,那命名空间指的就是这个房子中的一个个房间,住在每个房间里的人都自以为独享了整个房子的资源,但其实大家仅仅只是在共享的基础之上互相隔离,共享指的是共享全 ...
- Linux CGroup
catalog . 引言 . Cgroup安装配置 . Cgroup使用方式 . CGroup的子系统 1. 引言 我们已经讨论了Linux下命名空间(Namespace)的基本知识,详情请参阅另一篇 ...
随机推荐
- 《ArcGIS Runtime SDK for .Net开发笔记》--介绍与环境搭建
一. ArcGIS Runtime SDK for .NET介绍 ArcGIS Runtime SDK for .net是一款针对windows平台的开发包.能够在开发出在windows phone, ...
- LOAD CSV ERROR: The used command is not allowed with this MySQL version
要执行的sql 把csvload进db LOAD DATA LOCAL INFILE '/path/datas/temp.csv' INTO TABLE test_table_name FIELDS ...
- 反向代理Reverse proxy
https://www.zhihu.com/question/24723688/answer/160252724 反向代理在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的 ...
- 二.通过jenkins对系统的监控(1)
说明:通过jenkins定时请求系统,判断系统是否挂了. 注:windows环境 1.新建一个自由风格的项目. 2.构建触发器选择定时构建. 3.执行windows批处理命令 4.构建后操作,发邮件 ...
- ubuntu php多版本共存切换
做开发时,由于本机开发的php版本跟线上发布的php版本不一致,很容易在上线后,发现因版本的影响导致一些bug,但又不想重新去换本机的php版本,那么多版本共存就很方便了!有必要时,切换到指定版本测试 ...
- 如何在vim中同时编辑多个文件
参考:http://stackoverflow.com/a/53668/941650 Why not use tabs (introduced in Vim 7)? You can switch be ...
- PAT_A1037#Magic Coupon
Source: PAT A1037 Magic Coupon (25 分) Description: The magic shop in Mars is offering some magic cou ...
- 【扩展lucas定理】
洛谷模板题面:https://www.luogu.org/problemnew/show/P4720 扩展卢卡斯被用于解决模数为合数情形下的组合数问题. 首先我们把模数mod质因数分解,解决模每个素数 ...
- Nehe OpenGL教程第一课-创建一个OpenGL窗口(Win32)
原文英文地址为:Creating an OpenGL Window (Win32),翻译的chm中文格式文档下载地址为:OpenGL教程电子书(chm格式)中文版,源代码在官网上也可以下载到,每 ...
- python调用tushare获取沪深股通十大成交股
接口:hsgt_top10 描述:获取沪股通.深股通每日前十大成交详细数据 注:tushare库下载和初始化教程,请查阅我之前的文章 输入参数 名称 | 类型 | ...