From: Ben Pfaff Date: Tue, 28 Sep 2004 07:40:15 +0000 (+0000) Subject: Comments. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pintos-anon;a=commitdiff_plain;h=4b82f041ebf3300af81fc19cb62fd8915e26aa94 Comments. --- diff --git a/src/threads/thread.c b/src/threads/thread.c index afb2006..b1d25db 100644 --- a/src/threads/thread.c +++ b/src/threads/thread.c @@ -59,10 +59,11 @@ void schedule_tail (struct thread *prev); static tid_t allocate_tid (void); /* Initializes the threading system by transforming the code - that's currently running into a thread. Note that this is - possible only because the loader was careful to put the bottom - of the stack at a page boundary; it won't work in general. - Also initializes the run queue. + that's currently running into a thread. This can't work in + general and it is possible in this case only because loader.S + was careful to put the bottom of the stack at a page boundary. + + Also initializes the run queue and the tid lock. After calling this function, be sure to initialize the page allocator before trying to create any threads with diff --git a/src/threads/thread.h b/src/threads/thread.h index c055127..55ac232 100644 --- a/src/threads/thread.h +++ b/src/threads/thread.h @@ -47,11 +47,11 @@ typedef int tid_t; | | | | +---------------------------------+ - | magic | - | : | - | : | - | name | - | status | + | magic | + | : | + | : | + | name | + | status | 0 kB +---------------------------------+ The upshot of this is twofold: @@ -66,7 +66,7 @@ typedef int tid_t; large. If a stack overflows, it will corrupt the thread state. Thus, kernel functions should not allocate large structures or arrays as non-static local variables. Use - dynamic allocation with malloc() or palloc_get() + dynamic allocation with malloc() or palloc_get_page() instead. The first symptom of either of these problems will probably be @@ -97,7 +97,7 @@ struct thread uint32_t *pagedir; /* Page directory. */ #endif - /* Owned by thread.c */ + /* Owned by thread.c. */ unsigned magic; /* Detects stack overflow. */ }; @@ -114,6 +114,7 @@ void thread_unblock (struct thread *); struct thread *thread_current (void); tid_t thread_tid (void); const char *thread_name (void); + void thread_exit (void) NO_RETURN; void thread_yield (void); void thread_block (void);