Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/schedule/Scheduler.cc @ 437:fd44dbd049aa
overlay...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 24 Sep 2009 22:40:58 +0900 |
parents | 799071db126e |
children | 95c0457a7d31 |
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/Scheduler.cc Thu Sep 24 21:09:27 2009 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.cc Thu Sep 24 22:40:58 2009 +0900 @@ -331,15 +331,18 @@ void Scheduler::allocate_code_segment(int count, int size) { + // 既に overlay 領域があるので、それを追加する必要がある... code_segment_pool = createMemList(count, size); } static void load_task(Scheduler *m, int task_id) { + fprintf(stderr,"loadng task id %d\n",task_id); MemorySegment *s = m->get_segment( task_list[task_id].location, - m->code_segment_pool); + m->code_segment_pool, + task_list[task_id].end-task_list[task_id].location); task_list[task_id].segment = s; } @@ -351,6 +354,7 @@ static void wait_load(Scheduler *m, int task_id) { + fprintf(stderr,"wait load task id %d\n",task_id); // wait for code segment load m->wait_segment(task_list[task_id].segment); // calcurate call address @@ -433,6 +437,13 @@ MemorySegment * Scheduler::get_segment(memaddr addr, MemList *m) { + return get_segment(addr, m, m->size); +} + +MemorySegment * +Scheduler::get_segment(memaddr addr, MemList *m, int size) +{ + // memory segment のsizeをoverride する場合がある MemorySegment *s = hash->get(addr); if (s) { /* 既に load されている */ @@ -447,7 +458,7 @@ memaddr old_addr = s->address; s->tag = get_tag(); dma_load(s->data, addr, - s->size, s->tag); + size, s->tag); /* 前のをhashから削除 */ hash->remove(old_addr); /* 新しいaddress を登録 */