tjinjin's blog

インフラ要素多めの個人メモ

システムパフォーマンス本を読む〜第3章

About

前回に引き続き、第3章を読んでいきます。

システムパフォーマンス本を読む〜第1章 - tjinjin's blog

システムパフォーマンス本を読む〜第2章 - tjinjin's blog

オペレーティングシステム

OSの基礎とOSの根幹とも言えるカーネルについての概要を学ぶ

3.1 用語

  • カーネル:デバイス、めもり、CPUスケジューリングなどのシステムを管理するプログラム。ハードウェアに直接アクセスできるカーネルモードでCPUを動作する
  • プロセス:通常ユーザーモードで実行され、システムコールやトラップを介してカーネルモードにアクセスできる
  • スレッド:CPUで実行されるようにスケジューリングできる実行コンテキスト。
  • タスク:Linuxの実行可能な実態で、プロセス(シングルスレッド)、マルチスレッドプロセス、カーネルスレッドのどれか。
  • コンテキストスイッチ:異なるアドレス空間で動作するようにCPUを切り替えるサブルーチン。具体的な動きはどんな感じなんだろう?レジスタ内のデータを一旦退避させて、別のプログラムのデータをレジスタに展開する流れを具体的には指している?

3.2 基礎知識

  • カーネル
    • ユーザレベルプログラムがシステムコールを発行したときやデバイスが割り込みを送ったときにオンデマンド実行される
    • Webサーバのような頻繁にI/Oを実行するワークロードは、頻繁にカーネルコンテキストで実行される。CPUを酷使する場合は、カーネルが介入しないようになっている
  • クロック
    • 毎回の実行をティックといい、システム時間の更新、タイマーやスケジューリングのためのタイムスライスの終了、CPU統計のメンテナンス、コールアウト(スケジューリングされたカーネルルーチン)の実行を担う
    • パフォーマンスに問題があったので、最近はディックレスカーネルを目指している
  • カーネルモード
    • カーネルはデバイスへのフルアクセスと特権的な命令の実行を認めるカーネルモードというCPUモードで実行される唯一のプログラム。
  • スタック
    • スレッドが必要とする過去の実行情報を格納
  • コピーオンライト
    • fork()で利用。fork時に前のアドレス空間の内容をすべてコピーするのではなく、前のアドレス空間の参照手段だけをつくって、どちらかのプロセスがメモリに変更を加えるタイミングで初めてコピーを作る。こうすることでメモリとCPUの仕様度を下げる
  • メモリ管理
    • スワッピング:プロセス全体をメインメモリとセカンダリストレージの間で移動
    • ページング:ページという単位で移動する
  • スケジューラはI/Oバウンド > CPUバウンド の順で優先度を決める。
  • VFSファイルシステムを抽象化するためのインターフェイス
  • ディスクはレイテンシが高いので、キャッシングの層が多くある。例では14個あった。
  • プリエンプション
    • 優先度の高いユーザーレベルスレッドがカーネルに割り込んで処理を実行できる

感想

OS周りは理解できるようになりたいと常々思っているわりに知らないことが多かった。他の本とかも合わせてしっかり読んでいきたいと思います!