Mercurial > hg > Members > nobuyasu > CbC
changeset 32:e3b6e2eef223 draft
hg move scheduler.cbc to scheduler.c
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 09 Oct 2012 17:34:59 +0900 |
parents | babfb86f3770 |
children | 3946f8d26710 |
files | Scheduler/Makefile Scheduler/scheduler.c Scheduler/scheduler.cbc |
diffstat | 3 files changed, 201 insertions(+), 207 deletions(-) [+] |
line wrap: on
line diff
--- a/Scheduler/Makefile Tue Oct 09 15:55:44 2012 +0900 +++ b/Scheduler/Makefile Tue Oct 09 17:34:59 2012 +0900 @@ -1,12 +1,12 @@ -CC = cbc-gcc-4.6.0 -#CC = gcc +#CC = cbc-gcc-4.6.0 +CC = gcc #CFLAGS = -O3 CFLAGS = -O0 -g3 PROG = scheduler all: $(PROG) -scheduler: scheduler.cbc +scheduler: scheduler.c $(CC) $(CFLAGS) -o $@ $^ clean:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Scheduler/scheduler.c Tue Oct 09 17:34:59 2012 +0900 @@ -0,0 +1,198 @@ +#include <stdio.h> +#include <stdlib.h> +#include "types.h" + +#define MAX_USER_TASK 100 +#define MAX_SYSTEM_TASK 2 +#define MAX_TASK_OBJECT MAX_USER_TASK + MAX_SYSTEM_TASK +#define DEFAULT_ALIGNMENT 16 +#define MAX_GLOBAL_AREA 32 +#define MAX_MAINMEM_AREA 32 + + +typedef int (*task_object_run)(); +typedef struct task_object task_object; +typedef struct main_scheduler main_scheduler; +typedef struct task_manager_impl task_manager_impl; +typedef struct task_manager task_manager; + +struct task_object +{ + memaddr location; + memaddr end; + uint32 entry_offset; + + task_object_run run; + void (*load)(); + void (*wait)(); +}; + +task_object task_list[MAX_TASK_OBJECT]; + +struct main_scheduler +{ + int id; + task_manager_impl *m_impl; + main_scheduler *scheduler; + void* global_list[MAX_GLOBAL_AREA]; + memaddr main_mem_list[MAX_MAINMEM_AREA]; + + void (*init)(); // init_scheduler function. + void (*set_manager)(); // set_manager function. + void (*init_impl)(); // Reference to Scheduler::init_impl method. + void (*main_mem_alloc)(); + void (*mail_write_from_host)(); + void (*mail_read_from_host)(); + void (*has_mail_from_host)(); +}; + +/* task_manager_impl is FifoTaskManagerImpl now. */ +struct task_manager_impl +{ + main_scheduler *scheduler; + int machine_num; + void (*init)(); + void* (*create_task)(); + void* (*allocate)(); +}; + +struct task_manager +{ + int machine_num; + void (*init)(); + task_manager_impl *m_impl; + void (*allocate)(); +}; + +int null_run() +{ + printf("null_run\n"); + return 0; +} + +void null_load() +{ + printf("null_load\n"); + return; +} +void init_scheduler(task_manager_impl *m) +{ + main_scheduler *scheduler = m->scheduler; + + int i = 0; + for (i=0; i<MAX_TASK_OBJECT; i++) + { + task_list[i].run = null_run; + task_list[i].load = null_load; + task_list[i].wait = null_load; + } + + scheduler->set_manager(m); + + for (i=0; i<MAX_GLOBAL_AREA; i++) { + scheduler->global_list[i] = NULL; + } + + for (i=0; i<MAX_MAINMEM_AREA; i++) { + scheduler->main_mem_list[i] = (memaddr)NULL; + } + +} + +void set_manager(task_manager_impl *impl, main_scheduler *scheduler) +{ + scheduler->m_impl = impl; +} + +main_scheduler *create_main_scheduler() +{ + main_scheduler *scheduler = malloc(sizeof(main_scheduler)); + scheduler->init = init_scheduler; + scheduler->set_manager = set_manager; + return scheduler; +} + +/* Reference to FifoTaskManagerImpl::init */ +void init_impl(task_manager_impl *m_impl) +{ + m_impl->scheduler = create_main_scheduler(); + main_scheduler *scheduler = m_impl->scheduler; + scheduler->init(m_impl); + scheduler->id = 0; +// m_impl->set_scheduler(main_scheduler); +} + +void* create_task(task_manager *manager) +{ + +} + +/* Reference to TaskManagerImpl::allocate */ +void* memory_allocate(int size, int alignment) +{ + void *buff = 0; + if (size == 0) return 0; + posix_memalign(&buff, DEFAULT_ALIGNMENT, size); + if (buff == 0) + printf("Can't allocate memory\n"); + return buff; +} + +task_manager_impl* create_impl(int num) +{ + task_manager_impl *impl = malloc(sizeof(task_manager_impl)); +#ifdef __CERIUM_PARALLEL__ + if (num == 0) num = 1; +#else + num = 0; +#endif + impl->machine_num = num; + impl->init = init_impl; + impl->allocate = memory_allocate; + impl->create_task = create_task; + return impl; +} + +void init_task_manager(task_manager *manager) +{ + manager->m_impl = create_impl(manager->machine_num); + task_manager_impl *m_impl = manager->m_impl; + m_impl->init(m_impl); +// m_impl->systask_init(); +} + +void allocate_task_manager(task_manager *manager, int size) +{ + manager->m_impl->allocate(size); +} + +task_manager* create_manager(int num) +{ + task_manager* manager = malloc(sizeof(task_manager)); + manager->machine_num = num; + manager->init = init_task_manager; + manager->allocate = allocate_task_manager; + return manager; +} + +void free_manager(task_manager *manager) +{ + free(manager); +} + +int main(int argc, char* argv[]) +{ + int machine_num = 1; + task_manager *manager = create_manager(machine_num); + manager->init(manager); + + +// free_manager(manager); + return 0; +} + + + + + +
--- a/Scheduler/scheduler.cbc Tue Oct 09 15:55:44 2012 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,204 +0,0 @@ -#include <stdio.h> -#include <stdlib.h> -#include "types.h" - -#define MAX_USER_TASK 100 -#define MAX_SYSTEM_TASK 2 -#define MAX_TASK_OBJECT MAX_USER_TASK + MAX_SYSTEM_TASK -#define DEFAULT_ALIGNMENT 16 -#define MAX_GLOBAL_AREA 32 -#define MAX_MAINMEM_AREA 32 - - -typedef int (*task_object_run)(); -typedef struct task_object task_object; -typedef struct main_scheduler main_scheduler; -typedef struct task_manager_impl task_manager_impl; -typedef struct task_manager task_manager; - -struct task_object -{ - memaddr location; - memaddr end; - uint32 entry_offset; - - task_object_run run; - void (*load)(); - void (*wait)(); -}; - -task_object task_list[MAX_TASK_OBJECT]; - -struct main_scheduler -{ - int id; - task_manager_impl *manager; - main_scheduler *scheduler; - void* global_list[MAX_GLOBAL_AREA]; - memaddr main_mem_list[MAX_MAINMEM_AREA]; - - void (*init)(); // init_scheduler function. - void (*set_manager)(); // set_manager function. - void (*init_impl)(); // Reference to Scheduler::init_impl method. - void (*main_mem_alloc)(); - void (*mail_write_from_host)(); - void (*mail_read_from_host)(); - void (*has_mail_from_host)(); -}; - -/* task_manager_impl is FifoTaskManagerImpl now. */ -struct task_manager_impl -{ - main_scheduler *scheduler; - int machine_num; - void (*init)(); - void* (*create_task)(); - void* (*allocate)(); -}; - -struct task_manager -{ - int machine_num; - void (*init)(); - task_manager_impl *m_impl; - void (*allocate)(); -}; - -int null_run() -{ - printf("null_run\n"); - return 0; -} - -void null_load() -{ - printf("null_load\n"); - return; -} -void init_scheduler(task_manager_impl *m) -{ - main_scheduler *scheduler = m->scheduler; - - int i = 0; - for (i=0; i<MAX_TASK_OBJECT; i++) - { - task_list[i].run = null_run; - task_list[i].load = null_load; - task_list[i].wait = null_load; - } - - scheduler->set_manager(m); - - for (i=0; i<MAX_GLOBAL_AREA; i++) { - scheduler->global_list[i] = NULL; - } - - for (i=0; i<MAX_MAINMEM_AREA; i++) { - scheduler->main_mem_list[i] = (memaddr)NULL; - } - -} - -void set_manager(task_manager_impl *impl, main_scheduler *scheduler) -{ - scheduler->manager = impl; -} - -main_scheduler *create_main_scheduler() -{ - main_scheduler *scheduler = malloc(sizeof(main_scheduler)); - scheduler->init = init_scheduler; - scheduler->set_manager = set_manager; - return scheduler; -} - -/* Reference to FifoTaskManagerImpl::init */ -void init_impl(task_manager_impl *m_impl) -{ - m_impl->scheduler = create_main_scheduler(); - main_scheduler *scheduler = m_impl->scheduler; - scheduler->init(m_impl); - scheduler->id = 0; -// m_impl->set_scheduler(main_scheduler); - - -} - -void* create_task(task_manager *manager) -{ - -} - -/* Reference to TaskManagerImpl::allocate */ -void* memory_allocate(int size, int alignment) -{ - void *buff = 0; - if (size == 0) return 0; - posix_memalign(&buff, DEFAULT_ALIGNMENT, size); - if (buff == 0) - printf("Can't allocate memory\n"); - return buff; -} - -task_manager_impl* create_impl(int num) -{ - task_manager_impl *impl = malloc(sizeof(task_manager_impl)); -#ifdef __CERIUM_PARALLEL__ - if (num == 0) num = 1; -#else - num = 0; -#endif - impl->machine_num = num; - impl->init = init_impl; - impl->allocate = memory_allocate; - impl->create_task = create_task; - return impl; -} - -void init_task_manager(task_manager *manager) -{ - manager->m_impl = create_impl(manager->machine_num); - task_manager_impl *m_impl = manager->m_impl; - m_impl->init(manager->machine_num); -// m_impl->systask_init(); -} - -void allocate_task_manager(task_manager *manager, int size) -{ - manager->m_impl->allocate(size); -} - -task_manager* create_manager(int num) -{ - task_manager* manager = malloc(sizeof(task_manager)); - manager->machine_num = num; - manager->init = init_task_manager; - manager->allocate = allocate_task_manager; - return manager; -} - -void free_manager(task_manager *manager) -{ - - free(manager); -} - -int main(int argc, char* argv[]) -{ - int machine_num = 1; - task_manager *manager = create_manager(machine_num); - manager->init(manager); - - - - - -// free_manager(manager); - return 0; -} - - - - - -