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
認知症フレンドリーテックとスタックチャン
naokiuc
0
340
Cloud Service Mesh に触れ合う
phaya72
1
270
AWSやJAWS-UGとの出会いを振り返る
yoyoyopg
1
160
2024春 注目のWeb系 OSS & SaaS 3選
makies
0
200
How to do well in consulting–Balkan Ruby 2024
irinanazarova
0
170
さらばあのボタンとは言わせない SORACOM LTE-M Button powerd by AWSをまだ使えるようにした(前編?)
miura55
0
100
高専で制御を、大学でセンシングを学び、次は脳みそ
satoshirobatofujimoto
0
120
GrafanaMeetup_AmazonManagedGrafanaのアクセス制御機能とマルチテナント環境下でのアクセス制御について
daitak
0
450
Android Target SDK 35 (Android 15) 対応の概要
akkie76
0
180
Handling focus in 2024
tahia910
0
470
地理空間データ可視化・解析・活用ソリューション Pacific Spatial Solutions (PSS)
pacificspatialsolutions
0
350
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
0
1.9k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1025
450k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
The Cult of Friendly URLs
andyhume
74
5.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
KATA
mclloyd
16
12k
Designing for humans not robots
tammielis
247
25k
How to name files
jennybc
65
93k
GraphQLの誤解/rethinking-graphql
sonatard
56
9.3k
The Art of Programming - Codeland 2020
erikaheidi
43
12k
Unsuck your backbone
ammeep
664
57k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
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 ・異なるアーキテクチャを透過的に扱うことができるようになるかも!?