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
Unikernelで始める自作OS/OS Development with Unikernel
Search
Akira Moroo
October 06, 2019
Technology
670
1
Share
Unikernelで始める自作OS/OS Development with Unikernel
Unikernelの設計/実装を使って自作OSができるのではないかという話です.
Akira Moroo
October 06, 2019
More Decks by Akira Moroo
See All by Akira Moroo
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
270
Exploring x86 MSR Space
retrage
0
1.5k
LLMでバイナリ解析支援
retrage
0
230
GitHub ActionsでDevSecOpsごっこ
retrage
0
110
Practical Rust (Hypervisor) Firmware
retrage
3
1.9k
Bypassing UEFI Secure Boot with Thin-Hypervisor
retrage
0
1.2k
Porting Linux to Nabla Containers
retrage
0
1.3k
Network Boot from Bell Labs
retrage
2
1.8k
LLVM Backend Development for EFI Byte Code
retrage
2
1.1k
Other Decks in Technology
See All in Technology
脅威をエンジニアリングの糧にして:恐怖を乗り越えた先にあったもの / Turn threats into fuel for engineering: what lay beyond overcoming fear
nrslib
1
340
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
300
シンデレラなんかになりたくない!ガラスの靴が割れた時代にどう歩く?
nomizone
0
220
LLM時代のリファクタリング戦略_AIエージェントによる段階的・安全なTS移行方法
play_inc
0
440
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
280
オンコールの負荷軽減のためのBits Assistant 活用方法 / How to Use Bits Assistant to Reduce the Workload on On-Call Staff
sms_tech
1
300
管理アカウント単一運用からAWS Organizationsに移行するの大変で滅
hiramax
0
300
Spring AI × MCP 入門〜AIエージェントへのツール公開、境界設計から始める最小構成 〜
yuyamiyamoto
0
170
AI時代の私の技術インプットとアウトプット術
tonkotsuboy_com
15
7.6k
Anthropic AIネイティブ・スタートアップ構築のプレイブック を理解する
nagatsu
0
210
個人AIからチームAIへ:開発における品質と生産性の再設計
moongift
PRO
0
270
oracle-to-databricks-migration-with-llm-and-dbt
casek
0
340
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
3
370
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
710
A Modern Web Designer's Workflow
chriscoyier
698
190k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
61
44k
Designing Experiences People Love
moore
143
24k
Paper Plane (Part 1)
katiecoart
PRO
0
8k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
Thoughts on Productivity
jonyablonski
76
5.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Prompt Engineering for Job Search
mfonobong
0
320
New Earth Scene 8
popppiees
3
2.3k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
380
Transcript
Unikernelで 始める⾃作OS October 6, 2019 第17回 ⾃作OSもくもく会 @retrage
Q: なぜOS⾃作? 1
A: 楽しいから 2
A: 学習のため • こういう⼈もいるはず • コンピュータアーキテクチャやOSを知る • 書籍や資料を読んだり • 既存OSの実装を読んだり
• 実際に⼿を動かしてみることで理解が深まる 3
学習のためのOS⾃作 • 1. ゼロから全部実装 • 全てを⾃分で実装したコードで制御できる • 関⼼のある部分の実装にたどり着くまでが⼤変 • 2.
既存OSの改造 • 関⼼のある部分の実装にすぐ着⼿できる • 既存OSの実装を理解している必要がある • Linuxのような⼤規模なOSの場合かなり⼤変 4
OS⾃作の障壁 • x86プラットフォームは⽐較的複雑 • 歴史的経緯による • 煩雑な起動プロセス • 多種多様なデバイスへの対応 •
学習⽤途であれば仮想環境で⼗分では? • デバイス: virtio, シリアルコンソール • OSの起動: -kernel os.img • => Unikernelが使えそう 5
Unikernel: 概要 • OSの形態の1つ (Library OS) • 仮想環境で動作す ることを前提 •
空間の分離なし • シングルプロセス • ハイパーバイザで 隔離性を担保 • 実装は多数 6
Unikernel: ⾃作OSの観点 • 簡易化したOSとみなせる • 1. ゼロからの実装: • マルチプロセスの実装が不要 •
実装すべきデバイスドライバは少数 • 2. 既存OSの改造: • コード量が⽐較的少ない • 例: Unikraft 108,523⾏ 7
Unikernels as Processes • Unikernelをホスト上のプロセスとして動かす • 隔離はOS上のプロセスで⼗分 • Unikernelに対する制約 •
システムコールを直接発⾏できない 8
ハイパーコール 9
Unikernels as Processes: ⾃作OSの観点 • 抽象化されたデバイス • デバイスドライバを書く必要がない • ハイパーコールを発⾏するだけで利⽤可能
• デバッグが⽐較的容易 • ただのユーザ空間のプロセスのため • エミュレータも不要 • => ⾼レイヤーな部分を作るのに最適 10
課題点 • 学習を⽬的に設計実装されていない • コードが不親切だったり • コードの説明がなかったり • 汎⽤OSでは必須な機能の実装がない •
マルチタスク • ユーザ空間とカーネル空間の分離 • =>どこに興味があるかに依存 11
実例 12
Unikraft 13
Linux Kernel Library 14 • vanillaなLinux Kernelがユーザ空 間で動作 • ホスト固有の
コードは綺麗に 分離 • mutex/semaphore /thread/block rw etc. • arch/lkl
LKL on Unikraft 15 uk-host.o lkl.o LKL App unikraft_linuxu_x86_64 liblkl
LK mutex.o thread.o timer.o
LKL on Unikraftデモ 16 $ ./build/boot_linuxu-x86_64 Welcome to _ __
_____ __ _____ (_) /__ _______ _/ _/ /_ / // / _ \/ / '_// __/ _ `/ _/ __/ \_,_/_//_/_/_/\_\/_/ \_,_/_/ \__/ Titan 0.2~51691ea /* snip */ [ 0.000000] Linux version 4.17.0+ (
[email protected]
) (gcc version 8.1.1 20180712 (Red Hat 8.1.1-5) (GCC)) #1 Thu Jan 10 14:04:16 JST 2019 /* snip */ [ 0.000000] This architecture does not have kernel memory protection. lkl_start_kernel(&lkl_host_ops, "mem=16M loglevel=8") = 0 /* snip */