組み込みソフト開発のしきいを下げる"リアルタイムOS"のすべて
●各プロセスは独立している
UNIX系OSでは,生成されたプロセスどうしは基本的に独立した関係にあります.プロセスを生成する側を親プロセス,生成される側を子プロセスと呼びます.
子プロセスは一度生成されると,親プロセスのそれまでの実行情報がまるごとコピーされ,親と同じように独立して実行を継続します.子プロセスだけの終了条件を設けないかぎり,親プロセスと同様の終了条件になるまで実行されます.
親プロセスから子プロセスを生成する場合,親プロセスのデータは子プロセスにコピーされますが,実行時のメモリ空間はまったく別の場所を指定されます.つまり,親子のプロセスであってもメモリを共有しているわけではないので,親プロセスと子プロセスが別れたあとは,お互いにどのような値で計算を実行しているかを確認する手段は基本的にありません.
●プロセス間通信と排他制御
各プロセスどうしが協調して動作するためには,別のしくみが必要になります.そのしくみを実現したものがプロセス間通信や,排他制御なのです.
親プロセスと子プロセスの間でデータのやりとりをするためには,このプロセス間通信を使います.排他制御とは,複数のプロセスで同時に同じ資源にアクセスしないための機構です.これによって,同じデータが二つのプロセスから2重に書き換えられることを防ぐことができます(図6,図7).
[図6]もし,2つのプロセスが同じ場所のデータを書き換えてしまったら...
プロセスが,その領域を書き換えるタイミングによってデータの値が不定になる.
[図7]相互排除用のフラグを利用した排他制御
このフラグをmutexと呼ぶ.