posts/qemu-introduction/ #2
Replies: 1 comment 1 reply
-
QEMU 作者应该叫做法布里斯·贝拉 (Fabrice Bellard)? |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
posts/qemu-introduction/
本文是北航《操作系统》课程预习教程的一部分。此版本由本人编写。
2024 年课程实验环境由 GXemul 更换为 QEMU,为了方便同学适应新的实验环境,在预习教程中特地新增《GDB:程序的解剖术》和《QEMU 模拟器介绍》两篇文章。
操作系统是直接运行在计算机硬件之上,向下管理硬件资源,对上为软件提供统一服务的一类程序。在本课程的实验中,为了开发和运行我们的 MOS 操作系统,我们必须具备一套支持操作系统运行的硬件系统,其中包括处理器、内存、外部设备(如磁盘)等多个组成部分。
然而,为每位同学都准备一套硬件设备是不切实际的。相较之下,使用模拟器则是一个更好的选择。模拟器能够模拟计算机硬件的行为和特性,使开发者可以在模拟的环境中运行和测试软件,而无需实际的物理硬件设备。
本实验所采用的模拟器为 QEMU,接下来我们就会对这一模拟器进行介绍。
什么是 QEMU QEMU(Quick Emulator)是一个通用的开源的机器仿真和虚拟化工具,由传奇程序员布里斯·贝拉(Fabrice Bellard)编写。QEMU 能够提供跨体系结构的硬件模拟,支持 x86、ARM、MIPS、RISC-V 等多种架构。
布里斯·贝拉 是 QEMU、FFmpeg 等著名项目的创始人。他的工作涉足操作系统(QEMU)、编译器(Tiny C Compiler)、图形学(TinyGL)、通信技术(Amarisoft)、数学(Bellard’s formula)、音视频(FFmpeg)、人工智能(NNCP)等众多领域,并都做出过许多突出的贡献。是一位近乎全才的人物。
QEMU 拥有多种不同的使用方式,而在实验中我们所使用的主要是 QEMU 的系统仿真模式。在此模式中,QEMU 能够模拟处理器的执行过程以及各种硬件设备的行为,从而提供包括处理器、内存和外部设备在内的整机虚拟模型。在此模型之上,我们能够运行一个完整的操作系统,而不需要任何额外硬件的支持。
QEMU 提供了高度定制化的硬件模拟能力,使得搭建指定硬件平台的运行环境十分容易。并且 QEMU 也提供了使用 GDB 进行调试的原生支持,使程序的开发更加便捷。正因如此,QEMU 成为了底层开发领域十分重要的工具。
QEMU 的工作原理 这部分并不是本课程要求掌握的内容。各位可以按兴趣阅读。
在正式谈论 QEMU 的工作原理前,我们需要先了解一下虚拟化(Virtualization)技术。这里的虚拟化特指硬件虚拟化,是指隐藏真实的物理硬件,而由软件模拟出特定的硬件环境,在此环境中运行的操作系统就好像运行在实际的物理机器上一样。在此过程中,通过模拟产生的硬件环境称为虚拟机(Virtual Machine),实现虚拟化的程序称为虚拟机管理程序(Hypervisor)。本质上,虚拟机管理程序是一种中间件。
通过虚拟化技术,我们可以屏蔽底层硬件的差别,从而在单台物理设备上运行许多不同的操作系统环境,充分利用硬件资源。虚拟化产生的硬件环境也很容易在不同设备间迁移,这也利于系统的管理和维护。
根据虚拟化实现方式的不同,虚拟机管理程序分为第一类虚拟机管理程序(Type 1 Hypervisor)和第二类虚拟机管理程序(Type 2 Hypervisor)。
第一类虚拟机管理程序直接运行在硬件之上,如下图 (a) 所示。此时虚拟机管理程序实际上占据了类似操作系统的位置,整个物理机被其分割为多个虚拟机。 而第二类虚拟机管理程序则运行在操作系统之上,是操作系统中的应用程序,如下图 (b) 所示。其中称运行该虚拟机管理程序的操作系统所处的机器为宿主机(Host),而管理程序中的虚拟机则为客户机(Guest)。由于第二类虚拟机管理程序采取了软件模拟处理器、解释执行机器码的方式,所以也被称为模拟器(Simulator)。 第一类虚拟机管理程序主要在企业数据中心或服务器中使用。常见的产品包括 KVM、VMWare ESXi 等等。而第二类虚拟机管理程序则通常在个人计算机上使用,以便能在运行虚拟机的同时执行其他进程。常见的产品包括 VMware Workstation、Oracle VirtualBox 等等,其中也包括 QEMU。
图片来自 Andrew S.
https://wokron.github.io/posts/qemu-introduction/
Beta Was this translation helpful? Give feedback.
All reactions