国产乱人伦在线播放,99无码精品二区在线视频,最近在线更新8中文字幕免费,精品成人一区二区三区四区

您的位置:首頁 > 區(qū)塊鏈 >

NEOVM是基于圖靈機模式的虛擬機 只提供純粹的邏輯計算能力

2019-10-16 08:33:04 來源: 區(qū)塊網(wǎng)

NEOVM 就是 NEO& 39;s VM拆開就很清楚了,Neo區(qū)塊鏈系統(tǒng)中使用的虛擬機。虛擬機就是虛擬的電腦,現(xiàn)在我們通常提到的虛擬機有兩種典型的形式

NEOVM 就是 NEO's VM

拆開就很清楚了,Neo區(qū)塊鏈系統(tǒng)中使用的虛擬機。

虛擬機就是虛擬的電腦,現(xiàn)在我們通常提到的虛擬機有兩種典型的形式。

1.1一種是對一臺電腦完整的模擬

比如hyper-V,VMWare

還有街機模擬器

1.2另一種是僅僅作為執(zhí)行環(huán)境

比如JVM 比如dotnet framework 比如V8\lua

對于開發(fā)者來說,面對的執(zhí)行環(huán)境又分為兩大類情況。

1.2.1 公用執(zhí)行環(huán)境

公用執(zhí)行環(huán)境,比如java c# python

1.2.2 一種是嵌入式執(zhí)行環(huán)境

舉個例子,比如lua 就是一種典型的嵌入式腳本。

當然也有通過mono 和 v8,把c# 和 js 作為嵌入式腳本使用的情況。

2 NeoVM是什么

NeoVM的形式就是上文 1.2.2 這種,和Lua相似,是一種嵌入式的執(zhí)行環(huán)境。

NeoVM是一種基于圖靈機模式的虛擬機,通過磁頭在磁帶上的移動改變狀態(tài),以此來實現(xiàn)邏輯運算。

NeoVM 是 不依賴于Neo項目的一個單獨系統(tǒng),NeoVM只提供純粹的邏輯計算能力,采用可擴展的互操作方式,后插入虛擬機可以調(diào)用的功能。

NeoVM的設(shè)計更貼近機器,執(zhí)行的代碼段是一個內(nèi)存塊,執(zhí)行時即時將數(shù)據(jù)解析為指令。

3 NeoVM的執(zhí)行方式

要說明這件事情我們必須得復習一下圖靈機了

忽略我丑陋的字跡

這里就假設(shè)你了解磁帶式音樂播放器的工作原理,要不然head 和 tape 就變成一個晦澀的概念了。

1.在一條磁帶tape上寫上指令。

2.磁頭head負責讀取當前指令

3.指令集是已知的 圖中展示了四條指令

nop 啥也不做 push [n] 將一個數(shù)字推到calcstack 中 add 從calcstack中取兩個值,將他們相加,再放回calcstack中 ret 結(jié)束當前執(zhí)行。

4.寄存器空間來管理狀態(tài),對NeoVM來說寄存器是兩個Stack,CalcStack 和 AltStack。

有磁帶,有磁頭,指令集,狀態(tài)空間,這就是一個圖靈機了。

4 Talk is cheap

讓我們來研究一下代碼吧

代碼在 samples/turing01

不到100行代碼,模擬了那副丑陋的畫里的圖靈機執(zhí)行過程。

首先是準備好寫著代碼的磁帶

NOP

PUSH 1

PUSH 2

ADD

RET

然后滾動磁帶,讓代碼一條條滾到磁頭下面

while(!vm.stop)

{

...

}

這里涉及到圖靈機的停機問題,ret指令就是來通知停機的,要不然我們就會一直滾動下去。當然也可以依賴紙帶的長度來停機,實際上NEOVM是設(shè)計為紙帶用完自動停機的 相信不會有人懷疑這個程序得到的retvalue是3。

讓我們來分析一下發(fā)生了什么。

這只是模擬程序,一次說明一個問題,我們用class Head表示磁頭,用List表示磁帶

滾動磁帶是通過head.pos的累加

狀態(tài)空間 是 stop變量 和 calcstack 棧

執(zhí)行指令的步驟寫在函數(shù)StepOne中

StepOne 的過程是 1.讀取磁帶上位于磁頭處的代碼 2.執(zhí)行代碼 3.滾動磁頭 head.pos++;

執(zhí)行代碼時就是操作狀態(tài)空間

NOP 什么也不干,但NOP依然是最重要的指令之一,你就把他當作空格就好了。

RET 直接導致停機,磁頭也不再滾動, 磁頭位置也是狀態(tài)空間的一部分,指令可以導致磁頭位置變化,這一點很重要,因為流程控制的本質(zhì)就是磁頭位置變化,所有 的 if for while 邏輯,最后落實到vm上都是在改變磁頭位置。

PUSH 往calcstack上推一個值

ADD 從calcstack取兩個值,相加后再放回去

如果你跑起這個程序,斷點,一步步StepOne,觀察calcstack,你會發(fā)現(xiàn):

1.nop 之后,什么也沒有發(fā)生 2.push 1 之后,calcstack里面是 [1] 3.push 2 之后,calcstack里面是 [2,1] 4.add 之后,calcstack 里面是 [3] 5.ret 之后,stop 變成true了,于是循環(huán)就結(jié)束了。

這就是NEOVM的工作原理了。

對NEOVM來說 .avm 就是這條tape了,不同之處在于avm是byte[],不是像我們這里使用的List 這么結(jié)構(gòu)化。

這篇的目的是解釋NEOVM是什么,是怎么工作的,先用這個簡單的程序進行說明。(李劍英)

關(guān)鍵詞: NEOVM 圖靈機模式 虛擬機

精選 導讀

募資55億港元萬物云啟動招股 預計9月29日登陸港交所主板

萬科9月19日早間公告,萬物云當日啟動招股,預計發(fā)行價介乎每股47 1港元至52 7港元,預計9月29日登陸港交所主板。按發(fā)行1 167億股計算,萬

發(fā)布時間: 2022-09-20 10:39
管理   2022-09-20

公募基金二季度持股情況曝光 隱形重倉股多為高端制造業(yè)

隨著半年報披露收官,公募基金二季度持股情況曝光。截至今年二季度末,公募基金全市場基金總數(shù)為9794只,資產(chǎn)凈值為269454 75億元,同比上

發(fā)布時間: 2022-09-02 10:45
資訊   2022-09-02

又有上市公司宣布變賣房產(chǎn) 上市公司粉飾財報動作不斷

再有上市公司宣布變賣房產(chǎn)。四川長虹25日稱,擬以1 66億元的轉(zhuǎn)讓底價掛牌出售31套房產(chǎn)。今年以來,A股公司出售房產(chǎn)不斷。根據(jù)記者不完全統(tǒng)

發(fā)布時間: 2022-08-26 09:44
資訊   2022-08-26

16天12連板大港股份回復深交所關(guān)注函 股份繼續(xù)沖高

回復交易所關(guān)注函后,大港股份繼續(xù)沖高。8月11日大港股份高開,隨后震蕩走高,接近收盤時觸及漲停,報20 2元 股。值得一提的是,在7月21日

發(fā)布時間: 2022-08-12 09:56
資訊   2022-08-12

萬家基金再添第二大股東 中泰證券擬受讓11%基金股權(quán)

7月13日,中泰證券發(fā)布公告,擬受讓齊河眾鑫投資有限公司(以下簡稱齊河眾鑫)所持有的萬家基金11%的股權(quán),交易雙方共同確定本次交易的標的資

發(fā)布時間: 2022-07-14 09:39
管理   2022-07-14

央行連續(xù)7日每天30億元逆回購 對債市影響如何?

央行12日再次開展了30億元逆回購操作,中標利率2 10%。這已是央行連續(xù)7日每天僅進行30億元的逆回購縮量投放,創(chuàng)下去年1月以來的最低操作規(guī)

發(fā)布時間: 2022-07-13 09:38
資訊   2022-07-13

美元指數(shù)創(chuàng)近20年新高 黃金期貨創(chuàng)出逾9個月新低

由于對美聯(lián)儲激進加息的擔憂,美元指數(shù)11日大漲近1%創(chuàng)出近20年新高。受此影響,歐美股市、大宗商品均走弱,而黃金期貨創(chuàng)出逾9個月新低。美

發(fā)布時間: 2022-07-13 09:36
資訊   2022-07-13

美股三大股指全線下跌 納斯達克跌幅創(chuàng)下記錄以來最大跌幅

今年上半年,美股持續(xù)回落。數(shù)據(jù)顯示,道瓊斯指數(shù)上半年下跌15 3%,納斯達克綜合指數(shù)下跌29 5%,標普500指數(shù)下跌20 6%。其中,納斯達克連續(xù)

發(fā)布時間: 2022-07-04 09:51
推薦   2022-07-04

融資客熱情回升 兩市融資余額月內(nèi)增加超344億元

近期A股走強,滬指6月以來上漲4%,融資客熱情明顯回升。數(shù)據(jù)顯示,截至6月16日,兩市融資余額1 479萬億元,月內(nèi)增加344 67億元,最近一個半

發(fā)布時間: 2022-06-20 09:41
資訊   2022-06-20

4個交易日凈買入超百億元 北向資金持續(xù)流入A股市場

北向資金凈流入態(tài)勢延續(xù)。繼6月15日凈買入133 59億元后,北向資金6月16日凈買入44 52億元。自5月27日至今,除6月13日以外,北向資金累計凈

發(fā)布時間: 2022-06-17 09:37
推薦   2022-06-17