Revise documentation of debugging tools.
[pintos-anon] / doc / userprog.texi
1 @node Project 2--User Programs, Project 3--Virtual Memory, Project 1--Threads, Top
2 @chapter Project 2: User Programs
3
4 Now that you've worked with Pintos and are becoming familiar with its
5 infrastructure and thread package, it's time to start working on the
6 parts of the system that allow running user programs.
7 The base code already supports loading and
8 running user programs, but no I/O or interactivity
9 is possible.  In this project, you will enable programs to interact with
10 the OS via system calls.
11
12 You will be working out of the @file{userprog} directory for this
13 assignment.  However, you will also be interacting with almost every
14 other part of the code for this assignment. We will describe the
15 relevant parts below.
16
17 You can build project 2 on top of your project 1 submission or you can
18 start with a fresh copy.  No code from project 1 is required for this
19 assignment.  The ``alarm clock'' functionality may be useful in
20 projects 3 and 4, but it is not strictly required.
21
22 You might find it useful to go back and reread how to run the tests
23 (@pxref{Testing}).  In particular, the tests for project 2 and later
24 projects will probably run faster if you use the qemu emulator, e.g.@:
25 via @code{make check PINTOSOPTS='--qemu'}.  The qemu emulator is
26 available only on the Linux machines.
27
28 @menu
29 * Project 2 Background::        
30 * Project 2 Suggested Order of Implementation::  
31 * Project 2 Requirements::      
32 * Project 2 FAQ::               
33 * 80x86 Calling Convention::    
34 @end menu
35
36 @node Project 2 Background
37 @section Background
38
39 Up to now, all of the code you have run under Pintos has been part
40 of the operating system kernel.  This means, for example, that all the
41 test code from the last assignment ran as part of the kernel, with
42 full access to privileged parts of the system.  Once we start running
43 user programs on top of the operating system, this is no longer true.
44 This project deals with consequences of the change.
45
46 We allow more than one process to run at a time.  Each process has one
47 thread (multithreaded processes are not supported).  User programs are
48 written under the illusion that they have the entire machine.  This
49 means that when you load and run multiple processes at a time, you must
50 manage memory, scheduling, and other state correctly to maintain this
51 illusion.
52
53 In the previous project, we compiled our test code directly into your
54 kernel, so we had to require certain specific function interfaces within
55 the kernel.  From now on, we will test your operating system by running
56 user programs.  This gives you much greater freedom.  You must make sure
57 that the user program interface meets the specifications described here,
58 but given that constraint you are free to restructure or rewrite kernel
59 code however you wish.
60
61 @menu
62 * Project 2 Source Files::      
63 * Using the File System::       
64 * How User Programs Work::      
65 * Virtual Memory Layout::       
66 * Accessing User Memory::       
67 @end menu
68
69 @node Project 2 Source Files
70 @subsection Source Files
71
72 The easiest way to get an overview of the programming you will be
73 doing is to simply go over each part you'll be working with.  In
74 @file{userprog}, you'll find a small number of files, but here is
75 where the bulk of your work will be:
76
77 @table @file
78 @item process.c
79 @itemx process.h
80 Loads ELF binaries and starts processes.
81
82 @item pagedir.c
83 @itemx pagedir.h
84 A simple manager for 80@var{x}86 page directories and page tables.
85 Although you probably won't want to modify this code for this project,
86 you may want to call some of its functions.
87
88 @item syscall.c
89 @itemx syscall.h
90 Whenever a user process wants to access some kernel functionality, it
91 invokes a system call.  This is a skeleton system call
92 handler.  Currently, it just prints a message and terminates the user
93 process.  In part 2 of this project you will add code to do everything
94 else needed by system calls.
95
96 @item exception.c
97 @itemx exception.h
98 When a user process performs a privileged or prohibited operation, it
99 traps into the kernel as an ``exception'' or ``fault.''@footnote{We
100 will treat these terms as synonymous.  There is no standard
101 distinction between them, although Intel processor manuals define
102 them slightly differently on 80@var{x}86.}  These files handle
103 exceptions.  Currently all exceptions simply print a message and
104 terminate the process.  Some, but not all, solutions to project 2
105 require modifying @func{page_fault} in this file.
106
107 @item gdt.c
108 @itemx gdt.h
109 The 80@var{x}86 is a segmented architecture.  The Global Descriptor
110 Table (GDT) is a table that describes the segments in use.  These
111 files set up the GDT.  @strong{You should not need to modify these
112 files for any of the projects.}  You can read the code if
113 you're interested in how the GDT works.
114
115 @item tss.c
116 @itemx tss.h
117 The Task-State Segment (TSS) is used for 80@var{x}86 architectural
118 task switching.  Pintos uses the TSS only for switching stacks when a
119 user process enters an interrupt handler, as does Linux.  @strong{You
120 should not need to modify these files for any of the projects.}
121 You can read the code if you're interested in how the TSS
122 works.
123 @end table
124
125 @node Using the File System
126 @subsection Using the File System
127
128 You will need to use some file system code for this project.  First,
129 user programs are loaded from the file system.  Second, many of the
130 system calls you must implement deal with the file system.  However,
131 the focus of this project is not on the file system code, so we have
132 provided a simple file system in the @file{filesys} directory.  You
133 will want to look over the @file{filesys.h} and @file{file.h}
134 interfaces to understand how to use the file system, and especially
135 its many limitations.
136
137 There is no need to modify the file system code for this project, and so
138 we recommend that you do not.  Working on the file system is likely to
139 distract you from this project's focus.
140
141 Proper use of the file system routines now
142 will make life much easier for project 4, when you improve the file
143 system implementation.  Until then, you will have to put up with the
144 following limitations:
145
146 @itemize @bullet
147 @item
148 No synchronization.  Concurrent accesses will interfere with one
149 another.  You should use a lock to ensure that only one process at a
150 time is executing file system code.
151
152 @item
153 File size is fixed at creation time.  The root directory is
154 represented as a file, so the number of files that may be created is also
155 limited.
156
157 @item
158 File data is allocated as a single extent, that is, data in a single
159 file must occupy a contiguous range of sectors on disk.  External
160 fragmentation can therefore become a serious problem as a file system is
161 used over time.
162
163 @item
164 No subdirectories.
165
166 @item
167 File names are limited to 14 characters.
168
169 @item
170 A system crash mid-operation may corrupt the disk in a way
171 that cannot be repaired automatically.  There is no file system repair
172 tool anyway.
173 @end itemize
174
175 One important feature is included:
176
177 @itemize @bullet
178 @item
179 Unix-like semantics for @func{filesys_remove} are implemented.
180 That is, if a file is open when it is removed, its blocks
181 are not deallocated and it may still be accessed by any
182 threads that have it open until the last one closes it.  @xref{Removing
183 an Open File}, for more information.
184 @end itemize
185
186 You need to be able to create simulated disks.  The
187 @command{pintos-mkdisk} program provides this functionality.  From the
188 @file{userprog/build} directory, execute @code{pintos-mkdisk fs.dsk 2}.
189 This command creates a 2 MB simulated disk named @file{fs.dsk}.  Then
190 format the disk by passing @option{-f -q} on the kernel's command
191 line: @code{pintos -f -q}.  The @option{-f} option causes the disk to be
192 formatted, and @option{-q} causes Pintos to exit as soon as the format
193 is done.
194
195 You'll need a way to copy files in and out of the simulated file system.
196 The @code{pintos} @option{-p} (``put'') and @option{-g} (``get'')
197 options do this.  To copy @file{@var{file}} into the
198 Pintos file system, use the command @file{pintos -p @var{file} -- -q}.
199 (The @samp{--} is needed because @option{-p} is for the @command{pintos}
200 script, not for the simulated kernel.)  To copy it to the Pintos file
201 system under the name @file{@var{newname}}, add @option{-a
202 @var{newname}}: @file{pintos -p @var{file} -a @var{newname} -- -q}.  The
203 commands for copying files out of a VM are similar, but substitute
204 @option{-g} for @option{-p}.
205
206 Incidentally, these commands work by passing special commands
207 @command{put} and @command{get} on the kernel's command line and copying
208 to and from a special simulated ``scratch'' disk.  If you're very
209 curious, you can look at the @command{pintos} program as well as
210 @file{filesys/fsutil.c} to learn the implementation details.
211
212 Here's a summary of how to create and format a disk, copy the
213 @command{echo} program into the new disk, and then run @command{echo},
214 passing argument @code{x}.  (Argument passing won't work until
215 you've implemented it.)  It assumes
216 that you've already built the
217 examples in @file{examples} and that the current directory is
218 @file{userprog/build}:
219
220 @example
221 pintos-mkdisk fs.dsk 2
222 pintos -f -q
223 pintos -p ../../examples/echo -a echo -- -q
224 pintos -q run 'echo x'
225 @end example
226
227 The three final steps can actually be combined into a single command:
228
229 @example
230 pintos-mkdisk fs.dsk 2
231 pintos -p ../../examples/echo -a echo -- -f -q run 'echo x'
232 @end example
233
234 If you don't want to keep the file system disk around for later use or
235 inspection, you can even combine all four steps into a single command.
236 The @code{--fs-disk=@var{n}} option creates a temporary disk
237 approximately @var{n} megabytes in size just for the duration of the
238 @command{pintos} run.  The Pintos automatic test suite makes extensive
239 use of this syntax:
240
241 @example
242 pintos --fs-disk=2 -p ../../examples/echo -a echo -- -f -q run 'echo x'
243 @end example
244
245 You can delete a file from the Pintos file system using the @code{rm
246 @var{file}} kernel action, e.g.@: @code{pintos -q rm @var{file}}.  Also,
247 @command{ls} lists the files in the file system and @code{cat
248 @var{file}} prints a file's contents to the display.
249
250 @node How User Programs Work
251 @subsection How User Programs Work
252
253 Pintos can run normal C programs.  In fact, Pintos can run any program
254 you want, as long as it's compiled into the proper file format and uses
255 only the system calls you implement.  Notably, @func{malloc} cannot be
256 implemented because none of the system calls required for this project
257 allow for memory allocation.  Pintos also can't run programs that use
258 floating point operations, since the kernel doesn't save and restore the
259 processor's floating-point unit when switching threads.
260
261 The @file{src/examples} directory contains a few sample user
262 programs.  The @file{Makefile} in this directory
263 compiles the provided examples, and you can edit it
264 compile your own programs as well.
265
266 Pintos can load @dfn{ELF} executables with the loader provided for you
267 in @file{userprog/process.c}.  ELF is a file format used by Linux,
268 Solaris, and many other operating systems for object files,
269 shared libraries, and executables.  You can actually use any compiler
270 and linker that output 80@var{x}86 ELF executables to produce programs
271 for Pintos.  (We've provided compilers and linkers that should do just
272 fine.)
273
274 You should realize immediately that, until you copy a
275 test program to the emulated disk, Pintos will be unable to do
276 useful work.  You won't be able to do
277 interesting things until you copy a variety of programs to the disk.
278 You might want to create a clean reference disk and copy that
279 over whenever you trash your @file{fs.dsk} beyond a useful state,
280 which may happen occasionally while debugging.
281
282 @node Virtual Memory Layout
283 @subsection Virtual Memory Layout
284
285 Virtual memory in Pintos is divided into two regions: user virtual
286 memory and kernel virtual memory.  User virtual memory ranges from
287 virtual address 0 up to @code{PHYS_BASE}, which is defined in
288 @file{threads/mmu.h} and defaults to @t{0xc0000000} (3 GB).  Kernel
289 virtual memory occupies the rest of the virtual address space, from
290 @code{PHYS_BASE} up to 4 GB.
291
292 User virtual memory is per-process.
293 When the kernel switches from one process to another, it
294 also switches user virtual address spaces by changing the processor's
295 page directory base register (see @func{pagedir_activate} in
296 @file{userprog/pagedir.c}).  @struct{thread} contains a pointer to a
297 process's page directory.
298
299 Kernel virtual memory is global.  It is always mapped the same way,
300 regardless of what user process or kernel thread is running.  In
301 Pintos, kernel virtual memory is mapped one-to-one to physical
302 memory, starting at @code{PHYS_BASE}.  That is, virtual address
303 @code{PHYS_BASE} accesses physical
304 address 0, virtual address @code{PHYS_BASE} + @t{0x1234} access
305 physical address @t{0x1234}, and so on up to the size of the machine's
306 physical memory.
307
308 A user program can only access its own user virtual memory.  An attempt to
309 access kernel virtual memory causes a page fault, handled by
310 @func{page_fault} in @file{userprog/exception.c}, and the process
311 will be terminated.  Kernel threads can access both kernel virtual
312 memory and, if a user process is running, the user virtual memory of
313 the running process.  However, even in the kernel, an attempt to
314 access memory at a user virtual address that doesn't have a page
315 mapped into it will cause a page fault.
316
317 You must handle memory fragmentation gracefully, that is, a process that
318 needs @var{N} pages of user virtual memory must not require those pages
319 to be contiguous in kernel virtual memory.
320
321 @menu
322 * Typical Memory Layout::       
323 @end menu
324
325 @node Typical Memory Layout
326 @subsubsection Typical Memory Layout
327
328 Conceptually, each process is
329 free to lay out its own user virtual memory however it
330 chooses.  In practice, user virtual memory is laid out like this:
331
332 @html
333 <CENTER>
334 @end html
335 @example
336 @group
337    PHYS_BASE +----------------------------------+
338              |            user stack            |
339              |                 |                |
340              |                 |                |
341              |                 V                |
342              |          grows downward          |
343              |                                  |
344              |                                  |
345              |                                  |
346              |                                  |
347              |           grows upward           |
348              |                 ^                |
349              |                 |                |
350              |                 |                |
351              +----------------------------------+
352              | uninitialized data segment (BSS) |
353              +----------------------------------+
354              |     initialized data segment     |
355              +----------------------------------+
356              |           code segment           |
357   0x08048000 +----------------------------------+
358              |                                  |
359              |                                  |
360              |                                  |
361              |                                  |
362              |                                  |
363            0 +----------------------------------+
364 @end group
365 @end example
366 @html
367 </CENTER>
368 @end html
369
370 In this project, the user stack is fixed in size, but in project 3 it
371 will be allowed to grow.  Traditionally, the size of the uninitialized
372 data segment can be adjusted with a system call, but you will not have
373 to implement this.
374
375 The code segment in Pintos starts at user virtual address
376 @t{0x08084000}, approximately 128 MB from the bottom of the address
377 space.  This value is specified in @bibref{SysV-i386} and has no deep
378 significance.
379
380 The linker sets the layout of a user program in memory, as directed by a
381 ``linker script'' that tells it the names and locations of the various
382 program segments.  You can learn more about linker scripts by reading
383 the ``Scripts'' chapter in the linker manual, accessible via @samp{info
384 ld}.
385
386 To view the layout of a particular executable, run @command{objdump}
387 (80@var{x}86) or @command{i386-elf-objdump} (SPARC) with the @option{-p}
388 option.
389
390 @node Accessing User Memory
391 @subsection Accessing User Memory
392
393 As part of a system
394 call, the kernel must often access memory through pointers provided by a user
395 program.  The kernel must be very careful about doing so, because
396 the user can pass a null pointer, a pointer to
397 unmapped virtual memory, or a pointer to kernel virtual address space
398 (above @code{PHYS_BASE}).  All of these types of invalid pointers must
399 be rejected without harm to the kernel or other running processes, by
400 terminating the offending process and freeing its resources.
401
402 There are at least two reasonable ways to do this correctly.  The
403 first method is to verify
404 the validity of a user-provided pointer, then dereference it.  If you
405 choose this route, you'll want to look at the functions in
406 @file{userprog/pagedir.c} and in @file{threads/mmu.h}.  This is the
407 simplest way to handle user memory access.
408
409 The second method is to check only that a user
410 pointer points below @code{PHYS_BASE}, then dereference it.
411 An invalid user pointer will cause a ``page fault'' that you can
412 handle by modifying the code for @func{page_fault} in
413 @file{userprog/exception.cc}.  This technique is normally faster
414 because it takes advantage of the processor's MMU, so it tends to be
415 used in real kernels (including Linux).
416
417 In either case, you need to make sure not to ``leak'' resources.  For
418 example, suppose that your system call has acquired a lock or
419 allocated a page of memory.  If you encounter an invalid user pointer
420 afterward, you must still be sure to release the lock or free the page
421 of memory.  If you choose to verify user pointers before dereferencing
422 them, this should be straightforward.  It's more difficult to handle
423 if an invalid pointer causes a page fault,
424 because there's no way to return an error code from a memory access.
425 Therefore, for those who want to try the latter technique, we'll
426 provide a little bit of helpful code:
427
428 @verbatim
429 /* Tries to copy a byte from user address USRC to kernel address KDST.
430    Returns true if successful, false if USRC is invalid. */
431 static inline bool get_user (uint8_t *kdst, const uint8_t *usrc) {
432   int eax;
433   asm ("movl $1f, %%eax; movb %2, %%al; movb %%al, %0; 1:"
434        : "=m" (*kdst), "=&a" (eax) : "m" (*usrc));
435   return eax != 0;
436 }
437
438 /* Tries to write BYTE to user address UDST.
439    Returns true if successful, false if UDST is invalid. */
440 static inline bool put_user (uint8_t *udst, uint8_t byte) {
441   int eax;
442   asm ("movl $1f, %%eax; movb %b2, %0; 1:"
443        : "=m" (*udst), "=&a" (eax) : "r" (byte));
444   return eax != 0;
445 }
446 @end verbatim
447
448 Each of these functions assumes that the user address has already been
449 verified to be below @code{PHYS_BASE}.  They also assume that you've
450 modified @func{page_fault} so that a page fault in the kernel merely sets
451 @code{eax} to 0 and copies its former value into @code{eip}.
452
453 @node Project 2 Suggested Order of Implementation
454 @section Suggested Order of Implementation
455
456 We suggest first implementing the following, which can happen in
457 parallel:
458
459 @itemize
460 @item
461 Argument passing (@pxref{Argument Passing}).  Every user program will
462 page fault immediately until argument passing is implemented.
463
464 For now, you may simply wish to change
465 @example
466 *esp = PHYS_BASE;
467 @end example
468 @noindent to
469 @example
470 *esp = PHYS_BASE - 12;
471 @end example
472 in @func{setup_stack}.  That will work for any test program that doesn't
473 examine its arguments, although its name will be printed as
474 @code{(null)}.
475
476 Until you implement argument passing, you should only run programs
477 without passing command-line arguments.  Attempting to pass arguments to
478 a program will include those arguments in the name of the program, which
479 will probably fail.
480
481 @item
482 User memory access (@pxref{Accessing User Memory}).  All system calls
483 need to read user memory.  Few system calls need to write to user
484 memory.
485
486 @item
487 System call infrastructure (@pxref{System Calls}).  Implement enough
488 code to read the system call number from the user stack and dispatch to
489 a handler based on it.
490
491 @item
492 The @code{exit} system call.  Every user program that finishes in the
493 normal way calls @code{exit}.  Even a program that returns from
494 @func{main} calls @code{exit} indirectly (see @func{_start} in
495 @file{lib/user/entry.c}).
496
497 @item
498 The @code{write} system call for writing to fd 1, the system console.
499 All of our test programs write to the console (the user process version
500 of @func{printf} is implemented this way), so they will all malfunction
501 until @code{write} is available.
502
503 @item
504 For now, change @func{process_wait} to an infinite loop (one that waits
505 forever).  The provided implementation returns immediately, so Pintos
506 will power off before any processes actually get to run.  You will
507 eventually need to provide a correct implementation.
508 @end itemize
509
510 After the above are implemented, user processes should work minimally.
511 At the very least, they can write to the console and exit correctly.
512 You can then refine your implementation so that some of the tests start
513 to pass.
514
515 @node Project 2 Requirements
516 @section Requirements
517
518 @menu
519 * Project 2 Design Document::   
520 * Process Termination Messages::  
521 * Argument Passing::            
522 * System Calls::                
523 * Denying Writes to Executables::  
524 @end menu
525
526 @node Project 2 Design Document
527 @subsection Design Document
528
529 Before you turn in your project, you must copy @uref{userprog.tmpl, ,
530 the project 2 design document template} into your source tree under the
531 name @file{pintos/src/userprog/DESIGNDOC} and fill it in.  We recommend
532 that you read the design document template before you start working on
533 the project.  @xref{Project Documentation}, for a sample design document
534 that goes along with a fictitious project.
535
536 @node Process Termination Messages
537 @subsection Process Termination Messages
538
539 Whenever a user process terminates, because it called @code{exit}
540 or for any other reason, print the process's name
541 and exit code, formatted as if printed by @code{printf ("%s:
542 exit(%d)\n", @dots{});}.  The name printed should be the full name
543 passed to @func{process_execute}, omitting command-line arguments.
544 Do not print these messages when a kernel thread that is not a user
545 process terminates, or
546 when the @code{halt} system call is invoked.  The message is optional
547 when a process fails to load.
548
549 Aside from this, don't print any other
550 messages that Pintos as provided doesn't already print.  You may find
551 extra messages useful during debugging, but they will confuse the
552 grading scripts and thus lower your score.
553
554 @node Argument Passing
555 @subsection Argument Passing
556
557 Currently, @func{process_execute} does not support passing arguments to
558 new processes.  Implement this functionality, by extending
559 @func{process_execute} so that instead of simply taking a program file
560 name as its argument, it divides it into words at spaces.  The first
561 word is the program name, the second word is the first argument, and so
562 on.  That is, @code{process_execute("grep foo bar")} should run
563 @command{grep} passing two arguments @code{foo} and @code{bar}.
564
565 Within a command line, multiple spaces are equivalent to a single space,
566 so that @code{process_execute("grep foo bar")} is equivalent to our
567 original example.  You can impose a reasonable limit on the length of
568 the command line arguments.  For example, you could limit the arguments
569 to those that will fit in a single page (4 kB).  (There is an unrelated
570 limit of 128 bytes on command-line arguments that the @command{pintos}
571 utility can pass to the kernel.)
572
573 You can parse argument strings any way you like.  If you're lost,
574 look at @func{strtok_r}, prototyped in @file{lib/string.h} and
575 implemented with thorough comments in @file{lib/string.c}.  You can
576 find more about it by looking at the man page (run @code{man strtok_r}
577 at the prompt).
578
579 @xref{Program Startup Details}, for information on exactly how you
580 need to set up the stack.
581
582 @node System Calls
583 @subsection System Calls
584
585 Implement the system call handler in @file{userprog/syscall.c}.  The
586 skeleton implementation we provide ``handles'' system calls by
587 terminating the process.  It will need to retrieve the system call
588 number, then any system call arguments, and carry appropriate actions.
589
590 Implement the following system calls.  The prototypes listed are those
591 seen by a user program that includes @file{lib/user/syscall.h}.  (This
592 header and all other files in @file{lib/user} are for use by user
593 programs only.)  System call numbers for each system call are defined in
594 @file{lib/syscall-nr.h}:
595
596 @deftypefn {System Call} void halt (void)
597 Terminates Pintos by calling @func{power_off} (declared in
598 @file{threads/init.h}).  This should be seldom used, because you lose
599 some information about possible deadlock situations, etc.
600 @end deftypefn
601
602 @deftypefn {System Call} void exit (int @var{status})
603 Terminates the current user program, returning @var{status} to the
604 kernel.  If the process's parent @code{wait}s for it (see below), this
605 is the status
606 that will be returned.  Conventionally, a @var{status} of 0 indicates
607 success and nonzero values indicate errors.
608 @end deftypefn
609
610 @deftypefn {System Call} pid_t exec (const char *@var{cmd_line})
611 Runs the executable whose name is given in @var{cmd_line}, passing any
612 given arguments, and returns the new process's program id (pid).  Must
613 return pid -1, which otherwise should not be a valid pid, if
614 the program cannot load or run for any reason.
615 @end deftypefn
616
617 @deftypefn {System Call} int wait (pid_t @var{pid})
618 Waits for process @var{pid} to die and returns the status it passed to
619 @code{exit}.  Returns -1 if @var{pid}
620 was terminated by the kernel (e.g.@: killed due to an exception).  If
621 @var{pid} is does not refer to a child of the
622 calling thread, or if @code{wait} has already been successfully
623 called for the given @var{pid}, returns -1 immediately, without
624 waiting.
625
626 You must ensure that Pintos does not terminate until the initial
627 process exits.  The supplied Pintos code tries to do this by calling
628 @func{process_wait} (in @file{userprog/process.c}) from @func{main}
629 (in @file{threads/init.c}).  We suggest that you implement
630 @func{process_wait} according to the comment at the top of the
631 function and then implement the @code{wait} system call in terms of
632 @func{process_wait}.
633
634 All of a process's resources, including its @struct{thread}, must be
635 freed whether its parent ever waits for it or not, and regardless of
636 whether the child exits before or after its parent.
637
638 Children are not inherited: if @var{A} has child @var{B} and
639 @var{B} has child @var{C}, then @code{wait(C)} always returns immediately
640 when called from @var{A}, even if @var{B} is dead.
641
642 Consider all the ways a wait can occur: nested waits (@var{A} waits
643 for @var{B}, then @var{B} waits for @var{C}), multiple waits (@var{A}
644 waits for @var{B}, then @var{A} waits for @var{C}), and so on.
645 @end deftypefn
646
647 @deftypefn {System Call} bool create (const char *@var{file}, unsigned @var{initial_size})
648 Creates a new file called @var{file} initially @var{initial_size} bytes
649 in size.  Returns true if successful, false otherwise.
650
651 Consider implementing this function in terms of @func{filesys_create}.
652 @end deftypefn
653
654 @deftypefn {System Call} bool remove (const char *@var{file})
655 Deletes the file called @var{file}.  Returns true if successful, false
656 otherwise.
657
658 Consider implementing this function in terms of @func{filesys_remove}.
659 @end deftypefn
660
661 @deftypefn {System Call} int open (const char *@var{file})
662 Opens the file called @var{file}.  Returns a nonnegative integer handle
663 called a ``file descriptor'' (fd), or -1 if the file could not be
664 opened.  
665
666 File descriptors numbered 0 and 1 are reserved for the console: fd 0
667 is standard input (@code{stdin}), fd 1 is standard output
668 (@code{stdout}).  The @code{open} system call will never return either
669 of these file descriptors, which are valid as system call arguments only
670 as explicitly described below.
671
672 Each process has an independent set of file descriptors.  File
673 descriptors are not inherited by child processes.
674
675 Consider implementing this function in terms of @func{filesys_open}.
676 @end deftypefn
677
678 @deftypefn {System Call} int filesize (int @var{fd})
679 Returns the size, in bytes, of the file open as @var{fd}.
680
681 Consider implementing this function in terms of @func{file_length}.
682 @end deftypefn
683
684 @deftypefn {System Call} int read (int @var{fd}, void *@var{buffer}, unsigned @var{size})
685 Reads @var{size} bytes from the file open as @var{fd} into
686 @var{buffer}.  Returns the number of bytes actually read (0 at end of
687 file), or -1 if the file could not be read (due to a condition other
688 than end of file).  Fd 0 reads from the keyboard using
689 @func{kbd_getc}.  (Keyboard input will not work if you pass the
690 @option{-v} option to @command{pintos}.)
691
692 Consider implementing this function in terms of @func{file_read}.
693 @end deftypefn
694
695 @deftypefn {System Call} int write (int @var{fd}, const void *@var{buffer}, unsigned @var{size})
696 Writes @var{size} bytes from @var{buffer} to the open file @var{fd}.
697 Returns the number of bytes actually written, or -1 if the file could
698 not be written.
699
700 Writing past end-of-file would normally extend the file, but file growth
701 is not implemented by the basic file system.  The expected behavior is
702 to write as many bytes as possible up to end-of-file and return the
703 actual number written, or -1 if no bytes could be written at all.
704
705 Fd 1 writes to the console.  Your code to write to the console should
706 write all of @var{buffer} in one call to @func{putbuf}, at least as
707 long as @var{size} is not bigger than a few hundred bytes.  (It is
708 reasonable to break up larger buffers.)  Otherwise,
709 lines of text output by different processes may end up interleaved on
710 the console, confusing both human readers and our grading scripts.
711
712 Consider implementing this function in terms of @func{file_write}.
713 @end deftypefn
714
715 @deftypefn {System Call} void seek (int @var{fd}, unsigned @var{position})
716 Changes the next byte to be read or written in open file @var{fd} to
717 @var{position}, expressed in bytes from the beginning of the file.
718 (Thus, a @var{position} of 0 is the file's start.)
719
720 A seek past the current end of a file is not an error.  A later read
721 obtains 0 bytes, indicating end of file.  A later write extends the
722 file, filling any unwritten gap with zeros.  (However, in Pintos files
723 have a fixed length until project 4 is complete, so writes past end of
724 file will return an error.)  These semantics are implemented in the
725 file system and do not require any special effort in system call
726 implementation.
727
728 Consider implementing this function in terms of @func{file_seek}.
729 @end deftypefn
730
731 @deftypefn {System Call} unsigned tell (int @var{fd})
732 Returns the position of the next byte to be read or written in open
733 file @var{fd}, expressed in bytes from the beginning of the file.
734
735 Consider implementing this function in terms of @func{file_tell}.
736 @end deftypefn
737
738 @deftypefn {System Call} void close (int @var{fd})
739 Closes file descriptor @var{fd}.  
740 Exiting or terminating a process implicitly closes all its open file
741 descriptors, as if by calling this function for each one.
742
743 Consider implementing this function in terms of @func{file_close}.
744 @end deftypefn
745
746 The file defines other syscalls.  Ignore them for now.  You will
747 implement some of them in project 3 and the rest in project 4, so be
748 sure to design your system with extensibility in mind.
749
750 To implement syscalls, you need to provide ways to read and write data
751 in user virtual address space.
752 You need this ability before you can
753 even obtain the system call number, because the system call number is
754 on the user's stack in the user's virtual address space.
755 This can be a bit tricky: what if the user provides an invalid
756 pointer, a pointer into kernel memory, or a block
757 partially in one of those regions?  You should handle these cases by
758 terminating the user process.  We recommend
759 writing and testing this code before implementing any other system
760 call functionality.
761
762 You must synchronize system calls so that
763 any number of user processes can make them at once.  In particular, it
764 is not safe to call into the file system code provided in the
765 @file{filesys} directory from multiple threads at once.  For now, we
766 recommend adding a single lock that controls access to the file system
767 code.  You should acquire this lock before calling any functions in
768 the @file{filesys} directory, and release it afterward.  Don't forget
769 that @func{process_execute} also accesses files.  @strong{For now, we
770 recommend against modifying code in the @file{filesys} directory.}
771
772 We have provided you a user-level function for each system call in
773 @file{lib/user/syscall.c}.  These provide a way for user processes to
774 invoke each system call from a C program.  Each uses a little inline
775 assembly code to invoke the system call and (if appropriate) returns the
776 system call's return value.
777
778 When you're done with this part, and forevermore, Pintos should be
779 bulletproof.  Nothing that a user program can do should ever cause the
780 OS to crash, panic, fail an assertion, or otherwise malfunction.  It is
781 important to emphasize this point: our tests will try to break your
782 system calls in many, many ways.  You need to think of all the corner
783 cases and handle them.  The sole way a user program should be able to
784 cause the OS to halt is by invoking the @code{halt} system call.
785
786 If a system call is passed an invalid argument, acceptable options
787 include returning an error value (for those calls that return a
788 value), returning an undefined value, or terminating the process.
789
790 @xref{System Call Details}, for details on how system calls work.
791
792 @node Denying Writes to Executables
793 @subsection Denying Writes to Executables
794
795 Add code to deny writes to files in use as executables.  Many OSes do
796 this because of the unpredictable results if a process tried to run code
797 that was in the midst of being changed on disk.  This is especially
798 important once virtual memory is implemented in project 3, but it can't
799 hurt even now.
800
801 You can use @func{file_deny_write} to prevent writes to an open file.
802 Calling @func{file_allow_write} on the file will re-enable them (unless
803 the file is denied writes by another opener).  Closing a file will also
804 re-enable writes.  Thus, to deny writes to process's executable, you
805 must keep it open as long as the process is still running.
806
807 @node Project 2 FAQ
808 @section FAQ
809
810 @table @asis
811 @item How much code will I need to write?
812
813 Here's a summary of our reference solution, produced by the
814 @command{diffstat} program.  The final row gives total lines inserted
815 and deleted; a changed line counts as both an insertion and a deletion.
816
817 The reference solution represents just one possible solution.  Many
818 other solutions are also possible and many of those differ greatly from
819 the reference solution.  Some excellent solutions may not modify all the
820 files modified by the reference solution, and some may modify files not
821 modified by the reference solution.
822
823 @verbatim
824  threads/thread.c     |   13 
825  threads/thread.h     |   26 +
826  userprog/exception.c |    8 
827  userprog/process.c   |  247 ++++++++++++++--
828  userprog/syscall.c   |  468 ++++++++++++++++++++++++++++++-
829  userprog/syscall.h   |    1 
830  6 files changed, 725 insertions(+), 38 deletions(-)
831 @end verbatim
832
833 @item The kernel always panics when I run @code{pintos -p @var{file} -- -q}.
834
835 Did you format the disk (with @samp{pintos -f})?
836
837 Is your file name too long?  The file system limits file names to 14
838 characters.  A command like @samp{pintos -p ../../examples/echo -- -q}
839 will exceed the limit.  Use @samp{pintos -p ../../examples/echo -a echo
840 -- -q} to put the file under the name @file{echo} instead.
841
842 Is the file system full?
843
844 Does the file system already contain 16 files?  The base Pintos file
845 system has a 16-file limit.
846
847 The file system may be so fragmented that there's not enough contiguous
848 space for your file.
849
850 @item When I run @code{pintos -p ../file --}, @file{file} isn't copied.
851
852 Files are written under the name you refer to them, by default, so in
853 this case the file copied in would be named @file{../file}.  You
854 probably want to run @code{pintos -p ../file -a file --} instead.
855
856 @item All my user programs die with page faults.
857
858 This will happen if you haven't implemented argument passing
859 (or haven't done so correctly).  The basic C library for user programs tries
860 to read @var{argc} and @var{argv} off the stack.  If the stack
861 isn't properly set up, this causes a page fault.
862
863 @item All my user programs die with @code{system call!}
864
865 You'll have to implement system calls before you see anything else.
866 Every reasonable program tries to make at least one system call
867 (@func{exit}) and most programs make more than that.  Notably,
868 @func{printf} invokes the @code{write} system call.  The default system
869 call handler just prints @samp{system call!} and terminates the program.
870 Until then, you can use @func{hex_dump} to convince yourself that
871 argument passing is implemented correctly (@pxref{Program Startup Details}).
872
873 @item How can I can disassemble user programs?
874
875 The @command{objdump} (80@var{x}86) or @command{i386-elf-objdump}
876 (SPARC) utility can disassemble entire user
877 programs or object files.  Invoke it as @code{objdump -d
878 @var{file}}.  You can use GDB's
879 @code{disassemble} command to disassemble individual functions
880 (@pxref{GDB}).
881
882 @item Why do many C include files not work in Pintos programs?
883
884 The C library we provide is very limited.  It does not include many of
885 the features that are expected of a real operating system's C library.
886 The C library must be built specifically for the operating system (and
887 architecture), since it must make system calls for I/O and memory
888 allocation.  (Not all functions do, of course, but usually the library
889 is compiled as a unit.)
890
891 @item Can I use lib@var{foo} in my Pintos programs?
892
893 The chances are good that lib@var{foo} uses parts of the C library
894 that Pintos doesn't implement.  It will probably take at least some
895 porting effort to make it work under Pintos.  Notably, the Pintos
896 user program C library does not have a @func{malloc} implementation.
897
898 @item How do I compile new user programs?
899
900 Modify @file{src/examples/Makefile}, then run @command{make}.
901
902 @item Can I run user programs under a debugger?
903
904 Yes, with some limitations.  @xref{Debugging User Programs}.
905
906 @item What's the difference between @code{tid_t} and @code{pid_t}?
907
908 A @code{tid_t} identifies a kernel thread, which may have a user
909 process running in it (if created with @func{process_execute}) or not
910 (if created with @func{thread_create}).  It is a data type used only
911 in the kernel.
912
913 A @code{pid_t} identifies a user process.  It is used by user
914 processes and the kernel in the @code{exec} and @code{wait} system
915 calls.
916
917 You can choose whatever suitable types you like for @code{tid_t} and
918 @code{pid_t}.  By default, they're both @code{int}.  You can make them
919 a one-to-one mapping, so that the same values in both identify the
920 same process, or you can use a more complex mapping.  It's up to you.
921
922 @item Keyboard input doesn't work with @command{pintos} option @option{-v}.
923
924 Serial input isn't implemented.  Don't use @option{-v} if you
925 want to use the shell or otherwise need keyboard input.
926 @end table
927
928 @menu
929 * Argument Passing FAQ::        
930 * System Calls FAQ::            
931 @end menu
932
933 @node Argument Passing FAQ
934 @subsection Argument Passing FAQ
935
936 @table @asis
937 @item Isn't the top of stack off the top of user virtual memory?
938
939 The top of stack is at @code{PHYS_BASE}, typically @t{0xc0000000}, which
940 is also where kernel virtual memory starts.
941 But when the processor pushes data on the stack, it decrements the stack
942 pointer first.  Thus, the first (4-byte) value pushed on the stack
943 will be at address @t{0xbffffffc}.
944
945 @item Is @code{PHYS_BASE} fixed?
946
947 No.  You should be able to support @code{PHYS_BASE} values that are
948 any multiple of @t{0x10000000} from @t{0x80000000} to @t{0xf0000000},
949 simply via recompilation.
950 @end table
951
952 @node System Calls FAQ
953 @subsection System Calls FAQ
954
955 @table @asis
956 @item Can I just cast a @code{struct file *} to get a file descriptor?
957 @itemx Can I just cast a @code{struct thread *} to a @code{pid_t}?
958
959 You will have to make these design decisions yourself.
960 Most operating systems do distinguish between file
961 descriptors (or pids) and the addresses of their kernel data
962 structures.  You might want to give some thought as to why they do so
963 before committing yourself.
964
965 @item Can I set a maximum number of open files per process?
966
967 It is better not to set an arbitrary limit.  You may impose a limit of
968 128 open files per process, if necessary.
969
970 @item What happens when an open file is removed?
971 @anchor{Removing an Open File}
972
973 You should implement the standard Unix semantics for files.  That is, when
974 a file is removed any process which has a file descriptor for that file
975 may continue to use that descriptor.  This means that
976 they can read and write from the file.  The file will not have a name,
977 and no other processes will be able to open it, but it will continue
978 to exist until all file descriptors referring to the file are closed
979 or the machine shuts down.
980
981 @item How can I run user programs that need more than 4 kB stack space?
982
983 You may modify the stack setup code to allocate more than one page of
984 stack space for each process.  In the next project, you will implement a
985 better solution.
986 @end table
987
988 @node 80x86 Calling Convention
989 @section 80@var{x}86 Calling Convention
990
991 This section summarizes important points of the convention used for
992 normal function calls on 32-bit 80@var{x}86 implementations of Unix.
993 Some details are omitted for brevity.  If you do want all the details,
994 you can refer to @bibref{SysV-i386}.
995
996 The basic calling convention works like this:
997
998 @enumerate 1
999 @item
1000 The caller pushes each of the function's arguments on the stack one by
1001 one, normally using the @code{PUSH} assembly language instruction.
1002 Arguments are pushed in right-to-left order.
1003
1004 @item
1005 The caller pushes the address of its next instruction (the @dfn{return
1006 address}) on the stack and jumps to the first instruction of the callee.
1007 A single 80@var{x}86 instruction, @code{CALL}, does both.
1008
1009 @item
1010 The callee executes.  When it takes control, the stack pointer points to
1011 the return address, the first argument is just above it, the second
1012 argument is just above the first argument, and so on.
1013
1014 @item
1015 If the callee has a return value, it stores it into register @code{EAX}.
1016
1017 @item
1018 The callee returns by popping the return address from the stack and
1019 jumping to the location it specifies, using the 80@var{x}86 @code{RET}
1020 instruction.
1021
1022 @item
1023 The caller pops the arguments off the stack.
1024 @end enumerate
1025
1026 Consider a function @func{f} that takes three @code{int} arguments.
1027 This diagram shows a sample stack frame as seen by the callee at the
1028 beginning of step 3 above, supposing that @func{f} is invoked as
1029 @code{f(1, 2, 3)}.  The stack addresses are arbitrary:
1030
1031 @html
1032 <CENTER>
1033 @end html
1034 @example
1035                              +----------------+
1036                   0xbffffe7c |        3       |
1037                              +----------------+
1038                   0xbffffe78 |        2       |
1039                              +----------------+
1040                   0xbffffe74 |        1       |
1041                              +----------------+
1042 stack pointer --> 0xbffffe70 | return address |
1043                              +----------------+
1044 @end example
1045 @html
1046 </CENTER>
1047 @end html
1048
1049 @menu
1050 * Program Startup Details::     
1051 * System Call Details::         
1052 @end menu
1053
1054 @node Program Startup Details
1055 @subsection Program Startup Details
1056
1057 The Pintos C library for user programs designates @func{_start}, in
1058 @file{lib/user/entry.c}, as the entry point for user programs.  This
1059 function is a wrapper around @func{main} that calls @func{exit} if
1060 @func{main} returns:
1061
1062 @example
1063 void
1064 _start (int argc, char *argv[]) 
1065 @{
1066   exit (main (argc, argv));
1067 @}
1068 @end example
1069
1070 The kernel is responsible for setting up the arguments for the initial
1071 function on the stack, in accordance with the calling convention
1072 explained in the preceding section, before it allows the user program to
1073 begin executing.
1074
1075 Consider the following example command: @samp{/bin/ls -l foo bar}.
1076 First, the kernel must break the command into words, as @samp{/bin/ls},
1077 @samp{-l}, @samp{foo}, and @samp{bar}, and place them at the top of the
1078 stack.  Order doesn't matter, because they will be referenced through
1079 pointers.
1080
1081 Then, push the address of each string plus a null pointer sentinel, on
1082 the stack, in right-to-left order.  These are the elements of
1083 @code{argv}.  The order ensure that @code{argv[0]} is at the lowest
1084 virtual address.  Word-aligned accesses are faster than unaligned
1085 accesses, so for best performance round the stack pointer down to a
1086 multiple of 4 before the first push.
1087
1088 Then, push @code{argv} (the address of @code{argv[0]}) and @code{argc},
1089 in that order.  Finally, push a fake ``return address'': although the
1090 entry function will never return, its stack frame must have the same
1091 structure as any other.
1092
1093 The table below show the state of the stack and the relevant registers
1094 right before the beginning of the user program, assuming
1095 @code{PHYS_BASE} is @t{0xc0000000}:
1096
1097 @html
1098 <CENTER>
1099 @end html
1100 @multitable {@t{0xbfffffff}} {return address} {@t{/bin/ls\0}} {@code{void (*) ()}}
1101 @item Address @tab Name @tab Data @tab Type
1102 @item @t{0xbffffffc} @tab @code{argv[3][@dots{}]} @tab @samp{bar\0} @tab @code{char[4]}
1103 @item @t{0xbffffff8} @tab @code{argv[2][@dots{}]} @tab @samp{foo\0} @tab @code{char[4]}
1104 @item @t{0xbffffff5} @tab @code{argv[1][@dots{}]} @tab @samp{-l\0} @tab @code{char[3]}
1105 @item @t{0xbfffffed} @tab @code{argv[0][@dots{}]} @tab @samp{/bin/ls\0} @tab @code{char[8]}
1106 @item @t{0xbfffffec} @tab word-align @tab 0 @tab @code{uint8_t}
1107 @item @t{0xbfffffe8} @tab @code{argv[4]} @tab @t{0} @tab @code{char *}
1108 @item @t{0xbfffffe4} @tab @code{argv[3]} @tab @t{0xbffffffc} @tab @code{char *}
1109 @item @t{0xbfffffe0} @tab @code{argv[2]} @tab @t{0xbffffff8} @tab @code{char *}
1110 @item @t{0xbfffffdc} @tab @code{argv[1]} @tab @t{0xbffffff5} @tab @code{char *}
1111 @item @t{0xbfffffd8} @tab @code{argv[0]} @tab @t{0xbfffffed} @tab @code{char *}
1112 @item @t{0xbfffffd4} @tab @code{argv} @tab @t{0xbfffffd8} @tab @code{char **}
1113 @item @t{0xbfffffd0} @tab @code{argc} @tab 4 @tab @code{int}
1114 @item @t{0xbfffffcc} @tab return address @tab 0 @tab @code{void (*) ()}
1115 @end multitable
1116 @html
1117 </CENTER>
1118 @end html
1119
1120 In this example, the stack pointer would be initialized to
1121 @t{0xbfffffcc}.
1122
1123 As shown above, your code should start the stack at the very top of
1124 the user virtual address space, in the page just below virtual address
1125 @code{PHYS_BASE} (defined in @file{threads/mmu.h}).
1126
1127 You may find the non-standard @func{hex_dump} function, declared in
1128 @file{<stdio.h>}, useful for debugging your argument passing code.
1129 Here's what it would show in the above example:
1130
1131 @verbatim
1132 bfffffc0                                      00 00 00 00 |            ....|
1133 bfffffd0  04 00 00 00 d8 ff ff bf-ed ff ff bf f5 ff ff bf |................|
1134 bfffffe0  f8 ff ff bf fc ff ff bf-00 00 00 00 00 2f 62 69 |............./bi|
1135 bffffff0  6e 2f 6c 73 00 2d 6c 00-66 6f 6f 00 62 61 72 00 |n/ls.-l.foo.bar.|
1136 @end verbatim
1137
1138 @node System Call Details
1139 @subsection System Call Details
1140
1141 The first project already dealt with one way that the operating system
1142 can regain control from a user program: interrupts from timers and I/O
1143 devices.  These are ``external'' interrupts, because they are caused
1144 by entities outside the CPU (@pxref{External Interrupt Handling}).
1145
1146 The operating system also deals with software exceptions, which are
1147 events that occur in program code (@pxref{Internal Interrupt
1148 Handling}).  These can be errors such as a page fault or division by
1149 zero.  Exceptions are also the means by which a user program
1150 can request services (``system calls'') from the operating system.
1151
1152 In the 80@var{x}86 architecture, the @samp{int} instruction is the
1153 most commonly used means for invoking system calls.  This instruction
1154 is handled in the same way as other software exceptions.  In Pintos,
1155 user programs invoke @samp{int $0x30} to make a system call.  The
1156 system call number and any additional arguments are expected to be
1157 pushed on the stack in the normal fashion before invoking the
1158 interrupt.
1159
1160 Thus, when the system call handler @func{syscall_handler} gets control,
1161 the system call number is in the 32-bit word at the caller's stack
1162 pointer, the first argument is in the 32-bit word at the next higher
1163 address, and so on.  The caller's stack pointer is accessible to
1164 @func{syscall_handler} as the @samp{esp} member of the
1165 @struct{intr_frame} passed to it.  (@struct{intr_frame} is on the kernel
1166 stack.)
1167
1168 The 80@var{x}86 convention for function return values is to place them
1169 in the @code{EAX} register.  System calls that return a value can do
1170 so by modifying the @samp{eax} member of @struct{intr_frame}.
1171
1172 You should try to avoid writing large amounts of repetitive code for
1173 implementing system calls.  Each system call argument, whether an
1174 integer or a pointer, takes up 4 bytes on the stack.  You should be able
1175 to take advantage of this to avoid writing much near-identical code for
1176 retrieving each system call's arguments from the stack.