CPUモード

  • CPUにはカーネルモードとユーザモードの2つのモードがある。
  • CPUモードはCPUとしての機能(アセンブラとして提供)ではなくて、プログラムとしての機能だと思うのだが実際はどうなのだろう?

カーネルモード(OSの核となる処理)

ユーザモード

  • プロセスはユーザモードで動作する
  • HW制御(ドライバ)は全てカーネルモードである。HW機能を利用したい場合はシステムコールを利用してカーネルモードの処理を呼び出す。

  • 全てのIO処理はカーネルモードでしか実行できない。
  • そのためにプロセスがIO処理を実行する場合は(直接的に or 間接的に)システムコールのwrite等を行う。

CPUのモード遷移

  1. プロセス実行時にCPUは通常ユーザモードになっている。
  2. プロセスがシステムコールを発行するとCPUに割り込みが発生する。
  3. これに伴いCPUはユーザモードからカーネルモードに遷移してカーネルの処理が始まる。

確認

  • sarコマンドでCPUモードを確認できる。
  • userとniceの合計がユーザモードで動作している時間であり、systemの合計がカーネルモードで動作している時間。
$ sar -P ALL 1
Linux 4.13.0-39-generic (pide-VirtualBox)   2018年04月30日   _x86_64_    (1 CPU)

00時09分08秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00時09分09秒     all      5.05      0.00      1.01      0.00      0.00     93.94
00時09分09秒       0      5.05      0.00      1.01      0.00      0.00     93.94

参照

okn-yu.hatenablog.com CPUモード - Wikipedia www.geocities.jp qiita.com