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
410
自作WASMランタイムをKernelに改造する試み.pdf
riru
2
740
Other Decks in Technology
See All in Technology
M&A戦略を支えるデータマネジメント (MIDAS Tech Study #16 GENDA Komiyama)
kommy339
1
160
同じ様なUIをiOS/Android間で合わせるヒントNo.2
fumiyasac0921
1
110
Rustで「プリズモイダル法」を利用して「土量計算」をガチでやる
nokonoko1203
1
350
AWSやJAWS-UGとの出会いを振り返る
yoyoyopg
1
180
R3のコードから見る実践LINQ実装最適化・コンカレントプログラミング実例
neuecc
3
3.4k
生成AIの変革の時代に、直近1年で直面した課題とその解決策
ktc_wada
1
770
本当のガバクラ基礎
toru_kubota
0
150
成長をサポートするピープルマネジメントのやり方
sioncojp
9
1.4k
リテール金融(キャッシュレス・ネット銀行・ネット証券)の競争環境と経済圏
8maki
0
1.8k
エンジニア候補者向け資料2024.04.24.pdf
macloud
0
3.4k
Babylon.js JAPAN活動紹介 (2024/4)
limes2018
1
120
DX企業CTOとして考える技術への向き合い方
shoheitai
0
110
Featured
See All Featured
Facilitating Awesome Meetings
lara
43
5.6k
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
The Pragmatic Product Professional
lauravandoore
26
5.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
47k
How GitHub (no longer) Works
holman
305
140k
How to Ace a Technical Interview
jacobian
273
22k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
9
1.3k
Unsuck your backbone
ammeep
664
57k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.1k
Code Reviewing Like a Champion
maltzj
515
39k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
12
1k
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 ・異なるアーキテクチャを透過的に扱うことができるようになるかも!?