lua11


Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Kurs języka Lua
Wykład 11
Lua VM  architektura
Kornel Kisielewicz
Instytut Informatyki
Uniwersytet Wrocławski
20-01-2011 / Wykład 11
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Spis treści
1
Architektura maszyny wirtualnej
Założenia architektury
Reprezentacja wartości
Tablice
2
Implementacja maszyny
Rejestry
Operacje
3
Śledzenie operacji
Proste przykłady
Złożone przykłady
4
Kilka uwag na zakończenie
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Spis treści
1
Architektura maszyny wirtualnej
Założenia architektury
Reprezentacja wartości
Tablice
2
Implementacja maszyny
Rejestry
Operacje
3
Śledzenie operacji
Proste przykłady
Złożone przykłady
4
Kilka uwag na zakończenie
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Założenia architektury
Założenia architektury
Założenia architektury
prostota najmniejszy zbiór, najmniejszy kod
efektywność szybka kompilacja, szybkie wykonanie
przenośność czysta implementacja ANSI C bez C-izmów
osadzalność proste lecz silne API C opierające się na typach C, jednocześnie mały rozmiar
API i Lua
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Założenia architektury
Założenia architektury
Konflikty założeń
efektywność  szybki kompilator a szybkie wykonywanie
efektywność a prostota  sprytny kompilator a mały kompilator
i inne...
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Reprezentacja wartości
Reprezentacja wartości
Struktura wewnątrzna
typedef struct {
int t;
Value v;
} TObject;
typedef union {
GCObject
*gc;
void
*p;
lua_Number n;
int b;
} Value;
Uwagi
łancuchy - stałość, hashowanie i rozmiar
rozmiar Value
obiektowość GCObject
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Tablice
Tablice
Hybrydowe rozwiązanie
przypisanie indeksu 10000000000
dualne rozwiązanie
heurystyka - połowa zajętości 1..n, przynajmniej jeden zajęty element > n/2
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Spis treści
1
Architektura maszyny wirtualnej
Założenia architektury
Reprezentacja wartości
Tablice
2
Implementacja maszyny
Rejestry
Operacje
3
Śledzenie operacji
Proste przykłady
Złożone przykłady
4
Kilka uwag na zakończenie
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Prototyp string i list
[string]
size_t - rozmiar
byte[] - dane, zawierają NUL na końcu (więc size_t = #str+1!)
[list]
int - ilość elementów
elem[] - dane, ilość zgodnie z powyższym
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Prototyp chunk
byte[4] - sygnatura Header signature: ESC,  Lua or 0x1B4C7561
byte - wersja Lua (0x51/81 dec) dla Lua 5.1 (high - major, low - minor
byte - wersja formatu (0=ofcjalna)
byte - flaga endian (domyślnie 1 dla LE)
byte - rozmiar int (domyślnie 4)
byte - rozmiar size_t (domyślnie 4)
byte - rozmiar instrukcji (domyślnie 4)
byte - rozmiar lua_Number (domyślnie 8)
byte - flaga lua_Number integral (domyślnie 0)
Domyślnie na x86/LE/IEEE754/double nagłówek wynosi zawsze:
1B4C7561 51000104 04040800
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Prototyp function prototype
string - nazwa zródła
int - line number
int - ostatni line number
byte - liczba upvalues
byte - liczba parametrów
byte - maska VARARG
1 = VARARG_HASARG
2 = VARARG_ISVARARG
4 = VARARG_NEEDSARG
byte - maksymalny rozmiar stosu (ilość użytych rejestrów)
list - lista instrukcji (code)
list - lista stałych
list - lista prototypów funkcji
list - lista pozycji w kodzie (opcjonalny debug data)
list - lista zmiennych lokalnych (opcjonalny debug data)
list- lista upvalue (opcjonalny debug data)
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Pozostałe struktury
[const]
byte - typ ( 0=LUA_TNIL, 1=LUA_TBOOLEAN, 3=LUA_TNUMBER, 4=LUA_TSTRING )
data[]- tylko jeśli typ <> 0
[d_loc]
string - nazwa zmiennej lokalnej
int - początek zasięgu
int - koniec zasięgu
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Rejestry
Rejestry
Rejestry
unikamy zbędnego (drogiego) kopiowania
unikamy zbędnych operacji push pop
prędkość działania
wiele innych zalet!
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Rejestry
Rejestry
local a,t,i 1: PUSHNIL 0 2
a=a+i 2: GETLOCAL 0
3: GETLOCAL 2
4: ADD
5: SETLOCAL 0
a=a+1 6: GETLOCAL 0
7: ADDI 1
8: SETLOCAL 0
a=t[i] 9: GETLOCAL 0
10: GETINDEXED 2
11: SETLOCAL 0
--------------
local a,t,i 1: LOADNIL 0 2 0
a=a+i 2: ADD 0 0 2
a=a+1 3: ADD 0 0 256
a=t[i] 4: GETTABLE 0 1 2
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Operacje
Układ danych
Układ danych
insrtukcja zajmuje 32 bity
są trzy typy instrukcji iABC, iABx i iAsBx
kod operacji zajmuje 6 bitów, A zajmuje 8 bitów
B i C zajmują 9 bitów, Bx i sBx 18
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Operacje
Lista operacji
Lista operacji
Sięgnijmy do zródeł :)
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Spis treści
1
Architektura maszyny wirtualnej
Założenia architektury
Reprezentacja wartości
Tablice
2
Implementacja maszyny
Rejestry
Operacje
3
Śledzenie operacji
Proste przykłady
Złożone przykłady
4
Kilka uwag na zakończenie
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Proste przykłady
Prototyp string i list
local a,b = 10; b = a
local a,b,c,d,e = nil,nil,0 || local a,b,d,e local c=0
local a,b,c,d = 3,"foo",3,"foo"
local a = 5 > 2
a = 40; local b = a
local p = {}; p[1] = "foo"; return p["bar"]
local a,b = 2,4; a = a + 4 b - a / 2 ^ b % 3
*
local a = b + (4 + 7)
local x,y = "foo","bar"; return x..y..x..y
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Złożone przykłady
Prototyp string i list
z() || z(1,2,3) || local p,q,r,s = z(y())
print(string.char(64))
local a,b,c; c = a and b
local a = 1; while a < 10 do a = a + 1 end
local q = {1,2,3,4,5,}
local m \
function p() \
local n \
function q() return m,n end \
end
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Spis treści
1
Architektura maszyny wirtualnej
Założenia architektury
Reprezentacja wartości
Tablice
2
Implementacja maszyny
Rejestry
Operacje
3
Śledzenie operacji
Proste przykłady
Złożone przykłady
4
Kilka uwag na zakończenie
university-logo
Architektura maszyny wirtualnej Implementacja maszyny Śledzenie operacji Kilka uwag na zakończenie
Do czego nam ta wiedza?
Do czego nam ta wiedza?
lepsze zrozumienie efektywności języka
analiza i optymalizacja
LuaVM jako maszyna docelowa
LuaVM do kodu maszynowego!
university-logo


Wyszukiwarka