Revert to requiring that exec return -1 if there is a problem loading
[pintos-anon] / doc / userprog.texi
index 62e29a6bcd0a873bd8fcb4f039caf14319cc763c..884b757c59bafdc56d1990ecc7e67cedc8814c8d 100644 (file)
@@ -140,9 +140,10 @@ represented as a file, the number of files that may be created is also
 limited.
 
 @item
-File data is allocated as a single extent, so that external
-fragmentation can become a serious problem as a file system is used over
-time.
+File data is allocated as a single extent, that is, data in a single
+file must occupy a contiguous range of sectors on disk.  External
+fragmentation can therefore become a serious problem as a file system is
+used over time.
 
 @item
 No subdirectories.
@@ -159,6 +160,7 @@ provided in any case.
 However one important feature is included:
 
 @itemize @bullet
+@item
 Unix-like semantics for filesys_remove() are implemented.
 That is, if a file is open when it is removed, its blocks
 are not deallocated and it may still be accessed by the
@@ -403,9 +405,9 @@ conditions (usually errors).
 @item SYS_exec
 @itemx pid_t exec (const char *@var{cmd_line})
 Runs the executable whose name is given in @var{cmd_line}, passing any
-given arguments, and returns the new process's program id (pid).  If
-there is an error loading this program, may return pid -1, which
-otherwise should not be a valid id number.
+given arguments, and returns the new process's program id (pid).  Must
+return pid -1, which otherwise should not be a valid program id, if
+there is an error loading this program.
 
 @item SYS_join
 @itemx int join (pid_t @var{pid})
@@ -454,7 +456,13 @@ than end of file).  Fd 0 reads from the keyboard using
 @itemx int write (int @var{fd}, const void *@var{buffer}, unsigned @var{size})
 Write @var{size} bytes from @var{buffer} to the open file @var{fd}.
 Returns the number of bytes actually written, or -1 if the file could
-not be written.   Fd 1 writes to the console.
+not be written.   
+
+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,
+lines of text output by different processes may end up interleaved on
+the console, confusing both human readers and our grading scripts.
 
 @item SYS_seek
 @itemx void seek (int @var{fd}, unsigned @var{position})