第4章 スレッドおよびプロセス
すべてのプログラムはスレッドとプロセスを使用しますが、Red Hat Enterprise Linux for Real Time は標準の Red Hat Enterprise Linux とは別の方法で処理します。本章では、スレッドおよびプロセスに対する Red Hat Enterprise Linux for Real Time のアプローチを説明します。
各 CPU コアは、処理可能な作業量に制限されます。効率性を向上させるために、アプリケーションは複数のコアで異なるタスクを同時に実行できます。これは並列化と呼ばれます。
プログラムは スレッド を使用して並列化できます。ただし、スレッドとプロセスは混同されることが多く、用語の違いを理解することが重要です。
- プロセス
- UNIX® スタイルのプロセスとは、以下を含むオペレーティングシステムのコンストラクトです。
- 仮想メモリーのアドレスマッピング
- 実行コンテキスト (PC、スタック、レジスター)
- 状態/アカウント情報
Linux プロセスは、このスタイルのプロセスとして開始しました。あるアドレス空間内で実行中の 1 つ以上のプロセスの概念が開発されると、Linux は別のプロセスでアドレス空間を共有するプロセス構造に移行ていました。これは、プロセスデータ構造が小さい限り機能します。本書の残りの部分では、プロセス という用語は、複数のスレッドが含まれる可能性がある独立したアドレス空間を指します。 - スレッド
- 厳密には、スレッドは以下が含まれるスケジュール可能なエンティティーです。
- プログラムカウンター (PC)
- レジスターコンテキスト
- スタックポインター
プロセス内に複数のスレッドが存在する可能性があります。
Red Hat Enterprise Linux for Real Time システムでプログラミングする場合は、プログラムを並列化する可能性がある方法が 2 つあります。
fork
およびexec
関数を使用した新規プロセスの作成- Posix Threads (pthreads) API を使用して、実行中のプロセス内に新しいスレッドを作成します。
注記
コンポーネントの並列処理方法を決定する前に、コンポーネントがどのように対話するかを評価します。コンポーネントが相互に独立していて、十分に対話しない場合や、新しいアドレス空間を作成し、新規プロセスとして実行される場合は、通常は適切なオプションになります。ただし、コンポーネントがデータを共有したり、頻繁に通信する必要がある場合は、1 つのアドレス空間内のスレッドとして実行すると、通常はより効率的になります。
注記
詳細は、以下の man ページと書籍は本セクションに記載の情報に関連しています。
- fork(2)
- exec(2)
- 『Programming with POSIX Threads』, David R. Butenhof, Addison-Wesley, ISBN 0-201-63392-2
- 『Advanced Programming in the UNIX Environment』, 2nd Ed., W. Richard Stevens and Stephen A. Rago, Addison-Wesley, ISBN 0-201-43307-9
- 「POSIX Threads Programming」, Blaise Barney, Lawrence Livermore National Laboratory, http://www.llnl.gov/computing/tutorials/pthreads/