LXC容器相关论文笔记

2023-05-16

段赫.基于LXC容器资源优化的研究与实现.2016

一、绪论

容器虚拟化技术

传统虚拟化技术,实现一个虚拟机就意味着需要消耗了硬件资源来在底层系统上虚拟一个新的操作系统,所以除了传统模拟硬件的虚拟化技术,另一种方式更适合一个云平台,就是以LXC(Linux container)和Docker为代表的基于容器的软件虚拟化。

使用容器能够直接利用底层宿主机的操作系统,通过分割与隔离将系统资源划分到不同的组中,通过这种直接分组的方式解决各个容器间的资源争夺,从而平衡了使用虚拟化后对资源需求产生的冲突,同时对容器内的应用来说,其感觉不到虚拟化平台的存在,可以直接使用共享的底层资源如同直接在主机系统上运行一样。

使用容器虚拟化技术也避免了某些传统的如XEN等的虚拟手段在靠半虚拟化实现时,更换新的适合平台的系统调用而产生的问题。容器可以使你的应用在不同的Linux发行版之间迁移。

但容器的隔离性无法达到虚拟机的水平,不完全的隔离隐含着安全问题。

Linux container(LXC)是主流的内核虚拟化技术,它在Limux平台上借由内核提供的Namespace和Cgroups实现,它们分别实现了容器进程的沙盒隔离以及资源限制。

国内外研究现状

目前被广泛使用的虚拟化众多,容器虚拟化最为主流的是LXC和Docker,其中后者主要在Ixc的上加入了层级化的image文件系统,通过这层文件系统采用了相同image实现的容器可以以共享的方式使用内部文件和各类数据,并且能共用相关的工具,最后容器系统能copy on write机制来维护自己的数据。

LXD是LXC最新发布的重构实现版本,LXD包括三个组件:系统范围的守护进程(xd)、命令行客户端(Ixc)和OpenStack Nova插件(nova-compute-lxd),它的主要特性是:通过简单明了的命令行API提供了高效且便捷的用户体验,类似docker采用基于image镜像的实现,还有更好的完善了热迁移功能。

此外CoreOS在Github上发布了一款容器引擎竞争产品原型Rocket,它是与docker实现原理相似的一种容器引擎,通过它开发者能够将应用和依赖包放在在拥有移植能力的rocket环境中运行,简化搭环境等部署工作。Rocket在其原型的设计时,针对Docker固有的安全功能上存在的各种缺陷进行了改善。

另外,此外还有其他很多基于容器的管理技术,比如Docker可以使用的Kubernets提供的一种机器集群的管理方式对其工作进行辅助。从原理上来看,Kubernets是以调度器形式实现,它能够保证当宿主机崩溃时其中的容器程序的依旧可以维持运行。

现在Microsoft同样要为Docker提供了服务,它们计划为Windows提供一种基于容器的实现方案,同时提供兼容Docker环境的API接口。

目前容器技术的缺陷

容器因与底层os共享内核,而非采用独立的os,无法保证完全的隔离,安全性较低,再者容器实现虚拟化是通过对每个容器配置Cgroups达到资源的隔离,虽然实现简单,但由Cgroup提供的资源限制无法解决进一步的资源竞争,被cgroups限制的进程之间仍然存在很多资源竞争,难以针对实际使用场景进一步的优化,故性能依旧有着很大的提升空间,针对容器的实际运行,可以提供新的解决方案。

容器和虚拟机的另一个差异是:当虚拟机挂起或是关闭时,除了内存中无法保存的临时数据外,文件系统中的文件数据不会发生变化;而停止一个容器,对创建容器镜像的所有状态做的改变都将丢失。这是在通过容器运行时必须认识到的关键变化:容器的生命周期是短暂的,是一次性的。短暂的原因是由于创建一个新容器要依照底层系统创建一个空白的文件系统(rootfs),在容器上产生的所有操作都将体现在其中,但是当容器停止,该rootfs目录下的所有文件作为临时的数据存储会被删除,容器对它进行的操作在容器停止时将消失。

本文主要工作

对LXC进行优化,优化模型要对原LXC平台进行修改:
1、通过运行时动态监控容器的执行状态,实时调节其配置环境,对其使用的资源做到按需分配。
2、从新的角度分别对LXC的隔离性从逻辑上和物理上两个角度出发,优化提升,增强了隔离性。

二、基于容器的虚拟化技术实现原理

容器引擎在实现时能够直接利用Host主机的os,在更低的内核层面依赖内核提供的服务机制实现了资源的隔离,从而令各方面的开销得到降低,具体来说它使用了内核提供的namespaces机制控制各个命名空间的权限和隔离,再由Cgroups的配置实现对物理资源的控制。

namespace用于隔离,Cgroup用于资源分配

namespace机制

容器虚拟化技术所需的隔离性是通过采用由linux内核所提供的namespace机制所实现的,通过将资源划分至不同且特定的namespace中,使的诸如PID.IPC等系统资源不再是全局性的,修改后namespace下的资源均对其他namespace来讲是被隐藏的,由此令使用了不同的namespace的容器进程包含的资源隔离开,在容器中只能看到属于自己的资源,不同容器中的资源即使重名亦不冲突,像是独立的系统一样。

Cgroup机制

Cgroups是自linux内核cpuset中剥离而来,在整合现有各个子系统后,由内核直接提供的一种实现进程分组并对其使用的物理资源进行限制、隔离与记录的机制,它不单是资源统一管理的框架,同样是容器沙箱实现虚拟化的资源管理控制部分的底层基础。不同于传统虚拟化虚拟硬件的实现方式,它是在操作系统级别上进行实现的,故而无法做到底层虚拟机资源的绝对隔离,稳定性同样无法比肩,但却有优良的灵活性,同时在低成本的条件下带来的性能损耗更小。总结一下,Cgroups可以限制、记录、隔离进程组所使用的物理资源,为基于容器的虚拟化的实现提供了基础,更是相关管理工具设计的核心所在。

三、本文优化模型

在这里插入图片描述
左图为传统的LXC架构模型,右图为本文提出的优化模型。

首先通过组的方式取代传统LXC的管理方式,每个容器组是由用户决定,包含一个或多个在功能上有联系的容器。通过组的方式管理容器时,如何将操作对应到具体容器上,这里是由Vpool提供的label来标记容器属性。

虚拟容器池(Vpool)的结构是物理的资源池和运行在其中的容器两个部分组成。在有了分组运行的容器后,最终需要将单个容器绑定到具体的物理资源池中,以Vpool表示一个物理资源池和其中运行的容器,再由Vpool manager进行管理,不同vpool就像不同物理机,相互隔离保持其独立的文件读写等权限。在采用分布式运行的集群中,为宿主机中的运行的程序提供了资源池,相比于管理员手动管理,它能自动平衡容器工作负载同时分配资源,不易出错且令分配更加高效。

调度器在设计时分为两个阶段,即对容器组的调度与内部容器的调度。容器组的调度指的是添加新的容器组后,如何结合容器组的服务配置文件和由Vpool manager提供的Vpool信息,将组内的所有容器绑定到不同的Host宿主机上的Vpool当中启动并运行的过程。单个容器的调度是采用本章介绍的容器资源动态调节组件对运行中的容器进行优化后,若当前环境对容器的运行依旧不利,则进行容器迁移的过程。

容器资源动态调节组件作用是对所有的运行中的容器申请的资源的分配进行扩张或压缩处理。将容器的运行过程分为三个阶段,分别实现对容器进程的创建优化,运行优化,以及释放优化。

对第一三阶段,无论是资源回收还是分配均为模型在后台动态执行,容器中的应用并无感知,通过创建时延迟分配,结合所处Vpool的资源配置信息和容器的label属性,在容器组细分为单个容器并分配后,如果当前系统负载高,资源抢占频繁时,按照管理员提前配置的优先级,后台进程会延缓资源的分配,优先级低的会延时处理。同样,删除时延迟释放为在容器完成工作后删除时,部分资源不会被立即释放,而交由后台优化进程代管,通过延迟统一处理多个释放请求,并在创建时会依据新容器的配置要求进行分配。

在第二阶段,通过配合Vpool中提出的保留类资源空间来设计缓冲区实现,加入缓冲后,在容器运行时可以使用的空间除去硬性分配的外,还有Vpool中的保留空间,可以使得内存需求的突然增大能被可控处理,然后下降至正常水平,在范围内不会直接导致运行中断而出错。同样当自身使用的少时,能把空间让给处在同一Vpool中的其他容器使用。

黄海涛.基于LXC的多系统虚拟化环境研究与实现.2019

一、本文主要工作

本文将运用虚拟化的技术,利用虚拟化带来的隔离性来解决Android上的存在的安全问题,对现有的虚拟化技术与方案进行研究与分析,提出能够在Android系统中实现的多系统虚拟化方案。虚拟化技术可以提供一个与外界隔离的独立空间,将应用置于虚拟系统环境中运行,可以保证其无法破坏到宿主机系统,也无法获取到宿主机的信息,这样就可以有效的防止了恶意程序对于Android系统的威胁,保证用户数据的安全性。

Android移动设备的虚拟化与普通的服务器或者PC相比,面临着许多的问题。首先是受到Android移动设备运行的内存资源的限制。移动设备的运行内存都比较小,当虚拟化多个系统以后,要合理分配这些资源,保障每一个虚拟机都能正常运行。其次,Android移动设备的计算能力比较弱。PC与服务器使用的都是x86指令集,其设计的目标是性能优先。而移动设备的大多数为ARM指令集的处理器,这种架构的的处理器一般功耗会比较低,适合移动设备上使用,但是计算性能相较于x86架构的会弱一些。最后是手机移动设备存在特殊的一些硬件设备如电源,传感器等,虚拟化的时候要解决这些设备的冲突。

(1)设计Android多系统虚拟化方案
对多种虚拟化技术进行研究分析,并且结合移动设备的特殊性,提出基于LXC容器技术的多系统虚拟化方案。这个方案与别的虚拟化实现相比,对内核与系统代码的修改较少,可移植性高,复用了Android内核,降低了虚拟化的开销,性能较好。
(2)实现基于Android多系统的LXC容器环境
通过对LXC进行研究,分析该工具的工作原理,然后通过修改Android内核,移植LXC工具与构造容器,在Android系统中实现多个互相隔离的LXC容器,为Android虚拟机提供了虚拟化的环境。
(3)对Android系统进行虚拟化改造,实现多系统的虚拟化
通过对Android系统中的通信,输入与显示系统的虚拟化改造,解决多系统同时运行时的产生的硬件冲突问题,并且还为系统添加了多系统之间的管理模块,用于管理虚拟机之间的相互切换与硬件设备使用的权限。
(4)对虚拟化方案进行测试与验证
在Android设备中实现本文提出的虚拟化方案,并对该设备进行功能与性能的测试,分析每个测试的结果,验证本方案的可行性,得出方案的优缺点。

二、操作系统级虚拟化

操作系统级虚拟化指的是的是将一个宿主操作系统进行划分,然后产生一个个独立的操作系统空间,正常的一个操作系统拥有一个用户空间实例,经过操作系统虚拟级虚拟化以后,其操作系统内核可以多个用户空间实例同时存在。这些独立的用户空间被称为容器,因此操作系统级虚拟化也被成为容器虚拟化技术,容器与宿主系统共享操作系统内核。通过对宿主系统的划分,每一个空间都有自己的独立的命名空间,进程资源等资源,因此容器中应用程序的实际运行效果与其他的虚拟化技术中在虚拟机中运行应用程序的效果是相同。这种虚拟化方式拥有下面的一些特点;
(1)操作系统级虚拟化所划分出来的容器,是以原来的系统作为模板,可以看成原来系统的副本,而其他虚拟化方案是真实安装的系统,拥有自己独立的内核。
(2)操作系统级虚拟化是对原有的系统进行划分,因此产生的虚拟化系统只能是与宿主系统相同的操作系统,而别的虚拟化技术则可以在一个物理硬件上运行不同的操作系统。
(3)操作系统级虚拟化中每个虚拟机具有强耦合性的特点,可以同时被配置,宿主系统的内核发生变化,则所有的虚拟机都会产生变化,而别的虚拟化技术中,每个虚拟机都是相互独立的,与宿主系统没有联系。
(4)操作系统机虚拟化技术虚拟出来的系统都是虚拟的,复用原来系统中的硬件驱动,性能消耗低,而其他技术都需要在VMM之上运行操作系统,拥有独立的硬件驱动,性能消耗高。

三、LXC容器概述

LXC(Linux container)是一种利用容器技术实现的操作系统级虚拟化技术。

它利用单个Linux内核运行多个隔离的Linux系统(容器),来自于Sourceforge网站上的一个开源项目,与普通的操作系统级的虚拟方案类似,LXC的实现不需要动态翻译操作指令,通过内核提供的功能实现数据的隔离。

LXC工具提供了用户空间的软件包,用于创建和管理容器。提供的常见的工具集如表2.1所示。

在这里插入图片描述
LXC的实现依赖Linux内核中Cgroups与Namespaces特性,而Cgroups与Namespaces这两个内核特性都已经加入到内核主线当中,对于任何的Linux系统,只需要开启相关的内核特性就可以使用LXC的功能。

Cgroup

Cgroups全称Control Groups,即分组控制,它是Linux内核中一种可以限制记录与隔离进程组中的物理资源的机制,该机制将系统中的进程组和它们的子进程划分到一个组中,对整个组进行物理资源使用上限的设定,进而控制组内的所有进程,整个组会按照预先设定好参数进行资源的管理。

每一个Cgroup代表的是一个控制组(control group),以某种标准进行划分的进程组,是Cgroups中资源控制的基本单位,而每一个进程则是Cgroups系统中最小控制单位。整个Cgroup机制由树状结构构成,每个控制组相当于树的一个节点,这样的一个结构成为层级结构(Hierarchy),每个子节点继承父节点中的所有规则,除此之外,Cgroup系统还有子系统的概念(subsystem),这些子系统是对控制组进行控制的控制器,每一个子系统负责控制一种资源,目前支持了对CPU、内存、块设备和网络等资源的控制。

Cgroups系统提供了下面的一些功能:
(1)资源限制。可以为控制组设置某一项资源的使用上限,每个控制组是层级结构中的一个节点,子系统与层级结构以附加的关系进行绑定,通过控制组进行相应的子系统配置,就能实现整个控制组在某个资源上的限制功能。
(2)设定优先级。可以设定层级系统中控制组使用资源的优先级,Cgroups系统会根据优先级与资源控制的配置,对每一个层级系统中的控制组进行资源的调度,优先级高的控制组优先使用层级系统分配的资源。
(3)资源统计。可以对层级结构中不同的控制组所使用的资源进行统计,记录,这里面的资源包括了CPU,内存,块设备资源等。
(4)控制功能。可以对层级系统中控制组中的进程发出暂停命令,让该控制组中的进程处于等待资源的状态,通过恢复命令让进程重新进入运行状态。

Namespace

Namespace特性是Linux内核提供的用于系统全局资源的一种隔离机制,该机制的实质是将Linux中内核资源进行重新分组,使得一组进程看到其中一组资源,另一组进程看到的是另外一组不同的资源。而在LXC容器技术中,多个容器会共享系统的内核资源,而Namespace特性则会将这些全局性的资源如PID,IPC、NET等,分配给某个Namespace,每个Namespace下的资源对于其他的Namespace是不可见的。
在这里插入图片描述

Namespace结构如图2.4所示,图中以进程号资源为例,PID代表的是每一个进程的进程号,Namespace运行在内核之上,将内核中进程号资源分成三个部分,分别为Namespacel,Namespace2与Namespace3。在每个Namespace空间中,可以有用相同的进程号,在全局的内核来看,这些进程号会带上命名空间信息相互是有区别的,而在Namespace空间中看,每个进程号都能获得与其他Namespace空间相同的进程号,通过这种方式,进程号资源被重新分配,每个Namespace空间互相隔离,提供了隔离的运行环境。其他的内核资源也是通过这样的方式实现的。

四、在Android系统上应用LXC

通过前文对LXC的介绍,可知LXC工具依赖的是Linux中特有的内核特性进行工作的。而Android系统的内核是由Linux内核修改的,同样拥有Cgroups与Namespaces这两个内核特性,这使得LXC在Android中运行成为可能。为了将LXC的容器虚拟化技术运用到Android系统中,本文提出了Android虚拟化环境实现的方案,本方案的目的是在Android系统中运行多个LCX容器。

根据操作系统级虚拟化的理论,本文提出的虚拟化环境方案的架构如图3.1所示。

在这里插入图片描述

整个虚拟化架构可以分为三个部分,最上层为虚拟化的容器环境,每个都是一个独立的虚拟化空间。容器所用的硬件和软件资源是互相隔离的,由LXC来统一管理与分配,容器与容器之间互相不可见。所有的容器共用一个Android内核,容器中所有用到的内核调用,都是通过LXC提供的接口往下直接调用内核中原来的实现。因此,可以把每一个容器环境看成独立的Android内核环境。

中间一层是由LXC实现,主要包括了资源隔离与提供内核调用接口两个功能。

资源隔离主要分为两个部分,第一部分是对内存,CPU与硬盘资源的隔离。LXC通过内核中Cgroups特性来对这部分的资源进行调配。第二部分是对每个容器内部的进程所使用到的资源进行分配隔离。LXC主要通过Namespaces的内核特性,给每一个容器分配自己的命名空间来实现这一个功能。容器内部的进程运行在与外部隔绝的命名空间中,达到容器之间进程资源的隔离。

最底层的为Android内核,整个虚拟化系统中实际上只有一个内核在运行。上层的容器通过LXC的接口调用,实际都是使用同一个内核所提供的系统接口。这种方式就是系统级操作系统虚拟化的一大特点,共享系统中的内核大大减少了虚拟化所带来的花销。在整个设计方案中,不需要创造或修改内核中的核心功能,只需要通过LXC的接口调用,就可以在容器环境中提供Android系统运行所必备的内核调用。这三个层次就是整个虚拟化环境的总体结构。

通过上文提出的方案,就能得到各个相互独立的容器环境。在这些容器环境中,启动Android系统,就能实现多系统虚拟化的目的。由于容器的隔离性,Android系统也是互相不可见的,通过这个思路,本文就能实现Android多系统的虚拟化。

LXC工具正常是运行在Linux系统中的,它用到了很多Linux系统中的系统调用来实现它的功能。而Android系统的内核是基于Linux内核进行修改的,与Linux内核相比,它添加了很多硬件相关的驱动设备,优化了一些系统调用,关闭了一些不必要的内核特性。但是本质上,大多数的系统调用是与Linux内核一致的。因此,LXC要在Android内核上运行,只需要把Android内核中的一些相关的内核特性开启,然后对内核进行重新编译就能保证LXC在Android内核中正常运行。通过对LXC进行分析,在Android的内核中运行LXC工具需要开启的内核特性如表3.1所示。
在这里插入图片描述
表3.1所示的的内核特性中主要是Cgroups与Namespcae两方面。其中在Cgroups子系统负责对资源的管理与限制[3),Namespaces负责对进程资源的隔离。确定了需要开启的内核特性以后,需要在编译内核的过程中对这些内核特性进行打开,而这需要对内核进行重新编译。

LXC工具集提供了lxc-create命令对容器进行创建,这个命令是按照Linux容器的标准进行构建的,但是Android系统与Linux系统有所不同,使用该命令在Android系统创造出的容器并不能用,因此,我们需要手动构建出LXC容器。一个LXC容器镜像主要是由两个部分组成,分别是容器的文件系统与容器的配置信息。容器的文件系统需要跟普通的Linux根目录的文件系统相似,
用于构建Android系统的容器文件系统需要具备的文件结构包括
(1)bin目录用于存放Android系统调用的一些接口程序;
(2)system目录用于挂载Android系统中的system分区;
(3)sbin目录用于存放内核调用的接口程序;
(4)lib目录用于存放系统的所有的依赖库;
(5)data目录用于挂载Android系统的data分区;
(6)dev目录用于存放系统的所有外部设备文件的映射。

容器的配置信息主要包含了容器的名字、根目录路径、网络设置、挂载设置和设备设置等信息。在容器的配置信息中,需要将文件系统的bin,lib,dev,sbin目录以绑定挂载的方式,把Android系统中根目录对应的文件挂载到这些目录上,通过这些目录中包含的系统程序,依赖库与设备驱动,就成功把容器构造成一个Android的内核环境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LXC容器相关论文笔记 的相关文章

  • 关于神舟笔记本TX8连副屏经常蓝屏的问题

    大概率是3060显卡驱动的问题 xff0c 可以试试重新安装显卡驱动 若还是不行就换个接口 xff0c 不要用hdim的接口 xff0c 那个是直接连3060的 换剩下两个的minidp接口其中一个 xff0c 第一个不要接 xff0c 那
  • 51单片机入门(小学生都能学会)

    序 xff1a 时隔一年 xff0c 我终于从二年级到三年级了 xff01 由于小学三年级这学期要学单片机 xff0c 故写下这篇笔记留下些什么 由于自己也是新手 xff0c 欢迎各位指出本文的各种错误 1 什么是51单片机 为什么要说这个
  • 解决使用WinScp连接Ubantu系统失败的问题---SSH无法连接

    起因 为了互通Linux系统和Windows系统的文件 xff0c 以更好的实现文件管理和资源共享 所以在查阅资料后 xff0c 使用WinScp xff0c WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端 它的
  • 小学生51系列之基础知识

    1 单片机的基本结构 说到基本结构 xff0c 就是指51单片机的硬件组成 51单片机由中央处理器CPU 储存器 定时器 I O端口 组成 其中储存器包含数据储存器 xff08 RAM xff09 和程序储存器 xff08 ROM xff0
  • ros 接入Livox Mid-70

    最近在研究3d避障激光 大疆Livox mid 70 xff0c 记录下接入过程 环境信息 xff1a Ubuntu 18 04 ros melodic 1 livox view 点云可视化 xff08 1 xff09 根据livox mi
  • ROS+opencv实践-二维码识别

    一 安装二维码识别的功能包 sudo apt span class token operator span get install ros span class token operator span melodic span class
  • C语言简单链表详细步骤详解

    43 链表 gt 小阿豪带你写链表 xff01 xff01 xff01 xff01 进入正文 span class token number 1 span 首先 xff0c 先想好自己要创建的链表格式以及最后的的显示界面 xff01 xff
  • 滚球控制系统详解 —— (附核心代码)

    最近练习了17年的国赛题 滚球控制系统 这里展示一下画圆 xff1a 观看完整视频点这里 接下来 xff0c 我来分享一下从搭整体结构到调试完的过程 这是我搭完的整体结构 xff08 缩小版 xff09 不管什么题 xff0c 结构部分还是
  • 【Linux网络编程】你了解TIME_WAIT状态吗?

    在Linux网络编程中 xff0c 我相信大多数人觉得最难理解的就是TCP中的TIME WAIT状态了吧 xff0c 那么TIME WAIT的概念到底是什么 xff0c 有几个类型呢 xff0c 以及在面试中经常会问到的TIME WAIT状
  • 【图解】八幅图带你轻松掌握八大排序(上):冒泡排序、选择排序、插入排序、快速排序

    在算法中 xff0c 八大排序算是最简单的也是重中之重 xff0c 所以掌握好八大排序的思想是非常重要的 xff0c 很多人学排序的时候会觉得似懂非懂 xff0c 本篇文章作者耗时两小时绘制了八大排序的详细图解 xff0c 让大家快速理解八
  • 最详细整理STL之vector基础

    前言 xff1a Vector是一种可以存储任意类型的动态数组 xff0c 属于序列式容器 xff0c 可以用sort对其进行排序 xff0c 底层数据结构是数组 xff0c 可以随机访问元素 Vectors 包含着一系列连续存储的元素 其
  • STL之vector扩容机制

    前言 大家好 xff0c 我是萝卜 上期结尾说到vector的push back操作一般情况下时间复杂度为O 1 xff0c 是否存在特殊情况 那么本期就讲讲vector在容器空间不足时进行push back操作会发生什么 vector作为
  • 求职嵌入式软件开发linux kernel/BSP leader/工程师职位

    个人工作说明 xff1a 目前从事linux系统网络设备的开发工作 xff0c 负责bootloader linux kernel文件系统 xff0c driver移植 xff0c 以及开源app移植 主要技能和过去的经验 xff1a 1
  • 【2023最新】计算机网络面试题【收藏持续更新】

    你好 xff0c 我是萝卜 xff0c 我会在本篇文章持续更新关于计算机网络的面试题 最新内容更新日期 xff1a 2023 04 11 基础 说一下计算机网络体系结构 网络体系结构一般有三种 xff1a ISO七层模型 xff0c TCP
  • UDP协议详解

    概述 xff1a UDP只在IP的数据报服务之上增加了两个最基本的服务 xff1a 复用和分用以及差错检测 UDP不保证可靠交付 xff0c 但是不意味着应用对数据的要求是不可靠的 xff0c 只是所有维护可靠性的工作可由用户在应用层完成
  • TCP传输可靠性保证机制之重传机制

    TCP重传机制 tcp重传机制包括超时重传 快速重传 带选择确认的重传 SACK 重复SACK 四种 超时重传 xff1a 超时重传是tcp协议保证数据可靠性的一个重要机制 原理是在发送某一个数据以后开启一个计时器 xff0c 在一定时间内
  • VSCode:终端控制台常用指令

    常用的指令 以下是一些在 Visual Studio Code 终端控制台中常用的指令 xff1a 1 清除终端 xff1a clear 2 列出当前目录中的文件和文件夹 xff1a ls 3 切换到指定目录 xff1a xff1a cd
  • Ubuntu18.04安装ROS时rosdep update报错解决办法

    在安装ros进行rosdep update时经常会报错 xff0c 有时候可以通过换网解决 xff0c 但从我安装那么多次的经验来看 xff0c 仅有一次换手机热点后更新成功了 xff0c 其他都是失败 xff0c 成功率太低 从网上搜到了
  • 【STM32】STM32F103C8T6串口通信,实现3个串口收发数据

    串口通信 xff08 Serial Communications xff09 实现单片机与电脑或者其它外设进行通信 xff0c 通信时只需两根线 xff08 TX xff0c RX xff09 就可以实现数据传输 STM32f103有三个串
  • C语言学习笔记——(2)数组

    数组 1 什么是是数组2 数组的定义2 1数组的表达2 2数组的含义2 3数组的大小 xff1a 3 字符数组4 字符串操作5 二维数组 1 什么是是数组 数组是指有序的元素序列 如果将有限个类型相同的变量的集合命名 xff0c 那么这个名

随机推荐

  • 多线程编程实验

    xff08 一 xff09 查看下列程序并运行 xff0c 掌握如何通过扩展Thread类创建线程 span class token keyword package span span class token namespace case1
  • 实验一:基于Ubuntu系统实现无人机自主飞行

    ps xff1a 为避免出现错误 xff0c 在进行新的一步时 xff0c 需要关闭由于上一步操作打开的终端 xff0c 并开启一个新的终端 例如 xff1a 在开始第5步 安装MAVROS 之前 xff0c 关闭由于第3步 安装ROS 打
  • 5000字学习C语言错误处理的四种方式。

    C错误处理 在C语言中 xff0c 错误处理是一个非常重要的主题 通常情况下 xff0c 程序员需要在代码中处理错误 xff0c 以保证程序能够在出现错误时正确地处理这些情况 C语言中常见的错误类型包括 xff1a 语法错误 逻辑错误 运行
  • yum 源制作

    YUM介绍 YUM主要用于自动升级 安装 移除 rpm 软件包 xff0c 它能自动查找并解决 rpm 包之间的依赖关系 xff0c 要成功的使用 YUM 工具更新系统和软件 xff0c 需要有一个包含各种 rpm 软件包的 reposit
  • MATLAB021b与VS2022混编

    MATLAB2021b与VS2022混编 前言 目前在做一个大创项目 xff0c 其中用到关于Matlab与C的混合编程 xff0c 特此记录 Matlab2021b 如图所示 xff0c 红线划出的是即将使用的 c函数 xff0c 在左侧
  • 香橙派5使用NPU加速yolov5的实时视频推理(一)

    前言 xff1a 寒假里 xff0c 博主完成了树莓派4B搭载yolofastest V2的ncnn加速 xff0c 效果挺不错的 xff0c 但总感觉还是稍微差点意思 xff0c 于是就购买了一块香橙派5 xff0c 想要用RK3588芯
  • 香橙派5使用NPU加速yolov5的实时视频推理(二)

    三 将best onnx转为RKNN格式 这一步就需要我们进入到Ubuntu20 04系统中了 xff0c 我的Ubuntu系统中已经下载好了anaconda xff0c 使用anaconda的好处就是可以方便的安装一些库 xff0c 而且
  • 【STM32学习】——串口通信协议&STM32-USART外设&数据帧/输入数据策略/波特率发生器&串口发送/接受实操

    文章目录 前言一 串口通信1 通信接口2 串口通信 xff08 1 xff09 串口简介 xff08 2 xff09 串口硬件电路 xff08 3 xff09 串口软件部分 二 STM32的USART外设1 USART简介2 图示详解 三
  • 【STM32学习】——USART串口数据包&HEX/文本数据包&收发流程&串口收发HEX/文本数据包实操

    文章目录 前言一 数据包格式 xff08 江科大规定 xff09 1 HEX数据包2 文本数据包3 两者对比 二 数据包收发流程1 HEX数据包接收 xff08 只演示固定包长 xff09 2 文本数据包接收 xff08 只演示可变包长 x
  • buuctf simplerev 中的小头位序

    33条消息 BUUCTF SimpleRev xff08 涉及大小端序存储的问题 xff09 Ireb9z的博客 CSDN博客 buuctfsimplerev https blog csdn net afanzcf article deta
  • 简要分析网络编程——UDP编程

    计算机网络是指两台或更多的计算机组成的网络 xff0c 在同一个网络中 xff0c 任意两台计算机都可以直接通信 xff0c 因为所有计算机都需要遵循同一种网络协议 网络编程中有很多协议 xff0c 如 xff0c TCP协议 UDP协议
  • 数据结构之二叉树 Python实现

    树 树是一种非线性的数据结构 树 xff0c 它是若干结点的集合 xff0c 是由唯一的根和若个棵互不相交的子树组成的 其中 xff0c 每一棵子树又是一棵树 xff0c 也是由唯一的根结点和若干棵互不相交的子树组成的 由此可知 xff0c
  • 《奔跑吧Linux内核(第二版)》第四章笔记

    内核配置 内核配置工具常见的有 xff1a make config make oldconfig make menuconfig 内核配置工具最终会在Linux内核源码的根目录下生成一个隐藏文件 config文件 xff0c 这个文件包含了
  • GDB+QEMU调试Linux内核

    1 使用qemu创建虚拟机 使用qemu创建ARM64架构虚拟机可以参考我的另一篇博客 xff1a Ubuntu18 04使用qemu搭建ARM64架构虚拟机 xff08 二 xff09 2 安装gdb multiarch工具包 span
  • centos7 HA

    本文以两台机器实现双集热备高可用集群 xff0c 主机名node1的IP为192 168 122 168 xff0c 主机名node2的IP为192 168 122 169 一 安装集群软件 必须软件pcs xff0c pacemaker
  • 《奔跑吧Linux内核(第二版)》第五章笔记

    Linux内核采用宏内核架构 xff0c 即操作系统的大部分功能都在内核中实现 xff0c 比如进程管理 内存管理 进程调度 设备管理等 xff0c 并且都在特权模式下 xff08 内核空间 xff09 运行 而与之相反的另一种流行的架构是
  • 交叉编译内核模块

    本实验在x86环境中交叉编译ARM64架构模块 xff0c 然后qemu启动ARM64架构虚拟机 xff0c 加载该模块运行 1 创建ARM64虚拟机 详见 xff1a Ubuntu18 04使用qemu搭建ARM64架构虚拟机 xff08
  • Linux内核模块相互调用

    编写一个内核模块A xff0c 通过导出模块符号的方式来实现接口函数 编写另一个内核模块B xff0c 调用内核模块A暴露出来的接口函数 1 源文件 内核模块A xff08 test A c xff09 span class token m
  • RTOS论文笔记(二)

    李在林 韩宏克 嵌入式Linux实时性分析及改造 2010 Linux 的实时性测试 中断延迟测试 在Linux中 xff0c 内核或驱动程序显式地关 开中断 xff0c 一般是通过调用 cli sti 来进行操作的 在调用 cli 时 x
  • LXC容器相关论文笔记

    段赫 基于LXC容器资源优化的研究与实现 2016 一 绪论 容器虚拟化技术 传统虚拟化技术 xff0c 实现一个虚拟机就意味着需要消耗了硬件资源来在底层系统上虚拟一个新的操作系统 xff0c 所以除了传统模拟硬件的虚拟化技术 xff0c