<<戻る

2004年09月03日

POSIX Thread入門

 

はじめに

今日、企業競争によりCPUの高集積化と性能向上が目まぐるしい。今後、エンドユーザのPCにおいても見た目は物理的に1つのCPUでもデュアルコアと呼ばれるように複数のコアが実装されているCPUが各半導体メーカーからリリースされるであろう。CPUの性能向上とともにカーネルなどが複数のコアを抽象化してソフトウェア開発者には、比較的容易に最大限のCPUリソースを利用できることが予想されるが、マルチスレッドの基礎概念をここで学ぶことで自分の基礎知識として今後のソフトウェア開発に役立てたい。

 

動作環境

OS:x86 Solaris9

Celeron 300MHz x 2 Memory about 636MB Disk 18GB

対象者

C言語プログラマ 入門者レベル(K&R本レベル)

POSIX Threadとは?

最終目的

どのようなソフトウェアであれ、上記CPUのCeleron300MHz x 2のリソースを100%近く使う事。

基礎用語と知識

プロセス

psコマンドでリストが表示されると思うが、その1つ1つがプロセス。C言語のプログラムを1つ実行すると1プロセスとなる。

スレッド

プロセス内のメモリ空間を共有して非同期な処理を行える。OSからのメモリ割り当て(fork)やプロセス間通信などが発生しないため、リソースを削減できる。

並列性

2つ以上のスレッドが同時実行されている状態。2つのプロセッサでは、タイムスライスではなく、2つのプロセッサで同時に2つのスレッドを動作させることが出来る。この場合は並列性がある。

並行性

2つ以上のスレッドが進行過程にある状態。1つのプロセッサでは、タイムスライスして2つ以上のスレッドを動作させる。このような場合は、並行性がある

LWP(Lifht Wight Process)

スレッドインタフェース(Pthread)がこのLWPインタフェースを包み込むので、ソフトウェア開発者は意識しなくてもよい。LWPはカーネルレベルでプーリングされていて、ユーザプロセスに割り当てられる。LWPとユーザプロセスが1対1である場合もあれば、n対nである場合もある。

スケジューリング

POSIX threadには、先入れ先出し(FIFO, QUERE), ラウンドロビン、カスタムが存在する。それぞれ、SCHED_FIFO, SCHED_RR,SCHED_OTHER(デフォルト)と定義されている。ラウンドロビンはFIFOに時間的制約を設けたものである。

スケジューリングスコープ

プロセススコープ(非結合スレッド用)、システムスコープ(結合スレッド用)の2つが存在する。通常はPTHREAD_SCOPE_PROCESSを利用する。これは、LWPとユーザプロセスの結合がスレッドライブラリであるPthreadで管理されることを意味する。

同期

相互排他ロック、読み取り・書き込みロック、条件変数、セマフォのいずれかでスレッド間の同期を設定できる。

参考資料

Solaris 9 4/04 Software Developer Collection - Japanese >> マルチスレッドのプログラミング