diff --git a/src/sys/include/ubixos/schedule.h b/src/sys/include/ubixos/schedule.h index da16dc7..fe23056 100755 --- a/src/sys/include/ubixos/schedule.h +++ b/src/sys/include/ubixos/schedule.h @@ -32,6 +32,12 @@ #define INACTIVE 1 #define AVAILABLE 0 +// Possible states for tasks to be in. +enum { + STARTING = 0, READY, RUNNING, SUSPEND, SLEEP, BLOCK, + MSGREPLY, MSGWAIT, JOIN, EXITING +}; + struct tssStruct { short back_link; short back_link_reserved; @@ -100,12 +106,10 @@ void kpanic(char *); void initScheduler(); -int findTask(); +struct taskStruct * findTask(); void timerInt(); void schedule(); -// Stuff for queues...commenting out until I get a chance to test (so I don't break stuff). - extern const uint32_t schedMagicNumber; struct waitQueueNode @@ -137,6 +141,4 @@ void waitQueueInsert(waitQueue_t *, void *, int); void * waitQueueRemove(waitQueue_t *, int *); - - #endif diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index 92dd015..dfafde2 100755 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -33,9 +33,11 @@ int fd=0,i=0,x=0,eStart=0,pid; char *binarySpace = (char *)0x7C0000; char *newLoc; + struct taskStruct * newProcess; elfHeader *binaryHeader = (elfHeader *)0x7C0000; elfProgramheader *programHeader; - pid = findTask(); + newProcess = findTask(); + pid = newProcess->id; pdn = (uLong *)allocPage(); for (i=0;i<1024;i++) { pdn[i] = 0x0; diff --git a/src/sys/kernel/fork.c b/src/sys/kernel/fork.c index a40002c..0f6d973 100755 --- a/src/sys/kernel/fork.c +++ b/src/sys/kernel/fork.c @@ -29,7 +29,8 @@ /* Main Fork Function */ void sysFork() { - pid_t cPid = findTask(); + struct taskStruct * newProcess = findTask(); + pid_t cPid = newProcess->id; uLong *pageDirsrc,*pageTablesrc,*stackSrc,*pageDirdst,*pageTabledst,*stackDst; int i,x,*ret; uChar *src,*dst; diff --git a/src/sys/kernel/schedule.c b/src/sys/kernel/schedule.c index 7e670e5..9cae3d0 100755 --- a/src/sys/kernel/schedule.c +++ b/src/sys/kernel/schedule.c @@ -77,11 +77,11 @@ } /* Finds A Free Task */ -int findTask() { +struct taskStruct * findTask() { int i; for (i=0;i