计算机系统模拟器-它们看起来像现实吗

用一种简单易用的语言来介绍模拟器领域的基本术语,以及模型详细信息的类型和级别。便于快速熟悉该区域的材料。

图片

如果前段时间有人问我模拟问题,那么我会想到的第一件事就是我的儿子,他在学校的控制室前夕谈论他的胃病。但是,在过去的十年中,我一直在使用各种计算机系统的模拟器,从电话到基于微处理器,最大制造商之一的SOC(片上系统)和芯片组的服务器(不幸的是,这个名称使用的是NDA),我的想法是模拟已更改。但是首先是第一件事。

我敢肯定,你们中的许多人都遇到过模拟器,这些模拟器通常称为虚拟机,管理程序。有人在Mac上安装了Parallels Studio,以从MacOS运行Windows,有人使用VmWare-Workstation中的产品安装了另一个正在运行的操作系统(OS)。那些熟悉Linux的人更喜欢KVM和QEMU。VirtualBox也很受人们欢迎。专业开发基于FPGA的硬件(可编程逻辑集成电路)的人们意识到Synopsys和Mentor Graphics Questa的VCS。但是,这只是所谓的模拟器的一小部分。

什么是模拟器?


模拟器是一种模型,通常是软件,真实设备。因此,仿真是这种模型的过程,该过程重复了设备的操作。

原则上,您可以为任何设备建立模型,但最常见的是微处理器设备的仿真器,即,其中央组件是微处理器的设备,其余逻辑已在该设备周围构建。模拟器的主要用途之一是启动为此微处理器本身设计的程序。同时,由于一个或另一个原因,使用真实设备很困难,例如,如果我们正在谈论对下一代微处理器进行建模,则可能根本不存在。

模拟中的Airbnb-客人和房东


在模拟器中运行的代码称为“来宾代码”,它可以是“来宾程序”或整个“来宾操作系统”。模拟系统本身简称为“来宾”。反过来,运行模拟器的计算机系统称为“主机”(英语主机),运行模拟器的主机上运行的操作系统称为“主机OS”。

图片

因此,我们可以说实现一组来宾系统指令的模拟器使用可用的主机系统工具对其进行仿真。

模拟和仿真-哪个名称正确?


该模型可以以不同程度的准确性和细节重复设备。通常,这只是对程序代码可用的系统外部行为的模拟。该代码并不“在乎”该指令或该处理器指令在内部如何实现,主要是它的工作原理。此版本的仿真很常见,开发起来并不困难且相当快,即使在普通用户计算机上也不会降低速度。

但是,如果我们想知道例如程序在实际硬件上运行多长时间,这还不够。这不仅需要对外部行为进行建模,而且还需要对内部结构和工作逻辑进行重复。这也可以用不同程度的细节和准确性来完成。调用这样的模型仿真器是更正确的,它们可以真正地模拟设备,而不是“模拟”结果。

由于必须在模型中实现更多功能,因此创建仿真器要复杂得多。与设备外部行为的模拟器相比,它们的运行速度也慢得多。对于仿真器,我们根本不是在谈论启动Windows,这可能需要几年时间。没有人参与创建整个平台的软件仿真器-它非常长且昂贵。而是模拟了系统的各个组件,例如同一个中央处理器,并且仅在其上启动了部分仿真过程。当模拟器的一部分是高级模型,一部分是低层模型,一部分在FPGA中,而一部分实际上是一块真正的铁杆时,各种混合方案都是可能的。

图片

4级模拟细节


就像我在上面写的那样,最常见的选择是在处理器指令级别上进行仿真,即所谓的ISA(指令集架构),或者更确切地说是它们执行的结果,即无需模拟在实际处理器中如何发生这种情况的所有内部逻辑,也无需考虑各种指令的执行时间。这种模拟器也称为功能模拟器。这就是VirtualBox,Vmware工作站,Wind River Simics,KVM和QEMU的工作方式。这使您可以方便地运行为模拟设备设计的程序,而无需执行不必要的其他操作。换句话说,不需要重新编译或使用运行程序进行任何其他操作。在这种情况下,他们说可以运行未修改的二进制代码。

如果我们谈论更高级别的抽象,那么这将是某个ABI(应用程序二进制接口)的实现。简而言之,ABI描述了用于两个程序(通常是用户程序和库或OS)交互的二进制接口。 ABI涵盖了调用约定(如何传递参数和返回值),数据类型的大小,进行系统调用。怎么运行的?例如,如果为Linux编写的程序需要创建一个附加线程(来自英语线程)以执行,则将调用pthread_create()函数。但是,如果您在Windows中使用这种功能创建一个库并实现必要的机制来链接应用程序和库(动态链接),该怎么办?在这种情况下,您可以从Windows运行Linux应用程序。 Windows将“模拟” Linux。这正是Windows 10上用于Linux的Windows子系统中执行的操作,它使您可以在Windows上运行未修改的二进制Linux应用程序。

现在,让我们看看模拟的下层和详细层如何。这将是微体系结构级别,在该级别上模拟实际的内部算法和处理器块,例如指令解码器,队列,乱序处理单元,分支预测器,缓存,调度程序和计数设备本身。这样的建模使我们能够分析程序执行的真实速度,例如,针对现有架构对其进行优化。并且在模拟未来微处理器的原型的情况下,可以预测和评估这些设备的性能。

在微体系结构仿真级别之下,是现代芯片组成的逻辑元素的仿真级别。此类仿真器是使用FPGA的软件和硬件。使用Verilog,VHDL等语言的RTL(寄存器传输级别)描述了FPGA逻辑。编译后,获得了一个图像(位流),然后将其闪存到FPGA中。因此,无需使用烙铁并了解电气工程。该开发板例如通过USB或JTAG接口连接到计算机,并且FPGA卡制造商的特殊软件进行记录。这种板的价格从最简单的选择的十美元到大型FPGA板的数百万美元不等,而大型FPGA板的大小与大型芯片制造公司所用的机柜一样。在这类公司中,FPGA仿真是RTL投入生产之前的最后阶段。

如果我们谈论的是简单设备,并且手头上有FPGA映像,则可以联系专门的公司,这些公司将制造具有可编程逻辑的真实(非FPGA)设备。

下图显示了描述的仿真级别。

图片

除了这些仿真级别,我还必须处理混合仿真器。实际上,它们是相互连接的模拟器,可以在不同级别上对系统的不同部分进行建模。例如,您需要分析与为特定OS开发的驱动程序一起使用的新网卡的带宽。这样的网络设备以及许多相关设备可以首先在微体系结构级别实现以进行初步分析,然后在FPGA的逻辑单元级别实现以进行最终检查。同时,系统的其余部分(仅部分涉及)在指令级别实现。您不能没有它,因为例如加载操作系统是必要的,并且以较低和更复杂的级别实施它是没有意义的。

那么比较模拟器和现实呢?

现在很清楚,没有使这个或那个模拟器尽可能类似于现实的任务。业务存在一项任务,并且以与现实“相似”的程度执行仿真,这在不浪费额外金钱和时间的情况下,至少足以解决该问题。在一种情况下,它可以是一个简单的库,可实现必要的二进制接口(ABI),而在另一方面,则可以省去详细的微体系结构模拟器。

这是有关什么是模拟器以及什么是模拟器的最基本信息。在下一篇文章中,我将描述实现全平台模拟器,节拍模型和使用轨道的细节。

All Articles