# HG changeset patch # User aaa # Date 1248686810 -32400 # Node ID 126f90e8582cd4236cd9161c90e77c0956ee0fba # Parent c7a4818cdfcbf5a18c1a9787c82b674b12371a46 change TaskManager diff -r c7a4818cdfcb -r 126f90e8582c TaskManager/kernel/memory/MemList.cc --- /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); +} diff -r c7a4818cdfcb -r 126f90e8582c TaskManager/kernel/memory/MemList.cpp --- 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); -} diff -r c7a4818cdfcb -r 126f90e8582c TaskManager/kernel/memory/MemList.h --- 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(); -} +}; + diff -r c7a4818cdfcb -r 126f90e8582c TaskManager/kernel/memory/MemorySegment.h --- 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 diff -r c7a4818cdfcb -r 126f90e8582c TaskManager/kernel/ppe/TaskManager.cc --- 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; +} + diff -r c7a4818cdfcb -r 126f90e8582c TaskManager/kernel/ppe/TaskManager.h --- 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); diff -r c7a4818cdfcb -r 126f90e8582c example/MemList/Makefile.def --- 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 diff -r c7a4818cdfcb -r 126f90e8582c example/MemList/Makefile.macosx --- 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) diff -r c7a4818cdfcb -r 126f90e8582c example/MemList/main.cc --- 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 #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; }