X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fuserprog.texi;h=8524219bf0acc5052f5d75e52817fd4999b2bb79;hb=549e11aeae62a517eb513c6dc1e3e267b8293781;hp=bb05dfb326b091e48cdeff21f744c73ddd0179f6;hpb=13177c92575c4e0ddc1ca1600b24f5058e349bd3;p=pintos-anon diff --git a/doc/userprog.texi b/doc/userprog.texi index bb05dfb..8524219 100644 --- a/doc/userprog.texi +++ b/doc/userprog.texi @@ -301,7 +301,7 @@ regardless of what user process or kernel thread is running. In Pintos, kernel virtual memory is mapped one-to-one to physical memory, starting at @code{PHYS_BASE}. That is, virtual address @code{PHYS_BASE} accesses physical -address 0, virtual address @code{PHYS_BASE} + @t{0x1234} access +address 0, virtual address @code{PHYS_BASE} + @t{0x1234} accesses physical address @t{0x1234}, and so on up to the size of the machine's physical memory. @@ -314,11 +314,6 @@ the running process. However, even in the kernel, an attempt to access memory at an unmapped user virtual address will cause a page fault. -You must handle memory fragmentation gracefully, that is, a process that -needs @var{N} pages of user virtual memory must not require those pages -to be contiguous in physical memory (or, equivalently, in kernel virtual -memory). - @menu * Typical Memory Layout:: @end menu @@ -624,10 +619,11 @@ the program cannot load or run for any reason. @end deftypefn @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} +If process @var{pid} is still alive, waits until it dies. +Then, returns the status that @var{pid} passed to @code{exit}, +or -1 if @var{pid} was terminated by the kernel (e.g.@: killed due to an exception). If -@var{pid} is does not refer to a child of the +@var{pid} 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. @@ -679,6 +675,12 @@ as explicitly described below. Each process has an independent set of file descriptors. File descriptors are not inherited by child processes. + +When a single file is opened more than once, whether by a single +process or different processes, each @code{open} returns a new file +descriptor. Different file descriptors for a single file are closed +independently in separate calls to @code{close} and they do not share +a file position. @end deftypefn @deftypefn {System Call} int filesize (int @var{fd})