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
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
eBPF
sat
PRO
1
110
waruiBPF
sat
PRO
0
100
eBPFとwaruiBPF
sat
PRO
5
3.3k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
0
92
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
180
様々なファイルシステム
sat
PRO
0
330
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
420
ソースを読むプロセスの例
sat
PRO
22
18k
メモリマップトファイル
sat
PRO
1
180
Other Decks in Technology
See All in Technology
AI時代のアジャイルチームを目指して ー スクラムというコンフォートゾーンからの脱却 ー / Toward Agile Teams in the Age of AI
takaking22
9
2.7k
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
15
4.9k
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
Introduction to Bill One Development Engineer
sansan33
PRO
0
340
Java 25に至る道
skrb
3
130
「リリースファースト」の実感を届けるには 〜停滞するチームに変化を起こすアプローチ〜 #RSGT2026
kintotechdev
0
480
田舎で20年スクラム(後編):一個人が企業で長期戦アジャイルに挑む意味
chinmo
1
900
AWS re:Inventre:cap ~AmazonNova 2 Omniのワークショップを体験してきた~
nrinetcom
PRO
0
120
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
390
『君の名は』と聞く君の名は。 / Your name, you who asks for mine.
nttcom
1
140
SES向け、生成AI時代におけるエンジニアリングとセキュリティ
longbowxxx
0
290
AIエージェントを5分で一気におさらい!AIエージェント「構築」元年に備えよう
yakumo
1
130
Featured
See All Featured
Paper Plane
katiecoart
PRO
0
45k
Context Engineering - Making Every Token Count
addyosmani
9
580
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
The SEO Collaboration Effect
kristinabergwall1
0
320
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.4k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.1k
How to train your dragon (web standard)
notwaldorf
97
6.5k
Odyssey Design
rkendrick25
PRO
0
450
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
Crafting Experiences
bethany
0
25
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
200
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