WMLScript虛擬機器概要設計 簡略版

2021-04-13 08:15:58 字數 3101 閱讀 7752

wap

終端請求的wmlscript檔案,過wap1.x閘道器後均被編譯成高效的二進位制位元組碼(指令)格式。

本模組構建了乙個解析、執行

wmlscript

位元組碼指令的虛擬機器,

把位元組碼解析成具體平台上的機器指令執行

, 在終端上通過軟體**,實現位元組碼指令功能。

本模組用來解析、執行

wmlscript

位元組碼,是實現

wml瀏覽器的一部分。每乙個

wmlscript

函式都是一段位元組碼指令流,終端上執行

wmlscript

函式也就是對該函式經閘道器編譯生成的指令逐個的進行解釋執行。

wml解析模組在解析網頁時發現需要

wmlsc檔案,

就應向io

發檔案請求

,io,

而不是通知

wml解析模組。

io模組接收完(成功

/失敗)

wml解析請求的

wmlsc

檔案後,會通知本模組建立相應的檔案概述結構,加入鏈中。

wml模組觸發

wmlsc

函式呼叫

,本模組執行

wmlscript

函式時,

若呼叫到外部

wmlsc

函式,

需向io

請求相應的

wmlsc

檔案。wml

強制重新整理網頁時,

保留檔案概述結構鏈

, 檔案概述結構資料除

url外,其他資料不再有效。

wml解析模組在退出

deck時,

通知本模組釋放整條檔案概述結構鏈。

要求cache

可以快取的

wmlsc

檔案數,大於在乙個

wml網頁中允許包含的

wmlsc

檔案數, cache

淘汰最遠未使用的

wmlsc

檔案。(

因為檔案概述結構鏈在

deck

結束時才釋放,需要保證在使用中的檔案概述結構指向的位元組碼流,不會因為

cache

快取策略而釋放,不出現野指標)

2.7全域性變數定義

全域性變數一:

標識: fnlibparse

型別 : funclibparse fnlibparse [6][16]

目的: 解析庫函式時,根據下標值呼叫相應的解析函式, 省去大段的if-else**

全域性變數二:

標識: tglobalwmls

型別 : t_wmlssrcglobal

目的:

本模組需要用到的全域性變數整合的結構

三.資料結構定義

巨集定義

#define kb_deck_wmlsc_max 10 //乙個deck中允許包含的wmlsc檔案數

#define kb_variant_max 255

//乙個函式最多允許的變數數(引數+區域性變數數)

#define kb_nesting_max 10

//函式巢狀呼叫最大層數

#define kb_operand_stack_size  kb_variant_max//運算元棧大小(數值個數)

數值結構

//在運算元棧、變數表、常量表中,必須能存放wmlscript定義的所有資料型別的值

typedef struct tagwmlsunivalue

udata;

} t_wmlsunivalue;

函式資訊結構

typedef struct tagwmlsfunctioninfo

t_wmlsfunctioninfo;

編譯指示資訊結構

typedef struct tagwmlspragmainfo

t_wmlspragmainfo;

檔案概要結構

//如果1個wmlsc檔案包含20個外部函式(函式名長度設為20,20*20bytes),100個常量(100*8bytes),約需要1.5k

typedef struct tagwmlsfilesummary

t_wmlsfilesummary;

檔案概要鍊錶結構

typedef struct tagwmlsfilesummarylinknode

t_wmlsfilesummarylinknode;

//頭插法建表

typedef  struct tagwmlsfilesummarylink

t_wmlsfilesummarylink;

運算元棧結構

typedef struct tagwmlsoperandstack

t_wmlsoperandstack;

說明: 大部分指令的語義即是對棧操作, 編譯出的位元組碼拆分表示式,依賴這些語義。如6+7*8-9 拆分成 :

load_const_s 6

load_const_s 7

load_const_s 8

muladd

load_const_s 9

sub呼叫堆疊結構

壓入呼叫堆疊的是檔案概述結構指標,函式資訊結構指標,ip,變數表指標,變數個數。

typeset struct tagwmlssceneinfo

typedef struct tagwmlsscenestack

t_wmlsscenestack;

本模組需要用到的全域性量整合的結構

typedef struct tagwmlssrcglobal

t_wmlssrcglobal;

流程圖貼不上來(略)

MAC 下virtualbox虛擬機器串列埠設定方法

在mac上安裝了virtualbox,虛擬了乙個windows7系統。因為專案要用到串列埠,所以需要在windows7上配置乙個串列埠。virtualbox本身可以設定新增串列埠,資料說可以通過通道的方式與主機通訊。經過一天的折騰,終於搞定了。記錄一下。1 在virtualbox上先配置下串列埠 然...

virtualbox虛擬機器 虛擬機器的網路

今天要測試ip多宿主 ip multihoming 即host和guest的兩個網絡卡分別接,host ping guest的ipv6不通。解決過程如下 命令輸出 ip addr 1 lo mtu 65536 qdisc noqueue state unknown link loopback 00 ...

debian虛擬機器安裝kvm虛擬機器

一 概念介紹 1 libvirt是linux上的虛擬化庫,是長期穩定的c語言api,支援kvm qemu xen lxc等主流虛擬化方案。virsh是libvirt對應的shell命令。2 kvm,即kernel basedvirtual machine的簡稱,是乙個開源的系統虛擬化模組,自linu...