view TaskManager/Cell/CellBufferManager.cc @ 65:519d24aa7ac8

*** empty log message ***
author gongo
date Sun, 17 Feb 2008 18:06:53 +0900
parents 54355e641172
children 178459e03f5c
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include "CellBufferManager.h"
#include "CellTaskListInfo.h"

void
CellBufferManager::init(void)
{
    BufferManager::init();

    cellTaskListImpl = new CellTaskListInfo;
    machineTaskList  = new TaskListPtr[machineNum];

    for (int i = 0; i < machineNum; i++) {
	machineTaskList[i] = cellTaskListImpl->create();
    }
}

/**
 * task の cpu type によって
 * それぞれの cpu に対応する active queue に task を追加する。
 */
void
CellBufferManager::append_activeTask(HTaskPtr task)
{
    TaskQueuePtr q;

    q = taskQueueImpl->create(task);
    if (task->cpu_type == CPU_PPE) {
	activeTaskQueue = TaskQueueInfo::append(activeTaskQueue, q);
    } else {
	speActiveTaskQueue = TaskQueueInfo::append(speActiveTaskQueue, q);
    }
}

#if 0 // 継承するかもしれないので保存
void
CellBufferManager::append_waitTask(HTaskPtr task)
{
    TaskQueuePtr q;

    q = taskQueueImpl->create(task);
    waitTaskQueue = taskQueueImpl->append(waitTaskQueue, q);
}

TaskListPtr
CellBufferManager::get_available_taskList(void)
{
    TaskListPtr list, q;

    list = machineTaskList[0];

    while (list->next) list = list->next;

    if (list->length < TASK_MAX_SIZE) {
	return list;
    } else {
	q = cellTaskListImpl->create();
	machineTaskList[0] = cellTaskListImpl->append(machineTaskList[0], q);
	return q;
    }
}

void
CellBufferManager::clear_taskList(void)
{
    TaskListPtr p, p1;

    machineTaskList[0]->length = 0;

    p = machineTaskList[0]->next;
    while (p) {
	p1 = p;
	p = p->next;
	cellTaskListImpl->free(p1);
    }
}
#endif