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
カーネルとシステムコール
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Satoru Takeuchi
PRO
May 31, 2020
Technology
1
700
カーネルとシステムコール
以下動画に使ったスライドです。
https://www.youtube.com/watch?v=8YGNg38-6jM
Satoru Takeuchi
PRO
May 31, 2020
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
書籍執筆での生成AIの活用
sat
PRO
1
290
ChatGPTに従って体調管理2026
sat
PRO
0
150
eBPF
sat
PRO
1
110
waruiBPF
sat
PRO
0
110
eBPFとwaruiBPF
sat
PRO
5
3.8k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
1
100
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
200
様々なファイルシステム
sat
PRO
0
340
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
430
Other Decks in Technology
See All in Technology
Oracle Cloud Observability and Management Platform - OCI 運用監視サービス概要 -
oracle4engineer
PRO
2
14k
ファインディの横断SREがTakumi byGMOと取り組む、セキュリティと開発スピードの両立
rvirus0817
1
1.4k
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.3k
OpenShiftでllm-dを動かそう!
jpishikawa
0
110
Tebiki Engineering Team Deck
tebiki
0
24k
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
300
AWS Network Firewall Proxyを触ってみた
nagisa53
1
230
Frontier Agents (Kiro autonomous agent / AWS Security Agent / AWS DevOps Agent) の紹介
msysh
3
170
Bill One急成長の舞台裏 開発組織が直面した失敗と教訓
sansantech
PRO
2
380
ZOZOにおけるAI活用の現在 ~開発組織全体での取り組みと試行錯誤~
zozotech
PRO
5
5.5k
Azure Durable Functions で作った NL2SQL Agent の精度向上に取り組んだ話/jat08
thara0402
0
190
Webhook best practices for rock solid and resilient deployments
glaforge
1
290
Featured
See All Featured
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
410
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
330
Are puppies a ranking factor?
jonoalderson
1
2.7k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Designing for Timeless Needs
cassininazir
0
130
The Invisible Side of Design
smashingmag
302
51k
Into the Great Unknown - MozCon
thekraken
40
2.3k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
250
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
Visualization
eitanlees
150
17k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
270
Transcript
カーネルとシステムコール May 31th, 2020 Satoru Takeuchi Twitter: satoru_takeuchi
目次 • カーネルとは何ぞや • CPUモードとシステムコール • システムコールの使用例 2
目次 • カーネルとは何ぞや • CPUモードとシステムコール • システムコールの使用例 3
カーネル概論 • システムに存在する全アプリの一番下に存在するプログラム ◦ 本当はさらに下にファームウェアというソフトウェアがいるが省略 • Linuxもカーネルの一種 ◦ OSとカーネルの違いについてはここでは省略 •
システムの核となるので「カーネル(英語で”核”の意味)」と呼ばれる アプリ ハードウェア アプリ カーネル
カーネルが無いシステム1 • ハードウェアの上に直接アプリが1つ、以上! • すごく不便 ◦ 複数アプリ一気に動かしたいよね (例: アニメ見ながらドキュメント作成 ◦
アプリがバグってたらシステムが死ぬ。文鎮になるかも? ◦ アプリ作るたびにハード叩かなきゃいけない 5 アプリ ハードウェア アクセス
カーネルが無いシステム2 • ハードウェアの上に直接アプリが複数、以上! • やっぱり不便! ◦ アプリがバグってたら依然システムが死ぬ ◦ アプリ作るたびに依然ハード叩かなきゃいけない ◦
アプリの実行をどうやって切り替える? • 注意: 本来はメモリ保護も考えなきゃいけないけど今回は省略 ◦ 仮想記憶 6 アプリ ハードウェア アプリ アクセス
単純なカーネルがあるシステム • アプリとハードウェアの間に全アプリ共通コードを置く ◦ 共通コードがハードウェアアクセスやアプリ実行切り替えなどをする ◦ アプリはハードウェアにアクセスしたければカーネルに依頼 ◦ これがいわゆるカーネル 7
アプリ ハードウェア 依頼 アプリ カーネル アクセス
単純なカーネルではまだツラい • アプリは依然ハードウェアに不正アクセス可能 ◦ これを禁止したい! 8 アプリ ハードウェア アプリ カーネル
☠ 依頼 不正アクセス アクセス
Linuxを含む現代的なカーネル • 「CPUモード」というCPUの機能によって不正アクセスを防止 • アプリからカーネルへの依頼は「システムコール」を使う 9 アプリ ハードウェア アプリ カーネル
CPUモード 不正アクセス不可 アクセス 依頼(システムコール)
目次 • カーネルとはなんぞや • CPUモードとシステムコール • システムコールの使用例 10
CPUモード • 大まかにいうと2種類( x86_64のring protection) ◦ カーネルモード: 全命令を実行できる ◦ ユーザモード:
一部命令の実行が禁止されている ▪ 典型的にはハードウェアアクセスを禁止 ▪ 禁止された命令を使うとカーネルモードの特定処理が動く (後述) • いつどんなCPUモードになるか? ◦ カーネル実行中: カーネルモード ◦ アプリ実行中: ユーザモード アプリ ハードウェア カーネル ユーザモード カーネルモード アクセス可 アクセス不可
システムコール • アプリからカーネルへ処理を依頼する手段 1. アプリが所定のお作法で CPU命令を実行 2. CPUがユーザモードからカーネルモードに遷移 3. カーネル内の所定のコードが動く
4. カーネルは依頼内容が正当ならば実行 5. CPUがカーネルモードからユーザモードに遷移 アプリ ハードウェア カーネル ユーザモード カーネルモード (1) (2) (3) (4) (5)
目次 • カーネルとはなんぞや • CPUモードとシステムコール • システムコールの使用例 13
write()システムコール • 雑にいうと「データをどこか(正確にはfile descriptor)に書き込む」 ◦ 仕様は`man 2 write`参照 • たとえば以下は端末に対応するfile
descriptorにwrite()を発行 ◦ `echo test` 14
実験 • やること ◦ 端末への書き込み時に write()システムコールが発行されていることの確認 • 使うツール ◦ straceコマンド:
プロセスのシステムコール発行履歴が見られる ▪ strace -o <ログファイル> <プログラム> [プログラムの引数...] ◦ 様々なプログラミング言語 (C,Python,Go)で書かれたhello worldプログラム • 期待する結果 ◦ 全プログラムについて、 write()で”hello <言語名>”を書き込んだ履歴が残っている 15
まとめ • ユーザの利便性、開発効率のためにカーネルが必要 • アプリとカーネルの実行時はCPUモードが違う • アプリからカーネルへの依頼にはシステムコールを使う • どんなプログラミング言語を使おうと、ハードウェアにアクセスすると最終的にはシ ステムコールが呼ばれる
16