从零开始制作虚拟机的生活·第一季:构思、汇编器(上)

© 2016-2023 Conmajia × A. Bryan
Updated 11th March, 2023
Initiated 27th June, 2016

摘要 本文改编自 How to Create Your Own Virtual Machine 系列文章,承蒙原作者 Alan L. Bryan 许可. 文中提及的商标、名称等所有权归于其各自权利所有者.

阅读:上篇下篇
下载:源代码英文教程(PDF)

简介

亲爱的读者朋友,你正在阅读的这个系列文章将从零开始,带你设计并实现一个完整可运行的虚拟机. 本文是这个系列的第一篇文章. 我们将使用 C# 语言,基于 .NET Framework 2.0 实现此虚拟机. 你需要具备最基本的 .NET 开发知识. 或者说,你应当至少具备使用 Visual Studio 开发环境进行简单 C# 编程的能力.

在开始设计前,我们先来了解一下虚拟机的相关知识. 所谓虚拟机即是一种“虚拟”硬件环境的中间件. 它是高度隔离的软件容器,可以运行自己的操作系统和应用程序. 从运行其上的应用程序角度看去,这就是一台“物理的”计算机:包含自己的处理器,甚至具有一台真正计算机应有的 RAM、磁盘或者网络接口卡(NIC)等硬件——尽管这些都是基于软件,于宿主计算机上实现的. 这里提到的宿主计算机指的是运行虚拟机的实体计算机.

计算机操作系统无法区分虚拟机与实体机,应用程序和网络中的其他计算机同样对此无能为力. 即使是虚拟机本身也认为自己是一台“真正的”计算机. 由于虚拟机完全由软件实现,因此可以做到在相当程度上不依赖于具体硬件. 这是虚拟机独特的优势.

虚拟机的特点

一般而言,虚拟机具备以下关键特点,也是设计虚拟机时的设计方向.

  1. 兼容性:虚拟机可以根据需要,兼容采用不同型号处理器的宿主计算机
  2. 隔离性:虚拟机运行于沙盒模式,可以有效隔离内部程序和宿主计算机
  3. 独立性:虚拟机运行于应用层,除驱动部分外不依赖于底层硬件

而在我们的设计中,虚拟机——我们命名为 SunnyApril ——被设计为由中央处理器、显示缓存组成的无外设结构. 这也许和你想象中的类似 VMWare、Parallel Desktop、Virtual PC 之类商用虚拟机不同,但其基本原理是别无二致的——除了商用版本会用到宿主处理器的高级特性,或者提供丰富的虚拟外设,并且不需要自行汇编可执行文件.

设计中央处理器

我们将 SA 设计成一个 16 位的虚拟机,这意味着它的 CPU 核心位宽将是 16 比特的. 如此一来,SA 可以支持的内存寻址空间为 0x0000-0xFFFF 共 64 KB.

通用寄存器

寄存器是计算机结构中一个重要的概念和组件. 一类是特殊功能寄存器,通过设置寄存器内容改变处理器运行方式,这在单片微处理器中十分常见. 另一类被称为通用寄存器(general purpose registers,GPR),用于数据交换和计算结果缓存.

不同于消费者熟知的 CPU 片内缓存,通用寄存器是位于 CPU 核心内的第一级原生缓存,其速度一般是门电路级,读写周期在 1 至 2 个时钟周期内. 例如

若以 Intel 处理器常见的 L1、L2 等高速缓存作为对照,通用寄存器以其运行速度和优先级而言,可以被称为 L0 级,甚至是 L-1 级缓存,其速度和优先级远高于 L1 级. 一方面如此高速的存储单元造价极高,另一方面过多的寄存器会增加处理器核心和内部通信总线复杂度,通常情况下计算机 CPU 中不会设计太多通用寄存器. 以 Intel i9-12900K 处理器为例,其 L1、L2、L3 级缓存分别为 32 KB、6 MB、24 MB,而该款 CPU 的寄存器数量则仅为 28 个,容量仅 288 字节. 当然,这里指的寄存器是通用寄存器,不包括用于配置处理器功能的专用寄存器.

作为演示,我们为 SA 设计了 5 个寄存器:A、B、D、X、Y. 其中,A、B 寄存器是 8 位寄存器,可存储数字范围 0x00-0xFF

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Conmajia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值