2年 • システムソフトウェア研究室居候 松原 克弥(まつばら かつや) • 公⽴はこだて未来⼤学 システムソフトウェア研究室主宰 • BitVisor歴10年超 • 今回の仕掛け⼈ 2017.12.5 Implementation and Current Status of 'mruby in BitVisor' 2
組み込み可能プログラミング⾔語フレームワークの登場 • Lua • ECL (Embeddable Common-Lisp) • micropython • mruby 2017.12.5 Implementation and Current Status of 'mruby in BitVisor' 3
Status of 'mruby in BitVisor' 6 def is_multicast_packet(header) header.map!{|i| i.to_s(16)}.join(“:”) if header =~ /^01:00:5E/ then Bitvisor.print(“A packet dropped:#{header}¥n”) true
64ビットの倍精度、 80ビットの拡張倍精度倍精度、128ビットの四倍精度に対応 • mruby内の浮動⼩数点演算をラップ • 置き換え対象はnumeric.c、string.c、gc.c、vm.c、parse.y • mathライブラリ関数log, powなどは⾃作 2017.12.5 Implementation and Current Status of 'mruby in BitVisor' 11
dbgshの実体はプロセスで動作 2017.12.5 Implementation and Current Status of 'mruby in BitVisor' 13 mirb_msghandler(int m, int c, struct msgbuf *buf,int bufcnt) { ... p=buf->base; mrb_ret_value = mrb_load_string_cxt(mirb,p,mrb_cxt); if(mrb_fixnum_p(mrb_ret_value)){ int intbuf= mrb_fixnum(mrb_ret_value); printf(">> %d¥n",intbuf); } if(mrb_string_p(mrb_ret_value)){ char *charbuf = RSTRING_PTR(mrb_ret_value); printf(">> %s¥n",charbuf); }
'mruby in BitVisor' 15 prev_addr = Bitvisor.get_dest_macaddr.map{|i| i.to_s(16)}.join(":") loop do Bitvisor.set_schedule cur_addr = Bitvisor.get_dest_macaddr.map{|i| i.to_s(16)}.join(":") if cur_addr != prevaddr then Bitvisor.print("MAC addr of dest = #{cur_addr}¥n") prev_addr =cur_addr end end
• dbgsh向けmirbインタフェースの実装 • 正規表現mrbgemの移植 • サンプル処理で動作を確認 今後の展望 • mruby VMのプロセス化 • 性能評価 • キラーアプリの開拓 2017.12.5 Implementation and Current Status of 'mruby in BitVisor' 18