SlideShare a Scribd company logo
1 of 20
Download to read offline
xv6 + mist32 + mruby
@hktechno
@hktechno
● 筑波大学大学院に入院しました
● 実時間組み込みアーキテクチャ研究室
○ すでに実時間も組み込みも殆どやってない
○ OSSS, Softlab の影に隠れた kernelvm 系研究室
○ OS, VMM, 最近 OS + NVM 周りをやっている
● Open Design Computer Project
○ mist32 プロセッサ, gcc, binutils...
○ http://open-arch.org/
xv6 とは
● UNIX V6 の現代版 x86 再実装
○ V6 != SVR6
○ MIT 製, 教育用 OS と言っている, 教科書付き
● 構造が非常にシンプル
○ マルチコアも対応
○ ファイルシステムもついてる
○ 実機でも起動する (最近のマシンだと微妙)
○ コード行数は 10,000 行ぐらい
卒業研究でやったこと
● SSDAlloc のようなもの
○ SSDAlloc: SSD をうまく使って Swap より速いハイブ
リッドメモリを提供する
● SSDAlloc の仕組みを、MMU によって支援
○ mist32 プロセッサに実装
○ なんらかの OS が必要
xv6 の良い所
● つまらない研究ネタを簡単に実装できる
○ 正直 Linux をいじるのは大変
○ そこで xv6
● 他のアーキテクチャへの移植も簡単
○ 研究室で、配属された直後に振られることが多い
○ OS の構造や、プロセッサ仕様の把握にとても良い
実機で動かすなら
え?まさか?!
パッチ書いた
● LGDT 後の動作 (常識)
○ CS のクリア
■ ljmp <selector>, 0
○ DS, ES… のクリア
■ movw <selector>, %ds
● パッチ: http://pastebin.com/M8SVGSPu
xv6 を移植しよう
● ARM は研究室内ですでに実績あり
● Raspberry Pi 向けもある
○ https://code.google.com/p/xv6-rpi/
● mist32 向けに移植しよう
○ 未踏で作ったオリジナルプロセッサ
○ http://open-arch.org/hardware/mist32
xv6 移植の前提
● MMU が必要
○ ページングをがっつり使っている
○ セグメントはフラットなので要らない
● ディスクは必要がない
○ kernelmemfs というバイナリが吐ける
○ RAM 上に fs を作るのでなくてもいける
● 実機で動かすなら...
○ multiboot 対応の grub とかがあると楽 (無くても可)
xv6 移植 1
● cpu-local? storage
○ GS のセグメントに、struct cpu, struct proc のポインタ
が格納されている
○ 何らかの手段で同じことを実現する必要がある
○ 多分高速化?
extern struct cpu *cpu asm("%gs:0"); // &cpus[cpunum()]
extern struct proc *proc asm("%gs:4"); // cpus[cpunum()].proc
xv6 移植 2
● スタックの構築
○ exec() などで、スタックを構築してエントリポイントへ渡
す
○ 引数はスタックに構築している (x86 だから)
○ レジスタ渡しのプロセッサでは、trapframe をうまく使うと
良いと思う
xv6 のダメなところ
● メモリマップ
○ 0x00000000 - 0x80000000: User
○ 0x80000000 - 0x00000000: Kernel
○ NULL Pointer を読んでも落ちない!!
● メモリ割り当て
○ スタックの位置がなんか変な感じ
○ デマンドページング非対応
○ スワップとかあるはずがない
.text, .bss, .data...
-- INVALID PAGE --
Stack
Heap
xv6 のダメなところ
● ファイルシステム
○ 最大ファイルサイズが少ない!
○ (12 + (512 / 4)) * 512 = 71,680 byte
○ 頑張ればもうちょっと増やせるが...
○ ブロックサイズを増やすと、色々崩壊する
詳しいことは
http://open-arch.org/software/porting_xv6
https://github.com/techno/xv6-mist32
移植してみたけど...
シェルしか動かない。
楽しくない。
xv6 に mruby を移植してみよう
● 用意するもの
○ Newlib
■ xv6 の ulib は libc とは言わない
○ xv6 の usys.S
● Newlib
○ newlib/libc/sys の下辺りに xv6 を移植
○ 少しいじって autoconf するだけ
○ https://github.com/techno/newlib-xv6
mruby のバイナリ
● どう頑張っても 400KB ぐらいになる
○ ファイルシステムの制限に引っかかる
● kernel に直接リンクしてしまおう
○ ld -b binary hoge みたいな
○ exec で mruby ならば、そこからコピー
デモ?
最後に
● 研究に xv6 を使うのやめよう
○ 評価が大変
○ 実用性皆無
● PyCon JP 2014 のスタッフやってます
○ Call for Proposal を開始したのでネタ募集中
○ Web 系以外大歓迎

More Related Content

What's hot

BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)洋史 東平
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生MITSUNARI Shigeo
 
昔の外付けキャッシュ & コヒーレント・キャッシュ
昔の外付けキャッシュ & コヒーレント・キャッシュ昔の外付けキャッシュ & コヒーレント・キャッシュ
昔の外付けキャッシュ & コヒーレント・キャッシュたけおか しょうぞう
 
Lispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとかLispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとかたけおか しょうぞう
 
2013 1019osc-fallnetmf
2013 1019osc-fallnetmf2013 1019osc-fallnetmf
2013 1019osc-fallnetmfAtomu Hidaka
 
Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86optiTakashi Hoshino
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたことMITSUNARI Shigeo
 
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primerいいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory PrimerYuto Hayamizu
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介x86_64向け自作OSの紹介
x86_64向け自作OSの紹介Yuma Ohgami
 
Inkernel disasm-from-intelsdm-kernelvm
Inkernel disasm-from-intelsdm-kernelvmInkernel disasm-from-intelsdm-kernelvm
Inkernel disasm-from-intelsdm-kernelvmMasami Hiramatsu
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenMITSUNARI Shigeo
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiTakashi Hoshino
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきことmao999
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 

What's hot (20)

BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
clu2cは64ビットOSでも使えます (OSC 2012 Hiroshima LT用資料)
 
Mt basic as-os_on_danbot
Mt basic as-os_on_danbotMt basic as-os_on_danbot
Mt basic as-os_on_danbot
 
Spectre/Meltdownとその派生
Spectre/Meltdownとその派生Spectre/Meltdownとその派生
Spectre/Meltdownとその派生
 
Lisp_chibi_machine 190427
Lisp_chibi_machine 190427Lisp_chibi_machine 190427
Lisp_chibi_machine 190427
 
昔の外付けキャッシュ & コヒーレント・キャッシュ
昔の外付けキャッシュ & コヒーレント・キャッシュ昔の外付けキャッシュ & コヒーレント・キャッシュ
昔の外付けキャッシュ & コヒーレント・キャッシュ
 
Lispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとかLispマシン ドキュメント和訳とか、 ちびLispとか
Lispマシン ドキュメント和訳とか、 ちびLispとか
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 
2013 1019osc-fallnetmf
2013 1019osc-fallnetmf2013 1019osc-fallnetmf
2013 1019osc-fallnetmf
 
Intel TSX について x86opti
Intel TSX について x86optiIntel TSX について x86opti
Intel TSX について x86opti
 
Lispマシン・シミュレータの紹介
Lispマシン・シミュレータの紹介Lispマシン・シミュレータの紹介
Lispマシン・シミュレータの紹介
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
いいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primerいいかげんな人のためのTransactional Memory Primer
いいかげんな人のためのTransactional Memory Primer
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
x86_64向け自作OSの紹介
x86_64向け自作OSの紹介x86_64向け自作OSの紹介
x86_64向け自作OSの紹介
 
Inkernel disasm-from-intelsdm-kernelvm
Inkernel disasm-from-intelsdm-kernelvmInkernel disasm-from-intelsdm-kernelvm
Inkernel disasm-from-intelsdm-kernelvm
 
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgenIntel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
Intel AVX-512/富岳SVE用SIMDコード生成ライブラリsimdgen
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 

Similar to xv6 + mist32 + mruby

NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成Izumi Tsutsui
 
平成生まれのための MINIX 講座
平成生まれのための MINIX 講座平成生まれのための MINIX 講座
平成生まれのための MINIX 講座TAKANO Mitsuhiro
 
意外に作れる!?はじめての研究室内プライベートクラウド
意外に作れる!?はじめての研究室内プライベートクラウド意外に作れる!?はじめての研究室内プライベートクラウド
意外に作れる!?はじめての研究室内プライベートクラウドTakuma Nakajima
 
TUI作業で便利なソフト2題
TUI作業で便利なソフト2題TUI作業で便利なソフト2題
TUI作業で便利なソフト2題shimadah
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたMITSUNARI Shigeo
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用Shinya Okano
 
Open design computer project(boost)
Open design computer project(boost)Open design computer project(boost)
Open design computer project(boost)Ito Takahiro
 
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3Fuminobu Takeyama
 
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回ロボットシステム学2015年第5回
ロボットシステム学2015年第5回Ryuichi Ueda
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)Naoki Okino
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
how to port * to BitVisor
how to port * to BitVisorhow to port * to BitVisor
how to port * to BitVisoricchy
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…Yasumasa Suenaga
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Narami Kiyokura
 

Similar to xv6 + mist32 + mruby (20)

NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
 
私とOSSの25年
私とOSSの25年私とOSSの25年
私とOSSの25年
 
平成生まれのための MINIX 講座
平成生まれのための MINIX 講座平成生まれのための MINIX 講座
平成生まれのための MINIX 講座
 
What's Operating System?
What's Operating System?What's Operating System?
What's Operating System?
 
意外に作れる!?はじめての研究室内プライベートクラウド
意外に作れる!?はじめての研究室内プライベートクラウド意外に作れる!?はじめての研究室内プライベートクラウド
意外に作れる!?はじめての研究室内プライベートクラウド
 
TUI作業で便利なソフト2題
TUI作業で便利なソフト2題TUI作業で便利なソフト2題
TUI作業で便利なソフト2題
 
WASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみたWASM(WebAssembly)入門 ペアリング演算やってみた
WASM(WebAssembly)入門 ペアリング演算やってみた
 
XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用XenServerによるお手軽開発サーバ運用
XenServerによるお手軽開発サーバ運用
 
Open design computer project(boost)
Open design computer project(boost)Open design computer project(boost)
Open design computer project(boost)
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
今さら聞けない! Linux コマンドラインツールテクニック その1 rev. 3
 
ロボットシステム学2015年第5回
ロボットシステム学2015年第5回ロボットシステム学2015年第5回
ロボットシステム学2015年第5回
 
お化け
お化けお化け
お化け
 
2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)2012 0623-x-road-tokyo-xoops-x(ten)
2012 0623-x-road-tokyo-xoops-x(ten)
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
Bsd suki
Bsd sukiBsd suki
Bsd suki
 
how to port * to BitVisor
how to port * to BitVisorhow to port * to BitVisor
how to port * to BitVisor
 
もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…もしも… Javaでヘテロジニアスコアが使えたら…
もしも… Javaでヘテロジニアスコアが使えたら…
 
Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門Visual Studioで始めるTypeScript開発入門
Visual Studioで始めるTypeScript開発入門
 

More from Hirotaka Kawata

KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情Hirotaka Kawata
 
Micro Python で組み込み Python
Micro Python で組み込み PythonMicro Python で組み込み Python
Micro Python で組み込み PythonHirotaka Kawata
 
Introduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SGIntroduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SGHirotaka Kawata
 
産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会Hirotaka Kawata
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表Hirotaka Kawata
 
About University of Tsukuba Linux User Group
About University of Tsukuba Linux User GroupAbout University of Tsukuba Linux User Group
About University of Tsukuba Linux User GroupHirotaka Kawata
 

More from Hirotaka Kawata (6)

KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
KotlinConf 2018 から見る 最近の Kotlin サーバーサイド事情
 
Micro Python で組み込み Python
Micro Python で組み込み PythonMicro Python で組み込み Python
Micro Python で組み込み Python
 
Introduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SGIntroduction of PyCon JP 2014 in PyCon SG
Introduction of PyCon JP 2014 in PyCon SG
 
産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会産学間連携推進室(AC部屋) 2012 成果報告会
産学間連携推進室(AC部屋) 2012 成果報告会
 
seccamp2012 チューター発表
seccamp2012 チューター発表seccamp2012 チューター発表
seccamp2012 チューター発表
 
About University of Tsukuba Linux User Group
About University of Tsukuba Linux User GroupAbout University of Tsukuba Linux User Group
About University of Tsukuba Linux User Group
 

xv6 + mist32 + mruby

  • 1. xv6 + mist32 + mruby @hktechno
  • 2. @hktechno ● 筑波大学大学院に入院しました ● 実時間組み込みアーキテクチャ研究室 ○ すでに実時間も組み込みも殆どやってない ○ OSSS, Softlab の影に隠れた kernelvm 系研究室 ○ OS, VMM, 最近 OS + NVM 周りをやっている ● Open Design Computer Project ○ mist32 プロセッサ, gcc, binutils... ○ http://open-arch.org/
  • 3. xv6 とは ● UNIX V6 の現代版 x86 再実装 ○ V6 != SVR6 ○ MIT 製, 教育用 OS と言っている, 教科書付き ● 構造が非常にシンプル ○ マルチコアも対応 ○ ファイルシステムもついてる ○ 実機でも起動する (最近のマシンだと微妙) ○ コード行数は 10,000 行ぐらい
  • 4. 卒業研究でやったこと ● SSDAlloc のようなもの ○ SSDAlloc: SSD をうまく使って Swap より速いハイブ リッドメモリを提供する ● SSDAlloc の仕組みを、MMU によって支援 ○ mist32 プロセッサに実装 ○ なんらかの OS が必要
  • 5. xv6 の良い所 ● つまらない研究ネタを簡単に実装できる ○ 正直 Linux をいじるのは大変 ○ そこで xv6 ● 他のアーキテクチャへの移植も簡単 ○ 研究室で、配属された直後に振られることが多い ○ OS の構造や、プロセッサ仕様の把握にとても良い
  • 8. パッチ書いた ● LGDT 後の動作 (常識) ○ CS のクリア ■ ljmp <selector>, 0 ○ DS, ES… のクリア ■ movw <selector>, %ds ● パッチ: http://pastebin.com/M8SVGSPu
  • 9. xv6 を移植しよう ● ARM は研究室内ですでに実績あり ● Raspberry Pi 向けもある ○ https://code.google.com/p/xv6-rpi/ ● mist32 向けに移植しよう ○ 未踏で作ったオリジナルプロセッサ ○ http://open-arch.org/hardware/mist32
  • 10. xv6 移植の前提 ● MMU が必要 ○ ページングをがっつり使っている ○ セグメントはフラットなので要らない ● ディスクは必要がない ○ kernelmemfs というバイナリが吐ける ○ RAM 上に fs を作るのでなくてもいける ● 実機で動かすなら... ○ multiboot 対応の grub とかがあると楽 (無くても可)
  • 11. xv6 移植 1 ● cpu-local? storage ○ GS のセグメントに、struct cpu, struct proc のポインタ が格納されている ○ 何らかの手段で同じことを実現する必要がある ○ 多分高速化? extern struct cpu *cpu asm("%gs:0"); // &cpus[cpunum()] extern struct proc *proc asm("%gs:4"); // cpus[cpunum()].proc
  • 12. xv6 移植 2 ● スタックの構築 ○ exec() などで、スタックを構築してエントリポイントへ渡 す ○ 引数はスタックに構築している (x86 だから) ○ レジスタ渡しのプロセッサでは、trapframe をうまく使うと 良いと思う
  • 13. xv6 のダメなところ ● メモリマップ ○ 0x00000000 - 0x80000000: User ○ 0x80000000 - 0x00000000: Kernel ○ NULL Pointer を読んでも落ちない!! ● メモリ割り当て ○ スタックの位置がなんか変な感じ ○ デマンドページング非対応 ○ スワップとかあるはずがない .text, .bss, .data... -- INVALID PAGE -- Stack Heap
  • 14. xv6 のダメなところ ● ファイルシステム ○ 最大ファイルサイズが少ない! ○ (12 + (512 / 4)) * 512 = 71,680 byte ○ 頑張ればもうちょっと増やせるが... ○ ブロックサイズを増やすと、色々崩壊する
  • 17. xv6 に mruby を移植してみよう ● 用意するもの ○ Newlib ■ xv6 の ulib は libc とは言わない ○ xv6 の usys.S ● Newlib ○ newlib/libc/sys の下辺りに xv6 を移植 ○ 少しいじって autoconf するだけ ○ https://github.com/techno/newlib-xv6
  • 18. mruby のバイナリ ● どう頑張っても 400KB ぐらいになる ○ ファイルシステムの制限に引っかかる ● kernel に直接リンクしてしまおう ○ ld -b binary hoge みたいな ○ exec で mruby ならば、そこからコピー
  • 20. 最後に ● 研究に xv6 を使うのやめよう ○ 評価が大変 ○ 実用性皆無 ● PyCon JP 2014 のスタッフやってます ○ Call for Proposal を開始したのでネタ募集中 ○ Web 系以外大歓迎