not important to understand exactly what the loader does, but if
you're interested, read on. You should probably read along with the
loader's source. You should also understand the basics of the
-80@var{x}86 architecture as described by chapter 3 of
-@bibref{IA32-v1}.
+80@var{x}86 architecture as described by chapter 3, ``Basic Execution
+Environment,'' of @bibref{IA32-v1}.
Because the PC BIOS loads the loader, the loader has to play by the
BIOS's rules. In particular, the BIOS only loads 512 bytes (one disk
@deftypecv {Member} {@struct{thread}} {int} priority
A thread priority, ranging 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.
+(63). Lower numbers correspond to lower priorities, so that
+priority 0 is the lowest priority and priority 63 is the highest.
Pintos as provided ignores thread priorities, but you will implement
priority scheduling in project 1 (@pxref{Priority Scheduling}).
@end deftypecv
common infrastructure, and sections after that give the specifics of
external and internal interrupts.
-If you haven't already read chapter 3 in @bibref{IA32-v1}, it is
-recommended that you do so now. You might also want to skim chapter 5
-in @bibref{IA32-v3}.
+If you haven't already read chapter 3, ``Basic Execution Environment,''
+in @bibref{IA32-v1}, it is recommended that you do so now. You might
+also want to skim chapter 5, ``Interrupt and Exception Handling,'' in
+@bibref{IA32-v3a}.
@menu
* Interrupt Infrastructure::
sleep, which rules out @func{thread_yield}, @func{lock_acquire}, and
many others. This is because external interrupts use space on the
stack of the kernel thread that was running at the time the interrupt
-occurred. If the interrupt handler tried to sleep and that thread
-resumed, then the two uses of the single stack would interfere, which
-cannot be allowed.
+occurred. If the interrupt handler slept, it would effectively put that
+thread to sleep too until the interrupt handler resumed control and
+returned.
Because an external interrupt runs with interrupts disabled, it
effectively monopolizes the machine and delays all other activities.
@node User Programs Tour
@section User Programs Project
-The tour for this project has not yet been written.
+No tour for this project is available.
@node Virtual Memory Tour
@section Virtual Memory Project
-The tour for this project is under construction.
+Only some parts of the tour for this project are available.
@menu
* Hash Table::
translate virtual page frames to physical page frames. It is possible
to do this translation without adding a new data structure, by modifying
the code in @file{userprog/pagedir.c}. However, if you do that you'll
-need to carefully study and understand section 3.7 in @bibref{IA32-v3},
-and in practice it is probably easier to add a new data structure. You
-may find other uses for hash tables as well.
+need to carefully study and understand section 3.7, ``Page Translation
+Using 32-Bit Physical Addressing,'' in @bibref{IA32-v3a}, and in practice
+it is probably easier to add a new data structure. You may find other
+uses for hash tables as well.
Pintos provides a hash table data structure in @file{lib/kernel/hash.c}.
To use it you will need to manually include its header file,
sensible for your hash function to directly return the output of one of
these functions. For multiple pieces of data, you may wish to combine
the output of more than one call to them using, e.g., the @samp{^}
+(exclusive or)
operator. Finally, you may entirely ignore these functions and write
your own hash function from scratch, but remember that your goal is to
build an operating system kernel, not to design a hash function.
@node File Systems Tour
@section File Systems Project
-The tour for this project has not yet been written.
-
+No tour for this project is available.