<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式FORTH虛擬計算機的實(shí)現

嵌入式FORTH虛擬計算機的實(shí)現

作者: 時(shí)間:2013-12-17 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/256992.htm

1.引言

虛擬機最初是美國計算機科學(xué)家波佩克(Popek)與戈德堡(Gerald)在虛擬化需求中給出了定義,專(zhuān)指有效的、孤立的真實(shí)計算機的副本,現在則指可像真實(shí)計算機一樣運行程序的軟件實(shí)現,包括跟任何真實(shí)計算機無(wú)關(guān)的虛擬機。根據運用和與機器的相關(guān)性可分為系統虛擬機和程序虛擬機,一個(gè)提供了完整的操作系統,另一個(gè)則以運行單個(gè)計算機程序為主。


應用領(lǐng)域,系統相關(guān)的CPU芯片和微計算機硬件系統種類(lèi)繁多,并且不斷推陳出新,甚至多核處理器已被普遍采用。但是在新平臺上,難以針對每一種芯片或平臺制定一種計算機語(yǔ)言來(lái)編程。解決的方法一是可采用公共計算機語(yǔ)言,用不同的編譯器來(lái)生成機器碼,但該方法需要具有該語(yǔ)言的編譯器,在新平臺上往往難以具備。另一種方法即建立一個(gè)虛擬機,然后用一個(gè)計算機語(yǔ)言,用一個(gè)解釋器來(lái)解釋執行。采用該方法,難點(diǎn)在于虛擬機的構建,要能夠適應多種環(huán)境、快速構建、可擴展。


是一種與眾不同的計算機程序設計語(yǔ)言。它具有極強的擴展性,通過(guò)字的定義,可實(shí)現不斷堆疊和擴展。同時(shí),它又具有極好的交互性,指令可解釋執行,這就為應用的調試帶來(lái)了極大的便捷。本文基于語(yǔ)言,以自主構建的JLP虛擬平臺為例,詳細闡述FORTH虛擬機的實(shí)現原理和核心實(shí)現方法,模擬和實(shí)現了通用的交互式計算機結構,實(shí)現了真實(shí)計算機的典型工作流程[4],并且一改過(guò)去FORTH代碼和數據混合存儲的方式,在內存的存儲上以分段的方式將內存分為CS、VS、DS、SS四個(gè)段,分別存儲指令和數據,這樣,就實(shí)現了系統指令和用戶(hù)數據的分離,有效地提高了代碼和系統的安全性,并且調試方便、擴展性強,尤其適合應用于對安全性、兼容性、移植性、擴展性、交互性要求高的嵌入式系統領(lǐng)域。

2.FORTH虛擬機實(shí)現原理


真實(shí)計算機的基本工作原理是存儲和控制。計算機在控制器的指揮下,取出預先存儲的指令序列(即程序)和數據,通過(guò)控制器譯碼,按指令的要求,取出數據完成運算,再把結果重新存儲起來(lái),如此循環(huán),直至完成全部指令。對真實(shí)計算機來(lái)說(shuō),這個(gè)過(guò)程依托中央處理器CPU來(lái)實(shí)現,CPU包括運算器、控制器和寄存器。如果描述CPU核心工作過(guò)程,主要包括以下步驟:


(1)提取程序計數器值,該值指向的地址即指令地址;


(2)從該地址取出指令;


(3)程序計數器增加指令長(cháng)度,即指向下一條指令地址;


(4)解碼執行指令;


(5)返回結果。


由于FORTH虛擬機是工作在真實(shí)計算機上的,因此要實(shí)現FORTH虛擬機必須用對應關(guān)系依托真實(shí)計算機的代碼來(lái)實(shí)現這個(gè)核心過(guò)程。


在FORTH虛擬機中,用核心算法--NEXT模擬了這個(gè)過(guò)程,將虛擬機指令和真實(shí)計算機指令實(shí)現對應,通過(guò)建立字典表,設置地址跳轉,以串線(xiàn)碼的方式將虛擬機命令字和直接機器指令實(shí)現對應,依托真實(shí)計算機指令完成了CPU的處理過(guò)程。如圖1所示。


具體過(guò)程是:在FORTH定義字時(shí)創(chuàng )建鏈結構的字典表,在其中存儲各個(gè)字的名稱(chēng)、長(cháng)度、狀態(tài)、指令碼以及鏈接指針。例如定義FORTH字S:S DUP *;在字典表存放了各個(gè)FORTH高級字的名稱(chēng)和代碼執行地址,其中也有S字的定義,在S字的代碼場(chǎng)中存有S字的代碼執行地址,該代碼執行地址與code所描述的直接機器執行代碼相對應,構成間接串線(xiàn)編碼。當執行該指令時(shí),首先查找字典表,找到S定義后,取出其WPF指令碼中存放的地址,然后跳轉到代碼場(chǎng)該地址中,由于是FORTH高級字定義,所以首先執行“:”機器碼將程序計數器所記錄的下一條指令返回地址壓入棧,然后跳轉到參數場(chǎng)地址依序執行,直到最后的“;”返回指令執行后,再將原先存入棧的返回地址彈出,這樣即完成一條指令的執行。其中,代碼場(chǎng)和參數場(chǎng)分別存儲指令和參數。以下以JLP FORTH虛擬機為例,詳細描述其字典表、代碼場(chǎng)、參數場(chǎng)的定義、虛擬機存儲和指針的分配,以及核心算法。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>