[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[tyndur-devel] [PATCH 03/11] kernel2: Maximale Stackgröße für Threads erhöht



* kernel2: 4k Stack insgesamt pro Thread sind schon arg wenig. Mit
  diesem Patch bleibt es dabei, dass wir mit 4k starten, aber es wird
  virtueller Speicher für 1 MB freigehalten. Die normale
  Stackvergrößerungsmagie funktioniert für jeden Thread und erlaubt den
  Threads, den vollen Platz zu nutzen wenn nötig.

  Wenn ein Thread mehr Platz braucht, wird das noch nicht abgefangen,
  sondern der Stack wächst einfach in den nächsten Stack hinein.

Signed-off-by: Kevin Wolf <kevin@xxxxxxxxxx>
---
 src/include/arch/i386/page.h   |    1 +
 src/kernel2/src/tasks/thread.c |    6 ++++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/include/arch/i386/page.h b/src/include/arch/i386/page.h
index a4ed66d..19d3dc3 100644
--- a/src/include/arch/i386/page.h
+++ b/src/include/arch/i386/page.h
@@ -52,6 +52,7 @@
 
 #define USER_STACK_START 0
 #define USER_STACK_SIZE 0x1000
+#define USER_MAX_STACK_SIZE 0x100000
 
 
 // Die Anzahl der Pages, die von n Bytes belegt werden.
diff --git a/src/kernel2/src/tasks/thread.c b/src/kernel2/src/tasks/thread.c
index b916e74..a2d01bf 100644
--- a/src/kernel2/src/tasks/thread.c
+++ b/src/kernel2/src/tasks/thread.c
@@ -126,9 +126,11 @@ pm_thread_t* pm_thread_create(pm_process_t* process, vaddr_t entry)
 
         thread->user_stack_bottom = (vaddr_t) (isf->rsp - USER_STACK_SIZE);
     #endif
-    
+
+    /* TODO Irgendeine Art von Größenbeschränkung mit Guard Page, dass der
+     * Stack nicht in den nächsten Stack reinwächst  */
     process->next_stack = (vaddr_t) ((uintptr_t) process->next_stack - 
-        USER_STACK_SIZE);
+        USER_MAX_STACK_SIZE);
     
     // Page fuer den Userspace-Stack allozieren
     paddr_t stack_phys = pmm_alloc(NUM_PAGES(USER_STACK_SIZE));
-- 
1.7.7