Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
88
waruiBPF
sat
PRO
0
81
eBPFとwaruiBPF
sat
PRO
4
2.5k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
0
86
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
170
様々なファイルシステム
sat
PRO
0
310
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
400
ソースを読むプロセスの例
sat
PRO
22
17k
メモリマップトファイル
sat
PRO
1
160
Other Decks in Technology
See All in Technology
SSO方式とJumpアカウント方式の比較と設計方針
yuobayashi
7
590
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
300
RAG/Agent開発のアップデートまとめ
taka0709
0
160
今からでも間に合う!速習Devin入門とその活用方法
ismk
1
630
ログ管理の新たな可能性?CloudWatchの新機能をご紹介
ikumi_ono
1
630
大企業でもできる!ボトムアップで拡大させるプラットフォームの作り方
findy_eventslides
1
690
学習データって増やせばいいんですか?
ftakahashi
2
300
評価駆動開発で不確実性を制御する - MLflow 3が支えるエージェント開発
databricksjapan
1
110
生成AI活用の型ハンズオン〜顧客課題起点で設計する7つのステップ
yushin_n
0
110
AWSセキュリティアップデートとAWSを育てる話
cmusudakeisuke
0
220
re:Invent 2025 ~何をする者であり、どこへいくのか~
tetutetu214
0
200
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
470
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.3k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
Faster Mobile Websites
deanohume
310
31k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Typedesign – Prime Four
hannesfritz
42
2.9k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
720
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Designing for Performance
lara
610
69k
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