X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=doc%2Fuserprog.texi;h=a92697d1b4fe209cbe78b6a2d2b6965bcac41854;hb=6ebebc408e12133c4130923081c40bbfbdd281d4;hp=62e29a6bcd0a873bd8fcb4f039caf14319cc763c;hpb=9d6ad9a479ddae9628dc2d45862f9281986c430b;p=pintos-anon diff --git a/doc/userprog.texi b/doc/userprog.texi index 62e29a6..a92697d 100644 --- a/doc/userprog.texi +++ b/doc/userprog.texi @@ -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}) @@ -678,7 +686,7 @@ provide a little bit of helpful code: Returns true if successful, false if USRC is invalid. */ static inline bool get_user (uint8_t *dst, const uint8_t *usrc) { int eax; - asm ("movl $1f, %%eax; movb %2, %%al; movb %%al, %0; 1:" + asm ("mov %%eax, offset 1f; mov %%al, %2; mov %0, %%al; 1:" : "=m" (*dst), "=&a" (eax) : "m" (*usrc)); return eax != 0; } @@ -687,7 +695,7 @@ static inline bool get_user (uint8_t *dst, const uint8_t *usrc) { Returns true if successful, false if UDST is invalid. */ static inline bool put_user (uint8_t *udst, uint8_t byte) { int eax; - asm ("movl $1f, %%eax; movb %b2, %0; 1:" + asm ("mov %%eax, offset 1f; mov %0, %b2; 1:" : "=m" (*udst), "=&a" (eax) : "r" (byte)); return eax != 0; }