Clarify condition on BUF_SIZE in monitor example.
[pintos-anon] / doc / reference.texi
1 @node Reference Guide
2 @appendix Reference Guide
3
4 This chapter is a reference for the Pintos code.  It covers the
5 entire code base, but you'll only be using Pintos one part at a time,
6 so you may find that you want to read each part as you work on the
7 project where it becomes important.
8
9 (Actually, the reference guide is currently incomplete.)
10
11 We recommend using ``tags'' to follow along with references to function
12 and variable names (@pxref{Tags}).
13
14 @menu
15 * Pintos Loading::              
16 * Threads::                     
17 * Synchronization::             
18 * Interrupt Handling::          
19 * Memory Allocation::           
20 * Virtual Addresses::           
21 * Page Table::                  
22 * Hash Table::                  
23 @end menu
24
25 @node Pintos Loading
26 @section Loading
27
28 This section covers the Pintos loader and basic kernel
29 initialization.
30
31 @menu
32 * Pintos Loader::               
33 * Kernel Initialization::       
34 @end menu
35
36 @node Pintos Loader
37 @subsection The Loader
38
39 The first part of Pintos that runs is the loader, in
40 @file{threads/loader.S}.  The PC BIOS loads the loader into memory.
41 The loader, in turn, is responsible for initializing the CPU, loading
42 the rest of Pintos into memory, and then jumping to its start.  It's
43 not important to understand exactly what the loader does, but if
44 you're interested, read on.  You should probably read along with the
45 loader's source.  You should also understand the basics of the
46 80@var{x}86 architecture as described by chapter 3, ``Basic Execution
47 Environment,'' of @bibref{IA32-v1}.
48
49 Because the PC BIOS loads the loader, the loader has to play by the
50 BIOS's rules.  In particular, the BIOS only loads 512 bytes (one disk
51 sector) into memory.  This is a severe restriction and it means that,
52 practically speaking, the loader has to be written in assembly
53 language.
54
55 The Pintos loader first initializes the CPU.  The first important part of
56 this is to enable the A20 line, that is, the CPU's address line
57 numbered 20.  For historical reasons, PCs boot with this address
58 line fixed at 0, which means that attempts to access memory beyond the
59 first 1 MB (2 raised to the 20th power) will fail.  Pintos wants to
60 access more memory than this, so we have to enable it.
61
62 Next, the loader asks the BIOS for the PC's memory size.  Again for
63 historical reasons, the function that we call in the BIOS to do this
64 can only detect up to 64 MB of RAM, so that's the practical limit that
65 Pintos can support.  The memory size is stashed away in a location in
66 the loader that the kernel can read after it boots.
67
68 Third, the loader creates a basic page table.  This page table maps
69 the 64 MB at the base of virtual memory (starting at virtual address
70 0) directly to the identical physical addresses.  It also maps the
71 same physical memory starting at virtual address
72 @code{LOADER_PHYS_BASE}, which defaults to @t{0xc0000000} (3 GB).  The
73 Pintos kernel only wants the latter mapping, but there's a
74 chicken-and-egg problem if we don't include the former: our current
75 virtual address is roughly @t{0x7c00}, the location where the BIOS
76 loaded us, and we can't jump to @t{0xc0007c00} until we turn on the
77 page table, but if we turn on the page table without jumping there,
78 then we've just pulled the rug out from under ourselves.
79
80 After the page table is initialized, we load the CPU's control
81 registers to turn on protected mode and paging, and then we set up the
82 segment registers.  We aren't yet equipped to handle interrupts in
83 protected mode, so we disable interrupts.
84
85 Finally it's time to load the kernel from disk.  We use a simple but
86 inflexible method to do this: we program the IDE disk
87 controller directly.  We assume that the kernel is stored starting
88 from the second sector of the first IDE disk (the first sector normally
89 contains the boot loader).  We also assume that the BIOS has
90 already set up the IDE controller for us.  We read
91 @code{KERNEL_LOAD_PAGES} pages of data (4 kB per page) from the disk directly
92 into virtual memory, starting @code{LOADER_KERN_BASE} bytes past
93 @code{LOADER_PHYS_BASE}, which by default means that we load the
94 kernel starting 1 MB into physical memory.
95
96 Then we jump to the start of the compiled kernel image.  Using the
97 ``linker script'' in @file{threads/kernel.lds.S}, the kernel has
98 arranged to begin with the assembly module
99 @file{threads/start.S}.  This assembly module just calls
100 @func{main}, which never returns.
101
102 There's one more trick: the Pintos kernel command line
103 is in stored the boot loader.  The @command{pintos} program actually
104 modifies a copy of the boot loader on disk each time it runs the kernel,
105 putting
106 in whatever command line arguments the user supplies to the kernel,
107 and then the kernel at boot time reads those arguments out of the boot
108 loader in memory.  This is not an elegant solution, but it is simple
109 and effective.
110
111 @node Kernel Initialization
112 @subsection Kernel Initialization
113
114 The kernel proper starts with the @func{main} function.  The
115 @func{main} function is written in C, as will be most of the code we
116 encounter in Pintos from here on out.
117
118 When @func{main} starts, the system is in a pretty raw state.  We're
119 in 32-bit protected mode with paging enabled, but hardly anything else is
120 ready.  Thus, the @func{main} function consists primarily of calls
121 into other Pintos modules' initialization functions.
122 These are usually named @func{@var{module}_init}, where
123 @var{module} is the module's name, @file{@var{module}.c} is the
124 module's source code, and @file{@var{module}.h} is the module's
125 header.
126
127 First we initialize kernel RAM in @func{ram_init}.  The first step
128 is to clear out the kernel's so-called ``BSS'' segment.  The BSS is a
129 segment that should be initialized to all zeros.  In most C
130 implementations, whenever you
131 declare a variable outside a function without providing an
132 initializer, that variable goes into the BSS.  Because it's all zeros, the
133 BSS isn't stored in the image that the loader brought into memory.  We
134 just use @func{memset} to zero it out.  The other task of
135 @func{ram_init} is to read out the machine's memory size from where
136 the loader stored it and put it into the @code{ram_pages} variable for
137 later use.
138
139 Next, @func{thread_init} initializes the thread system.  We will defer
140 full discussion to our discussion of Pintos threads below.  It is
141 called so early in initialization because the console, initialized
142 just afterward, tries to use locks, and locks in turn require there to be a
143 running thread.
144
145 Then we initialize the console so that @func{printf} will work.
146 @func{main} calls @func{vga_init}, which initializes the VGA text
147 display and clears the screen.  It also calls @func{serial_init_poll}
148 to initialize the first serial port in ``polling mode,'' that is,
149 where the kernel busy-waits for the port to be ready for each
150 character to be output.  (We use polling mode until we're ready to enable
151 interrupts, later.)  Finally we initialize the console device and
152 print a startup message to the console.
153
154 @func{main} calls @func{read_command_line} to break the kernel command
155 line into arguments, then @func{parse_options} to read any options at
156 the beginning of the command line.  (Actions specified on the
157 command line execute later.)
158
159 @func{main} calls @func{random_init} to initialize the kernel random
160 number generator.  If the user specified @option{-rs} on the
161 @command{pintos} command line, @func{parse_options} already did
162 this, but calling it a second time is harmless.
163
164 The next block of functions we call initialize the kernel's memory
165 system.  @func{palloc_init} sets up the kernel page allocator, which
166 doles out memory one or more pages at a time (@pxref{Page Allocator}).
167 @func{malloc_init} sets
168 up the allocator that handles allocations of arbitrary-size blocks of
169 memory (@pxref{Block Allocator}).
170 @func{paging_init} sets up a page table for the kernel (@pxref{Page
171 Table}).
172
173 In projects 2 and later, @func{main} also calls @func{tss_init} and
174 @func{gdt_init}.
175
176 The next set of calls initializes the interrupt system.
177 @func{intr_init} sets up the CPU's @dfn{interrupt descriptor table}
178 (IDT) to ready it for interrupt handling (@pxref{Interrupt
179 Infrastructure}), then @func{timer_init} and @func{kbd_init} prepare for
180 handling timer interrupts and keyboard interrupts, respectively. 
181 @func{input_init} sets up to merge serial and keyboard input into one
182 stream.  In
183 projects 2 and later, we also prepare to handle interrupts caused by
184 user programs using @func{exception_init} and @func{syscall_init}.
185
186 Now that interrupts are set up, we can start the scheduler
187 with @func{thread_start}, which creates the idle thread and enables
188 interrupts.
189 With interrupts enabled, interrupt-driven serial port I/O becomes
190 possible, so we use
191 @func{serial_init_queue} to switch to that mode.  Finally,
192 @func{timer_calibrate} calibrates the timer for accurate short delays.
193
194 If the file system is compiled in, as it will starting in project 2, we
195 initialize the disks with @func{disk_init}, then the
196 file system with @func{filesys_init}.
197
198 Boot is complete, so we print a message.
199
200 Function @func{run_actions} now parses and executes actions specified on
201 the kernel command line, such as @command{run} to run a test (in project
202 1) or a user program (in later projects).
203
204 Finally, if @option{-q} was specified on the kernel command line, we
205 call @func{power_off} to terminate the machine simulator.  Otherwise,
206 @func{main} calls @func{thread_exit}, which allows any other running
207 threads to continue running.
208
209 @node Threads
210 @section Threads
211
212 @menu
213 * struct thread::               
214 * Thread Functions::            
215 * Thread Switching::            
216 @end menu
217
218 @node struct thread
219 @subsection @code{struct thread}
220
221 The main Pintos data structure for threads is @struct{thread},
222 declared in @file{threads/thread.h}.
223
224 @deftp {Structure} {struct thread}
225 Represents a thread or a user process.  In the projects, you will have
226 to add your own members to @struct{thread}.  You may also change or
227 delete the definitions of existing members.
228
229 Every @struct{thread} occupies the beginning of its own page of
230 memory.  The rest of the page is used for the thread's stack, which
231 grows downward from the end of the page.  It looks like this:
232
233 @example
234 @group
235                   4 kB +---------------------------------+
236                        |          kernel stack           |
237                        |                |                |
238                        |                |                |
239                        |                V                |
240                        |         grows downward          |
241                        |                                 |
242                        |                                 |
243                        |                                 |
244                        |                                 |
245                        |                                 |
246                        |                                 |
247                        |                                 |
248                        |                                 |
249 sizeof (struct thread) +---------------------------------+
250                        |              magic              |
251                        |                :                |
252                        |                :                |
253                        |              status             |
254                        |               tid               |
255                   0 kB +---------------------------------+
256 @end group
257 @end example
258
259 This has two consequences.  First, @struct{thread} must not be allowed
260 to grow too big.  If it does, then there will not be enough room for the
261 kernel stack.  The base @struct{thread} is only a few bytes in size.  It
262 probably should stay well under 1 kB.
263
264 Second, kernel stacks must not be allowed to grow too large.  If a stack
265 overflows, it will corrupt the thread state.  Thus, kernel functions
266 should not allocate large structures or arrays as non-static local
267 variables.  Use dynamic allocation with @func{malloc} or
268 @func{palloc_get_page} instead (@pxref{Memory Allocation}).
269 @end deftp
270
271 @deftypecv {Member} {@struct{thread}} {tid_t} tid
272 The thread's thread identifier or @dfn{tid}.  Every thread must have a
273 tid that is unique over the entire lifetime of the kernel.  By
274 default, @code{tid_t} is a @code{typedef} for @code{int} and each new
275 thread receives the numerically next higher tid, starting from 1 for
276 the initial process.  You can change the type and the numbering scheme
277 if you like.
278 @end deftypecv
279
280 @deftypecv {Member} {@struct{thread}} {enum thread_status} status
281 @anchor{Thread States}
282 The thread's state, one of the following:
283
284 @defvr {Thread State} @code{THREAD_RUNNING}
285 The thread is running.  Exactly one thread is running at a given time.
286 @func{thread_current} returns the running thread.
287 @end defvr
288
289 @defvr {Thread State} @code{THREAD_READY}
290 The thread is ready to run, but it's not running right now.  The
291 thread could be selected to run the next time the scheduler is
292 invoked.  Ready threads are kept in a doubly linked list called
293 @code{ready_list}.
294 @end defvr
295
296 @defvr {Thread State} @code{THREAD_BLOCKED}
297 The thread is waiting for something, e.g.@: a lock to become
298 available, an interrupt to be invoked.  The thread won't be scheduled
299 again until it transitions to the @code{THREAD_READY} state with a
300 call to @func{thread_unblock}.  This is most conveniently done
301 indirectly, using one of the Pintos synchronization primitives that
302 block and unblock threads automatically (@pxref{Synchronization}).
303
304 There is no @i{a priori} way to tell what a blocked thread is waiting
305 for, but a backtrace can help (@pxref{Backtraces}).
306 @end defvr
307
308 @defvr {Thread State} @code{THREAD_DYING}
309 The thread will be destroyed by the scheduler after switching to the
310 next thread.
311 @end defvr
312 @end deftypecv
313
314 @deftypecv {Member} {@struct{thread}} {char} name[16]
315 The thread's name as a string, or at least the first few characters of
316 it.
317 @end deftypecv
318
319 @deftypecv {Member} {@struct{thread}} {uint8_t *} stack
320 Every thread has its own stack to keep track of its state.  When the
321 thread is running, the CPU's stack pointer register tracks the top of
322 the stack and this member is unused.  But when the CPU switches to
323 another thread, this member saves the thread's stack pointer.  No
324 other members are needed to save the thread's registers, because the
325 other registers that must be saved are saved on the stack.
326
327 When an interrupt occurs, whether in the kernel or a user program, an
328 @struct{intr_frame} is pushed onto the stack.  When the interrupt occurs
329 in a user program, the @struct{intr_frame} is always at the very top of
330 the page.  @xref{Interrupt Handling}, for more information.
331 @end deftypecv
332
333 @deftypecv {Member} {@struct{thread}} {int} priority
334 A thread priority, ranging from @code{PRI_MIN} (0) to @code{PRI_MAX}
335 (63).  Lower numbers correspond to lower priorities, so that
336 priority 0 is the lowest priority and priority 63 is the highest.
337 Pintos as provided ignores thread priorities, but you will implement
338 priority scheduling in project 1 (@pxref{Priority Scheduling}).
339 @end deftypecv
340
341 @deftypecv {Member} {@struct{thread}} {@struct{list_elem}} elem
342 A ``list element'' used to put the thread into doubly linked lists,
343 either @code{ready_list} (the list of threads ready to run) or a list of
344 threads waiting on a semaphore in @func{sema_down}.  It can do double
345 duty because a thread waiting on a semaphore is not ready, and vice
346 versa.
347 @end deftypecv
348
349 @deftypecv {Member} {@struct{thread}} {uint32_t *} pagedir
350 Only present in project 2 and later.  @xref{Page Tables}.
351 @end deftypecv
352
353 @deftypecv {Member} {@struct{thread}} {unsigned} magic
354 Always set to @code{THREAD_MAGIC}, which is just an arbitrary number defined
355 in @file{threads/thread.c}, and used to detect stack overflow.
356 @func{thread_current} checks that the @code{magic} member of the running
357 thread's @struct{thread} is set to @code{THREAD_MAGIC}.  Stack overflow
358 tends to change this value, triggering the assertion.  For greatest
359 benefit, as you add members to @struct{thread}, leave @code{magic} at
360 the end.
361 @end deftypecv
362
363 @node Thread Functions
364 @subsection Thread Functions
365
366 @file{threads/thread.c} implements several public functions for thread
367 support.  Let's take a look at the most useful:
368
369 @deftypefun void thread_init (void)
370 Called by @func{main} to initialize the thread system.  Its main
371 purpose is to create a @struct{thread} for Pintos's initial thread.
372 This is possible because the Pintos loader puts the initial
373 thread's stack at the top of a page, in the same position as any other
374 Pintos thread.
375
376 Before @func{thread_init} runs,
377 @func{thread_current} will fail because the running thread's
378 @code{magic} value is incorrect.  Lots of functions call
379 @func{thread_current} directly or indirectly, including
380 @func{lock_acquire} for locking a lock, so @func{thread_init} is
381 called early in Pintos initialization.
382 @end deftypefun
383
384 @deftypefun void thread_start (void)
385 Called by @func{main} to start the scheduler.  Creates the idle
386 thread, that is, the thread that is scheduled when no other thread is
387 ready.  Then enables interrupts, which as a side effect enables the
388 scheduler because the scheduler runs on return from the timer interrupt, using
389 @func{intr_yield_on_return} (@pxref{External Interrupt Handling}).
390 @end deftypefun
391
392 @deftypefun void thread_tick (void)
393 Called by the timer interrupt at each timer tick.  It keeps track of
394 thread statistics and triggers the scheduler when a time slice expires.
395 @end deftypefun
396
397 @deftypefun void thread_print_stats (void)
398 Called during Pintos shutdown to print thread statistics.
399 @end deftypefun
400
401 @deftypefun tid_t thread_create (const char *@var{name}, int @var{priority}, thread_func *@var{func}, void *@var{aux})
402 Creates and starts a new thread named @var{name} with the given
403 @var{priority}, returning the new thread's tid.  The thread executes
404 @var{func}, passing @var{aux} as the function's single argument.
405
406 @func{thread_create} allocates a page for the thread's
407 @struct{thread} and stack and initializes its members, then it sets
408 up a set of fake stack frames for it (@pxref{Thread Switching}).  The
409 thread is initialized in the blocked state, then unblocked just before
410 returning, which allows the new thread to
411 be scheduled (@pxref{Thread States}).
412
413 @deftp {Type} {void thread_func (void *@var{aux})}
414 This is the type of the function passed to @func{thread_create}, whose
415 @var{aux} argument is passed along as the function's argument.
416 @end deftp
417 @end deftypefun
418
419 @deftypefun void thread_block (void)
420 Transitions the running thread from the running state to the blocked
421 state (@pxref{Thread States}).  The thread will not run again until
422 @func{thread_unblock} is
423 called on it, so you'd better have some way arranged for that to happen.
424 Because @func{thread_block} is so low-level, you should prefer to use
425 one of the synchronization primitives instead (@pxref{Synchronization}).
426 @end deftypefun
427
428 @deftypefun void thread_unblock (struct thread *@var{thread})
429 Transitions @var{thread}, which must be in the blocked state, to the
430 ready state, allowing it to resume running (@pxref{Thread States}).
431 This is called when the event that the thread is waiting for occurs,
432 e.g.@: when the lock that 
433 the thread is waiting on becomes available.
434 @end deftypefun
435
436 @deftypefun {struct thread *} thread_current (void)
437 Returns the running thread.
438 @end deftypefun
439
440 @deftypefun {tid_t} thread_tid (void)
441 Returns the running thread's thread id.  Equivalent to
442 @code{thread_current ()->tid}.
443 @end deftypefun
444
445 @deftypefun {const char *} thread_name (void)
446 Returns the running thread's name.  Equivalent to @code{thread_current
447 ()->name}.
448 @end deftypefun
449
450 @deftypefun void thread_exit (void) @code{NO_RETURN}
451 Causes the current thread to exit.  Never returns, hence
452 @code{NO_RETURN} (@pxref{Function and Parameter Attributes}).
453 @end deftypefun
454
455 @deftypefun void thread_yield (void)
456 Yields the CPU to the scheduler, which picks a new thread to run.  The
457 new thread might be the current thread, so you can't depend on this
458 function to keep this thread from running for any particular length of
459 time.
460 @end deftypefun
461
462 @deftypefun int thread_get_priority (void)
463 @deftypefunx void thread_set_priority (int @var{new_priority})
464 Stub to set and get thread priority.  @xref{Priority Scheduling}.
465 @end deftypefun
466
467 @deftypefun int thread_get_nice (void)
468 @deftypefunx void thread_set_nice (int @var{new_nice})
469 @deftypefunx int thread_get_recent_cpu (void)
470 @deftypefunx int thread_get_load_avg (void)
471 Stubs for the advanced scheduler.  @xref{4.4BSD Scheduler}.
472 @end deftypefun
473
474 @node Thread Switching
475 @subsection Thread Switching
476
477 @func{schedule} is responsible for switching threads.  It
478 is internal to @file{threads/thread.c} and called only by the three
479 public thread functions that need to switch threads:
480 @func{thread_block}, @func{thread_exit}, and @func{thread_yield}.
481 Before any of these functions call @func{schedule}, they disable
482 interrupts (or ensure that they are already disabled) and then change
483 the running thread's state to something other than running.
484
485 @func{schedule} is short but tricky.  It records the
486 current thread in local variable @var{cur}, determines the next thread
487 to run as local variable @var{next} (by calling
488 @func{next_thread_to_run}), and then calls @func{switch_threads} to do
489 the actual thread switch.  The thread we switched to was also running
490 inside @func{switch_threads}, as are all the threads not currently
491 running, so the new thread now returns out of
492 @func{switch_threads}, returning the previously running thread.
493
494 @func{switch_threads} is an assembly language routine in
495 @file{threads/switch.S}.  It saves registers on the stack, saves the
496 CPU's current stack pointer in the current @struct{thread}'s @code{stack}
497 member, restores the new thread's @code{stack} into the CPU's stack
498 pointer, restores registers from the stack, and returns.
499
500 The rest of the scheduler is implemented in @func{schedule_tail}.  It
501 marks the new thread as running.  If the thread we just switched from
502 is in the dying state, then it also frees the page that contained the
503 dying thread's @struct{thread} and stack.  These couldn't be freed
504 prior to the thread switch because the switch needed to use it.
505
506 Running a thread for the first time is a special case.  When
507 @func{thread_create} creates a new thread, it goes through a fair
508 amount of trouble to get it started properly.  In particular, the new
509 thread hasn't started running yet, so there's no way for it to be
510 running inside @func{switch_threads} as the scheduler expects.  To
511 solve the problem, @func{thread_create} creates some fake stack frames
512 in the new thread's stack:
513
514 @itemize @bullet
515 @item
516 The topmost fake stack frame is for @func{switch_threads}, represented
517 by @struct{switch_threads_frame}.  The important part of this frame is
518 its @code{eip} member, the return address.  We point @code{eip} to
519 @func{switch_entry}, indicating it to be the function that called
520 @func{switch_entry}.
521
522 @item
523 The next fake stack frame is for @func{switch_entry}, an assembly
524 language routine in @file{threads/switch.S} that adjusts the stack
525 pointer,@footnote{This is because @func{switch_threads} takes
526 arguments on the stack and the 80@var{x}86 SVR4 calling convention
527 requires the caller, not the called function, to remove them when the
528 call is complete.  See @bibref{SysV-i386} chapter 3 for details.}
529 calls @func{schedule_tail} (this special case is why
530 @func{schedule_tail} is separate from @func{schedule}), and returns.
531 We fill in its stack frame so that it returns into
532 @func{kernel_thread}, a function in @file{threads/thread.c}.
533
534 @item
535 The final stack frame is for @func{kernel_thread}, which enables
536 interrupts and calls the thread's function (the function passed to
537 @func{thread_create}).  If the thread's function returns, it calls
538 @func{thread_exit} to terminate the thread.
539 @end itemize
540
541 @node Synchronization
542 @section Synchronization
543
544 If sharing of resources between threads is not handled in a careful,
545 controlled fashion, the result is usually a big mess.
546 This is especially the case in operating system kernels, where
547 faulty sharing can crash the entire machine.  Pintos provides several
548 synchronization primitives to help out.
549
550 @menu
551 * Disabling Interrupts::        
552 * Semaphores::                  
553 * Locks::                       
554 * Monitors::                    
555 * Optimization Barriers::             
556 @end menu
557
558 @node Disabling Interrupts
559 @subsection Disabling Interrupts
560
561 The crudest way to do synchronization is to disable interrupts, that
562 is, to temporarily prevent the CPU from responding to interrupts.  If
563 interrupts are off, no other thread will preempt the running thread,
564 because thread preemption is driven by the timer interrupt.  If
565 interrupts are on, as they normally are, then the running thread may
566 be preempted by another at any time, whether between two C statements
567 or even within the execution of one.
568
569 Incidentally, this means that Pintos is a ``preemptible kernel,'' that
570 is, kernel threads can be preempted at any time.  Traditional Unix
571 systems are ``nonpreemptible,'' that is, kernel threads can only be
572 preempted at points where they explicitly call into the scheduler.
573 (User programs can be preempted at any time in both models.)  As you
574 might imagine, preemptible kernels require more explicit
575 synchronization.
576
577 You should have little need to set the interrupt state directly.  Most
578 of the time you should use the other synchronization primitives
579 described in the following sections.  The main reason to disable
580 interrupts is to synchronize kernel threads with external interrupt
581 handlers, which cannot sleep and thus cannot use most other forms of
582 synchronization (@pxref{External Interrupt Handling}).
583
584 Some external interrupts cannot be postponed, even by disabling
585 interrupts.  These interrupts, called @dfn{non-maskable interrupts}
586 (NMIs), are supposed to be used only in emergencies, e.g.@: when the
587 computer is on fire.  Pintos does not handle non-maskable interrupts.
588
589 Types and functions for disabling and enabling interrupts are in
590 @file{threads/interrupt.h}.
591
592 @deftp Type {enum intr_level}
593 One of @code{INTR_OFF} or @code{INTR_ON}, denoting that interrupts are
594 disabled or enabled, respectively.
595 @end deftp
596
597 @deftypefun {enum intr_level} intr_get_level (void)
598 Returns the current interrupt state.
599 @end deftypefun
600
601 @deftypefun {enum intr_level} intr_set_level (enum intr_level @var{level})
602 Turns interrupts on or off according to @var{level}.  Returns the
603 previous interrupt state.
604 @end deftypefun
605
606 @deftypefun {enum intr_level} intr_enable (void)
607 Turns interrupts on.  Returns the previous interrupt state.
608 @end deftypefun
609
610 @deftypefun {enum intr_level} intr_disable (void)
611 Turns interrupts off.  Returns the previous interrupt state.
612 @end deftypefun
613
614 @node Semaphores
615 @subsection Semaphores
616
617 A @dfn{semaphore} is a nonnegative integer together with two operators
618 that manipulate it atomically, which are:
619
620 @itemize @bullet
621 @item
622 ``Down'' or ``P'': wait for the value to become positive, then
623 decrement it.
624
625 @item
626 ``Up'' or ``V'': increment the value (and wake up one waiting thread,
627 if any).
628 @end itemize
629
630 A semaphore initialized to 0 may be used to wait for an event
631 that will happen exactly once.  For example, suppose thread @var{A}
632 starts another thread @var{B} and wants to wait for @var{B} to signal
633 that some activity is complete.  @var{A} can create a semaphore
634 initialized to 0, pass it to @var{B} as it starts it, and then
635 ``down'' the semaphore.  When @var{B} finishes its activity, it
636 ``ups'' the semaphore.  This works regardless of whether @var{A}
637 ``downs'' the semaphore or @var{B} ``ups'' it first.
638
639 A semaphore initialized to 1 is typically used for controlling access
640 to a resource.  Before a block of code starts using the resource, it
641 ``downs'' the semaphore, then after it is done with the resource it
642 ``ups'' the resource.  In such a case a lock, described below, may be
643 more appropriate.
644
645 Semaphores can also be initialized to values larger than 1.  These are
646 rarely used.
647
648 Semaphores were invented by Edsger Dijkstra and first used in the THE
649 operating system (@bibref{Dijkstra}).
650
651 Pintos' semaphore type and operations are declared in
652 @file{threads/synch.h}.  
653
654 @deftp {Type} {struct semaphore}
655 Represents a semaphore.
656 @end deftp
657
658 @deftypefun void sema_init (struct semaphore *@var{sema}, unsigned @var{value})
659 Initializes @var{sema} as a new semaphore with the given initial
660 @var{value}.
661 @end deftypefun
662
663 @deftypefun void sema_down (struct semaphore *@var{sema})
664 Executes the ``down'' or ``P'' operation on @var{sema}, waiting for
665 its value to become positive and then decrementing it by one.
666 @end deftypefun
667
668 @deftypefun bool sema_try_down (struct semaphore *@var{sema})
669 Tries to execute the ``down'' or ``P'' operation on @var{sema},
670 without waiting.  Returns true if @var{sema}
671 was successfully decremented, or false if it was already
672 zero and thus could not be decremented without waiting.  Calling this
673 function in a
674 tight loop wastes CPU time, so use @func{sema_down} or find a
675 different approach instead.
676 @end deftypefun
677
678 @deftypefun void sema_up (struct semaphore *@var{sema})
679 Executes the ``up'' or ``V'' operation on @var{sema},
680 incrementing its value.  If any threads are waiting on
681 @var{sema}, wakes one of them up.
682
683 Unlike most synchronization primitives, @func{sema_up} may be called
684 inside an external interrupt handler (@pxref{External Interrupt
685 Handling}).
686 @end deftypefun
687
688 Semaphores are internally built out of disabling interrupt
689 (@pxref{Disabling Interrupts}) and thread blocking and unblocking
690 (@func{thread_block} and @func{thread_unblock}).  Each semaphore maintains
691 a list of waiting threads, using the linked list
692 implementation in @file{lib/kernel/list.c}.
693
694 @node Locks
695 @subsection Locks
696
697 A @dfn{lock} is like a semaphore with an initial value of 1
698 (@pxref{Semaphores}).  A lock's equivalent of ``up'' is called
699 ``acquire'', and the ``down'' operation is called ``release''.
700
701 Compared to a semaphore, a lock has one added restriction: only the
702 thread that acquires a lock, called the lock's ``owner'', is allowed to
703 release it.  If this restriction is a problem, it's a good sign that a
704 semaphore should be used, instead of a lock.
705
706 Locks in Pintos are not ``recursive,'' that is, it is an error for the
707 thread currently holding a lock to try to acquire that lock.
708
709 Lock types and functions are declared in @file{threads/synch.h}.
710
711 @deftp {Type} {struct lock}
712 Represents a lock.
713 @end deftp
714
715 @deftypefun void lock_init (struct lock *@var{lock})
716 Initializes @var{lock} as a new lock.
717 The lock is not initially owned by any thread.
718 @end deftypefun
719
720 @deftypefun void lock_acquire (struct lock *@var{lock})
721 Acquires @var{lock} for the current thread, first waiting for
722 any current owner to release it if necessary.
723 @end deftypefun
724
725 @deftypefun bool lock_try_acquire (struct lock *@var{lock})
726 Tries to acquire @var{lock} for use by the current thread, without
727 waiting.  Returns true if successful, false if the lock is already
728 owned.  Calling this function in a tight loop is a bad idea because it
729 wastes CPU time, so use @func{lock_acquire} instead.
730 @end deftypefun
731
732 @deftypefun void lock_release (struct lock *@var{lock})
733 Releases @var{lock}, which the current thread must own.
734 @end deftypefun
735
736 @deftypefun bool lock_held_by_current_thread (const struct lock *@var{lock})
737 Returns true if the running thread owns @var{lock},
738 false otherwise.
739 There is no function to test whether an arbitrary thread owns a lock,
740 because the answer could change before the caller could act on it.
741 @end deftypefun
742
743 @node Monitors
744 @subsection Monitors
745
746 A @dfn{monitor} is a higher-level form of synchronization than a
747 semaphore or a lock.  A monitor consists of data being synchronized,
748 plus a lock, called the @dfn{monitor lock}, and one or more
749 @dfn{condition variables}.  Before it accesses the protected data, a
750 thread first acquires the monitor lock.  It is then said to be ``in the
751 monitor''.  While in the monitor, the thread has control over all the
752 protected data, which it may freely examine or modify.  When access to
753 the protected data is complete, it releases the monitor lock.
754
755 Condition variables allow code in the monitor to wait for a condition to
756 become true.  Each condition variable is associated with an abstract
757 condition, e.g.@: ``some data has arrived for processing'' or ``over 10
758 seconds has passed since the user's last keystroke''.  When code in the
759 monitor needs to wait for a condition to become true, it ``waits'' on
760 the associated condition variable, which releases the lock and waits for
761 the condition to be signaled.  If, on the other hand, it has caused one
762 of these conditions to become true, it ``signals'' the condition to wake
763 up one waiter, or ``broadcasts'' the condition to wake all of them.
764
765 The theoretical framework for monitors was laid out by C.@: A.@: R.@:
766 Hoare (@bibref{Hoare}).  Their practical usage was later elaborated in a
767 paper on the Mesa operating system (@bibref{Lampson}).
768
769 Condition variable types and functions are declared in
770 @file{threads/synch.h}.
771
772 @deftp {Type} {struct condition}
773 Represents a condition variable.
774 @end deftp
775
776 @deftypefun void cond_init (struct condition *@var{cond})
777 Initializes @var{cond} as a new condition variable.
778 @end deftypefun
779
780 @deftypefun void cond_wait (struct condition *@var{cond}, struct lock *@var{lock})
781 Atomically releases @var{lock} (the monitor lock) and waits for
782 @var{cond} to be signaled by some other piece of code.  After
783 @var{cond} is signaled, reacquires @var{lock} before returning.
784 @var{lock} must be held before calling this function.
785
786 Sending a signal and waking up from a wait are not an atomic operation.
787 Thus, typically @func{cond_wait}'s caller must recheck the condition
788 after the wait completes and, if necessary, wait again.  See the next
789 section for an example.
790 @end deftypefun
791
792 @deftypefun void cond_signal (struct condition *@var{cond}, struct lock *@var{lock})
793 If any threads are waiting on @var{cond} (protected by monitor lock
794 @var{lock}), then this function wakes up one of them.  If no threads are
795 waiting, returns without performing any action.
796 @var{lock} must be held before calling this function.
797 @end deftypefun
798
799 @deftypefun void cond_broadcast (struct condition *@var{cond}, struct lock *@var{lock})
800 Wakes up all threads, if any, waiting on @var{cond} (protected by
801 monitor lock @var{lock}).  @var{lock} must be held before calling this
802 function.
803 @end deftypefun
804
805 @subsubsection Monitor Example
806
807 The classical example of a monitor is handling a buffer into which one
808 or more
809 ``producer'' threads write characters and out of which one or more
810 ``consumer'' threads read characters.  To implement this we need,
811 besides the monitor lock, two condition variables which we will call
812 @var{not_full} and @var{not_empty}:
813
814 @example
815 char buf[BUF_SIZE];     /* @r{Buffer.} */
816 size_t n = 0;           /* @r{0 <= n <= @var{BUF_SIZE}: # of characters in buffer.} */
817 size_t head = 0;        /* @r{@var{buf} index of next char to write (mod @var{BUF_SIZE}).} */
818 size_t tail = 0;        /* @r{@var{buf} index of next char to read (mod @var{BUF_SIZE}).} */
819 struct lock lock;       /* @r{Monitor lock.} */
820 struct condition not_empty; /* @r{Signaled when the buffer is not empty.} */
821 struct condition not_full; /* @r{Signaled when the buffer is not full.} */
822
823 @dots{}@r{initialize the locks and condition variables}@dots{}
824
825 void put (char ch) @{
826   lock_acquire (&lock);
827   while (n == BUF_SIZE)            /* @r{Can't add to @var{buf} as long as it's full.} */
828     cond_wait (&not_full, &lock);
829   buf[head++ % BUF_SIZE] = ch;     /* @r{Add @var{ch} to @var{buf}.} */
830   n++;
831   cond_signal (&not_empty, &lock); /* @r{@var{buf} can't be empty anymore.} */
832   lock_release (&lock);
833 @}
834
835 char get (void) @{
836   char ch;
837   lock_acquire (&lock);
838   while (n == 0)                  /* @r{Can't read @var{buf} as long as it's empty.} */
839     cond_wait (&not_empty, &lock);
840   ch = buf[tail++ % BUF_SIZE];    /* @r{Get @var{ch} from @var{buf}.} */
841   n--;
842   cond_signal (&not_full, &lock); /* @r{@var{buf} can't be full anymore.} */
843   lock_release (&lock);
844 @}
845 @end example
846
847 Note that @code{BUF_SIZE} must divide evenly into @code{SIZE_MAX + 1}
848 for the above code to be completely correct.  Otherwise, it will fail
849 the first time @code{head} wraps around to 0.  In practice,
850 @code{BUF_SIZE} would ordinarily be a power of 2.
851
852 @node Optimization Barriers
853 @subsection Optimization Barriers
854
855 @c We should try to come up with a better example.
856 @c Perhaps something with a linked list?
857
858 An @dfn{optimization barrier} is a special statement that prevents the
859 compiler from making assumptions about the state of memory across the
860 barrier.  The compiler will not reorder reads or writes of variables
861 across the barrier or assume that a variable's value is unmodified
862 across the barrier, except for local variables whose address is never
863 taken.  In Pintos, @file{threads/synch.h} defines the @code{barrier()}
864 macro as an optimization barrier.
865
866 One reason to use an optimization barrier is when data can change
867 asynchronously, without the compiler's knowledge, e.g.@: by another
868 thread or an interrupt handler.  The @func{too_many_loops} function in
869 @file{devices/timer.c} is an example.  This function starts out by
870 busy-waiting in a loop until a timer tick occurs:
871
872 @example
873 /* Wait for a timer tick. */
874 int64_t start = ticks;
875 while (ticks == start)
876   barrier ();
877 @end example
878
879 @noindent
880 Without an optimization barrier in the loop, the compiler could
881 conclude that the loop would never terminate, because @code{start} and
882 @code{ticks} start out equal and the loop itself never changes them.
883 It could then ``optimize'' the function into an infinite loop, which
884 would definitely be undesirable.
885
886 Optimization barriers can be used to avoid other compiler
887 optimizations.  The @func{busy_wait} function, also in
888 @file{devices/timer.c}, is an example.  It contains this loop:
889
890 @example
891 while (loops-- > 0)
892   barrier ();
893 @end example
894
895 @noindent
896 The goal of this loop is to busy-wait by counting @code{loops} down
897 from its original value to 0.  Without the barrier, the compiler could
898 delete the loop entirely, because it produces no useful output and has
899 no side effects.  The barrier forces the compiler to pretend that the
900 loop body has an important effect.
901
902 Finally, optimization barriers can be used to force the ordering of
903 memory reads or writes.  For example, suppose we add a ``feature''
904 that, whenever a timer interrupt occurs, the character in global
905 variable @code{timer_put_char} is printed on the console, but only if
906 global Boolean variable @code{timer_do_put} is true.  The best way to
907 set up @samp{x} to be printed is then to use an optimization barrier,
908 like this:
909
910 @example
911 timer_put_char = 'x';
912 barrier ();
913 timer_do_put = true;
914 @end example
915
916 Without the barrier, the code is buggy because the compiler is free to
917 reorder operations when it doesn't see a reason to keep them in the
918 same order.  In this case, the compiler doesn't know that the order of
919 assignments is important, so its optimizer is permitted to exchange
920 their order.  There's no telling whether it will actually do this, and
921 it is possible that passing the compiler different optimization flags
922 or using a different version of the compiler will produce different
923 behavior.
924
925 Another solution is to disable interrupts around the assignments.
926 This does not prevent reordering, but it prevents the interrupt
927 handler from intervening between the assignments.  It also has the
928 extra runtime cost of disabling and re-enabling interrupts:
929
930 @example
931 enum intr_level old_level = intr_disable ();
932 timer_put_char = 'x';
933 timer_do_put = true;
934 intr_set_level (old_level);
935 @end example
936
937 A second solution is to mark the declarations of
938 @code{timer_put_char} and @code{timer_do_put} as @samp{volatile}.  This
939 keyword tells the compiler that the variables are externally observable
940 and restricts its latitude for optimization.  However, the semantics of
941 @samp{volatile} are not well-defined, so it is not a good general
942 solution.  The base Pintos code does not use @samp{volatile} at all.
943
944 The following is @emph{not} a solution, because locks neither prevent
945 interrupts nor prevent the compiler from reordering the code within the
946 region where the lock is held:
947
948 @example
949 lock_acquire (&timer_lock);     /* INCORRECT CODE */
950 timer_put_char = 'x';
951 timer_do_put = true;
952 lock_release (&timer_lock);
953 @end example
954
955 The compiler treats invocation of any function defined externally,
956 that is, in another source file, as a limited form of optimization
957 barrier.  Specifically, the compiler assumes that any externally
958 defined function may access any statically or dynamically allocated
959 data and any local variable whose address is taken.  This often means
960 that explicit barriers can be omitted.  It is one reason that Pintos
961 contains few explicit barriers.
962
963 A function defined in the same source file, or in a header included by
964 the source file, cannot be relied upon as a optimization barrier.
965 This applies even to invocation of a function before its
966 definition, because the compiler may read and parse the entire source
967 file before performing optimization.
968
969 @node Interrupt Handling
970 @section Interrupt Handling
971
972 An @dfn{interrupt} notifies the CPU of some event.  Much of the work
973 of an operating system relates to interrupts in one way or another.
974 For our purposes, we classify interrupts into two broad categories:
975
976 @itemize @bullet
977 @item
978 @dfn{Internal interrupts}, that is, interrupts caused directly by CPU
979 instructions.  System calls, attempts at invalid memory access
980 (@dfn{page faults}), and attempts to divide by zero are some activities
981 that cause internal interrupts.  Because they are caused by CPU
982 instructions, internal interrupts are @dfn{synchronous} or synchronized
983 with CPU instructions.  @func{intr_disable} does not disable internal
984 interrupts.
985
986 @item
987 @dfn{External interrupts}, that is, interrupts originating outside the
988 CPU.  These interrupts come from hardware devices such as the system
989 timer, keyboard, serial ports, and disks.  External interrupts are
990 @dfn{asynchronous}, meaning that their delivery is not
991 synchronized with instruction execution.  Handling of external interrupts
992 can be postponed with @func{intr_disable} and related functions
993 (@pxref{Disabling Interrupts}).
994 @end itemize
995
996 The CPU treats both classes of interrupts largely the same way,
997 so Pintos has common infrastructure to handle both classes.
998 The following section describes this
999 common infrastructure.  The sections after that give the specifics of
1000 external and internal interrupts.
1001
1002 If you haven't already read chapter 3, ``Basic Execution Environment,''
1003 in @bibref{IA32-v1}, it is recommended that you do so now.  You might
1004 also want to skim chapter 5, ``Interrupt and Exception Handling,'' in
1005 @bibref{IA32-v3a}.
1006
1007 @menu
1008 * Interrupt Infrastructure::    
1009 * Internal Interrupt Handling::  
1010 * External Interrupt Handling::  
1011 @end menu
1012
1013 @node Interrupt Infrastructure
1014 @subsection Interrupt Infrastructure
1015
1016 When an interrupt occurs, the CPU saves
1017 its most essential state on a stack and jumps to an interrupt
1018 handler routine.  The 80@var{x}86 architecture supports 256
1019 interrupts, numbered 0 through 255, each with an independent
1020 handler defined in an array called the @dfn{interrupt
1021 descriptor table} or IDT.
1022
1023 In Pintos, @func{intr_init} in @file{threads/interrupt.c} sets up the
1024 IDT so that each entry points to a unique entry point in
1025 @file{threads/intr-stubs.S} named @func{intr@var{NN}_stub}, where
1026 @var{NN} is the interrupt number in
1027 hexadecimal.  Because the CPU doesn't give
1028 us any other way to find out the interrupt number, this entry point
1029 pushes the interrupt number on the stack.  Then it jumps to
1030 @func{intr_entry}, which pushes all the registers that the processor
1031 didn't already push for us, and then calls @func{intr_handler}, which
1032 brings us back into C in @file{threads/interrupt.c}.
1033
1034 The main job of @func{intr_handler} is to call the function
1035 registered for handling the particular interrupt.  (If no
1036 function is registered, it dumps some information to the console and
1037 panics.)  It also does some extra processing for external
1038 interrupts (@pxref{External Interrupt Handling}).
1039
1040 When @func{intr_handler} returns, the assembly code in
1041 @file{threads/intr-stubs.S} restores all the CPU registers saved
1042 earlier and directs the CPU to return from the interrupt.
1043
1044 The following types and functions are common to all
1045 interrupts.
1046
1047 @deftp {Type} {void intr_handler_func (struct intr_frame *@var{frame})}
1048 This is how an interrupt handler function must be declared.  Its @var{frame}
1049 argument (see below) allows it to determine the cause of the interrupt
1050 and the state of the thread that was interrupted.
1051 @end deftp
1052
1053 @deftp {Type} {struct intr_frame}
1054 The stack frame of an interrupt handler, as saved by the CPU, the interrupt
1055 stubs, and @func{intr_entry}.  Its most interesting members are described
1056 below.
1057 @end deftp
1058
1059 @deftypecv {Member} {@struct{intr_frame}} uint32_t edi
1060 @deftypecvx {Member} {@struct{intr_frame}} uint32_t esi
1061 @deftypecvx {Member} {@struct{intr_frame}} uint32_t ebp
1062 @deftypecvx {Member} {@struct{intr_frame}} uint32_t esp_dummy
1063 @deftypecvx {Member} {@struct{intr_frame}} uint32_t ebx
1064 @deftypecvx {Member} {@struct{intr_frame}} uint32_t edx
1065 @deftypecvx {Member} {@struct{intr_frame}} uint32_t ecx
1066 @deftypecvx {Member} {@struct{intr_frame}} uint32_t eax
1067 @deftypecvx {Member} {@struct{intr_frame}} uint16_t es
1068 @deftypecvx {Member} {@struct{intr_frame}} uint16_t ds
1069 Register values in the interrupted thread, pushed by @func{intr_entry}.
1070 The @code{esp_dummy} value isn't actually used (refer to the
1071 description of @code{PUSHA} in @bibref{IA32-v2b} for details).
1072 @end deftypecv
1073
1074 @deftypecv {Member} {@struct{intr_frame}} uint32_t vec_no
1075 The interrupt vector number, ranging from 0 to 255.
1076 @end deftypecv
1077
1078 @deftypecv {Member} {@struct{intr_frame}} uint32_t error_code
1079 The ``error code'' pushed on the stack by the CPU for some internal
1080 interrupts.
1081 @end deftypecv
1082
1083 @deftypecv {Member} {@struct{intr_frame}} void (*eip) (void)
1084 The address of the next instruction to be executed by the interrupted
1085 thread.
1086 @end deftypecv
1087
1088 @deftypecv {Member} {@struct{intr_frame}} {void *} esp
1089 The interrupted thread's stack pointer.
1090 @end deftypecv
1091
1092 @deftypefun {const char *} intr_name (uint8_t @var{vec})
1093 Returns the name of the interrupt numbered @var{vec}, or
1094 @code{"unknown"} if the interrupt has no registered name.
1095 @end deftypefun
1096
1097 @node Internal Interrupt Handling
1098 @subsection Internal Interrupt Handling
1099
1100 Internal interrupts are caused directly by CPU instructions executed by
1101 the running kernel thread or user process (from project 2 onward).  An
1102 internal interrupt is therefore said to arise in a ``process context.''
1103
1104 In an internal interrupt's handler, it can make sense to examine the
1105 @struct{intr_frame} passed to the interrupt handler, or even to modify
1106 it.  When the interrupt returns, modifications in @struct{intr_frame}
1107 become changes to the calling thread or process's state.  For example,
1108 the Pintos system call handler returns a value to the user program by
1109 modifying the saved EAX register (@pxref{System Call Details}).
1110
1111 There are no special restrictions on what an internal interrupt
1112 handler can or can't do.  Generally they should run with interrupts
1113 enabled, just like other code, and so they can be preempted by other
1114 kernel threads.  Thus, they do need to synchronize with other threads
1115 on shared data and other resources (@pxref{Synchronization}).
1116
1117 Internal interrupt handlers can be invoked recursively.  For example,
1118 the system call handler might cause a page fault while attempting to
1119 read user memory.  Deep recursion would risk overflowing the limited
1120 kernel stack (@pxref{struct thread}), but should be unnecessary.
1121
1122 @deftypefun void intr_register_int (uint8_t @var{vec}, int @var{dpl}, enum intr_level @var{level}, intr_handler_func *@var{handler}, const char *@var{name})
1123 Registers @var{handler} to be called when internal interrupt numbered
1124 @var{vec} is triggered.  Names the interrupt @var{name} for debugging
1125 purposes.
1126
1127 If @var{level} is @code{INTR_ON}, external interrupts will be processed
1128 normally during the interrupt handler's execution, which is normally
1129 desirable.  Specifying @code{INTR_OFF} will cause the CPU to disable
1130 external interrupts when it invokes the interrupt handler.  The effect
1131 is slightly different from calling @func{intr_disable} inside the
1132 handler, because that leaves a window of one or more CPU instructions in
1133 which external interrupts are still enabled.  This is important for the
1134 page fault handler; refer to the comments in @file{userprog/exception.c}
1135 for details.
1136
1137 @var{dpl} determines how the interrupt can be invoked.  If @var{dpl} is
1138 0, then the interrupt can be invoked only by kernel threads.  Otherwise
1139 @var{dpl} should be 3, which allows user processes to invoke the
1140 interrupt with an explicit INT instruction.  The value of @var{dpl}
1141 doesn't affect user processes' ability to invoke the interrupt
1142 indirectly, e.g.@: an invalid memory reference will cause a page fault
1143 regardless of @var{dpl}.
1144 @end deftypefun
1145
1146 @node External Interrupt Handling
1147 @subsection External Interrupt Handling
1148
1149 External interrupts are caused by events outside the CPU.
1150 They are asynchronous, so they can be invoked at any time that
1151 interrupts have not been disabled.  We say that an external interrupt
1152 runs in an ``interrupt context.''
1153
1154 In an external interrupt, the @struct{intr_frame} passed to the
1155 handler is not very meaningful.  It describes the state of the thread
1156 or process that was interrupted, but there is no way to predict which
1157 one that is.  It is possible, although rarely useful, to examine it, but
1158 modifying it is a recipe for disaster.
1159
1160 Only one external interrupt may be processed at a time.  Neither
1161 internal nor external interrupt may nest within an external interrupt
1162 handler.  Thus, an external interrupt's handler must run with interrupts
1163 disabled (@pxref{Disabling Interrupts}).
1164
1165 An external interrupt handler must not sleep or yield, which rules out
1166 calling @func{lock_acquire}, @func{thread_yield}, and many other
1167 functions.  Sleeping in interrupt context would effectively put the
1168 interrupted thread to sleep, too, until the interrupt handler was again
1169 scheduled and returned.  This would be unfair to the unlucky thread, and
1170 it would deadlock if the handler were waiting for the sleeping thread
1171 to, e.g., release a lock.
1172
1173 An external interrupt handler
1174 effectively monopolizes the machine and delays all other activities.
1175 Therefore, external interrupt handlers should complete as quickly as
1176 they can.  Anything that require much CPU time should instead run in a
1177 kernel thread, possibly one that the interrupt triggers using a
1178 synchronization primitive.
1179
1180 External interrupts are controlled by a
1181 pair of devices outside the CPU called @dfn{programmable interrupt
1182 controllers}, @dfn{PICs} for short.  When @func{intr_init} sets up the
1183 CPU's IDT, it also initializes the PICs for interrupt handling.  The
1184 PICs also must be ``acknowledged'' at the end of processing for each
1185 external interrupt.  @func{intr_handler} takes care of that by calling
1186 @func{pic_end_of_interrupt}, which properly signals the PICs.
1187
1188 The following functions relate to external
1189 interrupts.
1190
1191 @deftypefun void intr_register_ext (uint8_t @var{vec}, intr_handler_func *@var{handler}, const char *@var{name})
1192 Registers @var{handler} to be called when external interrupt numbered
1193 @var{vec} is triggered.  Names the interrupt @var{name} for debugging
1194 purposes.  The handler will run with interrupts disabled.
1195 @end deftypefun
1196
1197 @deftypefun bool intr_context (void)
1198 Returns true if we are running in an interrupt context, otherwise
1199 false.  Mainly used in functions that might sleep
1200 or that otherwise should not be called from interrupt context, in this
1201 form:
1202 @example
1203 ASSERT (!intr_context ());
1204 @end example
1205 @end deftypefun
1206
1207 @deftypefun void intr_yield_on_return (void)
1208 When called in an interrupt context, causes @func{thread_yield} to be
1209 called just before the interrupt returns.  Used
1210 in the timer interrupt handler when a thread's time slice expires, to
1211 cause a new thread to be scheduled.
1212 @end deftypefun
1213
1214 @node Memory Allocation
1215 @section Memory Allocation
1216
1217 Pintos contains two memory allocators, one that allocates memory in
1218 units of a page, and one that can allocate blocks of any size.
1219
1220 @menu
1221 * Page Allocator::              
1222 * Block Allocator::             
1223 @end menu
1224
1225 @node Page Allocator
1226 @subsection Page Allocator
1227
1228 The page allocator declared in @file{threads/palloc.h} allocates
1229 memory in units of a page.  It is most often used to allocate memory
1230 one page at a time, but it can also allocate multiple contiguous pages
1231 at once.
1232
1233 The page allocator divides the memory it allocates into two pools,
1234 called the kernel and user pools.  By default, each pool gets half of
1235 system memory, but this can be changed with the @option{-ul} kernel
1236 command line
1237 option (@pxref{Why PAL_USER?}).  An allocation request draws from one
1238 pool or the other.  If one pool becomes empty, the other may still
1239 have free pages.  The user pool should be used for allocating memory
1240 for user processes and the kernel pool for all other allocations.
1241 This will only become important starting with project 3.  Until then,
1242 all allocations should be made from the kernel pool.
1243
1244 Each pool's usage is tracked with a bitmap, one bit per page in
1245 the pool.  A request to allocate @var{n} pages scans the bitmap
1246 for @var{n} consecutive bits set to
1247 false, indicating that those pages are free, and then sets those bits
1248 to true to mark them as used.  This is a ``first fit'' allocation
1249 strategy (@pxref{Wilson}).
1250
1251 The page allocator is subject to fragmentation.  That is, it may not
1252 be possible to allocate @var{n} contiguous pages even though @var{n}
1253 or more pages are free, because the free pages are separated by used
1254 pages.  In fact, in pathological cases it may be impossible to
1255 allocate 2 contiguous pages even though half of the pool's pages are free.
1256 Single-page requests can't fail due to fragmentation, so
1257 requests for multiple contiguous pages should be limited as much as
1258 possible.
1259
1260 Pages may not be allocated from interrupt context, but they may be
1261 freed.
1262
1263 When a page is freed, all of its bytes are cleared to @t{0xcc}, as
1264 a debugging aid (@pxref{Debugging Tips}).
1265
1266 Page allocator types and functions are described below.
1267
1268 @deftypefun {void *} palloc_get_page (enum palloc_flags @var{flags})
1269 @deftypefunx {void *} palloc_get_multiple (enum palloc_flags @var{flags}, size_t @var{page_cnt})
1270 Obtains and returns one page, or @var{page_cnt} contiguous pages,
1271 respectively.  Returns a null pointer if the pages cannot be allocated.
1272
1273 The @var{flags} argument may be any combination of the following flags:
1274
1275 @defvr {Page Allocator Flag} @code{PAL_ASSERT}
1276 If the pages cannot be allocated, panic the kernel.  This is only
1277 appropriate during kernel initialization.  User processes
1278 should never be permitted to panic the kernel.
1279 @end defvr
1280
1281 @defvr {Page Allocator Flag} @code{PAL_ZERO}
1282 Zero all the bytes in the allocated pages before returning them.  If not
1283 set, the contents of newly allocated pages are unpredictable.
1284 @end defvr
1285
1286 @defvr {Page Allocator Flag} @code{PAL_USER}
1287 Obtain the pages from the user pool.  If not set, pages are allocated
1288 from the kernel pool.
1289 @end defvr
1290 @end deftypefun
1291
1292 @deftypefun void palloc_free_page (void *@var{page})
1293 @deftypefunx void palloc_free_multiple (void *@var{pages}, size_t @var{page_cnt})
1294 Frees one page, or @var{page_cnt} contiguous pages, respectively,
1295 starting at @var{pages}.  All of the pages must have been obtained using
1296 @func{palloc_get_page} or @func{palloc_get_multiple}.
1297 @end deftypefun
1298
1299 @node Block Allocator
1300 @subsection Block Allocator
1301
1302 The block allocator, declared in @file{threads/malloc.h}, can allocate
1303 blocks of any size.  It is layered on top of the page allocator
1304 described in the previous section.  Blocks returned by the block
1305 allocator are obtained from the kernel pool.
1306
1307 The block allocator uses two different strategies for allocating memory.
1308 The first strategy applies to blocks that are 1 kB or smaller
1309 (one-fourth of the page size).  These allocations are rounded up to the
1310 nearest power of 2, or 16 bytes, whichever is larger.  Then they are
1311 grouped into a page used only for allocations of that size.
1312
1313 The second strategy applies to blocks larger than 1 kB.
1314 These allocations (plus a small amount of overhead) are rounded up to
1315 the nearest page in size, and then the block allocator requests that
1316 number of contiguous pages from the page allocator.
1317
1318 In either case, the difference between the allocation requested size
1319 and the actual block size is wasted.  A real operating system would
1320 carefully tune its allocator to minimize this waste, but this is
1321 unimportant in an instructional system like Pintos.
1322
1323 As long as a page can be obtained from the page allocator, small
1324 allocations always succeed.  Most small allocations do not require a
1325 new page from the page allocator at all, because they are satisfied
1326 using part of a page already allocated.  However, large allocations
1327 always require calling into the page allocator, and any allocation
1328 that needs more than one contiguous page can fail due to fragmentation,
1329 as already discussed in the previous section.  Thus, you should
1330 minimize the number of large allocations in your code, especially
1331 those over approximately 4 kB each.
1332
1333 When a block is freed, all of its bytes are cleared to @t{0xcc}, as
1334 a debugging aid (@pxref{Debugging Tips}).
1335
1336 The block allocator may not be called from interrupt context.
1337
1338 The block allocator functions are described below.  Their interfaces are
1339 the same as the standard C library functions of the same names.
1340
1341 @deftypefun {void *} malloc (size_t @var{size})
1342 Obtains and returns a new block, from the kernel pool, at least
1343 @var{size} bytes long.  Returns a null pointer if @var{size} is zero or
1344 if memory is not available.
1345 @end deftypefun
1346
1347 @deftypefun {void *} calloc (size_t @var{a}, size_t @var{b})
1348 Obtains a returns a new block, from the kernel pool, at least
1349 @code{@var{a} * @var{b}} bytes long.  The block's contents will be
1350 cleared to zeros.  Returns a null pointer if @var{a} or @var{b} is zero
1351 or if insufficient memory is available.
1352 @end deftypefun
1353
1354 @deftypefun {void *} realloc (void *@var{block}, size_t @var{new_size})
1355 Attempts to resize @var{block} to @var{new_size} bytes, possibly moving
1356 it in the process.  If successful, returns the new block, in which case
1357 the old block must no longer be accessed.  On failure, returns a null
1358 pointer, and the old block remains valid.
1359
1360 A call with @var{block} null is equivalent to @func{malloc}.  A call
1361 with @var{new_size} zero is equivalent to @func{free}.
1362 @end deftypefun
1363
1364 @deftypefun void free (void *@var{block})
1365 Frees @var{block}, which must have been previously returned by
1366 @func{malloc}, @func{calloc}, or @func{realloc} (and not yet freed).
1367 @end deftypefun
1368
1369 @node Virtual Addresses
1370 @section Virtual Addresses
1371
1372 A 32-bit virtual address can be divided into a 20-bit @dfn{page number}
1373 and a 12-bit @dfn{page offset} (or just @dfn{offset}), like this:
1374
1375 @example
1376 @group
1377                31               12 11        0
1378               +-------------------+-----------+
1379               |    Page Number    |   Offset  |
1380               +-------------------+-----------+
1381                        Virtual Address
1382 @end group
1383 @end example
1384
1385 Header @file{threads/vaddr.h} defines these functions and macros for
1386 working with virtual addresses:
1387
1388 @defmac PGSHIFT
1389 @defmacx PGBITS
1390 The bit index (0) and number of bits (12) of the offset part of a
1391 virtual address, respectively.
1392 @end defmac
1393
1394 @defmac PGMASK
1395 A bit mask with the bits in the page offset set to 1, the rest set to 0
1396 (@t{0xfff}).
1397 @end defmac
1398
1399 @defmac PGSIZE
1400 The page size in bytes (4,096).
1401 @end defmac
1402
1403 @deftypefun unsigned pg_ofs (const void *@var{va})
1404 Extracts and returns the page offset in virtual address @var{va}.
1405 @end deftypefun
1406
1407 @deftypefun uintptr_t pg_no (const void *@var{va})
1408 Extracts and returns the page number in virtual address @var{va}.
1409 @end deftypefun
1410
1411 @deftypefun {void *} pg_round_down (const void *@var{va})
1412 Returns the start of the virtual page that @var{va} points within, that
1413 is, @var{va} with the page offset set to 0.
1414 @end deftypefun
1415
1416 @deftypefun {void *} pg_round_up (const void *@var{va})
1417 Returns @var{va} rounded up to the nearest page boundary.
1418 @end deftypefun
1419
1420 Virtual memory in Pintos is divided into two regions: user virtual
1421 memory and kernel virtual memory (@pxref{Virtual Memory Layout}).  The
1422 boundary between them is @code{PHYS_BASE}:
1423
1424 @defmac PHYS_BASE
1425 Base address of kernel virtual memory.  It defaults to @t{0xc0000000} (3
1426 GB), but it may be changed to any multiple of @t{0x10000000} from
1427 @t{0x80000000} to @t{0xf0000000}.
1428
1429 User virtual memory ranges from virtual address 0 up to
1430 @code{PHYS_BASE}.  Kernel virtual memory occupies the rest of the
1431 virtual address space, from @code{PHYS_BASE} up to 4 GB.
1432 @end defmac
1433
1434 @deftypefun {bool} is_user_vaddr (const void *@var{va})
1435 @deftypefunx {bool} is_kernel_vaddr (const void *@var{va})
1436 Returns true if @var{va} is a user or kernel virtual address,
1437 respectively, false otherwise.
1438 @end deftypefun
1439
1440 The 80@var{x}86 doesn't provide any way to directly access memory given
1441 a physical address.  This ability is often necessary in an operating
1442 system kernel, so Pintos works around it by mapping kernel virtual
1443 memory one-to-one to physical memory.  That is, virtual address
1444 @code{PHYS_BASE} accesses physical address 0, virtual address
1445 @code{PHYS_BASE} + @t{0x1234} accesses physical address @t{0x1234}, and
1446 so on up to the size of the machine's physical memory.  Thus, adding
1447 @code{PHYS_BASE} to a physical address obtains a kernel virtual address
1448 that accesses that address; conversely, subtracting @code{PHYS_BASE}
1449 from a kernel virtual address obtains the corresponding physical
1450 address.  Header @file{threads/vaddr.h} provides a pair of functions to
1451 do these translations:
1452
1453 @deftypefun {void *} ptov (uintptr_t @var{pa})
1454 Returns the kernel virtual address corresponding to physical address
1455 @var{pa}, which should be between 0 and the number of bytes of physical
1456 memory.
1457 @end deftypefun
1458
1459 @deftypefun {uintptr_t} vtop (void *@var{va})
1460 Returns the physical address corresponding to @var{va}, which must be a
1461 kernel virtual address.
1462 @end deftypefun
1463
1464 @node Page Table
1465 @section Page Table
1466
1467 The code in @file{pagedir.c} is an abstract interface to the 80@var{x}86
1468 hardware page table, also called a ``page directory'' by Intel processor
1469 documentation.  The page table interface uses a @code{uint32_t *} to
1470 represent a page table because this is convenient for accessing their
1471 internal structure.
1472
1473 The sections below describe the page table interface and internals.
1474
1475 @menu
1476 * Page Table Creation Destruction Activation::  
1477 * Page Tables Inspection and Updates::  
1478 * Page Table Accessed and Dirty Bits::  
1479 * Page Table Details::          
1480 @end menu
1481
1482 @node Page Table Creation Destruction Activation
1483 @subsection Creation, Destruction, and Activation
1484
1485 These functions create, destroy, and activate page tables.  The base
1486 Pintos code already calls these functions where necessary, so it should
1487 not be necessary to call them yourself.
1488
1489 @deftypefun {uint32_t *} pagedir_create (void)
1490 Creates and returns a new page table.  The new page table contains
1491 Pintos's normal kernel virtual page mappings, but no user virtual
1492 mappings.
1493
1494 Returns a null pointer if memory cannot be obtained.
1495 @end deftypefun
1496
1497 @deftypefun void pagedir_destroy (uint32_t *@var{pd})
1498 Frees all of the resources held by @var{pd}, including the page table
1499 itself and the frames that it maps.
1500 @end deftypefun
1501
1502 @deftypefun void pagedir_activate (uint32_t *@var{pd})
1503 Activates @var{pd}.  The active page table is the one used by the CPU to
1504 translate memory references.
1505 @end deftypefun
1506
1507 @node Page Tables Inspection and Updates
1508 @subsection Inspection and Updates
1509
1510 These functions examine or update the mappings from pages to frames
1511 encapsulated by a page table.  They work on both active and inactive
1512 page tables (that is, those for running and suspended processes),
1513 flushing the TLB as necessary.
1514
1515 @deftypefun bool pagedir_set_page (uint32_t *@var{pd}, void *@var{upage}, void *@var{kpage}, bool @var{writable})
1516 Adds to @var{pd} a mapping from user page @var{upage} to the frame identified
1517 by kernel virtual address @var{kpage}.  If @var{writable} is true, the
1518 page is mapped read/write; otherwise, it is mapped read-only.
1519
1520 User page @var{upage} must not already be mapped in @var{pd}.
1521
1522 Kernel page @var{kpage} should be a kernel virtual address obtained from
1523 the user pool with @code{palloc_get_page(PAL_USER)} (@pxref{Why
1524 PAL_USER?}).
1525
1526 Returns true if successful, false on failure.  Failure will occur if
1527 additional memory required for the page table cannot be obtained.
1528 @end deftypefun
1529
1530 @deftypefun {void *} pagedir_get_page (uint32_t *@var{pd}, const void *@var{uaddr})
1531 Looks up the frame mapped to @var{uaddr} in @var{pd}.  Returns the
1532 kernel virtual address for that frame, if @var{uaddr} is mapped, or a
1533 null pointer if it is not.
1534 @end deftypefun
1535
1536 @deftypefun void pagedir_clear_page (uint32_t *@var{pd}, void *@var{page})
1537 Marks @var{page} ``not present'' in @var{pd}.  Later accesses to
1538 the page will fault.
1539
1540 Other bits in the page table for @var{page} are preserved, permitting
1541 the accessed and dirty bits (see the next section) to be checked.
1542
1543 This function has no effect if @var{page} is not mapped.
1544 @end deftypefun
1545
1546 @node Page Table Accessed and Dirty Bits
1547 @subsection Accessed and Dirty Bits
1548
1549 80@var{x}86 hardware provides some assistance for implementing page
1550 replacement algorithms, through a pair of bits in the page table entry
1551 (PTE) for each page.  On any read or write to a page, the CPU sets the
1552 @dfn{accessed bit} to 1 in the page's PTE, and on any write, the CPU
1553 sets the @dfn{dirty bit} to 1.  The CPU never resets these bits to 0,
1554 but the OS may do so.
1555
1556 Proper interpretation of these bits requires understanding of
1557 @dfn{aliases}, that is, two (or more) pages that refer to the same
1558 frame.  When an aliased frame is accessed, the accessed and dirty bits
1559 are updated in only one page table entry (the one for the page used for
1560 access).  The accessed and dirty bits for the other aliases are not
1561 updated.
1562
1563 @xref{Accessed and Dirty Bits}, on applying these bits in implementing
1564 page replacement algorithms.
1565
1566 @deftypefun bool pagedir_is_dirty (uint32_t *@var{pd}, const void *@var{page})
1567 @deftypefunx bool pagedir_is_accessed (uint32_t *@var{pd}, const void *@var{page})
1568 Returns true if page directory @var{pd} contains a page table entry for
1569 @var{page} that is marked dirty (or accessed).  Otherwise,
1570 returns false.
1571 @end deftypefun
1572
1573 @deftypefun void pagedir_set_dirty (uint32_t *@var{pd}, const void *@var{page}, bool @var{value})
1574 @deftypefunx void pagedir_set_accessed (uint32_t *@var{pd}, const void *@var{page}, bool @var{value})
1575 If page directory @var{pd} has a page table entry for @var{page}, then
1576 its dirty (or accessed) bit is set to @var{value}.
1577 @end deftypefun
1578
1579 @node Page Table Details
1580 @subsection Page Table Details
1581
1582 The functions provided with Pintos are sufficient to implement the
1583 projects.  However, you may still find it worthwhile to understand the
1584 hardware page table format, so we'll go into a little detail in this
1585 section.
1586
1587 @menu
1588 * Page Table Structure::        
1589 * Page Table Entry Format::     
1590 * Page Directory Entry Format::  
1591 @end menu
1592
1593 @node Page Table Structure
1594 @subsubsection Structure
1595
1596 The top-level paging data structure is a page called the ``page
1597 directory'' (PD) arranged as an array of 1,024 32-bit page directory
1598 entries (PDEs), each of which represents 4 MB of virtual memory.  Each
1599 PDE may point to the physical address of another page called a
1600 ``page table'' (PT) arranged, similarly, as an array of 1,024
1601 32-bit page table entries (PTEs), each of which translates a single 4
1602 kB virtual page to a physical page.
1603
1604 Translation of a virtual address into a physical address follows
1605 the three-step process illustrated in the diagram
1606 below:@footnote{Actually, virtual to physical translation on the
1607 80@var{x}86 architecture occurs via an intermediate ``linear
1608 address,'' but Pintos (and most modern 80@var{x}86 OSes) set up the CPU
1609 so that linear and virtual addresses are one and the same.  Thus, you
1610 can effectively ignore this CPU feature.}
1611
1612 @enumerate 1
1613 @item
1614 The most-significant 10 bits of the virtual address (bits 22@dots{}31)
1615 index the page directory.  If the PDE is marked ``present,'' the
1616 physical address of a page table is read from the PDE thus obtained.
1617 If the PDE is marked ``not present'' then a page fault occurs.
1618
1619 @item
1620 The next 10 bits of the virtual address (bits 12@dots{}21) index
1621 the page table.  If the PTE is marked ``present,'' the physical
1622 address of a data page is read from the PTE thus obtained.  If the PTE
1623 is marked ``not present'' then a page fault occurs.
1624
1625 @item
1626 The least-significant 12 bits of the virtual address (bits 0@dots{}11)
1627 are added to the data page's physical base address, yielding the final
1628 physical address.
1629 @end enumerate
1630
1631 @example
1632 @group
1633  31                  22 21                  12 11                   0
1634 +----------------------+----------------------+----------------------+
1635 | Page Directory Index |   Page Table Index   |    Page Offset       |
1636 +----------------------+----------------------+----------------------+
1637              |                    |                     |
1638      _______/             _______/                _____/
1639     /                    /                       /
1640    /    Page Directory  /      Page Table       /    Data Page
1641   /     .____________. /     .____________.    /   .____________.
1642   |1,023|____________| |1,023|____________|    |   |____________|
1643   |1,022|____________| |1,022|____________|    |   |____________|
1644   |1,021|____________| |1,021|____________|    \__\|____________|
1645   |1,020|____________| |1,020|____________|       /|____________|
1646   |     |            | |     |            |        |            |
1647   |     |            | \____\|            |_       |            |
1648   |     |      .     |      /|      .     | \      |      .     |
1649   \____\|      .     |_      |      .     |  |     |      .     |
1650        /|      .     | \     |      .     |  |     |      .     |
1651         |      .     |  |    |      .     |  |     |      .     |
1652         |            |  |    |            |  |     |            |
1653         |____________|  |    |____________|  |     |____________|
1654        4|____________|  |   4|____________|  |     |____________|
1655        3|____________|  |   3|____________|  |     |____________|
1656        2|____________|  |   2|____________|  |     |____________|
1657        1|____________|  |   1|____________|  |     |____________|
1658        0|____________|  \__\0|____________|  \____\|____________|
1659                            /                      /
1660 @end group
1661 @end example
1662
1663 Pintos provides some macros and functions that are useful for working
1664 with raw page tables:
1665
1666 @defmac PTSHIFT
1667 @defmacx PTBITS
1668 The starting bit index (12) and number of bits (10), respectively, in a
1669 page table index.
1670 @end defmac
1671
1672 @defmac PTMASK
1673 A bit mask with the bits in the page table index set to 1 and the rest
1674 set to 0 (@t{0x3ff000}).
1675 @end defmac
1676
1677 @defmac PTSPAN
1678 The number of bytes of virtual address space that a single page table
1679 page covers (4,194,304 bytes, or 4 MB).
1680 @end defmac
1681
1682 @defmac PDSHIFT
1683 @defmacx PDBITS
1684 The starting bit index (22) and number of bits (10), respectively, in a
1685 page directory index.
1686 @end defmac
1687
1688 @defmac PDMASK
1689 A bit mask with the bits in the page directory index set to 1 and other
1690 bits set to 0 (@t{0xffc00000}).
1691 @end defmac
1692
1693 @deftypefun uintptr_t pd_no (const void *@var{va})
1694 @deftypefunx uintptr_t pt_no (const void *@var{va})
1695 Returns the page directory index or page table index, respectively, for
1696 virtual address @var{va}.  These functions are defined in
1697 @file{threads/pte.h}.
1698 @end deftypefun
1699
1700 @deftypefun unsigned pg_ofs (const void *@var{va})
1701 Returns the page offset for virtual address @var{va}.  This function is
1702 defined in @file{threads/vaddr.h}.
1703 @end deftypefun
1704
1705 @node Page Table Entry Format
1706 @subsubsection Page Table Entry Format
1707
1708 You do not need to understand the PTE format to do the Pintos
1709 projects, unless you wish to incorporate the page table into your
1710 supplemental page table (@pxref{Managing the Supplemental Page Table}).
1711
1712 The actual format of a page table entry is summarized below.  For
1713 complete information, refer to section 3.7, ``Page Translation Using
1714 32-Bit Physical Addressing,'' in @bibref{IA32-v3a}.
1715
1716 @example
1717 @group
1718  31                                   12 11 9      6 5     2 1 0
1719 +---------------------------------------+----+----+-+-+---+-+-+-+
1720 |           Physical Address            | AVL|    |D|A|   |U|W|P|
1721 +---------------------------------------+----+----+-+-+---+-+-+-+
1722 @end group
1723 @end example
1724
1725 Some more information on each bit is given below.  The names are
1726 @file{threads/pte.h} macros that represent the bits' values:
1727
1728 @defmac PTE_P
1729 Bit 0, the ``present'' bit.  When this bit is 1, the
1730 other bits are interpreted as described below.  When this bit is 0, any
1731 attempt to access the page will page fault.  The remaining bits are then
1732 not used by the CPU and may be used by the OS for any purpose.
1733 @end defmac
1734
1735 @defmac PTE_W
1736 Bit 1, the ``read/write'' bit.  When it is 1, the page
1737 is writable.  When it is 0, write attempts will page fault.
1738 @end defmac
1739
1740 @defmac PTE_U
1741 Bit 2, the ``user/supervisor'' bit.  When it is 1, user
1742 processes may access the page.  When it is 0, only the kernel may access
1743 the page (user accesses will page fault).
1744
1745 Pintos clears this bit in PTEs for kernel virtual memory, to prevent
1746 user processes from accessing them.
1747 @end defmac
1748  
1749 @defmac PTE_A
1750 Bit 5, the ``accessed'' bit.  @xref{Page Table Accessed
1751 and Dirty Bits}.
1752 @end defmac
1753
1754 @defmac PTE_D
1755 Bit 6, the ``dirty'' bit.  @xref{Page Table Accessed and
1756 Dirty Bits}.
1757 @end defmac
1758
1759 @defmac PTE_AVL
1760 Bits 9@dots{}11, available for operating system use.
1761 Pintos, as provided, does not use them and sets them to 0.
1762 @end defmac
1763
1764 @defmac PTE_ADDR
1765 Bits 12@dots{}31, the top 20 bits of the physical address of a frame.
1766 The low 12 bits of the frame's address are always 0.
1767 @end defmac
1768
1769 Other bits are either reserved or uninteresting in a Pintos context and
1770 should be set to@tie{}0.
1771
1772 Header @file{threads/pte.h} defines three functions for working with
1773 page table entries:
1774
1775 @deftypefun uint32_t pte_create_kernel (uint32_t *@var{page}, bool @var{writable})
1776 Returns a page table entry that points to @var{page}, which should be a
1777 kernel virtual address.  The PTE's present bit will be set.  It will be
1778 marked for kernel-only access.  If @var{writable} is true, the PTE will
1779 also be marked read/write; otherwise, it will be read-only.
1780 @end deftypefun
1781
1782 @deftypefun uint32_t pte_create_user (uint32_t *@var{page}, bool @var{writable})
1783 Returns a page table entry that points to @var{page}, which should be
1784 the kernel virtual address of a frame in the user pool (@pxref{Why
1785 PAL_USER?}).  The PTE's present bit will be set and it will be marked to
1786 allow user-mode access.  If @var{writable} is true, the PTE will also be
1787 marked read/write; otherwise, it will be read-only.
1788 @end deftypefun
1789
1790 @deftypefun {void *} pte_get_page (uint32_t @var{pte})
1791 Returns the kernel virtual address for the frame that @var{pte} points
1792 to.  The @var{pte} may be present or not-present; if it is not-present
1793 then the pointer returned is only meaningful if the address bits in the PTE
1794 actually represent a physical address.
1795 @end deftypefun
1796
1797 @node Page Directory Entry Format
1798 @subsubsection Page Directory Entry Format
1799
1800 Page directory entries have the same format as PTEs, except that the
1801 physical address points to a page table page instead of a frame.  Header
1802 @file{threads/pte.h} defines two functions for working with page
1803 directory entries:
1804
1805 @deftypefun uint32_t pde_create (uint32_t *@var{pt})
1806 Returns a page directory that points to @var{page}, which should be the
1807 kernel virtual address of a page table page.  The PDE's present bit will
1808 be set, it will be marked to allow user-mode access, and it will be
1809 marked read/write.
1810 @end deftypefun
1811
1812 @deftypefun {uint32_t *} pde_get_pt (uint32_t @var{pde})
1813 Returns the kernel virtual address for the page table page that
1814 @var{pde}, which must be marked present, points to.
1815 @end deftypefun
1816
1817 @node Hash Table
1818 @section Hash Table
1819
1820 Pintos provides a hash table data structure in @file{lib/kernel/hash.c}.
1821 To use it you will need to include its header file,
1822 @file{lib/kernel/hash.h}, with @code{#include <hash.h>}.
1823 No code provided with Pintos uses the hash table, which means that you
1824 are free to use it as is, modify its implementation for your own
1825 purposes, or ignore it, as you wish.
1826
1827 Most implementations of the virtual memory project use a hash table to
1828 translate pages to frames.  You may find other uses for hash tables as
1829 well.
1830
1831 @menu
1832 * Hash Data Types::             
1833 * Basic Hash Functions::        
1834 * Hash Search Functions::       
1835 * Hash Iteration Functions::    
1836 * Hash Table Example::          
1837 * Hash Auxiliary Data::         
1838 * Hash Synchronization::        
1839 @end menu
1840
1841 @node Hash Data Types
1842 @subsection Data Types
1843
1844 A hash table is represented by @struct{hash}.
1845
1846 @deftp {Type} {struct hash}
1847 Represents an entire hash table.  The actual members of @struct{hash}
1848 are ``opaque.''  That is, code that uses a hash table should not access
1849 @struct{hash} members directly, nor should it need to.  Instead, use
1850 hash table functions and macros.
1851 @end deftp
1852
1853 The hash table operates on elements of type @struct{hash_elem}.
1854
1855 @deftp {Type} {struct hash_elem}
1856 Embed a @struct{hash_elem} member in the structure you want to include
1857 in a hash table.  Like @struct{hash}, @struct{hash_elem} is opaque.
1858 All functions for operating on hash table elements actually take and
1859 return pointers to @struct{hash_elem}, not pointers to your hash table's
1860 real element type.
1861 @end deftp
1862
1863 You will often need to obtain a @struct{hash_elem} given a real element
1864 of the hash table, and vice versa.  Given a real element of the hash
1865 table, you may use the @samp{&} operator to obtain a pointer to its
1866 @struct{hash_elem}.  Use the @code{hash_entry()} macro to go the other
1867 direction.
1868
1869 @deftypefn {Macro} {@var{type} *} hash_entry (struct hash_elem *@var{elem}, @var{type}, @var{member})
1870 Returns a pointer to the structure that @var{elem}, a pointer to a
1871 @struct{hash_elem}, is embedded within.  You must provide @var{type},
1872 the name of the structure that @var{elem} is inside, and @var{member},
1873 the name of the member in @var{type} that @var{elem} points to.
1874
1875 For example, suppose @code{h} is a @code{struct hash_elem *} variable
1876 that points to a @struct{thread} member (of type @struct{hash_elem})
1877 named @code{h_elem}.  Then, @code{hash_entry@tie{}(h, struct thread, h_elem)}
1878 yields the address of the @struct{thread} that @code{h} points within.
1879 @end deftypefn
1880
1881 @xref{Hash Table Example}, for an example.
1882
1883 Each hash table element must contain a key, that is, data that
1884 identifies and distinguishes elements, which must be unique
1885 among elements in the hash table.  (Elements may
1886 also contain non-key data that need not be unique.)  While an element is
1887 in a hash table, its key data must not be changed.  Instead, if need be,
1888 remove the element from the hash table, modify its key, then reinsert
1889 the element.
1890
1891 For each hash table, you must write two functions that act on keys: a
1892 hash function and a comparison function.  These functions must match the
1893 following prototypes:
1894
1895 @deftp {Type} {unsigned hash_hash_func (const struct hash_elem *@var{element}, void *@var{aux})}
1896 Returns a hash of @var{element}'s data, as a value anywhere in the range
1897 of @code{unsigned int}.  The hash of an element should be a
1898 pseudo-random function of the element's key.  It must not depend on
1899 non-key data in the element or on any non-constant data other than the
1900 key.  Pintos provides the following functions as a suitable basis for
1901 hash functions.
1902
1903 @deftypefun unsigned hash_bytes (const void *@var{buf}, size_t *@var{size})
1904 Returns a hash of the @var{size} bytes starting at @var{buf}.  The
1905 implementation is the general-purpose
1906 @uref{http://en.wikipedia.org/wiki/Fowler_Noll_Vo_hash, Fowler-Noll-Vo
1907 hash} for 32-bit words.
1908 @end deftypefun
1909
1910 @deftypefun unsigned hash_string (const char *@var{s})
1911 Returns a hash of null-terminated string @var{s}.
1912 @end deftypefun
1913
1914 @deftypefun unsigned hash_int (int @var{i})
1915 Returns a hash of integer @var{i}.
1916 @end deftypefun
1917
1918 If your key is a single piece of data of an appropriate type, it is
1919 sensible for your hash function to directly return the output of one of
1920 these functions.  For multiple pieces of data, you may wish to combine
1921 the output of more than one call to them using, e.g., the @samp{^}
1922 (exclusive or)
1923 operator.  Finally, you may entirely ignore these functions and write
1924 your own hash function from scratch, but remember that your goal is to
1925 build an operating system kernel, not to design a hash function.
1926
1927 @xref{Hash Auxiliary Data}, for an explanation of @var{aux}.
1928 @end deftp
1929
1930 @deftp {Type} {bool hash_less_func (const struct hash_elem *@var{a}, const struct hash_elem *@var{b}, void *@var{aux})}
1931 Compares the keys stored in elements @var{a} and @var{b}.  Returns
1932 true if @var{a} is less than @var{b}, false if @var{a} is greater than
1933 or equal to @var{b}.
1934
1935 If two elements compare equal, then they must hash to equal values.
1936
1937 @xref{Hash Auxiliary Data}, for an explanation of @var{aux}.
1938 @end deftp
1939
1940 @xref{Hash Table Example}, for hash and comparison function examples.
1941
1942 A few functions accept a pointer to a third kind of
1943 function as an argument:
1944
1945 @deftp {Type} {void hash_action_func (struct hash_elem *@var{element}, void *@var{aux})}
1946 Performs some kind of action, chosen by the caller, on @var{element}.
1947
1948 @xref{Hash Auxiliary Data}, for an explanation of @var{aux}.
1949 @end deftp
1950
1951 @node Basic Hash Functions
1952 @subsection Basic Functions
1953
1954 These functions create, destroy, and inspect hash tables.
1955
1956 @deftypefun bool hash_init (struct hash *@var{hash}, hash_hash_func *@var{hash_func}, hash_less_func *@var{less_func}, void *@var{aux})
1957 Initializes @var{hash} as a hash table with @var{hash_func} as hash
1958 function, @var{less_func} as comparison function, and @var{aux} as
1959 auxiliary data.
1960 Returns true if successful, false on failure.  @func{hash_init} calls
1961 @func{malloc} and fails if memory cannot be allocated.
1962
1963 @xref{Hash Auxiliary Data}, for an explanation of @var{aux}, which is
1964 most often a null pointer.
1965 @end deftypefun
1966
1967 @deftypefun void hash_clear (struct hash *@var{hash}, hash_action_func *@var{action})
1968 Removes all the elements from @var{hash}, which must have been
1969 previously initialized with @func{hash_init}.
1970
1971 If @var{action} is non-null, then it is called once for each element in
1972 the hash table, which gives the caller an opportunity to deallocate any
1973 memory or other resources used by the element.  For example, if the hash
1974 table elements are dynamically allocated using @func{malloc}, then
1975 @var{action} could @func{free} the element.  This is safe because
1976 @func{hash_clear} will not access the memory in a given hash element
1977 after calling @var{action} on it.  However, @var{action} must not call
1978 any function that may modify the hash table, such as @func{hash_insert}
1979 or @func{hash_delete}.
1980 @end deftypefun
1981
1982 @deftypefun void hash_destroy (struct hash *@var{hash}, hash_action_func *@var{action})
1983 If @var{action} is non-null, calls it for each element in the hash, with
1984 the same semantics as a call to @func{hash_clear}.  Then, frees the
1985 memory held by @var{hash}.  Afterward, @var{hash} must not be passed to
1986 any hash table function, absent an intervening call to @func{hash_init}.
1987 @end deftypefun
1988
1989 @deftypefun size_t hash_size (struct hash *@var{hash})
1990 Returns the number of elements currently stored in @var{hash}.
1991 @end deftypefun
1992
1993 @deftypefun bool hash_empty (struct hash *@var{hash})
1994 Returns true if @var{hash} currently contains no elements,
1995 false if @var{hash} contains at least one element.
1996 @end deftypefun
1997
1998 @node Hash Search Functions
1999 @subsection Search Functions
2000
2001 Each of these functions searches a hash table for an element that
2002 compares equal to one provided.  Based on the success of the search,
2003 they perform some action, such as inserting a new element into the hash
2004 table, or simply return the result of the search.
2005
2006 @deftypefun {struct hash_elem *} hash_insert (struct hash *@var{hash}, struct hash_elem *@var{element})
2007 Searches @var{hash} for an element equal to @var{element}.  If none is
2008 found, inserts @var{element} into @var{hash} and returns a null pointer.
2009 If the table already contains an element equal to @var{element}, it is
2010 returned without modifying @var{hash}.
2011 @end deftypefun
2012
2013 @deftypefun {struct hash_elem *} hash_replace (struct hash *@var{hash}, struct hash_elem *@var{element})
2014 Inserts @var{element} into @var{hash}.  Any element equal to
2015 @var{element} already in @var{hash} is removed.  Returns the element
2016 removed, or a null pointer if @var{hash} did not contain an element
2017 equal to @var{element}.
2018
2019 The caller is responsible for deallocating any resources associated with
2020 the returned element, as appropriate.  For example, if the hash table
2021 elements are dynamically allocated using @func{malloc}, then the caller
2022 must @func{free} the element after it is no longer needed.
2023 @end deftypefun
2024
2025 The element passed to the following functions is only used for hashing
2026 and comparison purposes.  It is never actually inserted into the hash
2027 table.  Thus, only key data in the element needs to be initialized, and
2028 other data in the element will not be used.  It often makes sense to
2029 declare an instance of the element type as a local variable, initialize
2030 the key data, and then pass the address of its @struct{hash_elem} to
2031 @func{hash_find} or @func{hash_delete}.  @xref{Hash Table Example}, for
2032 an example.  (Large structures should not be
2033 allocated as local variables.  @xref{struct thread}, for more
2034 information.)
2035
2036 @deftypefun {struct hash_elem *} hash_find (struct hash *@var{hash}, struct hash_elem *@var{element})
2037 Searches @var{hash} for an element equal to @var{element}.  Returns the
2038 element found, if any, or a null pointer otherwise.
2039 @end deftypefun
2040
2041 @deftypefun {struct hash_elem *} hash_delete (struct hash *@var{hash}, struct hash_elem *@var{element})
2042 Searches @var{hash} for an element equal to @var{element}.  If one is
2043 found, it is removed from @var{hash} and returned.  Otherwise, a null
2044 pointer is returned and @var{hash} is unchanged.
2045
2046 The caller is responsible for deallocating any resources associated with
2047 the returned element, as appropriate.  For example, if the hash table
2048 elements are dynamically allocated using @func{malloc}, then the caller
2049 must @func{free} the element after it is no longer needed.
2050 @end deftypefun
2051
2052 @node Hash Iteration Functions
2053 @subsection Iteration Functions
2054
2055 These functions allow iterating through the elements in a hash table.
2056 Two interfaces are supplied.  The first requires writing and supplying a
2057 @var{hash_action_func} to act on each element (@pxref{Hash Data Types}).
2058
2059 @deftypefun void hash_apply (struct hash *@var{hash}, hash_action_func *@var{action})
2060 Calls @var{action} once for each element in @var{hash}, in arbitrary
2061 order.  @var{action} must not call any function that may modify the hash
2062 table, such as @func{hash_insert} or @func{hash_delete}.  @var{action}
2063 must not modify key data in elements, although it may modify any other
2064 data.
2065 @end deftypefun
2066
2067 The second interface is based on an ``iterator'' data type.
2068 Idiomatically, iterators are used as follows:
2069
2070 @example
2071 struct hash_iterator i;
2072
2073 hash_first (&i, h);
2074 while (hash_next (&i))
2075   @{
2076     struct foo *f = hash_entry (hash_cur (&i), struct foo, elem);
2077     @r{@dots{}do something with @i{f}@dots{}}
2078   @}
2079 @end example
2080
2081 @deftp {Type} {struct hash_iterator}
2082 Represents a position within a hash table.  Calling any function that
2083 may modify a hash table, such as @func{hash_insert} or
2084 @func{hash_delete}, invalidates all iterators within that hash table.
2085
2086 Like @struct{hash} and @struct{hash_elem}, @struct{hash_elem} is opaque.
2087 @end deftp
2088
2089 @deftypefun void hash_first (struct hash_iterator *@var{iterator}, struct hash *@var{hash})
2090 Initializes @var{iterator} to just before the first element in
2091 @var{hash}.
2092 @end deftypefun
2093
2094 @deftypefun {struct hash_elem *} hash_next (struct hash_iterator *@var{iterator})
2095 Advances @var{iterator} to the next element in @var{hash}, and returns
2096 that element.  Returns a null pointer if no elements remain.  After
2097 @func{hash_next} returns null for @var{iterator}, calling it again
2098 yields undefined behavior.
2099 @end deftypefun
2100
2101 @deftypefun {struct hash_elem *} hash_cur (struct hash_iterator *@var{iterator})
2102 Returns the value most recently returned by @func{hash_next} for
2103 @var{iterator}.  Yields undefined behavior after @func{hash_first} has
2104 been called on @var{iterator} but before @func{hash_next} has been
2105 called for the first time.
2106 @end deftypefun
2107
2108 @node Hash Table Example
2109 @subsection Hash Table Example
2110
2111 Suppose you have a structure, called @struct{page}, that you
2112 want to put into a hash table.  First, define @struct{page} to include a
2113 @struct{hash_elem} member:
2114
2115 @example
2116 struct page
2117   @{
2118     struct hash_elem hash_elem; /* @r{Hash table element.} */
2119     void *addr;                 /* @r{Virtual address.} */
2120     /* @r{@dots{}other members@dots{}} */
2121   @};
2122 @end example
2123
2124 We write a hash function and a comparison function using @var{addr} as
2125 the key.  A pointer can be hashed based on its bytes, and the @samp{<}
2126 operator works fine for comparing pointers:
2127
2128 @example
2129 /* @r{Returns a hash value for page @var{p}.} */
2130 unsigned
2131 page_hash (const struct hash_elem *p_, void *aux UNUSED)
2132 @{
2133   const struct page *p = hash_entry (p_, struct page, hash_elem);
2134   return hash_bytes (&p->addr, sizeof p->addr);
2135 @}
2136
2137 /* @r{Returns true if page @var{a} precedes page @var{b}.} */
2138 bool
2139 page_less (const struct hash_elem *a_, const struct hash_elem *b_,
2140            void *aux UNUSED)
2141 @{
2142   const struct page *a = hash_entry (a_, struct page, hash_elem);
2143   const struct page *b = hash_entry (b_, struct page, hash_elem);
2144
2145   return a->addr < b->addr;
2146 @}
2147 @end example
2148
2149 @noindent
2150 (The use of @code{UNUSED} in these functions' prototypes suppresses a
2151 warning that @var{aux} is unused.  @xref{Function and Parameter
2152 Attributes}, for information about @code{UNUSED}.  @xref{Hash Auxiliary
2153 Data}, for an explanation of @var{aux}.)
2154
2155 Then, we can create a hash table like this:
2156
2157 @example
2158 struct hash pages;
2159
2160 hash_init (&pages, page_hash, page_less, NULL);
2161 @end example
2162
2163 Now we can manipulate the hash table we've created.  If @code{@var{p}}
2164 is a pointer to a @struct{page}, we can insert it into the hash table
2165 with:
2166
2167 @example
2168 hash_insert (&pages, &p->hash_elem);
2169 @end example
2170
2171 @noindent If there's a chance that @var{pages} might already contain a
2172 page with the same @var{addr}, then we should check @func{hash_insert}'s
2173 return value.
2174
2175 To search for an element in the hash table, use @func{hash_find}.  This
2176 takes a little setup, because @func{hash_find} takes an element to
2177 compare against.  Here's a function that will find and return a page
2178 based on a virtual address, assuming that @var{pages} is defined at file
2179 scope:
2180
2181 @example
2182 /* @r{Returns the page containing the given virtual @var{address},}
2183    @r{or a null pointer if no such page exists.} */
2184 struct page *
2185 page_lookup (const void *address)
2186 @{
2187   struct page p;
2188   struct hash_elem *e;
2189
2190   p.addr = address;
2191   e = hash_find (&pages, &p.hash_elem);
2192   return e != NULL ? hash_entry (e, struct page, hash_elem) : NULL;
2193 @}
2194 @end example
2195
2196 @noindent
2197 @struct{page} is allocated as a local variable here on the assumption
2198 that it is fairly small.  Large structures should not be allocated as
2199 local variables.  @xref{struct thread}, for more information.
2200
2201 A similar function could delete a page by address using
2202 @func{hash_delete}.
2203
2204 @node Hash Auxiliary Data
2205 @subsection Auxiliary Data
2206
2207 In simple cases like the example above, there's no need for the
2208 @var{aux} parameters.  In these cases, just pass a null pointer to
2209 @func{hash_init} for @var{aux} and ignore the values passed to the hash
2210 function and comparison functions.  (You'll get a compiler warning if
2211 you don't use the @var{aux} parameter, but you can turn that off with
2212 the @code{UNUSED} macro, as shown in the example, or you can just ignore
2213 it.)
2214
2215 @var{aux} is useful when you have some property of the data in the
2216 hash table is both constant and needed for hashing or comparison,
2217 but not stored in the data items themselves.  For example, if
2218 the items in a hash table are fixed-length strings, but the items
2219 themselves don't indicate what that fixed length is, you could pass
2220 the length as an @var{aux} parameter.
2221
2222 @node Hash Synchronization
2223 @subsection Synchronization
2224
2225 The hash table does not do any internal synchronization.  It is the
2226 caller's responsibility to synchronize calls to hash table functions.
2227 In general, any number of functions that examine but do not modify the
2228 hash table, such as @func{hash_find} or @func{hash_next}, may execute
2229 simultaneously.  However, these function cannot safely execute at the
2230 same time as any function that may modify a given hash table, such as
2231 @func{hash_insert} or @func{hash_delete}, nor may more than one function
2232 that can modify a given hash table execute safely at once.
2233
2234 It is also the caller's responsibility to synchronize access to data in
2235 hash table elements.  How to synchronize access to this data depends on
2236 how it is designed and organized, as with any other data structure.
2237