Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
WASMを実行する自作Microkernel, mavisの紹介
Search
RI5255
September 23, 2023
Technology
0
330
WASMを実行する自作Microkernel, mavisの紹介
2023/9/23 第35回 自作OSもくもく会オンライン の@RI5255 (
https://twitter.com/RI5255
) の発表資料です。
RI5255
September 23, 2023
Tweet
Share
More Decks by RI5255
See All by RI5255
WasmOS: Wasmを実行する自作Microkernel
riru
0
420
自作WASMランタイムをKernelに改造する試み.pdf
riru
2
750
Other Decks in Technology
See All in Technology
#phpconkagawa レガシーコードにもオブザーバビリティを 〜少しずつ始めるサービス監視〜
yamato_sorariku
0
470
IaCからAWSに入門した初心者が CloudFormationを通して考えた「AWS操作」の使い分け
maimyyym
3
650
中年男性がメインフレームから クラウドへキャリアシフトしてみた
uechishingo
1
450
パスワードを保存しますか?
hanacchi
0
240
類似ロジック実装をiOS/Android間で合わせる道標No.1
fumiyasac0921
1
210
Taking Flight with Tailwind CSS
opdavies
0
4.3k
試作とデモンストレーション / Prototyping and Demonstrations
ks91
PRO
0
130
データベース03: 関係データモデル
trycycle
0
130
Step by Stepで学ぶ、ADT(代数的データ型)、モナドからEffect-TSまで
leveragestech
1
2k
Cloudflare WorkersがPythonに対応したので試してみた
miura55
0
170
Cloud Service Mesh に触れ合う
phaya72
1
360
ルーターでプレゼンする
puhitaku
1
3.5k
Featured
See All Featured
Side Projects
sachag
451
41k
Writing Fast Ruby
sferik
622
60k
The Brand Is Dead. Long Live the Brand.
mthomps
49
30k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
How GitHub Uses GitHub to Build GitHub
holman
468
290k
Building Effective Engineering Teams - LeadDev
addyosmani
33
1.9k
Fantastic passwords and where to find them - at NoRuKo
philnash
39
2.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.1k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.7k
YesSQL, Process and Tooling at Scale
rocio
165
13k
Atom: Resistance is Futile
akmur
260
25k
Building a Scalable Design System with Sketch
lauravandoore
457
32k
Transcript
WASMバイナリを実行する自作Microkernel, mavisの紹介 -WASM x Microkernelが描く未来- 第35回 自作OSもくもく会オンライン @RI5255
仕組みを理解したい!! OTFって何? NTFSって何? Cコンパイラの仕組みは? USBドライバの仕組みは? 自己紹介 ・低レイヤが好き ・重度のフルスク病 ・CTFはpwnが好き @RI5255
1
WASM Runtime x Microkernel !! https://github.com/RI5255/mavis 2
WASMとは? ・仮想CPUの命令セット及びバイナリフォーマットの仕様 ・スタックマシンベースの命令セット 3 ・いろいろな言語からWASMにコンパイルできる(Rust, C, Go etc…)
Microkernelとは? user タスクスケジューラ デバイスドライバ ファイルシステム シンプルで必要最低限のinterface 必要最小限の機能 kernel server 4
WASM Runtime x Microkernelとは? user タスクスケジューラ デバイスドライバ ファイルシステム シンプルで必要最低限のinterface WASM
Runtime kernel WASM 全てのserverがWASMバイナリなMicrokernel !! 5
Motivation モノリシックkernel タスクスケジューラ デバイスドライバ ファイルシステム kernel user system calls ・同じOS、同じアーキテクチャである限り同じバイナリが動く世界
6 Program
Motivation Microkernel ・同じOS、同じアーキテクチャである限り同じバイナリが動く世界 kernel system calls タスクスケジューラ デバイスドライバ ファイルシステム user
タスク生成 低レベルなメモリ管理 IPCの仕組み Program ・アプリケーションに応じて”OS”の機能を容易に切り替えられる世界 7
Motivation Microkernel x WASM ・同じOSである限り同じバイナリが動く世界(再コンパイルの必要なし) ・アプリケーションに応じて”OS”の機能を容易に切り替えられる世界 system calls タスクスケジューラ デバイスドライバ
ファイルシステム user Program WASM 8 kernel タスク生成 低レベルなメモリ管理 IPCの仕組み WASM Runtime
Motivation ・WASMはスタックマシンベースの命令セットなのでWASMバイナリは位置独立 Microkernelのボトルネックを解消しつつ、拡張性に優れたOSを作ることができる!! 全てをKernel空間で動かせる!! さらに… 仮想メモリが必要ない ・WASMを使えば特権命令の禁止、範囲外読み書きの禁止ができる 9
概要 fs ・ファイルのopen ・ファイルのread ・ファイルのclose vm ・タスクの生成 ・タスクの削除 shell ・コマンド実行
WASM Runtime(Kernel) low level functions WASM Program Microkernel 10
特徴 ・仮想メモリを持たない ・すべてのプログラムがWASMバイナリ ・すべてのプログラムがring0で動く ・kernelそのものがWASM Runtime ・メッセージパッシングの機構を提供 ・”OS”の機能は全てWASMバイナリとして実現する 11 ・Kernelの大部分はHina
OS(https://github.com/nuta/microkernel-book)を参考にしている
Demo: “Hello World” on mavis 13
Demo: “Hello World!” on mavis shell fs “hello” OPEN_FILE_MSG OPEN_FILE_REPLY_MSG
1 shell fs READ_FILE_DATA_MSG READ_FILE_DATA_REPLY_MSG 2 shell vm SPAWN_TASK_MSG SPAWN_TASK_REPLY_MSG 4 hello create_vm_task shell fs CLOSE_FILE_MSG CLOSE_FILE_REPLY_MSG 3 hello vm EXIT_TASK_MSG 5 task_destroy shell DESTROY_TASK_MSG ”Hello World!” 14
実装: Wasm Runtime ・C実装(フルスクラッチ) ・アーキテクチャ依存の処理をビルトイン関数として持つ ・WASIはサポートしていない 15
実装: Wasm Runtime ・WASIは抽象度が高い Why No WASI Support? 例) fd_writeを実装するといっても、そもそもファイルシステムがない。
より低レベルなAPIが適している 16
実装: メモリ管理 palloc: 物理ページを割り当てる pfree: 物理ページを開放する palloc palloc pfree 17
実装: メモリ管理 malloc:任意サイズのメモリ確保 heap next_paddr heap paddr next_paddr 18
実装: メモリ管理 Why No free? ・適切にfreeを呼ぶのは難しい ・ヘッダにサイズ情報を追加する必要がある ・double free等に対する対策が必要になる ・サイズごとにfree-listが必要になる
・mallocの処理が複雑になる ・そこまでしてメモリをけちる必要ある? 19
実装: メッセージパッシング ipc_send: 指定したタスクにメッセージを送信 宛先がipc_receiveを既に呼んでいる タスクをブロックして実行を移す メッセージをコピーする 20
実装: メッセージパッシング ipc_receive: 指定したタスクからメッセージを受信 自分に送信しようとしているタスクを再開 タスクをブロックして実行を移す メッセージを受信 21
実装: スケジューリング ・FIFO方式 ・切り替えのタイミングはipc_send, ipc_receiveの呼び出し時(協調的マルチタスク) ・タイマ割り込みはない 22
実装: スケジューリング Why No Timer Interrupt? ・kernelで動いているserverは互いに生産者、消費者の関係にある ・割り込みがあると共有リソースを操作する際にロックをとる必要がある ・すべてがkernel空間で動くのでBig Kernel
Lockを実装することが困難 ・mutexはロック忘れが怖いし、デバッグが地獄 23
展望 Message passing over a network 24 Network RPC(Remote Procedure
Call) Application Kernel(WASM Runtime) Servers WASM Application Kernel(WASM Runtime) Servers WASM ・異なるアーキテクチャを透過的に扱うことができるようになるかも!?