データモデルの再設計
2006091301 20060913 -MT-
■データモデル
- データモデル変更の経緯
処理の最適化を行うためには、不要な処理やデータはソースコードに含めたくない
ようにする必要がある。そのためには、これまで UmsDat に格納していたメンバと
メソッドを、データごと(List、Loop、Interleave)に分割した方が、最適化を行い
やすい。
これまではスレッド管理情報までもUmsDat に含まれていたため、スレッドのレイヤ
を設けることにした。
これまでの実装は、「とにかく実際に動くものを」という観点で行っており、データ
モデルの妥当性には触れてこなかった。
- これまでのデータモデルと今回変更したデータモデル
[これまでのデータモデル]
+-----------+
| ThreadMng |
+-----------+
|1
|1..*
+-----+
| Dat |
+-----+
[今回変更したデータモデル]
+-----------+ +---------------------+
| ThreadMng |<--| ThreadMngInterleave |
+-----------+ +---------------------+
|1
|1..*
+-----------------------------------------+
| Thread |
+-----------------------------------------+
<>1 <>1 <>1 <>1
| 1 | 1 | 1 | 1
+-----+ +------+ +------+ +------------+
| Dat | | List | | Loop | | Interleave |
+-----+ +------+ +------+ +------------+
■各データの説明
- Dat
[概要]
入出力バッファの情報を保持する。
[メンバ]
バッファアドレス、バッファ処理位置、バッファ処理終了位置等
[メソッド]
バイトのアライメントチェック等
- List
[概要]
で処理するリスト情報を保持する。
[メンバ]
区切り文字、リストの処理モード等
[メソッド]
リストの処理モード変更、バッファ処理位置の更新等。
- Loop
[概要]
、、 で処理するループ情報を保持する。
[メンバ]
ループカウンタ等の配列
[メソッド]
ループカウンタ等の配列 index の更新。
- Interleave
[概要]
で処理するインターリーブ情報を保持する。
[メンバ]
親子関係情報、インターリーブの処理モード等
[メソッド]
インターリーブ処理を行う等。
- Thread
[概要]
スレッド情報を保持する。
[メンバ]
スレッド状態、次スレッド、UmsDat、UmsList、UmsLoop、。
[メソッド]
スレッドを休止状態にさせる、スレッドを同期状態にさせる驚き。
- Thread
[概要]
スレッド情報を保持する。
[メンバ]
スレッド状態、次スレッド、UmsDat、UmsList、UmsLoop、UmsThread等。
[メソッド]
スレッドを休止状態にさせる、スレッドを同期状態にさせる等。
- ThreadManager
[概要]
スレッド管理情報を保持する。
[メンバ]
現存するスレッド数、現在稼動中のスレッド等。
[メソッド]
スレッドを起こす、スレッドを終了させる、スレッドを分岐させるなど。
■備考
push, pop で値を積む積まない index(-1), pointer(0) の初期値のなど、
使い方が統一されていない。これで良いのだろうか?
以上
改版履歴
日付 作成 ファイル名
20060913 -MT- 2009091310