以下のようなことを分析するとなれば OS とカーネルについての理解が不可欠
- システムコールの実行のされ方
- CPU のスケジューリングのしくみ
- メモリがパフォーマンスに影響を及ぼすしくみ
- ファイルシステムの I/O の処理の仕方
- カーネルとは?
- ディスク/ネットワークインターフェースなどのデバイス、メモリ、CPU のスケジューリングなどを管理する
- カーネルモードという特権的な CPU モードで動作する
- ハードウェア - カーネル - システムコール - システムライブラリ - アプリケーション という階層構造
- カーネルの実行タイミング
- ユーザーモードのアプリケーションがシステムコールを呼び出したとき
- デバイスが割り込むを送ったとき
- カーネルクロックやメモリ管理タスク
- CPU リソースの競合などが発生する場合、カーネルがワークロードのパフォーマンスに影響を及ぼすことがある
- Unix カーネルにおけるクロック
- Unix カーネルでは歴史的に 60/100/1000 Hz クロックが実行されてきた(毎回の実行をティックとよぶ)
- システム時間の更新やタイマー、スレッドスケジューリングのためのタイムスライス終了、スケジュールされたカーネルルーチンの実行などが行われていて盛り盛りだった
- Linux は ティックレスカーネルを作ることを目指し、クロックローチンからオンデマンドの割り込みに機能をうつしている(システムタイマー割り込み)
- デバイスへのフルアクセスおよび特権的な命令の実行を認めるモード
- デバイスアクセスを調停したり、プロセスとユーザーが互いのデータにアクセスするのを防いだりする
- プロセスはシステムコールを介して I/O などカーネルの特権的オペレーションを要求する
- ユーザーモードとカーネルモード間の遷移のことをコンテキストスイッチとよび、これには時間がかかるためオーバーヘッドとなる
- ユーザーモードのプロセス間のやりとりでもコンテキストスイッチが発生することがある
- ユーザーモードで特権的な命令を実行すると例外が投げられ、カーネルが適切に処理をおこなう