第1 章緒言1
1.1 背景. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.1 スレッドプログラミング. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.1.2 マルチスレッドプロセッサアーキテクチャ. . . . . . . . . . . . . . . . . . . 3 1.1.3 マルチスレッドアーキテクチャにおけるシステムソフトウェア. . . . . . . . 4 1.2 目的. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 第2 章問題分析6 2.1 従来のスレッド処理機構. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.1 カーネルレベルスレッド. . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.2 ユーザレベルスレッド. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.1.3 2 レベルスレッド. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.4 協調型ユーザレベルスレッドモデル. . . . . . . . . . . . . . . . . . . . . . 11 2.1.5 スレッドモデルについての考察. . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 マルチスレッドアーキテクチャにおけるスレッドライブラリ. . . . . . . . . . . . . 12 2.2.1 従来の実スレッド管理方式. . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.2 マルチスレッドアーキテクチャにおけるスレッドの排他制御・同期. . . . . . 14 2.3 議論. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 第3 章本研究の目標と設計方針18 3.1 本研究の目標. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.2 本研究の設計方針. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 第4 章システムの全体構成20 4.1 システム全体の構成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.2 OChiMuS PE プロセッサ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.2.1 プロセッサ概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.2.2 プロセッサ内部のスレッド管理. . . . . . . . . . . . . . . . . . . . . . . . . 24 4.2.3 スレッド制御命令. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 i 4.3 Future OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.3.1 プロセス管理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.3.2 スレッドライブラリとの連携. . . . . . . . . . . . . . . . . . . . . . . . . . 26 第5 章スレッドライブラリの方式設計27 5.1 スレッドライブラリの概要. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5.2 プログラミングインターフェース. . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.2.1 スレッドの生成と削除,合流. . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.2.2 スレッド間の排他制御. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.2.3 条件変数による同期. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.3 スレッドの管理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.3.1 スレッド管理ブロック. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 5.3.2 スレッド識別子とLTN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 5.3.3 待ちスレッドリスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 5.3.4 スレッドスケジューリング. . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.3.5 空きLTN リスト. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.4 プロセッサ命令を利用するスレッド制御. . . . . . . . . . . . . . . . . . . . . . . . 36 5.4.1 スレッド生成. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 5.4.2 スレッドの削除. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.4.3 排他制御,同期機構. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.4.4 並列実行のための排他制御. . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.5 OS との協調. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.5.1 プリエンプティブなスレッド切り替え. . . . . . . . . . . . . . . . . . . . . 48 5.5.2 ブロック,停止している実スレッドの扱い. . . . . . . . . . . . . . . . . . . 48 5.5.3 OS との競合回避. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 第6 章評価52 6.1 実装. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.2 評価環境. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.3 並列実行による高速化の評価. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.3.1 画像縮小プログラム. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.3.2 行列演算プログラム. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.4 スレッド制御の評価. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.5 考察. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 第7 章結言59 7.1 本研究の成果. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 ii 7.2 本研究の適用可能性. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 7.3 今後の課題. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 謝辞62 参考文献64 付録A 評価プログラムと結果65 A.1 平均画素法による図形縮小プログラム. . . . . . . . . . . . . . . . . . . . . . . . . 65 A.1.1 ソースコード. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 A.1.2 結果. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 A.2 行列の掛け算を行うプログラム. . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 A.2.1 ソースコード. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 A.2.2 結果. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75