0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FORTH语言实现嵌入式虚拟计算机的设计

电子设计 来源:郭婷 作者:电子设计 2018-12-04 09:19 次阅读

1.引言

虚拟机最初是美国计算机科学家波佩克(Popek)与戈德堡(Gerald)在虚拟化需求中给出了定义,专指有效的、孤立的真实计算机的副本,现在则指可像真实计算机一样运行程序的软件实现,包括跟任何真实计算机无关的虚拟机。根据运用和与机器的相关性可分为系统虚拟机和程序虚拟机,一个提供了完整的操作系统,另一个则以运行单个计算机程序为主。

嵌入式应用领域,嵌入式系统相关的CPU芯片和微计算机硬件系统种类繁多,并且不断推陈出新,甚至多核处理器已被普遍采用。但是在新平台上,难以针对每一种芯片或平台制定一种计算机语言来编程。解决的方法一是可采用公共计算机语言,用不同的编译器来生成机器码,但该方法需要具有该语言的编译器,在新平台上往往难以具备。另一种方法即建立一个虚拟机,然后用一个计算机语言,用一个解释器来解释执行。采用该方法,难点在于嵌入式虚拟机的构建,要能够适应多种环境、快速构建、可扩展。

FORTH是一种与众不同的计算机程序设计语言。它具有极强的扩展性,通过字的定义,可实现不断堆叠和扩展。同时,它又具有极好的交互性,指令可解释执行,这就为应用的调试带来了极大的便捷。本文基于FORTH语言,以自主构建的JLPFORTH虚拟平台为例,详细阐述FORTH虚拟机的实现原理和核心实现方法,模拟和实现了通用的交互式计算机结构,实现了真实计算机的典型工作流程[4],并且一改过去FORTH代码和数据混合存储的方式,在内存的存储上以分段的方式将内存分为CS、VS、DS、SS四个段,分别存储指令和数据,这样,就实现了系统指令和用户数据的分离,有效地提高了代码和系统的安全性,并且调试方便、扩展性强,尤其适合应用于对安全性、兼容性、移植性、扩展性、交互性要求高的嵌入式系统领域。

2.FORTH虚拟机实现原理

真实计算机的基本工作原理是存储和控制。计算机在控制器的指挥下,取出预先存储的指令序列(即程序)和数据,通过控制器译码,按指令的要求,取出数据完成运算,再把结果重新存储起来,如此循环,直至完成全部指令。对真实计算机来说,这个过程依托中央处理器CPU来实现,CPU包括运算器、控制器和寄存器。如果描述CPU核心工作过程,主要包括以下步骤:

(1)提取程序计数器值,该值指向的地址即指令地址;

(2)从该地址取出指令;

(3)程序计数器增加指令长度,即指向下一条指令地址;

(4)解码执行指令;

(5)返回结果。

由于FORTH虚拟机是工作在真实计算机上的,因此要实现FORTH虚拟机必须用对应关系依托真实计算机的代码来实现这个核心过程。

在FORTH虚拟机中,用核心算法--NEXT模拟了这个过程,将虚拟机指令和真实计算机指令实现对应,通过建立字典表,设置地址跳转,以串线码的方式将虚拟机命令字和直接机器指令实现对应,依托真实计算机指令完成了CPU的处理过程。如图1所示。

基于FORTH语言实现嵌入式虚拟计算机的设计

具体过程是:在FORTH定义字时创建链结构的字典表,在其中存储各个字的名称、长度、状态、指令码以及链接指针。例如定义FORTH字S:S DUP *;在字典表存放了各个FORTH高级字的名称和代码执行地址,其中也有S字的定义,在S字的代码场中存有S字的代码执行地址,该代码执行地址与code所描述的直接机器执行代码相对应,构成间接串线编码。当执行该指令时,首先查找字典表,找到S定义后,取出其WPF指令码中存放的地址,然后跳转到代码场该地址中,由于是FORTH高级字定义,所以首先执行“:”机器码将程序计数器所记录的下一条指令返回地址压入栈,然后跳转到参数场地址依序执行,直到最后的“;”返回指令执行后,再将原先存入栈的返回地址弹出,这样即完成一条指令的执行。其中,代码场和参数场分别存储指令和参数。以下以JLP FORTH虚拟机为例,详细描述其字典表、代码场、参数场的定义、虚拟机存储和指针的分配,以及核心算法。

3.指令的定义和存储

FORTH虚拟计算机采用该虚拟指令的存储地址来表示该指令,称为“地址码”.虚拟计算机的每个指令用名称(例如+、-、*)来表示,称为“字(Word)”.FORTH虚拟计算机的指令包括“复合字”和“基本字”.基本字也称为“低级字”,由真实计算机机器码和数据组成的,低级字组合可构成“复合字”,所以,“复合字”也称为“高级字”.

高级字和低级字都可通过定义扩展。扩展高级字用“:”冒号定义,通过高级字定义用已有的指令形成新的指令。格式如下:

:名字 … leave … ;其中执行leave指令可以跳出该FORTH字的执行,忽略掉其后的指令。扩展低级字则用机器码定义,格式如下:

CODE 名字 … … NEXT, END-CODE其中NEXT,指令可以让计算机执行下一条虚拟机指令。

对于真实计算机,用编译器生成的指令码序列中不需要保留指令名称。FORTH虚拟计算机不同,由于需要虚拟机执行和构造新的虚拟机指令,因此在虚拟计算机中要保留FORTH字的名称,用于存储FORTH字的存储空间就是“字典表”.在JLP FORTH虚拟平台中,字典表结构如表1,在图1中也有标注。

基于FORTH语言实现嵌入式虚拟计算机的设计

WPF里存储的指令码即FORTH字在存储空间的地址。由于允许FORTH字的名称长度不一样,因此采用链表结构可有效地存储它们,在LPF中即存放了下一个字的定义地址。

代码场和参数场用于共同存储FORTH字,如表2.

基于FORTH语言实现嵌入式虚拟计算机的设计

其中CFA存放实现虚拟机功能的CPU机器码开始地址。PFA依次存放组成它的虚拟机指令。对于基本字PFA的内容不一样。对于一个常数基本字,PFA就直接存放这个常数。对于一个变量基本字,PFA就存放数据段中这个变量的地址[6].

4.内存和指针分配

以往FORTH并未将代码和数据分开,在嵌入式应用中,往往指令和程序相对固定,而代码和数据混合致使调试不方便,同时在系统安全上也带来问题。在JLP FORTH虚拟机上,将内存分为代码段CS、代码空间VS、数据段DS、系统段SS四个部分。

(1)代码段CS:存放真实计算机的机器指令、内存分配信息以及与硬件有关的系统数据。

(2)“代码”空间VS:用来存放虚拟计算机的指令和字典。

(3)数据段DS:用来存放用户数据和虚拟机的堆栈等数据。

(4)系统段SS:用来存放系统堆栈和多任务系统数据表等,达到分离系统任务和用户,保证系统安全的目的。

采用这种存放方式,就可将CS和VS放在FLASH中,将DS和SS放在RAM,如此实现程序和数据的分离。这种新的虚拟机架构不仅可以适合嵌入式系统,也适合PC结构系统,而且更有利于内存保护的实现。

真实计算机主要依靠寄存器来实现加减乘除等运算。例如将AX和BX寄存器的内容相加结果放到AX中,因此寄存器的数量是衡量CPU运算能力的一个指标。FORTH虚拟计算机则采用直接面向运算过程的方法,采用堆栈的方式来实现简单的运算,例如取出堆栈顶上的两个数相加后,结果放回堆栈顶。对于复杂运算,直接用复合字或者机器码写出面向数据的算法,比如对矢量和矩阵的运算等。由于没有寄存器的概念,只有表示系统工作状态的各种系统变量以及实现系统运行的各种指针。为了提高虚拟计算机的执行效率,用间接寻址的CPU寄存器来实现。对应关系如下(注:箭头为在X86计算机中对应的寄存器)。

基于FORTH语言实现嵌入式虚拟计算机的设计

通过这些指针的定义,FORTH虚拟机可实现各种各样复杂的算法。

5.NEXT核心算法与函数

FORTH虚拟机的核心算法--NEXT,它完成了指令的控制执行过程。如借用以上描述,用形式化的方法表示为:

由于FORTH虚拟机是工作在真实计算机上,因此要实现FORTH虚拟机必须用真实计算机的代码来实现这个核心过程,以X86汇编语言为例,其实现FORTH虚拟机核心过程的代码为(16位地址空间):

ES:BX,SI MOV

SI,#2 ADD

ES:[BX]JMP

从代码可以看出,它非常象一个子过程或函数的调用。在真实计算机中,函数是非常常用的一个功能,是若干指令的有序集合。

在FORTH虚拟计算机中高级字就可认为是“函数”.表3是真实计算机和FORTH虚拟计算机在函数调用中的执行过程对比。

基于FORTH语言实现嵌入式虚拟计算机的设计

6.实例

以下采用自下而上的编程方法,构造FORTH字P_DUMP用于查看内存基本信息,以此为例说明FORTH虚拟计算机相关程序的设计方法。参数有查看内存的段地址、偏移地址和区域长度。

基于FORTH语言实现嵌入式虚拟计算机的设计

基于FORTH语言实现嵌入式虚拟计算机的设计

基于FORTH语言实现嵌入式虚拟计算机的设计

7.结论

对于嵌入式应用来说,一个可扩展性好、可移植性好、可裁剪、实现快速,并且便于调试的嵌入式虚拟机,能给嵌入式应用的开发带来极大的方便。基于FORTH构筑的虚拟机,引入字典表完成指令和机器代码的对应,并用字定义来完成指令的扩展,使系统的结构具有了极大的灵活性和扩展性,仅仅通过对基本字的堆叠、组合就可完成高级字的层层定义,实现极其复杂的系统。在JLP FORTH中存储分段使得程序指令和数据能相对独立,有效地增强了系统的安全性。这些设计思路使得在其上构建的FORTH虚拟机具有了代码简单、调试方便、安全性高、扩展性强等特点,特别适合应用于嵌入式系统中。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50711

    浏览量

    423077
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10853

    浏览量

    211547
  • 计算机
    +关注

    关注

    19

    文章

    7488

    浏览量

    87846
  • 虚拟机
    +关注

    关注

    1

    文章

    914

    浏览量

    28155
收藏 人收藏

    评论

    相关推荐

    如何设计嵌入式网络虚拟仪表硬件?

    随着计算机技术和网络技术的发展,利用嵌入式计算机系统和网络技术,组成网络嵌入式虚拟仪表,将处于不同地域的多个仪表组成一个统一的整体,实现数据
    发表于 08-08 08:01

    嵌入式计算机性能怎么评测?

    嵌入式计算机的设计不同于通用的计算机设计,它的设计过程较复杂。对于嵌人计算机的设计,是针对具体的应用问题,通过对问题的描述、建模,分解嵌入式
    发表于 09-23 06:34

    嵌入式计算机性能怎么评测?

    嵌入式计算机的设计不同于通用的计算机设计,它的设计过程较复杂。对于嵌人计算机的设计,是针对具体的应用问题,通过对问题的描述、建模,分解嵌入式
    发表于 03-09 07:35

    请问一下FORTH虚拟机的实现原理和核心实现方法是什么?

      本文基于FORTH语言,以自主构建的JLPFORTH虚拟平台为例,详细阐述FORTH虚拟机的实现
    发表于 04-20 06:39

    什么是嵌入式计算机

    嵌入式计算机系统无处不在。如果你去过一家超级市场,并且注意到墙上有售货亭机,那么这些售货亭很有可能由嵌入式计算机供电。本文将介绍有关嵌入式PC和计算机所需的一切知识。什么是
    发表于 10-27 08:05

    什么是嵌入式计算机

    什么是嵌入式计算机时间:2012-2-26顾名思义,嵌入式计算机嵌入在宿主系统中使用的计算机,如嵌入在医疗测试仪器CT,工业机器人,高级音
    发表于 10-27 06:02

    什么是计算机虚拟

    计算机虚拟化是一种型的计算模式, 能够动态组织多种计算资源, 隔离硬件体系结构和软件系统之间的依赖关系, 实现透明化、 可伸缩的
    发表于 12-21 06:42

    嵌入式计算机与通用计算机有哪些不同之处

    从汽水自动售货机到汽车系统,几乎所有东西都可以在嵌入式计算机上运行。即使嵌入式计算机涵盖了广泛的专用系统,但它们之间也具有共同的特征,这些共同的特征在许多计算条件下都具有出色的优势:通过热管和散热器
    发表于 12-23 06:49

    嵌入式计算机的应用范围

    嵌入式计算机是为特定的软件控制任务而设计的专用计算平台。这些不是我们在家或办公室使用的典型台式消费级计算机嵌入式计算机的应用范围从工业自动化,数字标牌,自动驾驶汽车到太空探索等等。通
    发表于 12-23 07:17

    嵌入式计算机发展的基础技术

    从应用的方式来说,计算机可分为两类:嵌入式计算机与独立式计算机,这两种计算机的发展取决于它们的基础技术。这里主要讨论一下嵌入式计算机普及、透
    发表于 05-14 00:34 22次下载

    嵌入式计算机发展技术

    从应用的方式来说,计算机可分为两类:嵌入式计算机与独立式计算机,这两种计算机的发展取决于它们的基础技术。这里主要讨论一下嵌入式计算机普及、透
    发表于 05-18 15:44 60次下载

    嵌入式Forth虚拟机架构的多任务调度算法设计与实现

    针对嵌入式应用领域对操作系统在重构、扩展、移植、交互、安全、高效等方面日趋苛刻的现实需求及Forth系统所固有的特性,采用Forth虚拟机技术,对基于
    发表于 02-12 14:28 0次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Forth</b><b class='flag-5'>虚拟</b>机架构的多任务调度算法设计与<b class='flag-5'>实现</b>

    微型计算机嵌入式吗,什么是嵌入式计算机

    什么是嵌入式计算机时间:2012-2-26顾名思义,嵌入式计算机嵌入在宿主系统中使用的计算机,如嵌入在医疗测试仪器CT,工业机器人,高级音
    发表于 10-20 18:06 7次下载
    微型<b class='flag-5'>计算机</b>是<b class='flag-5'>嵌入式</b>吗,什么是<b class='flag-5'>嵌入式计算机</b>

    计算机网络与嵌入式系统,嵌入式系统与计算机系统有什么不同

    原标题:嵌入式系统与计算机系统有什么不同近段时间很多学习单片机或者传统计算机的人员参加嵌入式培训的比例在不断增大,这部分同学可能以前对于计算机
    发表于 10-21 09:36 6次下载
    <b class='flag-5'>计算机</b>网络与<b class='flag-5'>嵌入式</b>系统,<b class='flag-5'>嵌入式</b>系统与<b class='flag-5'>计算机</b>系统有什么不同

    什么是嵌入式计算机

    嵌入式计算机是一种专门设计用于特定功能的计算机系统,通常被嵌入到其他设备中,以执行特定的任务。这种计
    的头像 发表于 01-15 15:10 1385次阅读
    什么是<b class='flag-5'>嵌入式计算机</b>?