2023-2024-1 20232824《Linux内核原理与分析》第十周作业

第10章 KVM及虚拟机技术

KVM是Linux内核的一个模块,它允许在同一台物理主机上运行多个虚拟机。KVM利用处理器的硬件虚拟化扩展,如Intel的VT(Virtualization Technology)和AMD的AMD-V,来提供高性能的虚拟化支持。

虚拟机技术是一种在单个物理计算机上创建和运行多个虚拟操作系统实例的方法。每个虚拟机都被视为独立的计算机,具有自己的操作系统和资源。虚拟机技术的主要目标之一是提高硬件资源的利用率,并允许在同一硬件平台上运行多个不同的操作系统。

KVM通过将虚拟机直接嵌入到Linux内核中,以实现高性能和低开销的虚拟化。它支持多种架构和操作系统,并在许多企业和云计算环境中得到广泛应用。 KVM还可以与QEMU(Quick Emulator)等工具配合使用,以提供完整的虚拟化解决方案。

10.1 虚拟技术概述

虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。在实体计算机中能够完成的工作在虚拟机中都能够实现。在计算机中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。

ESXi中,所有虚拟化功能都在内核中实现;

Xen中,内核仅实现CPU与内存虚拟化,I/O虚拟化与调度管理由主机上启动的第一个负责管理的虚拟机实现;

KVM中,Linux内核实现CPU与内存虚拟化,I/O虚拟化由QEMU实现,调度管理通过Linux进程调度器实现。

Hyper-V是由微软开发的虚拟化平台,用于在Windows操作系统上创建和管理虚拟机。它是一种类型-1的虚拟化解决方案,可以在硬件上直接运行,而不需要主机操作系统的完全干预。

10.1.1 CPU的虚拟化

KVM虚拟机的创建过程:

KVM(Kernel-based Virtual Machine)是一种基于Linux内核的虚拟化解决方案,它利用硬件虚拟化扩展(如Intel的VT-x和AMD的AMD-V)来提供CPU虚拟化。以下是关于KVM CPU虚拟化的一些关键知识:

  1. 硬件虚拟化扩展: KVM利用现代CPU中的硬件虚拟化扩展,如Intel的VT-x和AMD的AMD-V。这些扩展允许虚拟机直接运行在硬件上,提供更高效的虚拟化性能。

  2. Hypervisor: KVM作为Linux内核模块存在,充当Hypervisor。它允许多个虚拟机在同一物理主机上运行。

  3. 虚拟CPU: 对于每个虚拟机,KVM创建一个虚拟CPU,该虚拟CPU在物理CPU上运行。每个虚拟CPU都被映射到物理CPU的一个或多个线程上。

  4. 虚拟CPU调度: KVM负责在物理CPU上调度多个虚拟CPU的执行。这包括在不同虚拟机之间进行上下文切换,确保每个虚拟机都能获得适当的CPU时间。

  5. 虚拟化扩展: KVM支持通过QEMU(Quick Emulator)等工具实现对外设的虚拟化,以便虚拟机可以与物理硬件进行交互。这包括网络设备、磁盘控制器等。

  6. 内存虚拟化: KVM通过为每个虚拟机提供独立的内存空间来实现内存虚拟化。内存虚拟化包括页表映射等操作,确保虚拟机对内存的访问是隔离的。

  7. I/O虚拟化: KVM支持对虚拟机的I/O设备进行虚拟化,使虚拟机能够与物理设备进行通信。

  8. 安全性: KVM需要确保虚拟机之间的隔离性和安全性。这包括防止一台虚拟机访问其他虚拟机的内存空间或敏感信息。

  9. 性能优化: KVM实现了一些性能优化措施,如内核同态(Kernel Samepage Merging,KSM)来共享相同的内存页,减少物理内存的使用。

10.1.2 内存的虚拟化

内存虚拟化是指虚拟化技术中的一种机制,通过这种机制,虚拟机(VM)可以使用一种虚拟的、抽象的内存模型,而不需要直接访问物理内存。这使得多个虚拟机能够在同一物理主机上运行,每个虚拟机都认为它在独占使用整个计算机的内存。内存虚拟化的目标是提供高效的、隔离的内存访问,使得虚拟机能够在共享同一物理主机的同时保持相对独立。这有助于提高硬件资源的利用率,同时确保不同虚拟机之间的安全隔离。

第11章 Linux容器技术

11.1 容器技术概述

Linux容器技术是一种轻量级虚拟化技术,允许将应用程序及其依赖项打包在一个独立的容器中,以便在不同的环境中运行。不像虚拟机(VM),容器并不需要运行专用的访客guest操作系统。容器们共享宿主机的host操作系统内核,并使用访客操作系统的系统库来提供所需的功能。由于不需要专用的操作系统,因此容器要比虚拟器启动快得多。

  1. 容器与虚拟机:

    • 容器是一种操作系统级别的虚拟化,与虚拟机相比更为轻量级。
    • 虚拟机模拟整个操作系统,包括内核,而容器共享主机操作系统的内核。
  2. chroot(Change Root):

    • chroot是一种Unix系统调用,允许修改进程的根文件系统目录,使其以指定的目录作为根。
    • chroot可以用于创建相对独立的文件系统环境,但并不提供完整的隔离。
  3. jail:

    • jail是FreeBSD系统中的一种容器技术,提供更强大的进程隔离和文件系统隔离。
    • jail允许在一个系统上创建多个相互隔离的环境,每个环境拥有自己的文件系统视图和进程空间。
  4. LXC(LinuX Container):

    • LXC是一种Linux容器技术,结合了cgroups和命名空间等特性,提供更强大的隔离性。
    • LXC允许在同一主机上运行多个相互隔离的Linux系统,并提供简单的命令行工具进行管理。
  5. iSula:

    • iSula是华为开源的轻量级容器运行时,类似于Docker Runtime。
    • iSula使用gRPC通信,支持容器的创建、启动、停止、删除等基本操作,并通过和Kubernetes集成来实现容器编排。

11.2 Linux容器技术的基本原理

Linux容器技术的基本原理涉及三个主要概念:chroot,namespace,和cgroup。这些概念共同提供了轻量级的虚拟化环境,使得应用程序能够在隔离的环境中运行。

1. chroot(Change Root):

  • 功能: chroot系统调用允许将进程的根文件系统更改为指定目录,创建一个相对独立的文件系统环境。
  • 原理: chroot改变了进程的根目录,使得进程以指定目录为根目录,看不到根目录之外的文件和目录。
  • 局限性: chroot提供了基本的隔离,但并不完全,因为它仅影响文件系统,不涉及进程或其他资源的隔离。

2. Namespace:

  • 功能: Namespace是Linux内核提供的一种资源隔离机制,通过不同的Namespace,不同的进程可以拥有独立的资源视图,例如进程、网络、文件系统等。
  • 常见Namespace:
    • PID Namespace: 进程隔离,让每个容器拥有独立的进程树。
    • Network Namespace: 网络隔离,每个容器有自己的网络设备、IP地址和端口空间。
    • Mount Namespace: 文件系统隔离,每个容器有独立的文件系统挂载点。
    • UTS Namespace: 主机名和域名隔离。

3. cgroup(Control Groups):

  • 功能: cgroup是一种用于限制、账户和隔离进程组的Linux内核特性。
  • 原理: cgroup允许将进程组织成控制组,然后为这些组分配资源限制。这可以包括CPU、内存、磁盘I/O等资源。
  • 优势: cgroup确保容器之间和主机之间的资源隔离,防止一个容器耗尽所有资源影响其他容器和系统。

chroot提供文件系统隔离。Namespace提供不同方面的资源隔离,让容器有自己的视图。cgroup提供资源限制和账户。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值