虚拟化技术及实时虚拟化概述

版权声明:本文为本文为博主原创文章,未经本人同意,禁止转载。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/

文章目录

    • 一、前言
    • 二、分时系统
    • 三、虚拟化介绍
    • 四、虚拟化实现方式及分类
      • 模拟器
      • Type2虚拟化
      • Type1 虚拟化
        • a. “传统”Hypervisor
        • b. 普通嵌入式Hypervisor
        • c. 微内核 Hypervisors
        • d. 硬件静态分区Hypervisors(Static Partitioning Hypervisors)
      • 容器(Container)
        • 容器 VS 虚拟机
    • 四、总结
    • 五、参考链接

实时虚拟化技术是一种针对实时应用场景的虚拟化技术,它要求在保证虚拟化优势的同时,满足严格的时间约束和高可靠性要求。本系列文章文将对实时虚拟化技术进行介绍,分析其原理、特征、关键技术和难点,以及应用场景。

一、前言

  • 虚拟化技术是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境。
  • 虚拟化技术最早出现在20世纪60年代的IBM大型机系统,在70年代的System 370系列中逐渐流行起来。随着云计算、物联网等新兴技术的发展,虚拟化技术也得到了广泛的应用和创新。
  • 虚拟化技术可以提高资源利用率、简化管理复杂度、增强系统灵活性和可扩展性等优势。同时,也带来了一些新的需求和挑战,如如何保证虚拟环境中的实时性、可靠性、安全性等。

二、分时系统

现代系统级虚拟机的快速发展,实际上是源于分时系统的设计思路。主要解决物理硬件资源共享和利用的问题,分时系统起源可以追溯到上世纪60年代的分时系统,上世纪 60 年代之前,计算机还都是大型机,主要用于科学研究使用,是异常昂贵的设备,因为大型机价格昂贵,所以如何让多个用户共享一台大型机成为很多人思考的问题,而后诞生了分时操作系统。

1954年,约翰·瓦格纳·巴克斯(John Warner Backus,后面设计了FORTRAN语言) 就在MIT举办的“数学计算机高级编码暑假班”上提出了分时系统的想法,他指出,使用分时(time sharing)方法,一台大计算机就可以当做很多个小的来用,每个用户只需要一个阅读工作站(reading station)。

1962年秋,BBN分时操作系统在诞生BBN公司诞生,BBN分时操作系统基于PDP-1b开发,系统的内存空间为8192字,其中4096保留给分时系统使用,另外4096字给用户使用。系统设计的基本思路是根据当前用户来切换用户部分内存,成为内存交换(memory swap)。当切换用户时,把 上一个用户使用的内存交换到高速的磁鼓中保存,并把新用户的数据从磁鼓中加载到内存中,磁鼓上的空间被分为22个区域,每个区域大小为4096字。每个用户在获得使用机会时,它的程序可以运行140毫秒。

在软件历史上,BBN的分时操作系统是较早实践和投入使用的多用户操作系统,为后来UNIX等操作系统的出现奠定了基础1

分时系统使得个人用户、小公司或机构不必自己购买昂贵的电脑。只需要购买一个输入输出终端,就像购买一套鼠标、键盘和显示器等设备,然后通过电话线连接到机房中的大型计算机。该计算机会自动分配计算时间给程序或任务。

三、虚拟化介绍

那么,什么是虚拟化技术呢?虚拟化技术同样是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境,进而发挥计算机硬件的最大利用率。

虚拟化技术的发展经历了几个阶段,虚拟化技术最早出现在大型机时代,用于将硬件资源划分为多个虚拟计算机。上世纪60年代,IBM开始在其CP-40大型机系统中尝试虚拟化的实现,后来在System/360-67中采用,并衍生出VM/CMS到后来的z/VM等产品线。

随着时间推移,微型计算机和PC能够提供更为有效、经济的方法来对资源进行分配和处理,所以到20世纪80年代之后,虚拟技术不再被广泛使用2。 直到 21 世纪,随着云计算的兴起,虚拟化技术再次成为热门话题,虚拟化技术也得到了广泛的应用和创新,并逐渐走向成熟。所以虚拟化技术是云计算的核心技术之一,通过虚拟化技术,可以将一台物理服务器划分为多个虚拟服务器,并将其作为服务提供给用户,实现资源的动态调度和按需使用。

虚拟化分为很多种,服务器虚拟化只是其中之一,还可以用于创建存储、网络和其他物理机的虚拟表示。常见的类型有服务器虚拟化、桌面虚拟化、网络虚拟化、存储虚拟化、数据虚拟化应用虚拟化等。它们都可以帮助用户节省成本,简化管理,提高效率和灵活性。无论是公有云还是私有云,都离不开虚拟化技术的支持,它让云提供商和云用户都能够根据不同的业务需求,灵活地扩展计算资源。

四、虚拟化实现方式及分类

虚拟化技术听起来很高大上,但虚拟化技术应用场景不只有云计算,它其实很早就在我们身边,给我们带来了很多便利。

我们的个人电脑越来越强大,我们不需要花钱买新的硬件,只需要下载一些免费或者低价的虚拟化软件,比如 VMware Workstation Player 或者 Oracle VM VirtualBox虚拟化软件,就可以在一台电脑上同时使用多种操作系统,无论是 Windows,Mac 还是 Linux,都可以随心所欲地切换。这样就可以在同一个设备上完成不同的任务,比如开发软件,或者学习新的技能,体验不同的OS;再比如,电脑上安装安卓模拟器来玩安卓游戏或做安卓APP开发调试等等。

虚拟化应用场景很多,实现虚拟化的方式有全虚拟化半虚拟化硬件辅助完全虚拟化操作系统级虚拟化等。

  • 全虚拟化技术通过在客户操作系统和硬件之间捕捉和处理那些对虚拟化敏感的特权指令,使客户操作系统无需修改就能运行,该技术在 1999 年出现,里面又包含了解释执行(如 Bochs)、扫描与修补(如 VirtualBox)、二进制代码翻译(如 Vmware、Qemu)三种技术。

  • 半虚拟化技术需要对客户操作系统进行一些修改,使客户操作系统意识到自己是处于虚拟化环境的,该技术在 2003 年出现,也叫类虚拟化技术,典型的 Hypervisor 代表是 Xen。

  • 硬件辅助完全虚拟化技术利用处理器中的虚拟化扩展(如Intel 的 VT-x 和 AMD 的 AMD-V)来加速虚拟机的性能,该技术在 2006 年出现。

    • 硬件结构支持,且有相应实现:包括
      • 模式切换:Host CPU<->Guest CPU切换,即CPU资源隔离。
      • 二阶段地址转换:GVA->GPA和GPA->HPA, 即内存资源隔离。
      • 中断控制器支持:中断注入和透传,即中断资源隔离。
      • IOMMU: Input-Output Memory Management Unit, DMA Remapping。DMA和设备访问内存隔离。
    • 相关软件支持:包括
      • Firmware:OpenSBI, BIOS
      • Hypervisor:KVM,XEN
      • I/O用户态:qemu
      • OS

    当前云计算普遍使用的主流虚拟化技术,就是以 KVM 为代表的硬件辅助的完全虚拟化。

  • 操作系统级虚拟化技术则通过在同一台物理服务器上运行多个隔离的用户空间实例来实现虚拟化,也就是容器技术,容器是一种轻量级的虚拟化技术,能够在单一主机上提供多个隔离的操作系统环境。

上面简单介绍了虚拟化的实现方式,不同的实现方式效率不同,它们之间暗含了虚拟化技术发展经历。如果我们想知道一个虚拟化产品基于哪些虚拟化技术,我们一般听到的是type1和type2这类词,这指的是这些虚拟化技术的分类,分为以下几种:

模拟器

模拟器是指基于全虚拟化技术实现的一种软件,可以模拟一个不同于本身的计算机系统或者硬件设备,并且可以执行该系统或者设备的程序或者指令。模拟器通常需要对目标系统或者设备的指令进行解释或者翻译,然后在本身的系统或者设备上执行。在这个过程中,我们把原先的操作系统叫作宿主机(Host OS),把能够有能力去模拟指令执行的软件,叫作模拟器(Emulator),而实际运行在模拟器上被“虚拟”出来的系统呢,我们叫客户机(Guest VM)。

这种方式的优点是可以实现跨硬件平台的运行,比如在x86平台上模拟ARM平台。缺点是性能很差,因为有很多解释或者翻译工作。另外是做不到精确模拟,一些模拟的硬件程序运行要依赖特定的电路乃至电路特有的时钟频率,想要通过软件达到 100% 模拟是很难做到。这种方式主要用于游戏、教育、娱乐等场景,提供趣味、创新、体验等功能。常见的模拟器有Android模拟器、MAME、QEMU,游戏模拟器等。

Type2虚拟化

Type2虚拟化也叫主机式虚拟化**,是指在一个已经安装了操作系统(Host OS)的物理硬件上,运行一个虚拟机监视器(Hypervisor),它作为一个应用程序,管理多个虚拟机(Guest VM)。每个虚拟机也有自己的操作系统和应用程序,但是它们需要通过Hypervisor和Host OS来访问硬件资源。这种虚拟化技术的优点是兼容性好,因为可以在各种操作系统上运行,而且可以支持不同的硬件平台。缺点是性能低,因为有额外的中间层和转换开销,客户机的操作系统把最终到硬件的所有指令,先发送给虚拟机监视器。虚拟机监视器再把这些指令交给宿主机的操作系统去执行。

Type2虚拟化只是把在模拟器里的指令翻译工作,挪到了虚拟机监视器里。主要用在我们日常的个人电脑和开发测试场景,提供方便、快速、多样的计算环境。常见的Type2虚拟化产品有VirtualBox、Vmware workstation、Xvisor、Lguest等。

Type1 虚拟化

Type1虚拟化:也叫裸机虚拟化,是指直接在物理硬件上运行一个虚拟机监视器(Hypervisor),一般虚拟机监视器其实并不是一个操作系统之上的应用层程序,可能是一个嵌入在操作系统内核里面的一部分,能够直接操作控制硬件并管理多个虚拟机(Guest VM)。每个虚拟机都有自己的操作系统和应用程序,可以完全独立运行。Type 1虚拟化通常使用半虚拟化、硬件辅助虚拟化或一些混合形式来实现。

Type1与type2虚拟的主要差别是type1虚拟机监视器(Hypervisor)能直接操作控制硬件。这种虚拟化技术的优点是性能高,因为虚拟机可以直接访问硬件资源,没有多余的开销。缺点是兼容性差,不能像 Type-2 型那么好,因为不同的硬件平台可能需要不同的Hypervisor。这种虚拟化技术主要用于数据中心和云计算场景,提供高效、灵活、可扩展的计算资源。常见的Type1虚拟化产品有Linux KVM、VMWare
ESX Server、Xen、微软 Hyper-V、Xvisor、OKL4 Microvisor等。

Type1与type2虚拟的主要差别是type1虚拟机监视器(Hypervisor)能直接操作控制硬件。这种虚拟化技术的优点是性能高,因为虚拟机可以直接访问硬件资源,没有多余的开销。缺点是兼容性差,不能像 Type-2 型那么好,因为不同的硬件平台可能需要不同的Hypervisor。type1虚拟化技术应用场景广泛,这些Hypervisor进一步可以分为:

a. “传统”Hypervisor

如上图,这种Hypervisor主要用于数据中心和云计算场景,提供高效、灵活、可扩展的计算资源。代码量大,功能齐全,有专用虚拟化硬件:网卡、磁盘、图形适配器等;使用半虚拟化、硬件辅助虚拟化或一些混合形式来实现。典型代表:KVM(Kernel Virtual Machine), Xen,VMWare ESX Server,微软 Hyper-V。

b. 普通嵌入式Hypervisor

这种Hypervisor主要用于通用嵌入式系统。不考虑实时性,如同时运行安卓和linux,Hypervisor提供CPU虚拟化,提供N:1 虚拟到物理 CPU 映射和调度,IO 设备模拟、硬件直通访问等特性,具有合理的代码量100K-10K SLoC(Source lines of code),典型代表:Xvisor, ACRN。

c. 微内核 Hypervisors

这种Hypervisor主要用于对功能安全(security, safety and reliability)有要求嵌入式系统。在航空电子设备、自动驾驶、医疗设备、关键基础设施和国防等行业,要求安全性、隔离性和健壮性,意味着软件具备设计安全(Formal verification-形式验证),典型代表:seL4、NOVA;

d. 硬件静态分区Hypervisors(Static Partitioning Hypervisors)

这种Hypervisor主要用于实时与非实时混合关键性系统,且更关注实时性、硬件强隔离。以上几种Hypervisor或多或少提供了硬件虚拟化,如CPU虚拟化(提供N:1 虚拟到物理 CPU 映射和调度),IO 设备虚拟化,也就是说GustOS共享Hypervisors管理的硬件,而硬件静态分区Hypervisors不提供这些机制,代码量较小5K-10K SLoC。

为什么要强隔离呢?我们工业实时控制、医疗、汽车、通信等实时实时场景下的虚拟化,因为实时应用场景的特殊性,通常Gust OS不仅包含Windows/linux等系统负责人机交互等非实时工作,Gust OS还包含RTOS或裸机应用程序,负责实时相关控制和应用。

为保证Gust OS的实时性,Gust OS必须独占硬件资源,包括CPU 1:1映射、设备直通访问、RAM资源静态分配、硬件中断直通等,这样才能保证Gust OS访问硬件的实时性,并且系统运行过程中非特殊情况严禁Hypervisor介入,不能像云计算场景下Hypervisor那样可以将多个Gust OS在同一个CPU上调度,否则会引入额外的延迟,无法保证Gust OS运行的确定性,这就是为什么要强隔离。

另外虽然Hypervisors实现了硬件分区,但硬件层面很多资源还是共享的,比如共享内存总线带宽、LLC cache等,非实时GustOS的io负载增加(例如网络流量、磁盘等),会导致总线拥塞或缓存冲突,进而影响实时Gust OS的实时性,所以一些分区Hypervisors还会根据硬件特性,对内存总线带宽进行划分,缓存着色Cache Coloring (Partitioning)等方式来降低Gust OS之间对实时性的影响。

因为硬件分区虚拟化Hypervisor直接控制硬件,所以它还是属于Type1虚拟化类型。典型代表 jailhouse、Bao、Xen Dom0-less、QNX Hypervisor、vxworks Hypervisor、ACRN等。

这里简单提一下:jailhouse项目负责人与xenomai X86平台maintainer是同一人 jan-kiszka。


注意:虽然Hypervisor实现了硬件分区,但判断一个分区Hypervisor,是否是实时Hypervisor,要看GustOS运行过程中是否需要Hypervisor介入,如果实时操作系统运行过程中需要Hypervisor介入,Gust RTOS实时性取决于Hypervisor介入时间,实时性可能完全没有保证,那这个Hypervisor就不是一个实时Hypervisor。

综上,若只关注实时,硬件静态分区Hypervisors、微内核 Hypervisors均可用于实时应用场景。

容器(Container)

虽然,Type-1 型的虚拟机看起来已经没有什么硬件损耗。但是,这里面还是有一个浪费的资源。那就是每一个虚拟机,都运行了一个属于自己的单独的操作系统。

2005 年,诞生了一种新的虚拟化技术,容器技术。容器是一种轻量级的虚拟化技术,能够在单一主机上提供多个隔离的操作系统环境,通过一系列的命名空间隔离进程,每个容器都有唯一的可写文件系统和资源配额。

容器技术是一种利用操作系统级虚拟化来实现,操作系统内核提供的资源隔离和控制功能,创建出多个相互隔离但共享内核的用户空间实例。容器技术的的代表项目就是 Docker,Docker 是 Docker 公司在 2013 年推出的容器项目,因为轻量、易用的特点,迅速得到了大规模的使用。Docker 的大规模应用使得系统资源的形态由虚拟机阶段进入到了容器阶段。

Docker是一种实现了容器技术的软件平台,它提供了创建、管理、分发容器的工具和服务。Docker的优点是启动快速、占用资源少、移植方便、可扩展性强等。缺点是安全性较低,因为容器之间共享内核,可能存在漏洞或攻击风险。Docker主要用于微服务架构、持续集成部署等场景,提供高效、灵活、可靠的应用交付能力。

与虚拟机不同,容器共享主机操作系统内核,并且不需要单独的 Guest OS,这使得容器更加轻量级,并且启动速度更快。

每个容器都可以运行一个或多个应用程序,并且具有自己的文件系统、网络配置、进程空间等。

Docker 通过 Linux Namespace 技术来进行资源隔离,通过 Cgroup 技术来进行资源分配,具有更高的资源利用率。Docker 跟宿主机共用一个内核,不需要模拟整个操作系统,所以具有更快的启动时间。在 Docker 镜像中,已经打包了所有的依赖和配置,这样就可以在不同环境有一个一致的运行环境,所以能够支持更快速的迁移。另外,Docker 的这些特性也促进了 DevOps 技术的发展。

容器 VS 虚拟机

一个例子是,嵌入式Linux开发中,假设我们的物理机是Ubuntu 20,但是我们的linux SDK要求基于Ubuntu 14或16,你有两种选择:一种是使用虚拟机,另一种是使用Docker。

如果你使用虚拟机,你需要为每个虚拟机分配一定的内存、磁盘空间和CPU资源,并且安装完整的Ubuntu系统。如果你使用Docker,你只需要从Docker Hub上拉取两个Ubuntu镜,像然后在容器中运行它们,就可以享受不同版本的Ubuntu环境了,无需创建新的虚拟机。这样做的好处是,Docker容器占用的资源更少,启动的速度更快,而且更容易管理

这里有个一个容器与虚拟机的对比2

特性容器(Docker)虚拟机
启动时间秒级分钟级
硬盘占用量一般为MB一般为GB
性能接近原生弱于原生
系统支持量单机支持上千个容器一般几十个
资源使用率
环境配置自带配置,基本不需要不带配置,需要全量配置

四、总结

本文简单介绍了虚拟化技术的分类和发展经历。应用领很广,我们应用开发中,或多或少都会使用到部分虚拟化相关技术。

由于本博客主要集中于工业实时控制、汽车、通信等实时场景下的基础软件技术分享。同时,行业内常用的是实时虚拟化技术,所以后面的文章主要集中在实时虚拟化(具体的实时Hypervisor是ACRN和jailhouse)。

其他的虚拟化技术则涉及到才会写相关文章,比如网络虚拟化,敬请关注!

五、参考链接


  1. 《软件简史》张银奎著 ↩︎

  2. https://time.geekbang.org/column/article/414159
    [^3]:http://gk.link/a/126YZ ↩︎ ↩︎

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

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

相关文章

欧姆龙PLC联网

一、设备信息确认 左上角的为PLC型号,如图该PLC型号为CP1H,不同型号的欧姆龙PLC通讯方面有什么差别呢? 通讯能力和方式不同: 有些型号PLC自带网口,有些则需要扩展(上图中右侧的两个红框内为后扩展的通讯口,扩展模块可以随意组合双网口,双232串口,双485串口都可以)…

JDBC编程连接MySQL数据库遇到的两个错误

在进行java与MySQL数据库进行连接的时候我遇到了两个报错&#xff0c;在一开始的时候遇到的报错是Access denied for user yulinlocalhost (using password: YES)&#xff0c;此时我在网络上搜索发现是密码出现错误的问题&#xff08;出现该问题确实是密码错误&#xff09;&…

【DevOps】Atlassian插件开发指南

本文以Bamboo插件开发为例&#xff0c;记录一下插件开发过程。 一、简介 Atlassian Bamboo 6.9.1 是一款持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;支持使用插件扩展其功能。如果需要开发自己的 Bamboo 插件并添加到 Bamboo 中&#xff0c;则可以参考…

设计模式——享元模式

享元模式 定义 享元模式&#xff08;Flyweight Pattern&#xff09;是池技术的重要实现方式。 使用共享对象可以有效地支持大量的细粒度对象。 优缺点、应用场景 优点 可以大大减少应用程序创建对象的数量&#xff0c;降低程序内存占用。 缺点 提高了系统的复杂度&…

spring-IOC

IOC容器 简介 IoC(Inversion of Control)控制反转&#xff0c;是一种基于面向对象编程法则的设计思想&#xff0c;它设计出的程序具有松耦合、更优良的特点。 IoC容器是Spring框架中重要的核心组件之一&#xff0c;贯穿了Spring从出生到成长的整个过程&#xff0c;Spring通过I…

零基础学习,轻松打造物业服务小程序

现如今&#xff0c;物业服务已经成为了人们生活中不可或缺的一部分。为了更好地满足人们对物业服务的需求&#xff0c;许多企业和个人开始开发物业服务小程序&#xff0c;以便提供更加便捷和高效的服务。然而&#xff0c;对于大多数人来说&#xff0c;搭建一个小程序可能需要一…

智能ai绘画软件帮你用科技点亮创意火花

李明&#xff1a;嘿&#xff0c;你听说过ai绘画软件吗&#xff1f;我最近对数字艺术产生了浓厚的兴趣 王磊&#xff1a;当然&#xff01;ai绘画软件真是太神奇了&#xff01;它可以将抽象的文字描述转换成惊人的艺术作品。 李明&#xff1a;是吗&#xff1f;它们绘制的效果怎…

数据库及数据表的相关操作(一)

目录 概念知识一、管理逻辑库与数据表二、常用数据类型和约束2.1 数字数据类型2.2 字符串数据类型2.3 日期数据类型2.4 字段约束 三、索引运行机制和使用原则3.1 创建索引3.2 添加与删除索引3.3 索引的使用原则 概念知识 关系型数据库&#xff1a; 使用了关系模型的数据库系统&…

深度学习——CNN卷积神经网络

基本概念 概述 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 核心思想 CNN 的核心思想是通过利用局部…

Linux内核源代码的目录结构包括部分:

内核核心代码&#xff1a;这部分代码包括内核的各个子系统和模块&#xff0c;如进程管理、内存管理、文件系统、网络协议栈等。这些代码构成了Linux内核的核心功能。 非核心代码&#xff1a;除了核心代码之外&#xff0c;还包括一些非核心的代码和文件&#xff0c;如库文件、固…

和chatgpt学架构03-引入UI框架(elment-plus)

目录 1 项目目录及文件的具体作用1.1 App.vue1.2 main.js的作用1.3 main.js什么时候被调用1.4 npm run serve干了什么事情1.5 package.json的作用 2 安装UI框架2.1 安装命令2.2 全局引入 3 启动工程总结 我们已经安装好了我们的vue脚手架&#xff0c;用vscode打开工程目录 要自…

【FPGA】基于C5的第一个SoC工程

文章目录 前言SoC的Linux系统搭建 前言 本文是在毕业实习期间学习FPGA的SoC开发板运行全连接神经网络实例手写体的总结。 声明&#xff1a;本文仅作记录和操作指南&#xff0c;涉及到的操作会尽量细致&#xff0c;但是由于文件过大不会分享文件&#xff0c;具体软件可以自行搜…

Leetcode-每日一题【109.有序链表转换二叉搜索树】

题目 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输入: head [-10,-3,0,5,9]输出: [0,-3,9,-…

VS报错E1696 无法打开类似于stdio.h等头文件的解决办法

VS报错E1696 无法打开类似于stdio.h等头文件的解决办法 我的VS版本是2022的&#xff0c;然后我今天把同事在VS2017上的code&#xff08;一个完整的解决方案&#xff09;从svn上拿过来。结果发现&#xff0c;一大堆E1696的错误。主要表现就是项目中include的一些常用的c语言基础…

算法竞赛字符串常用操作大全

算法竞赛字符串常用操作总结来啦~ &#x1f44a; 大家好 我是寸铁&#x1f4aa; 考前需要刷大量真题,大家一起相互监督&#xff0c;每日做N题&#xff0c;一起上岸吧✌️ ~ 冲刺蓝桥杯省一模板大全来啦 &#x1f4a5; ~ 蓝桥杯4月8号就要开始了 &#x1f64f; ~ 还没背熟模…

字幕切分视频

Whisper 仓库地址&#xff1a; https://github.com/openai/whisper 可用模型信息&#xff1a; 测试视频&#xff1a;18段&#xff0c;总共447S视频&#xff08;11段前&#xff1a;有11段开头有停顿的视频&#xff09; Tiny: 跑完&#xff1a;142S &#xff0c;11段前&#xf…

(栈队列堆) 剑指 Offer 09. 用两个栈实现队列 ——【Leetcode每日一题】

❓ 剑指 Offer 09. 用两个栈实现队列 难度&#xff1a;简单 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead …

vscode远程连接提示:过程试图写入的管道不存在(删除C:\Users\<用户名>\.ssh\known_hosts然后重新连接)

文章目录 复现过程原因解决方法总结 复现过程 我是在windows上用vscode远程连接到我的ubuntu虚拟机上&#xff0c;后来我的虚拟机出了点问题&#xff0c;我把它回退了&#xff0c;然后再连接就出现了这个问题 原因 本地的known_hosts文件记录服务器信息与现服务器的信息冲突了…

虚拟机挂载USB设备/USB serial 连接开发板

虚拟机挂载USB设备 1、添加USB设备 2、终端输入&#xff1a;sudo fdisk -l 查看Device设备&#xff1a; 3、创建挂载目录&#xff1a;mkdir /mnt/usb 4、执行挂载命令&#xff1a;sudo mount /dev/sdb1 /mnt/usb ,查看/mnt/usb目录下是否存在U盘中的数据&#xff1a; 5、用…

设计模式——桥梁模式

桥梁模式 定义 桥梁模式&#xff08;Bridge Pattern&#xff09;也叫做桥接模式。 将抽象和显示解耦&#xff0c;使得两者可以独立地变化。 优缺点、应用场景 优点 抽象和实现的解耦。 这是桥梁模式的主要特点&#xff0c;它完全是为了解决继承的缺点而提出的设计模式。优…