X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fuserprog.texi;h=e4e6098b5e8f77acdaf691b967af34d6cc0ef89d;hb=6bfa59ceea7937a705f85de45ba69bf8ba2504c6;hp=7322dd52946c2c9b601063bc717dbd2f38d245cf;hpb=68bad31062d1a3196a9e4d8550d561c22ae5e9cb;p=pintos-anon diff --git a/doc/userprog.texi b/doc/userprog.texi index 7322dd5..e4e6098 100644 --- a/doc/userprog.texi +++ b/doc/userprog.texi @@ -251,7 +251,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 @@ -481,6 +482,12 @@ The @code{write} system call for writing to fd 1, the system console. All of our test programs write to the console (the user process version of @func{printf} is implemented this way), so they will all malfunction until @code{write} is available. + +@item +For now, change @func{process_wait} to an infinite loop (one that waits +forever). The provided implementation returns immediately, so Pintos +will power off before any processes actually get to run. You will +eventually need to provide a correct implementation. @end itemize After the above are implemented, user processes should work minimally. @@ -593,8 +600,8 @@ the program cannot load or run for any reason. @deftypefn {System Call} int wait (pid_t @var{pid}) Waits for process @var{pid} to die and returns the status it passed to @code{exit}. Returns -1 if @var{pid} -was terminated by the kernel (i.e.@: killed due to an exception). If -@var{pid} is invalid or if it was not a child of the +was terminated by the kernel (e.g.@: killed due to an exception). If +@var{pid} is does not refer to a child of the calling thread, or if @code{wait} has already been successfully called for the given @var{pid}, returns -1 immediately, without waiting. @@ -659,7 +666,8 @@ Reads @var{size} bytes from the file open as @var{fd} into @var{buffer}. Returns the number of bytes actually read (0 at end of file), or -1 if the file could not be read (due to a condition other than end of file). Fd 0 reads from the keyboard using -@func{kbd_getc}. +@func{kbd_getc}. (Keyboard input will not work if you pass the +@option{-v} option to @command{pintos}.) Consider implementing this function in terms of @func{file_read}. @end deftypefn @@ -676,7 +684,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. @@ -770,7 +779,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