X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fthreads%2Fthread.h;h=0480293dc51d19c31daae2bde619c503a0d45b16;hb=b1a18e3872d52fcfe598b1e0e0d6698408960ce4;hp=421751be943f90bd7ad080b3dae9aecdb593d095;hpb=3625c2e6aba3b282f91282492c4b3fba324816c1;p=pintos-anon diff --git a/src/threads/thread.h b/src/threads/thread.h index 421751b..0480293 100644 --- a/src/threads/thread.h +++ b/src/threads/thread.h @@ -1,12 +1,12 @@ -#ifndef HEADER_THREAD_H -#define HEADER_THREAD_H 1 +#ifndef THREADS_THREAD_H +#define THREADS_THREAD_H +#include +#include #include -#include "debug.h" -#include "list.h" #ifdef USERPROG -#include "addrspace.h" +#include "userprog/addrspace.h" #endif /* States in a thread's life cycle. */ @@ -18,6 +18,16 @@ enum thread_status THREAD_DYING /* About to be destroyed. */ }; +/* Thread identifier type. + You can redefine this to whatever type you like. */ +typedef int tid_t; +#define TID_ERROR ((tid_t) -1) /* Error value for tid_t. */ + +/* Thread priorities. */ +#define PRI_MIN 0 /* Lowest priority. */ +#define PRI_DEFAULT 29 /* Default priority. */ +#define PRI_MAX 59 /* Highest priority. */ + /* A kernel thread or user process. Each thread structure is stored in its own 4 kB page. The @@ -76,14 +86,18 @@ enum thread_status blocked state is on a semaphore wait list. */ struct thread { - /* These members are owned by the thread_*() functions. */ + /* These members are owned by thread.c. */ + tid_t tid; /* Thread identifier. */ enum thread_status status; /* Thread state. */ char name[16]; /* Name (for debugging purposes). */ uint8_t *stack; /* Saved stack pointer. */ + int priority; /* Priority. */ + + /* Shared between thread.c and synch.c. */ list_elem elem; /* List element. */ #ifdef USERPROG - /* These members are owned by the addrspace_*() functions. */ + /* These members are owned by userprog/addrspace.c. */ uint32_t *pagedir; /* Page directory. */ #endif @@ -95,17 +109,25 @@ void thread_init (void); void thread_start (void); typedef void thread_func (void *aux); -struct thread *thread_create (const char *name, thread_func *, void *); +tid_t thread_create (const char *name, int priority, thread_func *, void *); #ifdef USERPROG -bool thread_execute (const char *filename); +tid_t thread_execute (const char *filename); #endif void thread_unblock (struct thread *); -const char *thread_name (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); -#endif /* thread.h */ +/* This function will be implemented in problem 1-2. */ +void thread_join (tid_t); + +/* These functions will be implemented in problem 1-3. */ +void thread_set_priority (int); +int thread_get_priority (void); + +#endif /* threads/thread.h */