21
mruby/c Kazuaki Tanaka Kyushu Institute of Technology

mruby/c in TokyoRubyKaigi#11

Embed Size (px)

Citation preview

Page 1: mruby/c in TokyoRubyKaigi#11

mruby/c

Kazuaki Tanaka

Kyushu Institute of Technology

Page 2: mruby/c in TokyoRubyKaigi#11

自己紹介

• 九州工業大学 Kyutech, Fukuoka

• Lectures

– Programming

– Algorithms and data structures

– Database

– Robot sensor processing

Page 3: mruby/c in TokyoRubyKaigi#11

Joint research project

• Digital signage devices

Page 4: mruby/c in TokyoRubyKaigi#11

mruby軽量Ruby

• Ruby for embedded systems

– Small, Lightweight

– Portable

– Configurable

• METI project work

Page 5: mruby/c in TokyoRubyKaigi#11

mrubyLightweight

• < 400KB

• One chip microprocessor

ARM Coretex-M4 168MHz1MB SRAM, 1MB Flash

enzi mruby board,http://enzi.cc/

Page 6: mruby/c in TokyoRubyKaigi#11

mrubyPortable

• Executing mruby bytecode using mruby VM

SourceCode

program.rb

ByteCode

program.mrb

mrbc

Device A

Execute

mruby VM

Device B

Execute

mruby VM

PC

Execute

mruby VM

Page 7: mruby/c in TokyoRubyKaigi#11

mrubyConfigurable

• mrbgems

– VM configuration

• Add one line in build_config.rb

conf.gem :github => 'iij/mruby-socket’

http://mruby.org/libraries/

Page 8: mruby/c in TokyoRubyKaigi#11

mruby/c project

• mruby for more smaller device

• Concurrent mruby execution without OS

• “/c” stands for compact and concurrent

ARM Coretex-M3 80MHz64KB SRAM, 256KB Flash

PSoC5LP,http://cypress.com/

Page 9: mruby/c in TokyoRubyKaigi#11

Demomruby/c

PSoC5LPARM Coretex-M3 80MHz64KB SRAM, 256KB Flash

Page 10: mruby/c in TokyoRubyKaigi#11

Detailsmruby/c

• GC

• Concurrency

• Boot

Page 11: mruby/c in TokyoRubyKaigi#11

GCmruby/c

No GC

Page 12: mruby/c in TokyoRubyKaigi#11

How it works?

• Small mruby/c program only supported

• When a program ended, memory initialized

• How to support long term execution?

– Use concurrency

Page 13: mruby/c in TokyoRubyKaigi#11

Concurrencymruby/c

• mruby/c is for Non-OS environment

• But expect multiple programs execution

VM dispatches

mruby programs

Page 14: mruby/c in TokyoRubyKaigi#11

Concurrencymruby/c

OP_LOAD

OP_ADDI

OP_JMP

・・

OP_LOADI

OP_SEND

OP_LOAD

・・

mruby VM

One Instruction

One Instruction

Execute

Program A

Program B

Reg.Stack

Program Awork

Reg.Stack

Program Bwork

SymbolClassMethodGlobal

Shared

Page 15: mruby/c in TokyoRubyKaigi#11

Demomruby/c, concurrency

i = 100

while i<200 do

puts i

i = i + 1

end

i = 1000

while i<1100 do

puts i

i = i + 1

end

Page 16: mruby/c in TokyoRubyKaigi#11

Demomruby/c, concurrency

$lock = true

i = 1

while i<10 do

puts i

i = i + 1

end

$lock = false

while $lock do

end

i = 100

while i<110 do

puts i

i = i + 1

end

Using spinlock without mutual exclusion >_<

Page 17: mruby/c in TokyoRubyKaigi#11

Boot

• Boot process =

+ Initialize VM work

+ Create classes

+ Register all the methods to classes

1. Create entry point to a method2. Get symbol of a method3. Add a element to hash table

for all methods

Page 18: mruby/c in TokyoRubyKaigi#11

Bootmruby/c

• Simple Registration, using linked list.

[s]

Loop count

Page 19: mruby/c in TokyoRubyKaigi#11

GET mruby and mruby/c

• mruby

• mruby/c

https://github.com/mrubyc/mrubyc

https://github.com/mruby/mruby

http://forum.mruby.org/

http://www.s-itoc.jp/activity/research/mruby/

Page 20: mruby/c in TokyoRubyKaigi#11
Page 21: mruby/c in TokyoRubyKaigi#11

良いことづくめ?

• mruby/cは,多くの制約があります

– クラス,メソッド不足

– Fixnum だけ,だからあふれます

– Arrayは線形リスト,だから…

– メソッドは線形リストで管理,だから…

– メモリは静的に確保します

まだまだ開発途上ですご協力ください!