Submit Search
Upload
つくっておぼえる!仮想マシン〜直前で実装編〜
•
5 likes
•
3,169 views
Eric Sartre
Follow
第7回 カーネル/VM探検隊で発表した、ErlangとHaskellでMIPSアーキテクチャのVMを作ったお話です。
Read less
Read more
Report
Share
Report
Share
1 of 24
Download now
Download to read offline
Recommended
Nyarlathotep
Nyarlathotep
Hiromu Yakura
Kobe sec#8 summary
Kobe sec#8 summary
Yukio NAGAO
東方紅魔郷AI
東方紅魔郷AI
aki33524
【Ltech#11】ディープラーニングで間取り図を3Dにする
【Ltech#11】ディープラーニングで間取り図を3Dにする
LIFULL Co., Ltd.
Yarudake
Yarudake
Ken Ogura
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
Nagi Teramo
Osc2012 hiroshima
Osc2012 hiroshima
Akira Kaneda
ここがつらいよ サーバーレス
ここがつらいよ サーバーレス
Shinichi Takahashi
Recommended
Nyarlathotep
Nyarlathotep
Hiromu Yakura
Kobe sec#8 summary
Kobe sec#8 summary
Yukio NAGAO
東方紅魔郷AI
東方紅魔郷AI
aki33524
【Ltech#11】ディープラーニングで間取り図を3Dにする
【Ltech#11】ディープラーニングで間取り図を3Dにする
LIFULL Co., Ltd.
Yarudake
Yarudake
Ken Ogura
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
Nagi Teramo
Osc2012 hiroshima
Osc2012 hiroshima
Akira Kaneda
ここがつらいよ サーバーレス
ここがつらいよ サーバーレス
Shinichi Takahashi
Listen grep
Listen grep
Katsuyoshi Matsumoto
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
Xとかオワコン?
Xとかオワコン?
Naohiro Aota
軽快なBHyVe
軽快なBHyVe
Takuya ASADA
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
Power shell で DSL
Power shell で DSL
urasandesu
ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事
ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事
Shun Moriya
ゲーム組み込み用スクリプト言語を作ってみた
ゲーム組み込み用スクリプト言語を作ってみた
MASA_T_O
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
Kazuya Numata
NetBSD on Google Compute Engine (en)
NetBSD on Google Compute Engine (en)
Ryo ONODERA
pkgsrcユーザー向け設定
pkgsrcユーザー向け設定
Ryo ONODERA
(昔は)人気のあーきてくちゃ
(昔は)人気のあーきてくちゃ
Yojiro Uo
あるmmapの話
あるmmapの話
nullnilaki
ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争
Eric Sartre
ネトゲで人生を変えたい
ネトゲで人生を変えたい
Eric Sartre
Kernel vm#9 powerkvm-dist-20131208
Kernel vm#9 powerkvm-dist-20131208
Manabu Ori
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
「わからない」との付き合い方
「わからない」との付き合い方
Eric Sartre
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
おとなのテキストマイニング
おとなのテキストマイニング
Munenori Sugimura
More Related Content
Viewers also liked
Listen grep
Listen grep
Katsuyoshi Matsumoto
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Minoru Nakamura
Xとかオワコン?
Xとかオワコン?
Naohiro Aota
軽快なBHyVe
軽快なBHyVe
Takuya ASADA
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
Shotaro Uchida
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Go Saito
Power shell で DSL
Power shell で DSL
urasandesu
ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事
ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事
Shun Moriya
ゲーム組み込み用スクリプト言語を作ってみた
ゲーム組み込み用スクリプト言語を作ってみた
MASA_T_O
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
Kazuya Numata
NetBSD on Google Compute Engine (en)
NetBSD on Google Compute Engine (en)
Ryo ONODERA
pkgsrcユーザー向け設定
pkgsrcユーザー向け設定
Ryo ONODERA
(昔は)人気のあーきてくちゃ
(昔は)人気のあーきてくちゃ
Yojiro Uo
あるmmapの話
あるmmapの話
nullnilaki
ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争
Eric Sartre
ネトゲで人生を変えたい
ネトゲで人生を変えたい
Eric Sartre
Kernel vm#9 powerkvm-dist-20131208
Kernel vm#9 powerkvm-dist-20131208
Manabu Ori
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
「わからない」との付き合い方
「わからない」との付き合い方
Eric Sartre
Viewers also liked
(20)
Listen grep
Listen grep
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
Xとかオワコン?
Xとかオワコン?
軽快なBHyVe
軽快なBHyVe
20apr2012 kernelvm7-main
20apr2012 kernelvm7-main
軽快なPlan 9 Update - Illumos KVM上陸 -
軽快なPlan 9 Update - Illumos KVM上陸 -
Power shell で DSL
Power shell で DSL
ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事
ゲーム組み込み向け独自スクリプト言語の設計で気を付けている事
ゲーム組み込み用スクリプト言語を作ってみた
ゲーム組み込み用スクリプト言語を作ってみた
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
家族のためにエンジニアとしてやってみたこと(What I did for my family as an engineer)
NetBSD on Google Compute Engine (en)
NetBSD on Google Compute Engine (en)
pkgsrcユーザー向け設定
pkgsrcユーザー向け設定
(昔は)人気のあーきてくちゃ
(昔は)人気のあーきてくちゃ
あるmmapの話
あるmmapの話
ぼくとしりとりの約3.0*10^3日間戦争
ぼくとしりとりの約3.0*10^3日間戦争
ネトゲで人生を変えたい
ネトゲで人生を変えたい
Kernel vm#9 powerkvm-dist-20131208
Kernel vm#9 powerkvm-dist-20131208
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Java仮想マシンの実装技術
Java仮想マシンの実装技術
「わからない」との付き合い方
「わからない」との付き合い方
Similar to つくっておぼえる!仮想マシン〜直前で実装編〜
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
おとなのテキストマイニング
おとなのテキストマイニング
Munenori Sugimura
IkaLog Presentation at qpstudy 2015.11
IkaLog Presentation at qpstudy 2015.11
Takeshi HASEGAWA
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Junichi Ishida
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
t-sin
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
Futoshi Tanuma
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
pocketberserker
of_protocol_tremaday5
of_protocol_tremaday5
エイシュン コンドウ
Rpn and forth 超入門
Rpn and forth 超入門
Yoshitaka Seo
Emscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョン
兎 伊藤
Llでゆるふわプログラミングのすすめ
Llでゆるふわプログラミングのすすめ
mizcki
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
Ransui Iso
One - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
t-sin
Perlでつくったものとか
Perlでつくったものとか
Shimitakax
Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?
Katsunori FUJIWARA
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
uchan_nos
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
mametter
Erlang and I and Sphinx.
Erlang and I and Sphinx.
Yoshiki Shibukawa
pythonワンライナーのすゝめ
pythonワンライナーのすゝめ
cocu_628496
Similar to つくっておぼえる!仮想マシン〜直前で実装編〜
(20)
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
おとなのテキストマイニング
おとなのテキストマイニング
IkaLog Presentation at qpstudy 2015.11
IkaLog Presentation at qpstudy 2015.11
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
謎の言語Forthが謎なので実装した
謎の言語Forthが謎なので実装した
FOLIOのコードを動かしてみた
FOLIOのコードを動かしてみた
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
of_protocol_tremaday5
of_protocol_tremaday5
Rpn and forth 超入門
Rpn and forth 超入門
Emscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョン
Llでゆるふわプログラミングのすすめ
Llでゆるふわプログラミングのすすめ
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
One - Common Lispでもワンライナーしたい
One - Common Lispでもワンライナーしたい
Perlでつくったものとか
Perlでつくったものとか
Pythonista も ls を読むべきか?
Pythonista も ls を読むべきか?
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
OpeLa: セルフホストなOSと言語処理系を作るプロジェクト
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
Erlang and I and Sphinx.
Erlang and I and Sphinx.
pythonワンライナーのすゝめ
pythonワンライナーのすゝめ
More from Eric Sartre
やさしい日本語言い換えシステムを支える技術
やさしい日本語言い換えシステムを支える技術
Eric Sartre
正則化つき線形モデル(「入門機械学習第6章」より)
正則化つき線形モデル(「入門機械学習第6章」より)
Eric Sartre
Emacsいじめの現場
Emacsいじめの現場
Eric Sartre
初めてのCPUを作ってみた
初めてのCPUを作ってみた
Eric Sartre
どたばたかいぎ成果発表
どたばたかいぎ成果発表
Eric Sartre
upcamp発表
upcamp発表
Eric Sartre
ゆとりが数週間でC++を始めるようです
ゆとりが数週間でC++を始めるようです
Eric Sartre
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
Eric Sartre
More from Eric Sartre
(8)
やさしい日本語言い換えシステムを支える技術
やさしい日本語言い換えシステムを支える技術
正則化つき線形モデル(「入門機械学習第6章」より)
正則化つき線形モデル(「入門機械学習第6章」より)
Emacsいじめの現場
Emacsいじめの現場
初めてのCPUを作ってみた
初めてのCPUを作ってみた
どたばたかいぎ成果発表
どたばたかいぎ成果発表
upcamp発表
upcamp発表
ゆとりが数週間でC++を始めるようです
ゆとりが数週間でC++を始めるようです
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
Twitterにおける即時話題推定技術「どたばたかいぎ」の開発
つくっておぼえる!仮想マシン〜直前で実装編〜
1.
つくっておぼえる!仮想マシン
∼直前で実装編∼ 筑波大学 情報科学類 2年 えりっく(@siritori) 筑波大学情報科学類 1年 いおりん(@iorivur)
2.
つくっておぼえる!仮想マシン
∼直前で実装編∼ VM in Erlang 筑波大学 情報科学類 2年 えりっく(@siritori)Haskell VM in 筑波大学情報科学類 1年 いおりん(@iorivur)
3.
じこしょうかい • えりっく –
ちゃんと筑波大学に通っています – あ、単位も全部来ました – 趣味はマッサージとしりとり – 最近はTwitterに流れるつぶやきのリアルタイ ムな話題推定技術の研究とかしてる – Erlangでサーバ書いて遊んでる(よばれた通知とか) – 興味あるもの : Erlang, 自然言語処理, 機械学 習, (比較的)低レイヤなもの
4.
じこしょうかい • いおりん –
Verilogでカメラを制御して受験を生き抜いた – Arch Linux / Debian GNU/Linux使い – sgi O2やcobalt qubeなどにNetBSDを入れ てpkgsrcしてあそんでる。 – 高校ではロボットをつくってました
5.
第6回のとき... 『つくっておぼえる!仮想マシン∼妄想編∼』 という名前で発表 本人は当時のスライドを紛失(何話したっけ?) 当時言ってた要約
: MIPSアーキテクチャVMを Erlangで実装する
6.
2012. 4/3ごろ
7.
2012. 4/3ごろ
あ、作ってない。 作って発表するか・ω・ あとつくばの活きのいい学生誘って来ました
8.
というわけで実装してみました • 昨日頑張りました(つくばACハッカソン) • RISCでも時間の制約には勝てなかった •
@siritori 「約束通りErlangで書くー」 • @iorivur 「じゃあぼくHaskellで書くー」 • ※ふたりとも手続き型言語では意地でも書かない • 関数型言語の抽象化のエッセンスを学びつつ、MIPS アーキテクチャも知りたい>< • というわがままなテーマです
9.
あーらん
Erlang • (」・ω・)」あー!(/・ω・)/らんー! • アクターモデルな並列指向言語 • 純粋でない関数型言語(な見た目) • 隣の勉強会のHaskellerたちからしたら虫酸が走る • 電話交換機とかのバックエンドで使われてた • OTPというすごいフレームワークを触るためのlang
10.
いーらんぐ
って言うな(´;ω;) あーらん Erlang • (」・ω・)」あー!(/・ω・)/らんー! • アクターモデルな並列指向言語 • 純粋でない関数型言語(な見た目) • 隣の勉強会のHaskellerたちからしたら虫酸が走る • 電話交換機とかのバックエンドで使われてた • OTPというすごいフレームワークを触るためのlang
11.
リポジトリとか • RECRIO(れくりお)ってコードネームでな
んとなく開発開始(RECRIOを入れ替えると) • githubにおきました(ついさっき) – http://github.com/siritori/recrio • 「こういう書き方はあんまよくない」とか あったら教えて下さい><
12.
できてるところ • 32bitのバイナリいぢるユーティリティ書いた • 「何番地に∼というデータをおく」というのを
受け取って配置してからプログラムカウンタを 設定して動作する • 例外処理するためにメッセージ送信ができるよ うにしといた(退避とかはまだ) • メモリアクセスとか算術命令とか分岐命令の一 部ができてる
13.
できてないところ • やっぱりカーネル/VM探検隊だとELFローダも
書けてないのに発表するのは心苦しいです • 例外飛んでから処理に飛んでいくところ(MIPS の例外処理の理解が怪しいので教えて下さい) • コプロセッサあたりの実装(́・ω:;.:... • ErlangのくせにOTP使ってないとかErlangじゃ ないですよねごめんなさい
14.
ふええ><っち • 前にも話した気がするけどErlangにはバ
イナリデータのパターンマッチング構文が ある(通信系だから?) • ABBCCCCCみたいなビット列があったら、 <<A:3, B:2, C:5>> = Data とかでマッチ できる • いやなんかこうこういう構文あったら命令 フェッチしたくなるじゃない?
15.
ふええ><っち exec(<<16#08:6, Rs:5, Rt:5,
SignExtImm:16>>) -> なんとかかんとか ↑addi命令の場合(OpCodeが0x08なI型命令) こんな感じで以下の命令が実装してあります(`・ω・́) add, addi, addiu, addu, and, andi, or, ori, xor, xori, sll, srl, sllv, sra, srav, sw, lw, slt, slti, lui, j, beq, bne, break, jal, jalr
16.
ふええ><っち exec(<<16#08:6, Rs:5, Rt:5,
SignExtImm:16>>) -> なんとかかんとか ↑addi命令の場合(OpCodeが0x08なI型命令) こんな感じで以下の命令が実装してあります(`・ω・́) add, addi, addiu, addu, and, andi, or, 今日起きてから実装 ori, xor, xori, sll, srl, sllv, sra, srav, sw, lw, slt, slti, lui, j, beq, bne, break, jal, jalr
17.
記憶領域やレジスタの話 • レジスタとメモリ :
ETS (Erlang Term Storage) • メモリアクセスが4の倍数だけでよかった • プログラムカウンタや原因レジスタ、EXPレジ スタ、メモリテーブルへの参照をぜ∼んぶ Contextとして持ち回るような設計に(並列実行 への布石)
18.
命令の実装 • 名状しがたい高階関数のようなものを使って
できるだけうまいこと抽象化しながら実装 • すべての割り込みはメッセージ送信! self() ! {invalid_address, XXXX} • 外部からの割り込みもメッセージ送信
19.
感想 • 数値の演算がC言語の10倍くらい遅いと言われ
るErlangだけど、バイナリの操作はすごく簡単 だった(○ ω ○) • このMIPSのVMを複数立ち上げるのも朝飯前だ し、MIPSがWeb上で遊べるサービスとか作れ そう • 競技プログラミングの採点システムとかになっ たらいいね(*́・ω・)(・ω・`*) 速度面... • MIPSアーキテクチャのいい勉強になった
20.
はすける
Haskell • (」・ω・)」はすー!(/・ω・)/けるー! • 純粋な関数型言語 • やたら型にうるさいのでコンパイルに大体の問題が 片付く(らしい) • 手続き的なものは「みんな、Monadになる。」
21.
できてるところ • インタラクティブにMIPSアセンブリを叩けるUI書いた • 叩いたアセンブリが機械語に変換されてメモリに書かれ
ていく • メモリアクセスの一部とか算術命令ができてる • メモリから自動で読み込んで走るモードにおちる
22.
できてないところ •
例外、コプロセッサ命令、ジャンプ命令 • 綺麗なレジスタダンプ • わかりやすくて親切なUI • 一般的なアセンブリシンタックス入力
23.
実装 • システムの内部状態をすべて再帰でとりま
わす->再帰がそのままクロックのようなイ メージ • 関数のパターンマッチやcase文で命令を デコード
24.
デモとか
Download now