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
680
カーネルとシステムコール
以下動画に使ったスライドです。
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
会社員しながら本を書いてきた知見の共有
sat
PRO
3
750
デバイスにアクセスするデバイスファイル
sat
PRO
1
31
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
27
デバイスドライバ
sat
PRO
0
43
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
94
共有メモリ
sat
PRO
3
65
マルチスレッドプログラム
sat
PRO
3
55
Linuxのブートプロセス initramfs編
sat
PRO
2
73
Linuxのブートプロセス
sat
PRO
6
180
Other Decks in Technology
See All in Technology
Data Hubグループ 紹介資料
sansan33
PRO
0
1.8k
Model Mondays S2E01: Advanced Reasoning
nitya
0
360
"SaaS is Dead" は本当か!? 生成AI時代の医療 Vertical SaaS のリアル
kakehashi
PRO
3
200
Eight Engineering Unit 紹介資料
sansan33
PRO
0
3.4k
Tenstorrent 開発者プログラム
tenstorrent_japan
0
310
vLLM meetup Tokyo
jpishikawa
1
220
宇宙パトロール ルル子から考える LT設計のコツ
masakiokuda
2
100
Autonomous Database サービス・アップデート (FY25)
oracle4engineer
PRO
2
770
「伝える」を加速させるCursor術
naomix
0
620
Snowflake Intelligenceで実現できるノーコードAI活用
takumimukaiyama
1
220
Whats_new_in_Podman_and_CRI-O_2025-06
orimanabu
3
180
SFTPコンテナからファイルをダウンロードする
dip
0
200
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Code Reviewing Like a Champion
maltzj
524
40k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
43
2.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
780
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
How STYLIGHT went responsive
nonsquared
100
5.6k
Fireside Chat
paigeccino
37
3.5k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
16
920
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