Atitit 虛擬機器與指令系統的設計

2021-09-08 11:36:53 字數 1967 閱讀 8012

atitit.虛擬機器與指令系統的設計 1

. 兩種計算模型

,堆疊機和狀態機

(基於暫存器的虛擬機器1

1.1.1. 堆疊機1

1.1.2. 狀態機2

2. 為什麼狀態機比堆疊機快呢?3

2.1. 

stack based vm的指令範例4

3. 參考5

有了上面的基礎只是,我們就知道,堆疊機和狀態機不過是兩種不同的圖靈完整的計算模型而已。

所謂堆疊機,就是計算機的狀態是存在於堆疊之中,通過對堆疊中的元素進行運算和調整,來實現計算功能的計算機。 

例如,要進行乙個1+2的加法運算,那麼就:

操作堆疊狀態

初始狀態

將1壓入棧中

1將2壓入棧中

1, 2

呼叫加法運算

3其典型代表就是python的虛擬機器,**如下:

push

1push2

add

作者:: 綽號:

老哇的爪子

(全名::

attilax

akbar al rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 )

漢字名:

艾龍,email:[email protected]

狀態機的基本原理就在於,它可以有有限種狀態,指令能夠讓它在不同的狀態之間進行轉換。 

聽起來很抽象? 

但其實,我們大部分寫**的時候都是對狀態機程式設計,比如c**:

inta = 1;

intb = 2;

intc = a + b;

其實這個狀態機有2^96種狀態(假設int是32位的),因為變數a有2^32種狀態(-2147483648~2147483647),b、c亦然。

操作a的狀態

b的狀態

c的狀態

初始狀態00

0a=110

0b=212

0c=a+b12

3典型代表就是lua的虛擬機器,應的**就是:

loadk 0 1

loadk 1 2

add 2 0 1

意思就是:

register[0] = 

1register[1] = 

2register[2] = register[

0] + register[1]

既然他們是圖靈等價的,那大家一定會很疑惑,為何狀態機比堆疊機快呢? 

那麼我們要深入到虛擬機器內部,看看這些指令都是怎麼實現的。 

為了便於大家理解,我所有的**都不是vm中的實際**,而是偽**。 

首先來看看堆疊機:

switch

(op) 

我們可以看到,大部分情況下,執行一條指令,除了原始的賦值操作外,還需要調整堆疊的棧頂指標(那些stack_adj巨集定義),再看看狀態機的實現:

switch

(op) 

大家可以看到,在執行大部分指令時,狀態機虛擬機會比堆疊機要少一次調整堆疊的操作,這對效能會有很明顯的影響。 

當然這也主要適用於interpreting的情況,在jit的情況下,會有很多深度優化,從而使得堆疊機的效能也能和狀態機一樣。

一般都是在當前stack

中獲取和儲存運算元的。比如乙個簡單的加法賦值運算

:a=b+c

,對於stack based vm

,一般會被轉化成如下的指令

:[plain]

view plain

copy

print

?1. 

push b; // 將變數b的值壓入stack  

2. push c; // 將變數c的值壓入stack  

3. add;    // 將stack頂部的兩個值彈出後相加,將結果壓入stack  

4. mov a;  // 將stack頂部結果放到a中  

高效動態語言虛擬機器的設計(二) – 堆疊機vs狀態機 - 推酷.htm

虛擬機器 指令寫出

是的,還有幾個節點的指令生成沒有測試呢,包括流控制語句,io.不過呢,流控制是相對比較容易優化的,進行 生成指令再對比 的測試不太好維護,而 io 指令很簡單 所以要不這樣,把指令寫出來,然後開個虛擬機器執行,如果執行沒問題就算測試通過了.一些常見的語義錯誤處理在之前的之前的內容中都以注釋形式出現,...

微控制器指令系統 1

本篇部落格主要列出了微控制器的主要指令,供開發人員參考。作為乙個微控制器初學者,記住指令特別的痛苦,不過主要還是要理解,多練習指令,寫多了就記住了,這是乙個很自然的過程。目錄 一 定址方式 二 指令分類 1 資料傳送類指令 2 算術運算類指令 定址方式有七種 1.立即定址 如 mov a,3ah 2...

Bochs虛擬機器debug指令

在學習 linux核心完全注釋 時,為了方便,直接使用了趙博提供的linux 0.11 devel 040923.zip來debug,幫助理解 後來又在哈工大的 上發現了他們作業系統課程的實驗,同樣是關於linux 0.11版本的。後來在使用的過程中,我發現趙博使用的是bochs 2.1.1,而哈工...