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
Satoru Takeuchi
PRO
May 31, 2020
Technology
1
630
カーネルとシステムコール
以下動画に使ったスライドです。
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
プロセスの生成 exec編
sat
PRO
1
21
プロセスの生成 fork&exec編
sat
PRO
0
12
プロセスの生成 コピーオンライトを使ったfork編
sat
PRO
0
15
プロセスの生成 fork編
sat
PRO
0
17
静的ライブラリと 共有ライブラリの違いを実験で確認
sat
PRO
1
26
ハイテク休憩
sat
PRO
2
190
利きプロセススケジューラ
sat
PRO
5
3.2k
俺とVSCode Python Debugger Extension
sat
PRO
1
200
コード再利用のしくみ ライブラリ
sat
PRO
3
71
Other Decks in Technology
See All in Technology
AWS re:Invent 2024 recap
hkoketsu
0
610
クレカ・銀行連携機能における “状態”との向き合い方 / SmartBank Engineer LT Event
smartbank
2
120
20241228 - 成為最強魔法使!AI 實時生成比賽的策略 @ 2024 SD AI 年會
dpys
0
220
OCI技術資料 : ファイル・ストレージ 概要
ocise
3
11k
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
140
ソフトウェア開発における「パーフェクトな意思決定」/Perfect Decision-Making in Software Development
yayoi_dd
2
2.4k
2024年にチャレンジしたことを振り返るぞ
mitchan
0
160
AWS環境におけるランサムウェア攻撃対策の設計
nrinetcom
PRO
1
280
事業貢献を考えるための技術改善の目標設計と改善実績 / Targeted design of technical improvements to consider business contribution and improvement performance
oomatomo
0
180
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
1.6k
Unlearn Product Development - Unleashed Edition
lemiorhan
PRO
2
150
Fearsome File Formats
ange
0
430
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
74
9.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Why Our Code Smells
bkeepers
PRO
335
57k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Documentation Writing (for coders)
carmenintech
67
4.5k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
RailsConf 2023
tenderlove
29
950
Gamification - CAS2011
davidbonilla
80
5.1k
Thoughts on Productivity
jonyablonski
68
4.4k
Into the Great Unknown - MozCon
thekraken
34
1.6k
Navigating Team Friction
lara
183
15k
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