プロセスとスレッド
プロセスとは、コマンド、シェル・プログラム、または別のプロセスによって始動されるシステム内のアクティビティーです。
プロセスの属性は、次のとおりです。
- pid
- pgid
- uid
- gid
- 環境
- cwd
- ファイル・ディスクリプター
- シグナル・アクション
- プロセス統計情報
- nice
これらの属性は、/usr/include/sys/proc.h ファイルに定義されています。
スレッドの属性は、次のとおりです。
- stack
- スケジューリング・ポリシー (scheduling policy)
- スケジューリング優先順位
- 保留シグナル
- ブロック化シグナル
- スレッド固有データ
これらのスレッド属性は、/usr/include/sys/thread.h ファイルに定義されています。
各プロセスは、1 つ以上のスレッドから作成されます。 スレッドは、単一の順次制御のフローです。 マルチスレッドの制御によって、アプリケーションは、 端末からの読み取りやファイルへの書き込みなどの操作をオーバーラップさせることができます。
さらに、制御のマルチスレッド化によって、アプリケーションは複数ユーザーからのサービス要求に同時に応じることができます。 スレッドは、fork() システム・コールを通じて作成されたプロセスのような、 複数プロセスの追加オーバーヘッドなしでこれらの機能を提供します。
AIX では、f_fork() と呼ばれる高速の fork ルーチンが導入されました。 このルーチンは、fork() サブルーチンを呼び出した直後に exec() サブルーチンを呼び出す、マルチスレッド・アプリケーションの場合に役立ちます。 fork() サブルーチンの方が速度は遅くなります。これは、実際に fork する前に fork ハンドラーを呼び出してライブラリー・ロックを獲得し、子に子ハンドラーを実行させて、そのロックを初期化するためです。 f_fork() サブルーチンはこれらのハンドラーをバイパスし、 kfork() システム・コールを直接呼び出します。 Web サーバーは、f_fork() サブルーチンを使用することができるアプリケーションのよい例です。