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 を登録 */