X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fuserprog.texi;h=75123849b0622bcd7aa312a462cba104a36761de;hb=3bccbf4661eb75a871b8c3a2d91fcb033ad6f587;hp=d401fda025f1f98b81ed78a31c743ccbd30bf68e;hpb=71a7177a212dbecb048aaa8db4ff54620ff25464;p=pintos-anon diff --git a/doc/userprog.texi b/doc/userprog.texi index d401fda..7512384 100644 --- a/doc/userprog.texi +++ b/doc/userprog.texi @@ -19,6 +19,12 @@ start with a fresh copy. No code from project 1 is required for this assignment. The ``alarm clock'' functionality may be useful in projects 3 and 4, but it is not strictly required. +You might find it useful to go back and reread how to run the tests +(@pxref{Testing}). In particular, the tests for project 2 and later +projects will probably run faster if you use the qemu emulator, e.g.@: +via @code{make check PINTOSOPTS='--qemu'}. The qemu emulator is +available only on the Linux machines. + @menu * Project 2 Background:: * Project 2 Suggested Order of Implementation:: @@ -222,9 +228,10 @@ pintos -p ../../examples/echo -a echo -- -f -q run 'echo x' If you don't want to keep the file system disk around for later use or inspection, you can even combine all four steps into a single command. -The @code{--fs-disk=2} option creates a temporary disk just for the -duration of the @command{pintos} run. The Pintos automatic test suite -makes extensive use of this syntax: +The @code{--fs-disk=@var{n}} option creates a temporary disk +approximately @var{n} megabytes in size just for the duration of the +@command{pintos} run. The Pintos automatic test suite makes extensive +use of this syntax: @example pintos --fs-disk=2 -p ../../examples/echo -a echo -- -f -q run 'echo x' @@ -251,7 +258,8 @@ programs. The @file{Makefile} in this directory compiles the provided examples, and you can edit it compile your own programs as well. -Pintos loads @dfn{ELF} executables. ELF is a file format used by Linux, +Pintos can load @dfn{ELF} executables with the loader provided for you +in @file{userprog/process.c}. ELF is a file format used by Linux, Solaris, and many other operating systems for object files, shared libraries, and executables. You can actually use any compiler and linker that output 80@var{x}86 ELF executables to produce programs @@ -683,7 +691,8 @@ actual number written, or -1 if no bytes could be written at all. Fd 1 writes to the console. Your code to write to the console should write all of @var{buffer} in one call to @func{putbuf}, at least as -long as @var{size} is not bigger than a few hundred bytes. Otherwise, +long as @var{size} is not bigger than a few hundred bytes. (It is +reasonable to break up larger buffers.) Otherwise, lines of text output by different processes may end up interleaved on the console, confusing both human readers and our grading scripts. @@ -777,7 +786,8 @@ hurt even now. You can use @func{file_deny_write} to prevent writes to an open file. Calling @func{file_allow_write} on the file will re-enable them (unless the file is denied writes by another opener). Closing a file will also -re-enable writes. +re-enable writes. Thus, to deny writes to process's executable, you +must keep it open as long as the process is still running. @node Project 2 FAQ @section FAQ @@ -789,6 +799,12 @@ Here's a summary of our reference solution, produced by the @command{diffstat} program. The final row gives total lines inserted and deleted; a changed line counts as both an insertion and a deletion. +The reference solution represents just one possible solution. Many +other solutions are also possible and many of those differ greatly from +the reference solution. Some excellent solutions may not modify all the +files modified by the reference solution, and some may modify files not +modified by the reference solution. + @verbatim threads/thread.c | 13 threads/thread.h | 26 +