changeset 368:126f90e8582c

change TaskManager
author aaa
date Mon, 27 Jul 2009 18:26:50 +0900
parents c7a4818cdfcb
children 03ae2929c931
files TaskManager/kernel/memory/MemList.cc TaskManager/kernel/memory/MemList.cpp TaskManager/kernel/memory/MemList.h TaskManager/kernel/memory/MemorySegment.h TaskManager/kernel/ppe/TaskManager.cc TaskManager/kernel/ppe/TaskManager.h example/MemList/Makefile.def example/MemList/Makefile.macosx example/MemList/main.cc
diffstat 9 files changed, 119 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/kernel/memory/MemList.cc	Mon Jul 27 18:26:50 2009 +0900
@@ -0,0 +1,59 @@
+/*!
+  MemList は空にならない。最低1個は要素が入っていて
+  1個目は特別扱いする。getFirst すると first->next を返す
+ */
+
+#include "MemorySegment.h"
+
+/*!
+  最初の1個は特別扱いなので、それの後に追加していく
+ */
+void
+addFirst(MemorySegment* e)
+{
+    e->prev = first;
+    e->next = first->next;
+    first->next->prev = e;
+    first->next = e;
+}
+
+void
+addLast(MemorySegment* e)
+{
+    e->next = first;
+    e->prev = last;
+    last->next = e;
+    last = e;
+}
+
+MemorySegment
+getFirst()
+{
+    return first->next;
+}
+
+MemorySegment
+getLast()
+{
+    return last;
+}
+
+int
+remove(MemorySegment* e)
+{
+    e->prev->next = e->next;
+    if (e->next != NULL) {
+	e->next->prev = e->prev;
+    }
+    e->prev = NULL;
+    e->next = NULL;
+
+    return 1;
+}
+
+void
+moveToFirst(MemorySegment* e)
+{
+    remove(e);
+    addFirst(e);
+}
--- a/TaskManager/kernel/memory/MemList.cpp	Mon Jul 27 16:18:17 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-MemList* 
-createMeamList(uint32 size, uint32 count)
-{
-    // ?
-    MemList* mlist = 
-	smanager->locate(sizeof(MemorySegment));
-    return mlist;
-}
-
-void
-addFirst(MemorySegment* e)
-{
-    e->next = this->first;
-    this->first->prev = e;
-    first = e;
-}
-
-void
-addLast(MemorySegment* e)
-{
-    e->prev = this->last;
-    this->last->next = e;
-    last = e;
-}
-
-MemorySegment
-getFirst()
-{
-    return this->first;
-}
-
-MemorySegment
-getLast()
-{
-    return this->last;
-}
-
-boolean
-remove(MemorySegment* e)
-{
-    MemorySegment* p = e;
-    p->prev->next = p->next;
-    p->next->prev = p->prev;
-    p->prev = NULL;
-    p->next = NULL;
-}
-
-void
-moveToFirst(MemorySegment* e)
-{
-    remove(e);
-    addFirst(e);
-}
--- a/TaskManager/kernel/memory/MemList.h	Mon Jul 27 16:18:17 2009 +0900
+++ b/TaskManager/kernel/memory/MemList.h	Mon Jul 27 18:26:50 2009 +0900
@@ -1,12 +1,22 @@
+#include "MemorySegment.h"
+
 class MemList {
     MemorySegment* first;
     MemorySegment* last;
+    
+    // TaskManager 側で create する
+    //MemList* createMemList(uint32 size, uint32 count);
+    MemList(MemorySegment* ms) {
+	first = last = ms;
+	ms->next = ms;
+	ms->prev = ms;
+    }
 
-    MemList* createMemList(uint32 size, uint32 count);
     void addFirst(MemorySegment* e);
     void addLast(MemorySegment* e);
     MemorySegment* getFirst();
     MemorySegment* getLast();
-    boolean remove(MemorySegment* e);
+    int remove(MemorySegment* e);
     void moveToFirst(MemorySegment* e); // or use();    
-}
+};
+
--- a/TaskManager/kernel/memory/MemorySegment.h	Mon Jul 27 16:18:17 2009 +0900
+++ b/TaskManager/kernel/memory/MemorySegment.h	Mon Jul 27 18:26:50 2009 +0900
@@ -1,7 +1,12 @@
+#ifndef MEMLIST
+#define MEMLIST
+
 class MemorySegment {
     MemorySegment* next;
     MemorySegment* prev;
     uint64 size;
     uint64 address;
     uint64 dummy;
-}
+};
+
+#endif
--- a/TaskManager/kernel/ppe/TaskManager.cc	Mon Jul 27 16:18:17 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManager.cc	Mon Jul 27 18:26:50 2009 +0900
@@ -85,3 +85,28 @@
 {
     return gen_random->getData();
 }
+
+/*!
+  @param [size] リストの要素1つのサイズ
+  @param [count] 要素数 
+  @return allocate した領域のポインタ
+
+ */
+MemList*
+createMemList(uint32 size, uint32 count)
+{
+    uint32 head_size = 
+	round_up16(sizeof(MemorySegment));	
+    uint32 seg_size = 
+	round_up16(head_size+size);    
+    void* mseg = m_impl->allocate(seg_size*count);
+    MemList* mlist = new MemList((MemorySegment*)mseg);
+
+    for(int i = 1; i < count; i++) {
+	MemorySegment* next = (MemorySegment*)(mseg+seg_size*i);
+	mlist->addLast(next);
+    }
+
+    return mlist;
+}
+
--- a/TaskManager/kernel/ppe/TaskManager.h	Mon Jul 27 16:18:17 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManager.h	Mon Jul 27 18:26:50 2009 +0900
@@ -3,6 +3,7 @@
 
 #include "TaskManagerImpl.h"
 #include "Random.h"
+#include "MemList.h"
 
 class TaskManager {
 public:
@@ -22,6 +23,7 @@
     void set_TMend(void (*endf)(void));
     int get_cpuNum(void);
     int get_random(void);
+    MemList* createMemList(uint32 size, uint32 count);
 
     /* functions */
     void init(void);
--- a/example/MemList/Makefile.def	Mon Jul 27 16:18:17 2009 +0900
+++ b/example/MemList/Makefile.def	Mon Jul 27 18:26:50 2009 +0900
@@ -2,7 +2,6 @@
 
 # include/library path
 # ex: macosx
-#CERIUM = /Users/gongo/Source/Cerium
 
 # ex: linux/ps3
 CERIUM = ../../../Cerium
--- a/example/MemList/Makefile.macosx	Mon Jul 27 16:18:17 2009 +0900
+++ b/example/MemList/Makefile.macosx	Mon Jul 27 18:26:50 2009 +0900
@@ -3,7 +3,7 @@
 SRCS_TMP = $(wildcard *.cc)
 SRCS_EXCLUDE =  # ե
 SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
-OBJS = $(SRCS:.cc=.o)
+OBJS = $(SRCS:.cc=.o) MemList.o MemorySegment.o
 
 TASK_DIR  = ppe
 TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc)
@@ -18,7 +18,12 @@
 .cc.o:
 	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
 
-all: $(TARGET)
+all: $(TARGET) 
+
+MemList.o: ${CERIUM}/kernel/memory/MemList.cc
+
+MemorySegment.o: ${CERIUM}/kernel/memory/MemorySegment.cc
+	          
 
 $(TARGET): $(OBJS) $(TASK_OBJS)
 	$(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS)
--- a/example/MemList/main.cc	Mon Jul 27 16:18:17 2009 +0900
+++ b/example/MemList/main.cc	Mon Jul 27 18:26:50 2009 +0900
@@ -3,21 +3,21 @@
 #include <string.h>
 #include "TaskManager.h"
 #include "Func.h"
+#include "MemList.h"
+#include "MemorySegment.h"
 
-extern void task_init(void);
-
-static int count = 1;
+//extern void task_init(void);
 
 extern TaskManager *manager;
 
 const char *usr_help_str = "Usage: ./hello [-cpu spe_num] [-count N]\n\
-  -cpu    Number of SPE (default 1) \n\
+  -cpu    Number of SPE (default 1) \n				      \
   -count  Number of task is print \"Hello, World!!\"";
 
 // get のテストとか
 
 int
-main(int argc, char *argv[])
+TMmain(int argc, char *argv[])
 {
     uint32 size = 128;
     uint32 count = 64;
@@ -26,10 +26,8 @@
     MemList* freelist = createMemList(size, count);
     
     // 配列!
-    for (int i = 0; i < count; i++) {
-	MemorySegment* e;
-	active->addFirst()
-    }		
+    MemorySegment* e;
+    active->addFirst(e);    
     
     return 0;
 }