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
Improve Your Development Workflow with Gemini Code Assist
meteatamel
0
130
require(ESM)とECMAScript仕様
uhyo
4
960
Building Dashboards as a Hobby
egmc
0
370
One engineer company with Ruby on Rails
rstankov
2
430
IPUT App Dev. Co. -Overview 2024/4
iputapp
0
120
LLM開発・活用の舞台裏@2024.04.25
yushin_n
3
1.2k
コードや知識を組み込む / Incorporate Code and knowledge
ks91
PRO
0
150
EM完全に理解した と思ったけど、 やっぱり何も分からなかった話 / EM Night Fukuoka #1
hirutas
0
280
障害対応をちょっとずつよくしていくための 演習の作りかた
heleeen
1
1.6k
Building a RAG-poweredAI chat appwith Python and VS Code
pamelafox
0
150
Gitlab本から学んだこと - そーだいなるプレイバック / gitlab-book
soudai
7
1.3k
「スニダン」開発組織の構造に込めた意図 ~組織作りはパッションや政治ではない!~
rinchsan
4
610
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
321
23k
How to Ace a Technical Interview
jacobian
273
22k
Build your cross-platform service in a week with App Engine
jlugia
226
17k
Facilitating Awesome Meetings
lara
43
5.6k
Building Flexible Design Systems
yeseniaperezcruz
320
37k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.6k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
How to train your dragon (web standard)
notwaldorf
75
5.2k
A better future with KSS
kneath
231
16k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
21
1.4k
What's in a price? How to price your products and services
michaelherold
238
11k
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 ・異なるアーキテクチャを透過的に扱うことができるようになるかも!?