众享区块链大讲堂74-EVM运行原理1

大家好,欢迎收听众享区块链大讲堂,今天的课程是EVM运行原理第一讲。

从这节到后面两节课我们主要介绍以太坊的虚拟机 EVM。据以太坊官方文档定义:以太坊虚拟机是智能合约的运行环境。它是一个完全独立的沙盒,合约代码在 EVM 内部运行,对外是完全隔离的,甚至不同合约之间也只有有限的访问权限。

在具体介绍 EVM 之前,我想从传统的虚拟机开始讲解,然后阐述比特币和以太坊虚拟机运行原理,最后再讲以太坊 EVM 的缺点以及其他区块链虚拟机的改进,因此本系列的课程依次介绍的是,

(1)传统意义上的虚拟机

(2)比特币执行脚本和以太坊 EVM 原理

(3)EVM 缺点以及其他区块链 EVM 的实现

众所周知,虚拟机这个概念我们并不陌生,如果站在系统的角度来描述虚拟机大概可以这样:虚拟机实际上不是物理计算机,而是一个用来模仿物理计算机的软件环境,但虚拟机可以像物理计算机一样运行程序。用于托管虚拟机的物理计算机通常可以支持多台虚拟机。另外,不仅在系统层上有虚拟机的概念,在程序语言上也有虚拟机的概念,比如 java 的 JVM,微软的 .NET 等。

为了解决什么问题

很显然虚拟机的出现单纯就是为了抽象掉底层。为什么要抽象掉底层?因为从系统层来说,硬件和操作系统都越来越不一样了。比如同样是X86的CPU,有的支持到SSE4,有的只支持MMX,还有的只支持3DNow,如果想要代码跑得快,需要自己去做繁琐的检测,还要写多份代码来应对。在只有MMX和3DNow之分的年代最多代码量翻倍,但之后的发展越来越不可控了。这还只是CPU的一项区别,如果其他硬件也出现了各种不同,例如硬盘接口SCSI、IDE、SATA、iSCSI,3D运算DirectX、OpenGL、3dfx等等,会产生更多不便。操作系统之差异则无需赘述了。这一切都应该有一个机制来代理,适配硬件的事情都很机械,理论上只要设计一种合适的机制,就能自动兼容所有硬件,于是虚拟机就诞生了。很显然这类 VM 的硬件虚拟机抽象了硬件底层的操作,只要符合这个抽象层的操作系统就能在这个 VM 上运行。

怎么实现的

虚拟机按层次来说可以分为下列三大类:

(1)高级语言虚拟机

(2)操作系统层的虚拟机

(3)硬件层的虚拟机

然而他们的实现越往底层难度就越大。对于一个操作系统来说他们的架构层次是:最下层是硬件层,之上是硬件驱动,再之上是操作系统内核,然后才是操作系统接口和应用程序。我们可以把任何形式的虚拟机都想象成一个容器,在这个容器里它截获了本该发往底层的指令,自己处理。因此对于不同层次虚拟机的实现我们可以做以下简单描述。

高级语言虚拟机,其实就是就一个代码解释器,你不需要给我二进制代码,只需要中间代码,然后虚拟机处理后,再移交给 CPU 和存储结构。虚拟机模拟的是代码的执行。

操作系统层的虚拟机,所有操作系统接口调用都会被该容器截获,经过处理后,发送到当前适当的平台上。

硬件层的虚拟机,其实是最复杂的工程,是虚拟化技术的一大重点,是对硬件层以及硬件驱动层的模拟。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190729A0LFQ500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券