owned this note changed 7 years ago
Linked with GitHub

WebAssembly & WasmVM 虛擬機器

tags: 2018, R3
位置: R3
講者:徐朝逸


Origin of Wasm

  • JavaScript
    • 直譯語言
    • 本身用文字作編碼
    • 資料格式上的空間浪費
  • JavaScript +
    • ActiveX
    • Flash
    • Java
    • (P)NaCL
  • Asm.js \(\rightarrow\) JavaScript + WA

Goals

  • Safe
    • 讓電腦可以安全執行從不安全的地方取得的程式碼
  • Fast
    • 更小更快
    • 傳輸成本低
  • portable
    • 可攜性
  • Compact
    • 傳輸大小更小

Runtime Structure

  • Module
    • 執行的程式
  • Store
    • 儲存空間 (e.g., 記憶體)
  • Stack
    • 與一般使用暫存器不同,使用 Stack

Module

  • Type
    • Function參數的Type
    • Function Signature
  • Function
    • 要執行的功能
  • Table
    • 索引,儲存Function位置/位址
  • Memory
    • 記憶體,可拓展
  • Global
    • 全域變數
  • Export

Store

把需要較長執行的東西儲存在Store裡。

  • Function
  • Table
  • Memory
  • Global

Stack

  • Value
    • 儲存值
  • Label
    • 紀錄功能執行完要跳去哪裡
  • Frame
    • Value、Label屬於哪些Function

Feature

Linear Memory

  • Growable
    • 依使用需求擴展
  • Multiple memory is capable
    • 使用多個memory block
  • Secure

Stack based

  • No specific register
  • Simple

Structured Control Flow

(func
    (block
        (loop
            i32.const 1
            if
                br 1
            else
                br 0
            end
            i32.cont 3
            drop
        )
        i32.const 5
        drop
    )
)
  • 一般組合語言(x86 or ARM)是用jump指令來達成流程控制
    • 有可能因為程式bug跳到不該跳的地方
  • Web Assembly是新建一個block來達成
    • 較安全?

Validation

  • Typeing rule
    • 指令要吃什麼type,type是否正確
    • 以數學的方式驗證
  • Mathematical
    • λ-calculus

WasmVM

Features

  • Standalone
  • System call - by unreachable(若有錯誤還請糾正)
    • 執行較高權限的function時由unreachalbe產生trap請OS幫忙執行
    • 與OS的System call相同 只是由unreachable來產生trap
Select a repo