linux 进程隔离Namespace 学习

news2024/12/23 23:28:14

一、linux namespace 介绍

1.1、概念

Linux Namespace是Linux内核提供的一种机制,它用于隔离不同进程的资源视图,使得每个进程都拥有独立的资源空间,从而实现进程之间的隔离和资源管理

Linux Namespace的设计目标是为了解决多个进程之间资源冲突的问题,提供一种轻量级的虚拟化技术。通过使用Namespace,可以在一个物理主机上创建多个独立的虚拟环境,每个环境都有自己的进程、文件系统、网络和用户视图。其提供了一种抽象机制,将原本全局共享的资源隔离成不同的集合,集合中的成员独享其原本全局共享的资源。如下图:
在这里插入图片描述

进程 A 和进程 B 分别属于两个不同的 Namespace,那么进程 A 将可以使用 Linux 内核提供的所有 Namespace 资源:如独立的主机名,独立的文件系统,独立的进程编号等等。同样地,进程 B 也可以使用同类资源,但其资源与进程 A 使用的资源相互隔离,彼此无法感知。

从用户的角度来看,每一个命名空间应该像一台单独的 Linux计算机一样,有自己的 init进程 (PID为 1),其他进程的PID依次递增, A和B空间都有PID为l的init进程, 子命名空间的进程映 射到父命名空间的进程上,父命名空间可以知道每一个子命名空间的运行状态,而子命名空间与子命名空间之间是隔离的。

1.2、虚拟化相关概念

1.2.1、常见的进程级虚拟化技术:

  • chroot(Change Root)chroot是一种将进程的根目录修改为指定目录的技术。它通过限制进程的文件系统访问范围,使得进程只能在指定的目录树中运行。这样可以实现一定程度的进程隔离。

  • Linux容器(Linux Containers,LXC)LXC是一种操作系统级虚拟化技术,它使用Linux内核中的命名空间(namespaces)和控制组(cgroups)等特性,实现了对进程的隔离。通过创建和管理多个容器实例,每个容器都拥有自己的文件系统、网络和进程空间,可以实现进程级别的隔离和资源控制。

  • Docker:Docker是基于LXC的一层封装,提供了更高级别的容器管理和部署工具。它通过使用镜像(Images)和容器(Containers)的概念,使得应用程序的打包、分发和部署更加方便。Docker在LXC的基础上添加了一些额外的功能和工具,使得容器的使用更加简单和高效。

  • systemd-nspawnsystemd-nspawnSystemd项目中的一个工具,它基于Linux命名空间和chroot,提供了一个简单的容器环境。它可以启动一个进程并将其隔离在一个独立的文件系统环境中,实现了进程的隔离和资源控制。

1.2.2、常见linux 虚拟化技术

完全虚拟化(Full Virtualization):
完全虚拟化技术通过在物理硬件上运行一个虚拟机监视器(Hypervisor),来模拟一个完整的虚拟硬件环境。在完全虚拟化中,虚拟机操作系统不需要进行修改,可以运行未经修改的操作系统。代表产品有:

  • KVM(Kernel-based Virtual Machine):KVM是一个开源的完全虚拟化解决方案,它基于Linux内核提供了虚拟化的能力。KVM使用QEMU(Quick Emulator)作为虚拟机监视器,并通过硬件虚拟化扩展(如Intel的VT-x和AMD的AMD-V)提供硬件加速。

半虚拟化(Para-virtualization):
半虚拟化技术在虚拟机内部对操作系统进行修改,使其能够与虚拟化层进行通信和协作,从而提高性能和效率。代表产品有:

  • XenXen是一个开源的半虚拟化解决方案,它可以在不修改操作系统的情况下运行虚拟机。Xen使用一种称为"Xen插入式内核"的方法,通过修改操作系统内核,使其与Hypervisor进行通信,实现半虚拟化。

容器虚拟化(Containerization):
容器虚拟化技术通过在操作系统级别创建隔离的容器实例,实现应用程序和依赖的隔离。容器共享操作系统内核,因此比虚拟机更轻量级和高效。代表产品有:

  • Docker:Docker是一种流行的容器化平台,它使用容器镜像(Images)来打包应用程序及其依赖,并通过Docker引擎在宿主机上运行容器实例。Docker提供了方便的构建、分发和部署工具,使得容器的使用变得简单和高效。
  • LXC(Linux Containers):LXC是一种轻量级的容器化解决方案,它利用Linux内核中的命名空间(namespaces)和控制组(cgroups)等特性,实现了对进程的隔离。LXC提供了一个容器运行时环境,可以在其中运行独立的用户空间实例

硬件辅助虚拟化(Hardware-assisted Virtualization):
硬件辅助虚拟化技术利用物理处理器中的虚拟化扩展,如Intel的VT-x和AMD的AMD-V,提供对虚拟化的硬件支持,提高虚拟机的性能和效率。上述的KVM和Xen也是硬件辅助虚拟化的解决方案。

轻量级虚拟化(Lightweight Virtualization):
轻量级虚拟化技术是一种特殊形式的虚拟化,它通过在操作系统级别利用命名空间(namespaces)和控制组(cgroups)等特性,实现对进程的隔离和资源控制。代表产品有:

  • Docker:除了作为容器化平台,Docker也提供了一种轻量级的虚拟化方式。Docker容器可以在宿主机上以独立的进程运行,具有隔离的文件系统、网络和进程空间。

1.3、linux namespace 发展历史

Linux Namespace的发展历史可以追溯到2002年,最早是由Eric W. Biederman提出并实现。

以下是Linux Namespace的主要发展历程:

  • 2002年:最早的Linux Namespace实现由Eric W. Biederman在2.4内核版本中引入,包括Mount NamespaceUTS Namespace
  • 2006年:Eric W. Biederman和Serge E. Hallyn在2.6.24版本中引入PID Namespace,允许每个Namespace拥有独立的进程ID空间。
  • 2008年:Eric W. Biederman和Serge E. Hallyn在2.6.29版本中引入Network Namespace,实现了独立的网络隔离。
  • 2013年:Docker公司推出了Docker容器平台,基于Linux Namespace和Cgroups实现了轻量级的容器虚拟化技术,引发了容器技术的热潮。
  • 2016年:Linux Kernel 4.6版本中引入了IPC NamespaceUser Namespace,分别实现了进程间通信和用户隔离。
  • 2017年:Linux Kernel 4.11版本中引入了CGROUP Namespace,允许每个Namespace拥有独立的资源限制。

随着时间的推移,Linux Namespace逐渐成为Linux内核中的重要特性,为容器化技术的发展提供了基础。它提供了一种灵活且轻量级的隔离机制,使得可以在单个主机上创建多个独立的虚拟环境,实现了资源的隔离和管理。

1.4、linux namespace 作用

Linux Namespace的作用包括:

  • 进程隔离:Linux Namespace可以将不同进程隔离开,每个进程在自己的Namespace中运行,不受其他进程的影响,具有独立的进程视图。
  • 文件系统隔离:通过Mount Namespace,每个进程可以拥有自己的文件系统挂载点,实现文件系统的隔离。
  • 网络隔离:通过Network Namespace,每个进程可以拥有独立的网络设备、IP地址、路由表和防火墙规则,实现网络的隔离。
  • 进程间通信隔离:通过IPC Namespace,实现进程间通信(IPC)的隔离,使得不同的进程在不同的Namespace中无法直接通信。
  • 用户和用户组隔离:通过User Namespace,每个进程可以拥有独立的用户和用户组视图,从而实现用户和用户组的隔离。
  • 进程资源限制:通过PID Namespace和CGROUP Namespace,可以限制进程的资源使用,如CPU、内存、磁盘IO等,实现资源的管理和隔离。

通过使用Linux Namespace,可以在一个物理主机上创建多个独立的虚拟环境,每个环境都有自己的进程、文件系统、网络和资源限制,从而实现进程间的隔离和资源管理,提高系统的安全性和性能。
在这里插入图片描述

二、namespace 的主要函数

三、namespace 分类

四、namespace 声明周期

五、namespace API

参考文档

1、https://blog.csdn.net/y3over/article/details/128863060

2、https://www.cnblogs.com/sally-zhou/p/13398260.html

3、http://www.taodudu.cc/news/show-320037.html?action=onClick

4、http://www.360doc.com/content/21/0803/11/31115656_989326901.shtml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零编写STM32H7的MDK SPI FLASH下载算法

从零编写STM32H7的MDK SPI FLASH下载算法 - 知乎 Part1前言 当我们要下载编译好的镜像到Flash时,首先要做的一步就是选择合适的Flash下载算法,而这个算法本身就是一个FLM文件: 代码既可以下载到内部flash,也可以下载到外部flash&…

pyinstaller打包exe运行闪退

这里写自定义目录标题 前言问题描述解决过程 前言 闪退原因可能有很多,这里记录下我遇到的问题,简单来说是dll调用错误导致的闪退,因为我的python用的是32位的,但是pyinstaller却是64位的,属于用conda的时候没注意。 …

【C#】C#调用进程打开一个exe程序

文章目录 一、过程二、效果总结 一、过程 新建WinForm程序,并写入代码,明确要调用的程序的绝对路径(或相对路径)下的exe文件。 调用代码: 这里我调用的另一个程序的路径是: F:\WindowsFormsApplication2…

Python自动化写作神器:告别语法拼写错误的秘诀

概要 写作是一种常见的沟通方式,无论是在学习、工作还是生活中,我们都需要用文字来表达自己的想法和观点。但是,写作并不是一件容易的事情,尤其是当我们使用非母语时,很容易出现语法和拼写错误,影响了文章…

javaScript:DOM中的CSS操作

目录 1.style 属性获取元素写在行间的样式 2.getComputedStyle(元素对象,null)可以获取元素的非行间样式 3.案例(定义一个div和按钮,每点击一次按钮div宽度增加) 效果预览图 代码实现 在 JavaScript 中,可以通过…

【8章】Spark编程基础(Python版)

课程资源:(林子雨)Spark编程基础(Python版)_哔哩哔哩_bilibili 第8章 Spark MLlib(6节) 机器学习算法库 (一)MLlib简介 1、机器学习 机器学习可以看做是一门人工智能的科学,该领…

【前端面试】快来看看这8个高级面试题

目录 前言1、仔细观察 和 - 运算符2、复制数组元素3、原型和__proto__之间的区别4、范围5、对象强制6、理解对象键7、运算符8、闭包 前言 JavaScript 是一种功能强大的语言,是网络的主要构建块之一。这种强大的语言也有一些怪癖。例如,您是否知道 0 -…

ES查询报错内容长度超过104857600

项目场景: 使用 ElasticsearchRestTemplate 或者使用 RestHighLevelClient 查询 ES 报错 内容长度超过 104857600 问题描述 ES 查询报错 entiity content is too long xxx for the configured buffer limit 104857600 Overridepublic void esQuery() {restHighL…

能耗管理+分区温控成为开发节能、省电神器的关键!从此告别电费刺客时代

取暖器在人们脑海中最深刻的印象,就是费电!而它耗电量大的原因,主要在于它是靠电能直接转化为热能:在取暖设备通电后,内部高电阻的电热丝发热,风机会将这股热量吹散到室内,从而达到全屋取暖的效…

OpenCV基础知识(10)— 人脸识别(人脸跟踪、眼睛跟踪、行人跟踪、车牌跟踪和人脸识别)

前言:Hello大家好,我是小哥谈。人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术,也是计算机视觉重点发展的技术。机械学习算法诞生之后,计算机可以通过摄像头等输入设备自动分析图像中包含的内容信息,随…

SpringCloud从基础到活用(超详细)

一、认识微服务 项目的架构方式有:单体架构、分布式架构、微服务架构- 随着互联网行业的发展,对服务的要求也越来越高,项目架构也从单体架构逐渐演变为现在流行的微服务架构。 - 这些架构之间有怎样的差别呢?1、单体架构 **单体…

Linux设备驱动程序

一、设备驱动程序简介 图1.1 内核功能的划分 可装载模块 Linux有一个很好的特性:内核提供的特性可在运行时进行扩展。这意味着当系统启动 并运行时,我们可以向内核添加功能( 当然也可以移除功能)。 可在运行时添加到内核中的代码被称为“模块”。Linux内核支持好几…

Si24R2F+畜牧 耳标测体温开发资料

Si24R2F是针对IOT应用领域推出的新款超低功耗2.4G内置NVM单发射芯片。广泛应用于2.4G有源活体动物耳标,带实时测温计步功能。相较于Si24R2E,Si24R2F增加了温度监控、自动唤醒间隔功能;发射功率由7dBm增加到12dBm,距离更远&#xf…

聊透 GPU 通信技术——GPU Direct、NVLink、RDMA

最近人工智能大火,AI 应用所涉及的技术能力包括语音、图像、视频、NLP 等多方面,而这些都需要强大的计算资源支持。AI 技术对算力的需求是非常庞大的,虽然 GPU 的计算能力在持续提升,但是对于 AI 来说,单卡的计算能力就…

大模型 Dalle2 学习三部曲(二)clip学习

clip论文比较长48页,但是clip模型本身又比较简单,效果又奇好,正所谓大道至简,我们来学习一下clip论文中的一些技巧,可以让我们快速加深对clip模型的理解,以及大模型对推荐带来革命性的变化。 clip结构 首选…

智慧公厕是对智慧城市“神经末梢”的有效激活,公共厕所实现可感知、可视化、可管理、可控制

在当今科技迅速发展的时代,智慧城市已经成为人们关注的热点话题。作为城市基础设施的重要组成部分,公共厕所也逐渐融入到智慧城市的建设中,成为城市管理的焦点之一。智慧公厕作为智慧城市的“神经末梢”,通过可感知、可视化、可管…

期权开户平台:怎样0门槛开户期权,不懂别乱来!

“期权开户平台有传统券商平台、在线期权分仓开户平台、期权科普馆等。具体可用的期权开户平台会因各地区的监管规定和券商政策而有所不同,下文为大家介绍期权开户平台:怎样0门槛开通期权,不懂别乱来!本文来自:期权酱 …

无涯教程-JavaScript - MINUTE函数

描述 MINUTE函数返回时间值的分钟。分钟以整数形式给出,范围为0到59。 语法 MINUTE (serial_number)争论 Argument描述Required/OptionalSerial_number 您想要找到的包含分钟的时间。 可以输入时间 作为引号内的文本字符串(如" 6:45 PM") 为十进制数字(如0.7812…

简易实现QT中的virtualkeyboard及问题总结

文章目录 前言:一、虚拟键盘的实现综合代码 二、为什么选用QWidget而不适用QDialog实现键盘三、从窗体a拉起窗体b后,窗体b闪退问题的探讨四、关闭主窗口时子窗口未关闭的问题 前言: 本文章主要包含四部分: 虚拟键盘的实现&#…

【LeetCode-中等题】207. 课程表

文章目录 题目方法一:bfs广度优先 有向图的拓扑排序(入度)方法二:dfs 深度优先搜索 题目 此题就可以转换为,求一个有向图是否存在环; 存在环,拓扑排序得出的结果是不完整的, 如果不…