#define HEADER_THREAD_H 1
#include <stdint.h>
+#include "debug.h"
#include "list.h"
#ifdef USERPROG
struct thread
{
- enum thread_status status;
- char name[16];
- uint32_t *stack;
- list_elem rq_elem;
+ /* These members are owned by the thread_*() functions. */
+ enum thread_status status; /* Thread state. */
+ char name[16]; /* Name (for debugging purposes). */
+ uint8_t *stack; /* Saved stack pointer. */
+ list_elem rq_elem; /* Run queue list element. */
+
#ifdef USERPROG
- struct addrspace addrspace;
+ /* These members are owned by the addrspace_*() functions. */
+ uint32_t *pagedir; /* Page directory. */
#endif
+
+ /* Marker to detect stack overflow. */
+ unsigned magic; /* Always set to THREAD_MAGIC. */
};
void thread_init (void);
+void thread_start (void);
-struct thread *thread_create (const char *name,
- void (*function) (void *aux), void *aux);
-void thread_destroy (struct thread *);
-struct thread *thread_current (void);
-
+typedef void thread_func (void *aux);
+struct thread *thread_create (const char *name, thread_func *, void *);
#ifdef USERPROG
-void thread_execute (const char *filename);
+bool thread_execute (const char *filename);
#endif
-void thread_start (struct thread *);
-void thread_ready (struct thread *);
-void thread_exit (void);
+void thread_wake (struct thread *);
+const char *thread_name (struct thread *);
+struct thread *thread_current (void);
+void thread_exit (void) NO_RETURN;
void thread_yield (void);
void thread_sleep (void);
-void thread_schedule (void);
-
-void thread_self_test (void);
#endif /* thread.h */