Linuxスケジューリング 3

Linuxのプロセスは、公平性を維持したSCHED_OTHERというスケジューリングポリシーですが、これをSCHED_FIFOに変更し、リアルタイムプロセスとします。

リアルタイムプロセスは通常プロセスよりも高い優先度が設定されているため、このプロセスが無限ループして終了しないと、他のプロセスが永遠に実行できなくなり、システムのフリーズになります。

と、理屈ではわかっているのですが、実際そうなるのかを確認してみました。

OS:Fedora18 (kernel 3.6.10-4.fc18)

環境:virtualBox

[手順]

1 . 使っているシェルのポリシーと優先度を変更する

# chrt -f -p 99 $$

chrtコマンドはスケジューリングポリシーの変更につかうコマンドです。

chrt [ポリシー] [プロセスID指定] [ポリシーの優先度] [プロセスID]

というように使います。

  • オプション

-f : SCHED_FIFO

-r : SCHED_RR

-o : SCHED_OTHER

  • ポリシーの優先度

    0 : 通常ポリシー用

1-99 : リアルタイムプロセス用

今回はSCHED_FIFOなので-fを使い、最大優先度の99に設定しました。

2 . 同じシェル上で無限ループを実行する

# while :; do true; done

->この時点でFedoraは一切の操作を受け付けなくなります。

まずは確認ができました。

広告を非表示にする