X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fthreads.texi;h=d0d34e407bc7de0120f73ff9edd702add0e9cd3d;hb=f415a37905c57f61b444806bf84f5405184452aa;hp=432cb2668224dab21a7be7164d476324cf2ad63d;hpb=385b3a90a2fb8df4c0c185672246356b4c8a18e3;p=pintos-anon diff --git a/doc/threads.texi b/doc/threads.texi index 432cb26..d0d34e4 100644 --- a/doc/threads.texi +++ b/doc/threads.texi @@ -1,4 +1,4 @@ -@node Project 1--Threads, Project 2--User Programs, Pintos Tour, Top +@node Project 1--Threads @chapter Project 1: Threads In this assignment, we give you a minimally functional thread system. @@ -12,9 +12,9 @@ side. Compilation should be done in the @file{threads} directory. Before you read the description of this project, you should read all of the following sections: @ref{Introduction}, @ref{Coding Standards}, @ref{Debugging Tools}, and @ref{Development Tools}. You should at least -skim the material in @ref{Threads Tour} and especially -@ref{Synchronization}. To complete this project you will also need to -read @ref{4.4BSD Scheduler}. +skim the material from @ref{Pintos Loading} through @ref{Memory +Allocation}, especially @ref{Synchronization}. To complete this project +you will also need to read @ref{4.4BSD Scheduler}. @menu * Project 1 Background:: @@ -137,10 +137,10 @@ here. @xref{Kernel Initialization}, for details. @item thread.c @itemx thread.h -Basic thread support. Much of your work will take place in these -files. @file{thread.h} defines @struct{thread}, which you are likely -to modify in all four projects. See @ref{struct thread} and @ref{Thread -Support} for more information. +Basic thread support. Much of your work will take place in these files. +@file{thread.h} defines @struct{thread}, which you are likely to modify +in all four projects. See @ref{struct thread} and @ref{Threads} for +more information. @item switch.S @itemx switch.h @@ -178,10 +178,11 @@ four projects. @xref{Synchronization}, for more information. Functions for I/O port access. This is mostly used by source code in the @file{devices} directory that you won't have to touch. -@item mmu.h -Functions and macros related to memory management, including page -directories and page tables. This will be more important to you in -project 3. For now, you can ignore it. +@item vaddr.h +@itemx pte.h +Functions and macros for working with virtual addresses and page table +entries. These will be more important to you in project 3. For now, +you can ignore them. @item flags.h Macros that define a few bits in the 80@var{x}86 ``flags'' register. @@ -328,9 +329,10 @@ timer ticks or input events. Turning off interrupts also increases the interrupt handling latency, which can make a machine feel sluggish if taken too far. -You may need to add or modify code where interrupts are already -disabled, such as in @func{sema_up} or @func{sema_down}. You should -still try to keep this code as short as you can. +The synchronization primitives themselves in @file{synch.c} are +implemented by disabling interrupts. You may need to increase the +amount of code that runs with interrupts disabled here, but you should +still try to keep it to a minimum. Disabling interrupts can be useful for debugging, if you want to make sure that a section of code is not interrupted. You should remove @@ -441,8 +443,8 @@ priority such that it no longer has the highest priority must cause it to immediately yield the CPU. Thread priorities range from @code{PRI_MIN} (0) to @code{PRI_MAX} (63). -Lower numbers correspond to @emph{higher} priorities, so that priority 0 -is the highest priority and priority 63 is the lowest. +Lower numbers correspond to lower priorities, so that priority 0 +is the lowest priority and priority 63 is the highest. The initial thread priority is passed as an argument to @func{thread_create}. If there's no reason to choose another priority, use @code{PRI_DEFAULT} (31). The @code{PRI_} macros are @@ -674,7 +676,7 @@ list. @item If the highest-priority thread yields, does it continue running? -Yes. As long as there is a single highest-priority thread, it continues +Yes. If there is a single highest-priority thread, it continues running until it blocks or finishes, even if it calls @func{thread_yield}. If multiple threads have the same highest priority, @@ -684,8 +686,8 @@ If multiple threads have the same highest priority, Priority donation only changes the priority of the donee thread. The donor thread's priority is unchanged. -Priority donation is not additive: if thread @var{A} (with priority 3) donates -to thread @var{B} (with priority 5), then @var{B}'s new priority is 3, not 8. +Priority donation is not additive: if thread @var{A} (with priority 5) donates +to thread @var{B} (with priority 3), then @var{B}'s new priority is 5, not 8. @item Can a thread's priority change while it is on the ready queue? @@ -729,9 +731,6 @@ scheduler at the same time. @item Can I use one queue instead of 64 queues? -Yes, that's fine. It's easiest to describe the algorithm in terms of 64 -separate queues, but that doesn't mean you have to implement it that -way. - -If you use a single queue, it should probably be sorted. +Yes. In general, your implementation may differ from the description, +as long as its behavior is the same. @end table