フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

【Linuxのしくみ】4章 プロセススケジューラ を読んで自分なりにまとめ

今回はこちらの書籍「[試して理解]Linuxのしくみ〜実験と図解で学ぶOSとハードウェアの基礎知識」 の4章 プロセススケジューラについて、自己理解のために内容をかいつまんで要約します。素晴らしい書籍で理解が進むと思いますのでぜひご購入を検討ください。

プロセススケジューラとは

1つのCPU(1コア)では一度に1つのプロセスしか動作させることができません。しかし私たちは同時に複数のアプリケーションを同時に立ち上げたいものです。Excelを使いながらYouTubeを見たいですね。

これを実現しているのがプロセススケジューラです。

プロセススケジューラはプロセスがCPUを使うタイミングをコントロールして並行的にプロセスが動作できるようにしています。この図のようにプロセスを切り替えてCPUで動作させることで複数のプロセスの同時実行を可能にしています。(あまりに切り替えが早いので人間には同時に動いているように見えています)

f:id:lirlia:20200422190504p:plain


よく間違えがちなのが並列化(Parallel)並行化(Concurency)は別物になります。こちらの記事で解説をしていますので並行化についておさえておきましょう。

blog.framinal.life

コンテキストスイッチ

CPUを触れるプロセスを切り替えることをコンテキストスイッチと言います。

f:id:lirlia:20200423004550p:plain

コンテキストスイッチはプロセスがどんなコードを実行しても実行される点に注意してください。

プロセスの状態

プロセスは大きく分けて以下の分類の状態が存在します。

状態 意味
実行状態 現在CPU使用中
実行待ち状態 CPU時間が割り当てられるのを待っている
スリープ状態 何らかのイベント発生待ち。イベントが発生するまでCPU時間は使われない
ゾンビ状態 プロセスが終了したあとに親プロセスが終了状態を受け取るのを待っている

※上記以外にも状態は存在します

[root@master vagrant]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.1 193672  6668 ?        Ss    421   1:14 /usr/lib/systemd/systemd -
root         2  0.0  0.0      0     0 ?        S     421   0:00 [kthreadd]
root         3  0.2  0.0      0     0 ?        S     421   2:16 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<    421   0:00 [kworker/0:0H]

STAT列にでているSsSが状態を表しています。

STAT列の1文字目 状態
D 割り込み不可能なスリープ状態(だいたいIO要求のため)
S 割り込み可能なスリープ状態(イベントの完了待ち)
R 実行中 または 実行可能状態(runキュー上にいる)
Z 親プロセスとの切断されたゾンビ状態

プロセスの状態遷移

プロセスは生成されてから終了されるまで以下の図のような状態の遷移を行います。

f:id:lirlia:20200423012505p:plain

スループットとレイテンシ

つづいてこちらのキーワードについて紹介します。

  • スループット:単位時間あたりの処理量
  • レイテンシ:ある処理にかかった時間

レイテンシは文脈によっては遅延を意味することがあるため注意してください。


ここではCPUのアイドル時間(CPUがプロセスの処理を行なっていない時間)とスループット・レイテンシについて話します。CPUのアイドル時間が存在する場合はスループットを向上させる場合があります。というのもCPUが働いていない時間を使って新しくプロセスを動かすことができるので、単位あたりの処理量を増やすことができるからです。

一方でCPUにアイドルがあった場合でもプロセスを増やした場合はコンテキストスイッチが発動する回数が増えるためレイテンシが増加します。

複数のCPUでのスケジューリング

CPUを複数ソケット積んだり、ハイパースレッディング等の技術により複数のコア使うことが当たり前になりました。そのためスケジューラは複数の論理CPUに処理を分散させるためにロードバランサグローバルスケジューラという機能を持っています。

この機能を使って複数のプロセスに対して平等にCPU時間が分配されるように、各論理CPUに処理を分散しています。

まとめ

この章ではプロセススケジューラについて整理しました。書籍にはより詳しい情報や、基礎的なため今回は端折った内容も豊富に掲載されていますので勉強の際はぜひお買い求めください。