物理机虚拟化关键技术介绍

news2024/9/24 9:23:33
☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython

一、虚拟化原理

将多个“同质或异构”资源(包括但不限于芯片、硬件、软件、应用)形成一个资源池,对资源池进行抽象、解耦形成独立的“虚拟资源”,并实现虚拟资源之间隔离,从而提升资源利用率、业务运营效率。

本文介绍内容主要是基于单个物理机进行虚拟化的角度进行介绍。

二、虚拟化特征

在这里插入图片描述

三、虚拟化的架构层次及架构种类

虚拟化的层次架构,按照从物理机到虚拟机操作系统,可以分为5层,如图:
在这里插入图片描述
虚拟化的架构分为2种:

  1. 裸金属架构(Bare-Metal):也称原生架构,Hypervisor直接运行在物理机上,其下没有宿主机的单独操作系统,老猿认为也可以理解为宿主机的操作系统就是Hypervisor,典型的样例如VMware ESX、Xen、微软的Hyper-V;
  2. 寄居架构(Hosted):Hypervisor直接运行在宿主机的操作系统上,很多虚拟化功能依赖于宿主机操作系统或专门的硬件功能,典型的样例如VMware workstation、KVM、QMenu、VirtualBox。

在这里插入图片描述
上图左边是裸金属架构的逻辑示意图,右边是寄居架构的逻辑示意图。

三、虚拟化方式

  1. 全虚拟化(Full Virtualization ):Hypervisor负责所有虚拟化工作,客户机操作系统不需要修改,国内应用广泛的VMware workstation就是全虚拟化的(VMWare 在 1999 年开始销售 VMWare workstation, 2001 年VMWare 又发行了 ESX 和 GSX),其优点是对gustos是透明的,缺点就是性能慢;
  2. 准虚拟化(Para-Virtualization ):又称为半虚拟化,gustos需要修改,并感知底层虚拟化环境,与Hypervisor配合完成虚拟化工作,Xen就是典型的半虚拟化,特点是guestos需要配套修改,不适合windows这类闭源的操作系统,优点是性能相比全虚拟化有所提升;
  3. 硬件辅助虚拟化(Hardware-Assisted Virtualization ):借助于某些特别设计的CPU或硬件改进虚拟化的性能,如Intel VT-X/AMD-V,应用广泛的Linux KVM就是硬件辅助虚拟化的典型样例。其特点是无需修改guestos,性能高,但需要硬件支持。

四、虚拟化关键技术

现在主流的虚拟化技术有:CPU虚拟化、内存虚拟化、IO虚拟化、网络虚拟化。

4.1、CPU虚拟化

CPU虚拟化是指在一台物理计算机上,通过软件模拟出多台虚拟计算机的CPU计算资源,每台虚拟计算机都可以运行自己的操作系统和应用程序,就像在多台独立的物理计算机上一样。

CPU虚拟化的多种虚拟化方式包括全虚拟化、半虚拟化(或称为准虚拟化)和硬件辅助虚拟化。

4.1.1、全虚拟化
4.1.1.1、CPU全虚拟化概念

CPU全虚拟化是指在虚拟机中运行的操作系统无需对硬件进行任何修改,就可以直接运行。
在这种模式下,虚拟机监控程序(Hypervisor)会拦截虚拟机中的所有指令,并将其翻译成对底层硬件的访问。这种模式的优点是可以运行未经修改的操作系统,但缺点是由于需要翻译指令,因此性能较低。

4.1.1.2、CPU全虚拟化原理

要实现CPU全虚拟化有三种方式:陷入模-模拟仿真技术、二进制翻译技术、纯软件模拟。

4.1.1.2.1、 陷入- 模拟仿真技术(Trap-and-emulation)

最先实现CPU全虚拟化技术的是陷入-模拟仿真技术。

CPU中有一些操作和管理关键系统资源的指令,这些指令只有在最高特权级上能够正确运行,如果在非最高特权级上运行,特权指令会引发一个异常,处理器会陷入到最高特权级,交由系统软件处理。

对硬件设备访问的陷入模式和模拟仿真技术,就是利用这个机制,以X86架构CPU为例,这种技术将运行在ring1或ring3的guestOS的特权指令通过陷入机制被Hypervisor自动捕获,然后由Hypervisor执行,执行后返回给guestOS,这种捕获机制无需guestos进行修改。

4.1.1.2.2. 二进制翻译技术

CPU的指令中存在着2种特殊的指令–特权指令和敏感指令:

  • 特权指令:系统中有一些操作和管理关键系统资源的指令,这些指令只有在最高特权级上能够正确运行;
  • 敏感指令:操作特权资源的指令,包括修改虚拟机的运行模式或者下面物理机的状态;读写时钟、中断等寄存器;访问存储保护系统、地址重定位系统及所有的I/O指令。

x86架构的CPU中,不支持硬件辅助虚拟化技术的X86架构下的CPU有4个特权级(ring0~ring3),操作系统是处于最高级别的ring0,应用程序处于最低级别的ring3。x86绝大多数的敏感指令是特权指令,但是存在部分敏感指令不是特权指令,执行这些指令的时候不会自动trap被Hypervisor捕获,所以并不能完全的解决掉那些不是特权指令的敏感指令的模拟仿真问题,这种模拟仿真技术固有的缺陷,导致对X86架构的CPU的虚拟化并不完整。

为了解决这个问题,业界(如VMware)通过二进制翻译技术(Binary Translation)完成了对x86 CPU架构的完全虚拟。
二进制翻译技术方式下,Guest OS的核心指令无法直接下达到计算机系统硬件执行,而是需要经过Hypervisor的捕获和模拟执行(部分难以虚拟化的指令需要通过二进制翻译【Binary Translation】技术进行转换)。

二进制翻译技术简 称BT,是一种直接翻译可执行二进制程序的技术,能够把一种处理器上的二进制程序翻译到另外一种处理器上执 行。二进制翻译技术将机器代码从源机器平台映射(翻译)至目标机器平台,包括指令语义与硬件资源的映射,使源 机器平台上的代码“适应”目标平台。因此翻译后的代码更适应目标机器,具有更高的运行时效率。

二进制翻译系统是位于应用程序和计算机硬件之间的一个软件层,它很好地降低了应用程序和底层硬件之间的耦合度,使得二者可以相对独立地发展和变化。

二进制翻译也是一种编译技术,它与传统编译的差别在于其编译处理对象不同。传统编译处理的对象是某一种高级语言,经过编译处理生成某种机器的目标代码;二进制翻译处理的对象是某种机器的二进制代码,该二进制代码是通过传统编译过程生成的,经过二进制翻译处理后生成另一种机器的二进制代码。

4.1.1.2.3、纯软件模拟

纯软件模拟是一种CPU全虚拟化的方式,它通过软件模拟整个硬件系统,包括CPU、内存、I/O设备等。这种方式可以在任何平台上运行,不受硬件限制。

纯软件模拟的机制是这样的:在虚拟化场景中,Hypervisor通过软件模拟CPU的行为,包括执行指令、访问内存和I/O操作等。当虚拟机guestos执行特权指令时,Hypervisor会捕获这些指令并模拟执行,然后将结果返回给虚拟机。这种方式可以实现CPU的全虚拟化,但是性能相对较低,因为需要模拟整个硬件系统的行为。

相比之下,陷入模式-模拟仿真技术和二进制翻译技术都是针对特定硬件平台进行优化的虚拟化技术,可以提供更高的性能。其中,陷入模式-模拟仿真技术通过将虚拟机中的特权指令捕获并模拟执行,而二进制翻译技术则通过将虚拟机的指令翻译成可以在物理机上执行的指令来实现虚拟化。

4.1.2、CPU半虚拟化

CPU半虚拟化需要修改guestos的内核,guestos通过Hypercall来调用特权指令。

Hypercall是一种由虚拟机监控器(Hypervisor)提供的超级调用,允许虚拟机guestos直接向Hypervisor发起特定的请求。当虚拟机guestos需要调用特权指令时,它会通过Hypercall向Hypervisor发起请求。Hypervisor接收到Hypercall后,会继续处理这个请求,并将结果返回给虚拟机。这种方式避免了虚拟机直接执行特权指令,从而提高了系统的安全性。

Hypercall机制支持同步和异步两种调用方式。同步调用方式是指guestos等待Hypervisor处理完请求并返回结果;而异步调用方式则是指guestos不必等待结果返回,可以继续执行其他任务。

Hypercall机制是CPU半虚拟化技术中的重要组成部分,它实现了guestos与Hypervisor之间的通信,提高了系统的安全性和性能。

4.1.3、CPU硬件辅助虚拟化

硬件辅助虚拟化是指利用CPU硬件的虚拟化支持,提高虚拟机的性能和安全性。

CPU硬件辅助虚拟化通过在硬件级别上提供对虚拟化的支持,使得虚拟机监视器(Hypervisor)能够更高效地管理虚拟机的执行。这种机制可以改善在虚拟化环境中运行的性能,同时增强系统的安全性。

硬件辅助虚拟化机制的CPU新增一种VMX root的运行模式,这种模式新增了支持虚拟化的指令,这种模式下guestos运行ring0,guestos发出的特权指令和敏感指令被VMX root模式下的Hypervisor捕获和处理。

4.2、内存虚拟化

4.2.1、内存虚拟化技术介绍

内存虚拟化是一种抽象技术,它通过隐藏物理内存细节,将虚拟内存呈现给虚拟机,实现了一种抽象的内存访问方式。这种技术可以使得每个虚拟机都认为自己独占了从0开始连续的整个内存空间,这个空间成为客户机物理地址空间(Guest Physical Address,简称GPA),而实际上它们只能访问到分配给它们的宿主机的部分内存,这部分宿主机内存可能并不是连续的。

具体来说,当虚机进程需要访问GPA内存时,根据这个地址GPA内存的偏移量获得对应的宿主机虚拟地址,通过宿主机的页表查找到宿主机虚拟地址到物理地址的映射关系,从而实现guestos的内存访问到宿主机的内存访问。

4.2.2、内存气泡技术

内存气泡技术是一种内存管理技术,它通过虚拟化平台主动回收一些暂时没用上的物理内存,然后分配给需要复用内存的虚拟机使用。

具体来说,当虚拟机创建时,会根据其规格分配一定的内存空间。但在运行过程中,如果虚拟机并没有完全使用其分配的内存空间,那么这部分未使用的内存就被称为内存气泡。内存气泡可以被虚拟化平台识别并回收,然后重新分配给其他需要更多内存的虚拟机使用。

这种技术可以有效地提高内存的利用率,并使得虚拟机能够更灵活地适应不同的内存需求。同时,由于内存气泡的回收和重新分配都是自动完成的,因此也减少了人工干预的麻烦。

4.2.3、零页共享

零页共享机制是一种内存虚拟化的实现方式,它允许不同的虚拟机共享相同的内存页面,从而节省内存资源。

在零页共享机制中,虚拟机监控器会定时扫描虚拟机的内存数据,如果发现数据内容全为零,就会通过修改PA to MA映射的形式,把其指向一个特定的零页。这样,在物理内存中只保留一份零页拷贝,所有的虚拟机的零页都指向这个零页。

当零页数据发生变动时,Hypervisor会动态分配一页内存给虚拟机,存放修改后的数据。对于GuestOS(客户操作系统)来说,整个零页共享技术是完全不感知的。

除了华为FusionCompute的零页共享技术,VMware的ESX解决方案中也有同样的技术。当对某一个虚拟机进行页面共享扫描时,Hypervisor会针对该虚拟机物理页面的数据计算散列值,并在全局散列表中进行遍历及匹配是否有相同的散列值的表项。

4.2.4、内存交换

内存虚拟化的内存交换机制是一种在虚拟机和物理机之间进行内存资源共享和管理的技术。通过内存交换机制,虚拟机可以像使用普通内存一样使用虚拟内存,同时物理机也可以对虚拟机进行管理和监控。

内存交换机制下,虚拟机的内存被分成多个页,每个页的大小与物理机的页大小相同。当虚拟机需要使用更多的内存时,物理机会将一些不常用的页保存到磁盘上,以便为虚拟机腾出更多的物理内存空间。当虚拟机需要访问这些页时,物理机会将它们从磁盘上加载回物理内存中。

4.3、IO虚拟化

Hypervisor通过I/O虚拟化来复用有限的外设资源,Hypervisor截获guestos的I/O设备访问请求,然后通过软件模拟真实硬件实现I/O虚拟化。

I/O虚拟化与CPU虚拟化一样也分为全虚拟化、半虚拟化(准虚拟化)和硬件辅助虚拟化,其实现方式与类似。

  • 全虚拟化:由Hypervisor完全模拟I/O设备寄存器和读写操作,不需要guestos进行修改,直接使用已有的驱动,但性能比较差,每一次针对I/O设备的访问都会触发trap到Hypervisor,而Hypervisor需要模拟复杂的硬件,不同硬件需要不同的实现;
  • 半虚拟化:要求在guestos中增加前端驱动(frontend),在Hypervisor中增加后端驱动(backend),前端发送客户机请求给后端,后端驱动处理完这些请求后再返回给前端。优点是性能好,无需模拟外设操作,缺点是需要修改guestos;
  • 硬件辅助虚拟化:使用SR-IOV(Single Root I/O Virtualization)IO硬件辅助虚拟化技术,它通过为guestos提供独立的内存地址、中断和DMA流而避免Hypervisor介入I/O,SR-IOV允许一个PCI设备提供多个VFs(Virtual Functions),Hypervisor将一个或者多个VFs分配给一个虚机。 一个VF同时只能被分配一个虚机。使用SR-IOV技术可以提高虚拟机的性能,并且可以避免对CPU和内存资源的浪费。同时,SR-IOV技术也支持在线迁移等功能,使得虚拟机的迁移更加方便和高效。其优点是不需要修改guestos,不需要Hypervisor模拟I/O,但需要硬件设备支持

4.4、网络虚拟化

4.4.1、概念

网络虚拟化是一种在一个物理网络上模拟出多个逻辑网络的技术。它允许远程用户访问组织的内部网络,就像物理上连接到该网络一样。此外,它还通过抽象网络连接的概念来实现安全、稳定的隧道,以便对数据进行加密和保护。

4.4.2、络虚拟化目标

网络虚拟化要达到如下三个目标:

  • 连通性:虚拟机之间能网络连通、虚拟机能访问互联网或者其他私有网、城域网
  • 隔离性:虚拟机root用户可以获取虚拟网络接口信息,但不能获取物理机的MAC地址,可以避免物理攻击
  • 性能:虚拟机之间的虚拟网络传输性能应尽可能与实际物理网络一致
4.4.3、网络虚拟化方式
  1. 桥接:将虚拟机的网卡桥接到宿主机的网卡上,提供近似于实际物理网络的性能,同一个物理机的虚拟机网络桥接到宿主机同一网卡时,相互之间以及与宿主机之间网络是互通的,如图:
    在这里插入图片描述

  2. NAT网关:这种方式下,虚拟机相当于运行在内网的机器,宿主机相当于NAT服务器,这种模式下,同一个宿主机的虚拟机之间网络连通,但虚拟机和宿主机的网络隔离

在这里插入图片描述

  1. VLAN方式:自定义局域网,并给每个局域网分配一个标签,这个标签就是VLAN ID,每个局域网有唯一的IP地址段,将每个虚拟机分配到一个唯一的局域网中,不同局域网之间通过不同的标签和IP网段进行隔离,不能互相通信,实现网络流量的隔离和控制

五、虚拟机生命周期管理

虚拟机生命周期包括以下阶段:

  • 创建虚拟机:创建出符合特定操作系统及硬件要求的虚拟操作系统
  • 启动虚拟机:启动一个已创建好的虚拟机,相当于将资源真正分配给虚拟机
  • 重启虚拟机:重启虚拟机相当于对正在运行的虚拟机进行关闭以及再启动
  • 关闭虚拟机:对处于运行状态的虚拟机执行关机命令,使虚拟机处于关机状态
  • 删除虚拟机:删除虚拟机实例,以及虚拟机上的应用实例。被删除的虚拟机不可恢复

下图是虚拟机生命周期的全过程逻辑示意图:
在这里插入图片描述

六、虚拟机迁移

虚拟机迁移是在不同物理机之间迁移虚拟机,主要用于容错管理、负载均衡和系统维护。

6.1、虚拟机迁移的衡量指标

虚拟机迁移的两个衡量指标:

  • 宕机时间:虚拟机服务不可用的总时间
  • 总迁移时间:从迁移开始到旧虚拟机被终止的时间

6.2、虚拟机迁移的内存三阶段

虚拟机迁移的内存三阶段主要包括以下步骤:

  1. Push阶段:源虚拟机持续运行,期间不断地传送内存页面至目的虚拟机,更改过的页面需要重传;
  2. Stop-and-Copy阶段:源虚拟机被停止,并传送剩余内存页面至目的虚拟机,传输完成后,目的虚拟机开始启动;
  3. Pull阶段:新虚拟机启动时如发生page fault,表明新虚拟机上有没有拷贝的内存页,目的虚拟机就会向源虚拟机要求传送缺失的页面。

6.3、虚拟机迁移的方式

  • 纯stop-and-copy:源虚拟机停止运行,将虚拟机内存页面拷贝到目的虚拟机,然后启动目的虚拟机。这种方式简单直接,但会导致虚拟机在拷贝期间服务中断,宕机时间和总迁移时间与源虚拟机内存大小成比例
  • demand-and-migration:该方式使用很短的stop-and-copy阶段拷贝核心的内核数据结构,使得目的主机具备运行系统的必须资源,此时源主机将控制权转移到目的主机,服务在目的主机上继续运行。目标虚拟机启动后,剩余内存页在第一次使用时被传输。这种方式宕机时间极短,但是总迁移时间很长,同时由于可能存在过多的page fault,目标虚拟机性能会受影响
  • 预拷贝迁移分成2阶段
    1、有限次数的迭代push阶段:第一轮push阶段,将所有内存页标记为脏页面并拷贝到目的主机上;迭代拷贝内存页,上一轮传输过程中被修改过的页面在本次迁移,当需要传输的内存小于一个阈值或者迭代次数超过设置的最大迭代次数时停止迭代拷贝;
    2、非常短的stop-and-copy阶段:源虚拟机停止运行,拷贝CPU状态和最后一轮产生的脏页面到目的主机,然后恢复目的主机上的虚拟机

七、虚拟化主流产品技术

7.1、XEN

Xen的Hypervisor是服务器经过BIOS启动之后载入的首个程序,然后启动一个具有特定权限的虚拟机,称之为Domain0(简称Dom0)。

Dom0的操作系统可以是Linux或Unix,Domain0实现对Hypervisor控制和管理功能。在所承载的虚拟机中,Dom0是唯一可以直接访问物理硬件(如存储和网卡)的虚拟机,它通过本身加载的物理驱动,为其它虚拟机(DomainU,简称DomU)提供访问存储和网卡的桥梁。

在这里插入图片描述

7.2、KVM与QEMU

KVM是一个基于Linux内核的虚拟机,它属于完全虚拟化范畴,从Linux-2.6.20开始被包含在Linux内核中。

KVM基于x86硬件虚拟化技术,它的运行要求Intel VT-x或AMD SVM的支持。KVM的实现采用宿主机模型(Host-based),由于KVM是集成在Linux内核中的,因此可以自然地使用Linux内核提供的内存管理、多处理器支持等功能,易于实现,而且还可以随着Linux内核的发展而发展。

KVM主要用于管理CPU和内存的虚拟化,所有I/O虚拟化工作是借助Qemu完成的,也显著地降低了实现的工作量。以上可以说是KVM的优势所在。

QEMU是一种纯软件实现的虚拟化解决方案,能模拟整套虚拟机的实现。KVM与QEMU混合实现的虚拟机逻辑架构如下:

在这里插入图片描述
下图是Xen与KVM的虚拟化架构对比:
在这里插入图片描述

八、小结

本文介绍了基于单个物理机进行虚拟化的虚拟化技术原理、架构层次,虚拟化有裸金属和寄居架构两种架构种类,虚拟化技术分为全虚拟化、半虚拟化和硬件辅助虚拟化三种,物理机虚拟化关键技术包括CPU虚拟化、内存虚拟化、I/O虚拟化、网络虚拟化以及虚拟机的迁移和声明周期管理。

参考资料:

分析关于CPU的三种虚拟化机制(三)

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

关于老猿的付费专栏

  1. 付费专栏《https://blog.csdn.net/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.csdn.net/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.csdn.net/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.csdn.net/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取CSDN文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.csdn.net/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.csdn.net/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.csdn.net/LaoYuanPython ░

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

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

相关文章

【链接MySQL】教你用VBA链接MySQL数据库

hi,大家好呀! 之前呢,给大家分享过一个自制链接表管理器的文章,文章中有链接SQL Server数据库的代码,大家对这一段代码比较有兴趣,既然大家有兴趣,那我们今天就来讲一下链接数据库的代码。 这…

振南技术干货集:znFAT 硬刚日本的 FATFS 历险记(9)

注解目录 1、znFAT 的起源 1.1 源于论坛 (那是一个论坛文化兴盛的年代。网友 DIY SDMP3 播放器激起了我的兴趣。) 1.2 硬盘 MP3 推了我一把 (“坤哥”的硬盘 MP3 播放器,让我深陷 FAT 文件系统不能自拔。) 1.3 我…

Solidworks模型上色技巧以及增加快捷键快速打开和关闭“阴影效果和楼板反射”

Solidworks模型上色技巧 Chapter1 给Solidworks模型上色技巧设置外观的方法具体操作删除颜色的技巧这样操作: Chapter2 SOLIDWORKS小技巧 | SolidWorks装配体零件快速上色自动设置Chapter3 solidworks装配图如何去掉阴影?Solidworks2022中的阴影效果怎么…

5.24每日一题(判断原函数是否为周期函数的基本定理 )

原函数为周期函数的充要条件:f(x)在某区间上的积分为0

高中生分科考试--座位编排系统

这个系统是帮我一同学的哥哥的做的座位编排系统,他是某个学校的教育从事者 基本需求:就是能够根据他提供的各个分科班级同学的成绩单来选择相同分科的考场编排(按成绩高低),同时输入相应的考场数,和每个考…

【算法萌新闯力扣】:旋转链表

力扣题目:旋转链表 开篇 今天是备战蓝桥杯的第25天和算法村开营第3天!经过这3天的学习,感觉自己对链表的掌握程度大大地提升,尤其是在帮村里的同学讨论相关问题时。本篇文章,给大家带来一道旋转链表的题目&#xff0c…

【VROC】看Intel VROC如何给NVMe SSD做RAID

在当今对硬盘性能要求越来越高的环境中,SATA和SAS接口由于自身的限制,其性能很难突破600MiB/s的瓶颈。因此,对于需要更高底层硬件性能的行业,如数据库等,对NVMe盘的需求越来越迫切。然而,NVMe盘直通到CPU&a…

2005-2022年全球各国经济距离数据

2005-2022年全球各国经济制度距离数据 1、时间:2005-2022年 2、指标:国家、年份、经济距离1(根据美国传统基金会世界经济自由度指数整理)、经济距离2(参考(Kogut&Singh,1988)构建经济制度距离) 3、范…

dst-admin饥荒管理后台 RCE漏洞复现(CVE-2023-0646、CVE-2023-0647、CVE-2023-0649)

0x01 产品简介 dst-admin饥荒管理后台是qinming99个人开发者的一个用 Java 语言编写的 web 程序。 0x02 漏洞概述 dst-admin饥荒管理后台kickPlayer、cavesConsole、sendBroadcast等接口处配置不当,导致破解口令后的攻击者可以进行命令注入,获取服务器权…

第五节HarmonyOS ArkTS声明式开发范式

ArkTS声明式开发范式: 规范中各个内容说明如下: 装饰器 1、基本UI装饰器Entry、Component Entry 装饰struct,页面的入口。 Component 装饰struct,表示该struct具有基于组件的能力。 2、数据装饰器State、Prop、Link State…

【ShardingSphere专题】SpringBoot整合ShardingSphere(一、数据分片入门及实验)

目录 前言阅读对象笔记正文一、ShardingSphere介绍1.1 ShardingSphere-JDBC:代码级别1.2 ShardingSphere-Proxy:应用级别1.3 横向对比图 二、ShardingSphere之——数据分片2.1 基本介绍2.2 分片的形式2.2.1 垂直分片2.2.2 水平分片 2.3 数据分片核心概念…

Python实现性能自动化测试

一、思考❓❔ 1.什么是性能自动化测试? 性能 系统负载能力超负荷运行下的稳定性系统瓶颈自动化测试 使用程序代替手工提升测试效率性能自动化 使用代码模拟大批量用户让用户并发请求多页面多用户并发请求采集参数,统计系统负载能力生成报告 2.Python中的性能自动…

代码随想录算法训练营 ---第四十九天

前言: 今天是买卖股票的最佳时机系列,本系列之前在学习贪心思想时做过一些。 第一题: 简介: 本题在读题时我们要注意到几个细节 1.本题股票买卖只有一次。2.我们要在最低点买股票,在最高点卖股票。 我的思路&#…

基于Java SSM框架+Vue实现药品保健品购物网站项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架Vue实现药品保健品购物网站演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 ssm药源购物网站,主要的模块包括两个用户,管理员权限:用…

C++初阶--String类的使用

string类 在C语言中,我们总是用char* 的类型来创建一个变量,存储一个字符串;当我们想对它进行修改或者读写时,需要自我创建空间和使用string.h的库函数来进行操作它; 而在C中,C专门提供了一个头文件 stri…

揭秘论文开题报告写作技巧,全程无忧,附赠技术路线图模板!

最近不少学校开始让准毕业生撰写论文开题报告,如果是第一次接触学术论文的朋友,多少会卡在概念的理解上,就像题主说到的,开题报告中包含的各个部分,如研究目的、研究目标、研究内容等,容易让人眼花缭乱。 …

ChatGPT到底是如何运作?

自从2022年11月30日发布以来,ChatGPT一直占据着科技届的头条位置,随着苹果的创新能力下降,ChatGPT不断给大家带来震撼,2023年11月7日,首届OpenAI开发者大会在洛杉矶举行,业界普遍认为,OpenAI的开…

2021年12月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共15题,每题2分,共30分) 第1题 下图两个积木的值分别是? A:false true B:false false C:true true D:true false 答案:A 第2题 小猫和小狗是非常好的朋友,他们发明了一种加密方法:用两位数字代表字母。…

【Linux进阶之路】进程间通信

文章目录 一、原理二、方式1.管道1.1匿名管道1.1.1通信原理1.1.2接口使用 1.2命名管道 2.共享内存2.1原理2.2接口使用 3.消息队列原理 4.信号量引入原理 总结 一、原理 进程间的通信是什么?解释: 简单理解就是,不同进程之间进行数据的输入输出…

python之pyqt专栏7-信号与槽3

在上一篇文章中python之pyqt专栏6-信号与槽2-CSDN博客中,我们可以了解到对象可以使用内置信号,这些信号来自于类定义或者继承过来的。我们可以对这些信号可以通过connect连接槽函数。 需求 现在有一个需求,有两个UI界面“untitled.ui”和“u…