void
thread_init (void)
{
- ASSERT (intr_get_level () == IF_OFF);
+ ASSERT (intr_get_level () == INTR_OFF);
/* Initialize run queue. */
list_init (&run_queue);
if (t == NULL)
return false;
- if (!addrspace_load (&t->addrspace, filename, &start))
+ if (!addrspace_load (t, filename, &start))
PANIC ("%s: program load failed", filename);
/* Interrupt frame. */
if_->ds = SEL_UDSEG;
if_->eip = start;
if_->cs = SEL_UCSEG;
- if_->eflags = FLAG_IF | 2;
+ if_->eflags = FLAG_IF | FLAG_MBS;
if_->esp = PHYS_BASE;
if_->ss = SEL_UDSEG;
thread_yield (void)
{
struct thread *cur = thread_current ();
- enum if_level old_level;
+ enum intr_level old_level;
ASSERT (!intr_context ());
thread_sleep (void)
{
ASSERT (!intr_context ());
- ASSERT (intr_get_level () == IF_OFF);
+ ASSERT (intr_get_level () == INTR_OFF);
thread_current ()->status = THREAD_BLOCKED;
schedule ();
ASSERT (t->status == THREAD_DYING);
ASSERT (t != thread_current ());
+ addrspace_destroy (t);
palloc_free (t);
}
{
struct thread *cur = thread_current ();
- ASSERT (intr_get_level () == IF_OFF);
+ ASSERT (intr_get_level () == INTR_OFF);
cur->status = THREAD_RUNNING;
if (prev != NULL && prev->status == THREAD_DYING)
destroy_thread (prev);
#ifdef USERPROG
- addrspace_activate (&cur->addrspace);
+ addrspace_activate (cur);
#endif
}
struct thread *cur = thread_current ();
struct thread *next = next_thread_to_run ();
- ASSERT (intr_get_level () == IF_OFF);
+ ASSERT (intr_get_level () == INTR_OFF);
ASSERT (cur->status != THREAD_RUNNING);
ASSERT (is_thread (next));