summaryrefslogtreecommitdiff
path: root/Source/Kernel/TaskManager
diff options
context:
space:
mode:
authorAlexis211 <alexis211@gmail.com>2009-10-17 23:22:41 +0200
committerAlexis211 <alexis211@gmail.com>2009-10-17 23:22:41 +0200
commit7dc8c19f7d6220c9e3dac43796faf77c4f11974f (patch)
tree7a63b88ed80583198776ce706f85d528eff28b16 /Source/Kernel/TaskManager
parente35e95188674ae4802df2a511825218253d01d2c (diff)
downloadMelon-7dc8c19f7d6220c9e3dac43796faf77c4f11974f.tar.gz
Melon-7dc8c19f7d6220c9e3dac43796faf77c4f11974f.zip
Melon now loads a simple ASM application out of the ramfs
The format is very simple, but an ELF loader is planned.
Diffstat (limited to 'Source/Kernel/TaskManager')
-rw-r--r--Source/Kernel/TaskManager/Process.class.cpp3
-rw-r--r--Source/Kernel/TaskManager/Process.class.h1
-rw-r--r--Source/Kernel/TaskManager/Task.ns.cpp2
-rw-r--r--Source/Kernel/TaskManager/Task.wtf.asm13
-rw-r--r--Source/Kernel/TaskManager/Thread.class.cpp1
5 files changed, 4 insertions, 16 deletions
diff --git a/Source/Kernel/TaskManager/Process.class.cpp b/Source/Kernel/TaskManager/Process.class.cpp
index cf8f00a..9fdad96 100644
--- a/Source/Kernel/TaskManager/Process.class.cpp
+++ b/Source/Kernel/TaskManager/Process.class.cpp
@@ -42,6 +42,7 @@ Process::Process(String cmdline, u32int uid) {
m_state = P_RUNNING;
m_uid = uid;
m_vt = Task::currProcess()->getVirtualTerminal();
+ m_fileDescriptors = 0;
//Create page directory and user heap
m_pagedir = new PageDirectory(kernelPageDirectory);
m_pagedir->switchTo();
@@ -65,7 +66,7 @@ void Process::exit() {
iter->v()->close(false);
delete iter->v();
}
- delete m_fileDescriptors; //Will recursively delete whole list
+ if (m_fileDescriptors != 0) delete m_fileDescriptors; //Will recursively delete whole list
m_state = P_FINISHED;
}
diff --git a/Source/Kernel/TaskManager/Process.class.h b/Source/Kernel/TaskManager/Process.class.h
index ac9614e..73421a9 100644
--- a/Source/Kernel/TaskManager/Process.class.h
+++ b/Source/Kernel/TaskManager/Process.class.h
@@ -61,6 +61,7 @@ class Process {
VirtualTerminal* getVirtualTerminal();
void setVirtualTerminal(VirtualTerminal* vt);
+ u32int getState() { return m_state; }
};
diff --git a/Source/Kernel/TaskManager/Task.ns.cpp b/Source/Kernel/TaskManager/Task.ns.cpp
index 1d1676e..437d5b4 100644
--- a/Source/Kernel/TaskManager/Task.ns.cpp
+++ b/Source/Kernel/TaskManager/Task.ns.cpp
@@ -141,6 +141,7 @@ void currThreadExitProceed(u32int errcode) {
}
void currentThreadExits(u32int errcode) { //Call currThreadExitProceed with a working stack (we use temp_stack)
+ asm volatile("cli");
u32int* stack = &temp_stack[TEMP_STACK_SIZE];
stack--;
*stack = errcode;
@@ -149,7 +150,6 @@ void currentThreadExits(u32int errcode) { //Call currThreadExitProceed with a wo
u32int esp = (u32int)(stack), ebp = (u32int)(stack + 1), eip = (u32int)currThreadExitProceed;
asm volatile(" \
- cli; \
mov %0, %%ebp; \
mov %1, %%esp; \
mov %2, %%ecx; \
diff --git a/Source/Kernel/TaskManager/Task.wtf.asm b/Source/Kernel/TaskManager/Task.wtf.asm
index 2e5b9f8..36c1ade 100644
--- a/Source/Kernel/TaskManager/Task.wtf.asm
+++ b/Source/Kernel/TaskManager/Task.wtf.asm
@@ -49,16 +49,3 @@ copy_page_physical:
ret
-[GLOBAL sample_task]
-sample_task:
- mov eax, 0x00000001 ;temporarily defined as syscall id for writing one char to screen
- mov ebx, 'a' ;loopingly write a's to screen
- int 64
- mov eax, 0x00000002 ;temporary syscall for sleeping
- mov ebx, 20 ;20ms
- int 64
- jmp sample_task
- int 66 ;finish task - will never happen since we have an infinite loop
-[GLOBAL sample_task_size]
-sample_task_size:
- dd sample_task_size - sample_task
diff --git a/Source/Kernel/TaskManager/Thread.class.cpp b/Source/Kernel/TaskManager/Thread.class.cpp
index 63d8160..8b4845e 100644
--- a/Source/Kernel/TaskManager/Thread.class.cpp
+++ b/Source/Kernel/TaskManager/Thread.class.cpp
@@ -75,7 +75,6 @@ Thread::~Thread() {
}
void Thread::setup(Process* process, thread_entry_t entry_point, void* data, bool isKernel) {
- DEBUG("new Thread :: setup");
m_isKernel = isKernel;
m_process = process;
m_kernelStack.addr = Mem::kalloc(STACKSIZE);