嵌入式FORTH虚拟计算机的实现

最新更新时间:2014-03-10来源: 21IC关键字:嵌入式  FORTH  虚拟计算机 手机看文章 扫描二维码
随时随地手机看文章

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字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中也有标注。

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

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

其中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虚拟机可实现各种各样复杂的算法。

5.NEXT核心算法与函数

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

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

ES:BX,SI MOV

SI,#2 ADD

ES:[BX]JMP

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

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

6.实例

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

7.结论

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

关键字:嵌入式  FORTH  虚拟计算机 编辑:探路者 引用地址:嵌入式FORTH虚拟计算机的实现

上一篇:一种232串口转红外通讯的电路设计
下一篇:EMCCD相机数字控制系统的VHDL设计

推荐阅读最新更新时间:2023-10-12 22:36

嵌入式和单片机到底有什么区别?
嵌入式系统是一种专用计算机系统,它可以控制产品、设备或系统的操作。嵌入式系统可以包括硬件、软件和固件等组件。单片机则是嵌入式系统的核心部件之一,它通常集成了微处理器、内存和输入输出接口等组件,使其能够承载多种任务。 在嵌入式系统中,单片机是一个重要的组件,也是将软件和系统硬件紧密结合的关键部分。单片机继承了传统的微处理器的所有优点,同时又集成了内存、外设和输入输出接口等元件,从而可以高效地控制嵌入式系统。 单片机的主要特点是集成度高、功耗低、体积小、功能强大及性价比高。这些优势使得单片机广泛应用于家电、汽车、通信等行业领域的嵌入式系统中。 在嵌入式系统设计中,单片机可以充当控制器,负责实现各种复杂的功能。在实现复杂功能
[单片机]
视频监控分析软件发展良好嵌入式架构暂占优势
      “平安城市”的构建旨在减少危害事件的发生,传统的视频监控系统仅能在危害事件发生后,通过视频画面的回放来获取线索,这并不能从根本上减少危害事件的发生。智能视频监控系统则可以在危害事情发生之前发出预警,防患于未然。        智能视频监控系统中,智能分析系统是最关键的组成部分,它目前有两种架构方式,即嵌入式视频分析和纯软件视频分析,两者各有优缺点。嵌入式视频分析可以在前端直接对视频信息进行处理,减少了视频信息上传的网络带宽压力,并且安装简单易于系统集成。但是这种架构开发复杂,灵活性差,扩容与升级比较困难。纯软件视频分析是在视频监控系统的后端,由专门的视频处理服务器来实现的,这种模式功能比较强大,并且容易扩容。但是它
[嵌入式]
嵌入式系统完整的单芯片USB解决方案
    USB技术的应用已经从最初应用为一种连接外设和PC的方法经过了长足的发展。USB标准的灵活性和适应性,加上目前流行的基于USB的存储设备和音乐播放器,激发了许多不是基于PC的嵌入式系统纷纷采用USB。现在,从电视机和机顶盒等家庭娱乐设备,到智能仪器、机器控制器、数码标识系统和手持终端等工业应用,各种嵌入式应用都正在引入USB主机接口以提供数据存储/传输,媒体录音重放以及其他接口能力。   当把USB连接引入到一个现有的嵌入式应用的时候,对于如何升级设计者现有的设计以支持USB,有多种选择。一个选择就是用一个具有内部USB协议处理能力的设备替代它们现有的处理设备(CPU或微控制器)。这时用户通常需要重新设计他们的硬件和软件
[嵌入式]
嵌入式操作系统的通用硬件抽象层设计
引言   为了便于操作系统在不同硬件结构上进行移植,美国微软公司首先提出了将操作系统底层与硬件相关的部分单独设计成硬件抽象层HAL(Hardware Abstraction Layer)的思想。硬件抽象层的引入大大推动了嵌入式操作系统的通用程度,为嵌入式操作系统的广泛应用提供了可能。然而,目前BSP形式的硬件抽象层仅仅能够解决有限的几种操作系统在同样有限的BSP所支持的硬件平台上的移植,而对绝大多数需要根据不同嵌入式应用而专门定制的嵌入式操作系统来说能起的作用则非常有限。 1 硬件抽象层原理 1.1 硬件抽象层概念   嵌入式系统是一类特殊的计算机系统。它自底向上包括3个主要部分:硬件环境、嵌入式操作系统和
[应用]
嵌入式系统与普适计算
摘要:研究嵌入式系统与普适计算的概念、用途及其相关技术,使读者对普适计算这个新名词有一个全面的认识。 关键词:嵌入式系统 普适计算 手持设备 Windows CE 嵌入式设备 引 言   随着计算技术的发展,我们已经由PC时代进入网络时代,进而进入后PC时代。IBM在1999年创造了一个名词--“普适计算” (又叫“普及计算”,Pervasive Computing)。“普适计算”指的就是,“无论何时何地,只要您需要,就可以通过某种设备访问到所需的信息”。从计算技术的角度来看,人类已经由网络计算逐步延伸到了普适计算。   通俗来讲,普适计算的含义十分广泛,所涉及的技术包括移动通信技术、小型计算设备制造技术、小型计算设备上的操作系统技
[嵌入式]
基于EmJTAG的ARM嵌入式系统调试工具
引言   ARM嵌入式系统的大致开发流程是:先在PC机上编写程序源代码;由ARM的交叉编译器编译、链接生成一个目标文件;然后将目标文件转化成可以下载到目标机运行的二进制代码,在目标机上调试运行;最终将调试成功的二进制文件固化在目标机中。这一系列过程中,最关键的步骤就是在PC机上调试在目标机上运行的程序。这就需要采用远程调试的方式,即在PC机上运行调试器软件,被调试程序在目标机上运行。   本文描述了这样一个远程调试系统:利用USB批量传输的可靠性,将远程调试协议EmRDI的报文封装在USB数据包中;协议转换器EmJTAG再根据接收到的USB数据包中的协议信息,转换成适当的JTAG信号来控制和调试ARM核。协议转换器EmJTAG由ST
[单片机]
基于EmJTAG的ARM<font color='red'>嵌入式</font>系统调试工具
一个典型的嵌入式系统设计和实现
在计算机、互联网和通信技术高速发展的同时,嵌入式系统开发技术也取得迅速发展,嵌入式技术应用范围的急剧扩大。本文介绍了一种基于ARM和FPGA,从软件到硬件完全自主开发多功能车辆总线(Multifunction Vehicle Bus)MVB嵌入式系统的设计和实现。 系统设计和实现 通常来说,一个嵌入式系统的开发过程如下: 1、确定嵌入式系统的需求; 2、设计系统的体系结构:选择处理器和相关外部设备,操作系统,开发平台以及软硬件的分割和总体系统集成; 3、详细的软硬件设计和RTL代码、软件代码开发; & nbsp; 4、软硬件的联调和集成; 5、系统的测试。 一、步骤1:确定系统
[电源管理]
一个典型的<font color='red'>嵌入式</font>系统设计和实现
嵌入式系统中精确的卫星定位授时与同步
摘要:介绍卫星定位、授时与同步的特点与基本原理;详细阐述现代卫星信号接收体系的硬软件设计思想以及如何在系统设计中嵌入应用导航卫星实现的精确的物体定位、时钟授时和同步数据采集控制。 关键词:LNA RF 基带处理 芯片组 一体化模块 卫星定位授时与同步   利用导航卫星,进行物体定位、时钟授时与同步数据采集控制,可以达到传统测量控制手段所不及的精确程度。这种卫星定位授时同步技术在航空航海、陆上交通、科学考察、极地探险、地理测量、气象预报、设备巡检、系统监控等方面的应用日益广泛。近年来,很多厂商,如Atmel、ST、Motorola、Maxim、NEC、Fijitsu、Conexant等,相继推出了许多相关卫星定位授时同步的芯片组与
[嵌入式]
小广播
最新电源管理文章
换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved