view memo.txt @ 2:803d6bf22e6d default tip

second commit. it's far to complete..
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Dec 2009 16:19:56 +0900
parents 5b089096921f
children
line wrap: on
line source


Task
	o 一つ一つの仕事を表す
	o それぞれが別のTaskに対して依存関係を持っている
	o 一つのTaskは複数のコードセグメントの連なり
	o コードセグメント毎にスケジューラに処理を渡したい
	o gotoのリフレクションは今はマクロで?
	* ユーザーインターフェイス
		o wait_for	(using set_depend of TM)
		o set_cpu		(optional)
		o spawn

TaskManager
	o 実行環境によらないおなじ処理
	o Taskの依存関係をもとに実行に移す
	o 実際の実行はSchedulerに任せる
	o activeTaskQとwaitingTaskQをもつ
	o SchedulerからTaskの終了通知を受け取る
	o 通知を受けたらそのTaskに依存しているTaskの依存を解消
	o 依存がなくなったタスクはactiveTaskQに移される
	o 実行中のTaskがなく, activeTaskQが0なら終了?
	* ユーザーインターフェイス
		o malloc
		o create_task
		o ?set_depend	(used by wait_for of Task)
		o spawn_task	(used by spawn of Task)

TaskScheduler
	o TaskManagerに指示されたTaskを実際に実行する
	o CPU管理
	o Taskが終了したらTaskManagerに通知する
	* AbstractLayerからのインターフェイス
		o initScheduler()
		o addCode(SchedTask *)
		o selectCode()

AbstractLayer
	o TaskManagerとSchedulerの中間レイヤ
	o 実行環境ごとに全部違う Cell, Fifo, pthread, cluster..
	o TaskManagerに指示されたタスクをSchedulerに渡す
	o その際、clusterやCellならデータの転送処理などを受け持つ
	o Schedulerから終了したタスクの通知も受け付ける
	* Schedulerとのインタフェイス
		-> checkNewCode()
		-> exitCode()
		<- initScheduler()
		<- addCode()
		<- selectCode()
	* TaskManagerとのインタフェイス
		o checkAction()
			-> TM::addNewTask()
			-> TM::finishTask()
			-> TM::noAction()
		o executeTask(Task*) 
			-> TM::executeTaskret() // なんかいい名前を…
	* Userインタフェイス(Fifoやpthreadの場合は直接TaskManagerでもいい)
		o newTask()
		o spawn()
		o setData()
		o allocate()

MailManager
	o Schedulerとおなじく環境依存
	o TaskManagerに終了通知を行う


ユーザはTaskのコードセグメントを定義すればいい