view TaskManager/kernel/ppe/TaskManager.cc @ 639:70c5c2d2eb24

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 19 Nov 2009 18:45:24 +0900
parents 0558abba673c
children d3afc8777daa
line wrap: on
line source

#include "TaskManager.h"
#include "Scheduler.h"

TaskManager::TaskManager(int num) : machineNum(num)
{
}

TaskManager::~TaskManager()
{
    delete m_impl;
}

/**
 * create_impl(int);
 *
 * [cell版] ../../Cell/CellTaskManagerImpl.cpp
 * [fifo版] ../../Fifo/FifoTaskManagerImpl.cpp
 * で定義されています。コンパイル時に
 *
 * % make cell ってすると cell 版が、
 * % make fifo ってすると fifo 版 がリンクされるようにしているので
 * それに応じて create_impl が返す値を変えています。
 * cell だったら CellManagerImpl, fifo だったら FifoManagerImpl です。
 *
 * 今までは ifdef CELL とか書いてましたわ。どっちがいいかね
 *
 * てか、普通に TaskManagerImpl に関数持たせた方が早いか・・・?
 */
extern TaskManagerImpl* create_impl(int);

void
TaskManager::init()
{
    m_impl = create_impl(machineNum);
    m_impl->init();
    m_impl->systask_init();
}

void
TaskManager::finish()
{
    delete m_impl;
}

/**
 * @param [command]   Task executes method number
 *
 * @return this task
 */
HTaskPtr
TaskManager::create_task(int cmd)
{
    return m_impl->create_task(cmd);
}

HTaskPtr 
TaskManager::create_task(int cmd, memaddr r, long rs, memaddr w, long ws)
{
    return m_impl->create_task(cmd,r,rs,w,ws);
}


/**
 * TaskManaer 終了時に実行される関数の設定
 */
void
TaskManager::set_TMend(void (*endf)(TaskManager *manager))
{
    tm_end = endf;
}

void
TaskManager::run()
{
    m_impl->run();
}

void*
TaskManager::allocate(int size) {
    return m_impl->allocate(size);
}

int
TaskManager::get_cpuNum()
{
    return machineNum;
}

int
TaskManager::get_random()
{
    return random();
}

MemList*
TaskManager::createMemList(int size, int count)
{
    return get_scheduler()->createMemList(size, count);
}

Scheduler*
TaskManager::get_scheduler() {
    return m_impl->get_scheduler();
}

/* end */