diff TaskManager/kernel/schedule/Scheduler.cc @ 373:eab18aa0c7f6

MemList not working
author kazz@kazzone.cr.ie.u-ryukyu.ac.jp
date Fri, 31 Jul 2009 17:52:27 +0900
parents b89ba1d96fff
children 6113af8f183b
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/Scheduler.cc	Fri Jul 31 01:44:06 2009 +0900
+++ b/TaskManager/kernel/schedule/Scheduler.cc	Fri Jul 31 17:52:27 2009 +0900
@@ -25,11 +25,11 @@
     init_impl();
 
     for (int i = 0; i < 2; i++) {
-	buff_taskList[i]    = (TaskListPtr)allocate(sizeof(TaskList));
-	buff_inListData[i]  = (ListDataPtr)allocate(sizeof(ListData));
-	buff_outListData[i] = (ListDataPtr)allocate(sizeof(ListData));
+        buff_taskList[i]    = (TaskListPtr)allocate(sizeof(TaskList));
+        buff_inListData[i]  = (ListDataPtr)allocate(sizeof(ListData));
+        buff_outListData[i] = (ListDataPtr)allocate(sizeof(ListData));
     }
-    
+
     buffFlag_taskList = 0;
     buffFlag_inListData = 0;
     buffFlag_outListData = 0;
@@ -37,13 +37,13 @@
 
     // bzero でもいいけど
     for (int i = 0; i < MAX_GLOBAL_AREA; i++) {
-	globalList[i] = NULL;
+        globalList[i] = NULL;
     }
 
     for (int i = 0; i < MAX_MAINMEM_AREA; i++) {
-	mainMemList[i] = NULL;
+        mainMemList[i] = NULL;
     }
-    
+
 
     taskGroup = new TaskGroup;
     renewTop_taskList = NULL;
@@ -61,15 +61,15 @@
 
     // main loop
     do {
-	__debug("----------\n");
-	task3->write();
-	task2->exec();
-	task1->read();
+        __debug("----------\n");
+        task3->write();
+        task2->exec();
+        task1->read();
 
-	taskTmp = task3;
-	task3 = task2;
-	task2 = task1;
-	task1 = task1->next(this, taskTmp);
+        taskTmp = task3;
+        task3 = task2;
+        task2 = task1;
+        task1 = task1->next(this, taskTmp);
     } while (task1);
 
     delete task3;
@@ -133,14 +133,14 @@
 Scheduler::get_renewListBuf(void)
 {
     if (renewCur_taskList && renewCur_taskList->length < TASK_MAX_SIZE) {
-	return renewCur_taskList;
+        return renewCur_taskList;
     } else {
-	TaskListPtr newList = (TaskListPtr)allocate(sizeof(TaskList));
-	newList->length = 0;
-	newList->next = NULL;
-	renewTop_taskList = TaskList::append(renewTop_taskList, newList);
-	renewCur_taskList = newList;
-	return newList;
+        TaskListPtr newList = (TaskListPtr)allocate(sizeof(TaskList));
+        newList->length = 0;
+        newList->next = NULL;
+        renewTop_taskList = TaskList::append(renewTop_taskList, newList);
+        renewCur_taskList = newList;
+        return newList;
     }
 }
 
@@ -156,16 +156,16 @@
 Scheduler::get_nextRenewTaskList(void)
 {
     if (renewTop_taskList) {
-	TaskListPtr list  = renewTop_taskList;
-	renewTop_taskList = renewTop_taskList->next;
-	renewCur_taskList = NULL;
+        TaskListPtr list  = renewTop_taskList;
+        renewTop_taskList = renewTop_taskList->next;
+        renewCur_taskList = NULL;
 
-	list->next = NULL;
-	SchedTaskList *sched
-	    = createSchedTaskList((uint32)list, this, SCHED_TASKLIST_RENEW);
-	return sched;
+        list->next = NULL;
+        SchedTaskList *sched
+            = createSchedTaskList((uint32)list, this, SCHED_TASKLIST_RENEW);
+        return sched;
     } else {
-	return NULL;
+        return NULL;
     }
 }
 
@@ -191,7 +191,7 @@
 Scheduler::get_backupTaskList(void)
 {
     TaskListPtr ret = bak_curTaskList;
-    
+
     bak_curTaskList = NULL;
     return ret;
 }
@@ -297,6 +297,12 @@
 }
 
 void
+Scheduler::global_set(int id, void *addr)
+{
+    globalList[id] = addr;
+}
+
+void
 Scheduler::global_free(int id)
 {
     free(globalList[id]);
@@ -323,3 +329,27 @@
 {
     task_list[cmd] = task;
 }
+
+/*!
+  @param [size] リストの要素1つのサイズ
+  @param [count] 要素数
+  @return allocate した領域のポインタ
+
+ */
+MemList*
+Scheduler::createMemList(int size, int count)
+{
+    uint32 head_size = round_up16(sizeof(MemorySegment));
+    uint32 seg_size = round_up16(head_size+size);
+    char* mseg = (char*)allocate(seg_size*count);
+    MemList* mlist = new MemList((MemorySegment*)mseg);
+
+    for(int i = 0; i < count; i++) {
+        MemorySegment* next = (MemorySegment*)(mseg+seg_size*i);
+        char* data = (char*)next+head_size;
+        next->data = (void*)data;
+        mlist->addLast(next);
+    }
+
+    return mlist;
+}