From: Ben Pfaff <blp@cs.stanford.edu>
Date: Fri, 12 Nov 2004 06:01:17 +0000 (+0000)
Subject: Update tests.
X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d3cf8bbe3dbfd60b851b7dd9f51d7f5b77fb4bf;p=pintos-anon

Update tests.
---

diff --git a/grading/threads/review.txt b/grading/threads/review.txt
index 62c5d81..08585b5 100644
--- a/grading/threads/review.txt
+++ b/grading/threads/review.txt
@@ -14,7 +14,6 @@ DESIGN [[/40]]
 --------------
 
  -20 Missing or far too brief DESIGNDOC
-  -2 Troublesome or unexplained dependencies
   -2 Changing interfaces, each (max -6)
 
 DESIGNDOC (per problem):
diff --git a/grading/userprog/child-bad.c b/grading/userprog/child-bad.c
index a256e63..914bde6 100644
--- a/grading/userprog/child-bad.c
+++ b/grading/userprog/child-bad.c
@@ -5,7 +5,7 @@ int
 main (void) 
 {
   printf ("(child-bad) begin\n"); 
-  asm volatile ("mov $0xc0101234, %esp; int $0x30");
+  asm volatile ("mov $0x20101234, %esp; int $0x30");
   printf ("(child-bad) end\n"); 
   return 0;
 }
diff --git a/grading/userprog/close-bad-fd.c b/grading/userprog/close-bad-fd.c
index cdea3c5..ad929a8 100644
--- a/grading/userprog/close-bad-fd.c
+++ b/grading/userprog/close-bad-fd.c
@@ -5,7 +5,7 @@ int
 main (void) 
 {
   printf ("(close-bad-fd) begin\n");
-  close (0xc0101234);
+  close (0x20101234);
   printf ("(close-bad-fd) end\n");
   return 0;
 }
diff --git a/grading/userprog/create-bad-ptr.c b/grading/userprog/create-bad-ptr.c
index 514234e..a6b7f76 100644
--- a/grading/userprog/create-bad-ptr.c
+++ b/grading/userprog/create-bad-ptr.c
@@ -5,7 +5,7 @@ int
 main (void) 
 {
   printf ("(create-bad-ptr) begin\n");
-  create ((char *) 0xc0101234, 0);
+  create ((char *) 0x20101234, 0);
   printf ("(create-bad-ptr) end\n");
   return 0;
 }
diff --git a/grading/userprog/exec-bad-ptr.c b/grading/userprog/exec-bad-ptr.c
index 28dcc9b..fce7adb 100644
--- a/grading/userprog/exec-bad-ptr.c
+++ b/grading/userprog/exec-bad-ptr.c
@@ -5,7 +5,7 @@ int
 main (void) 
 {
   printf ("(exec-bad-ptr) begin\n");
-  exec ((char *) 0xc0101234);
+  exec ((char *) 0x20101234);
   printf ("(exec-bad-ptr) end\n");
   return 0;
 }
diff --git a/grading/userprog/join-bad-pid.c b/grading/userprog/join-bad-pid.c
index 9729097..d2902bb 100644
--- a/grading/userprog/join-bad-pid.c
+++ b/grading/userprog/join-bad-pid.c
@@ -5,7 +5,7 @@ int
 main (void) 
 {
   printf ("(join-bad-pid) begin\n");
-  join ((pid_t) 0xc0101234);
+  join ((pid_t) 0x20101234);
   printf ("(join-bad-pid) end\n");
   return 0;
 }
diff --git a/grading/userprog/open-bad-ptr.c b/grading/userprog/open-bad-ptr.c
index 71bd119..f73e6d8 100644
--- a/grading/userprog/open-bad-ptr.c
+++ b/grading/userprog/open-bad-ptr.c
@@ -5,7 +5,7 @@ int
 main (void) 
 {
   printf ("(open-bad-ptr) begin\n");
-  open ((char *) 0xc0101234);
+  open ((char *) 0x20101234);
   printf ("(open-bad-ptr) end\n");
   return 0;
 }
diff --git a/grading/userprog/read-bad-fd.c b/grading/userprog/read-bad-fd.c
index eb9700d..959687c 100644
--- a/grading/userprog/read-bad-fd.c
+++ b/grading/userprog/read-bad-fd.c
@@ -6,7 +6,7 @@ main (void)
 {
   char buf;
   printf ("(read-bad-fd) begin\n");
-  read (0xc0101234, &buf, 1);
+  read (0x20101234, &buf, 1);
   printf ("(read-bad-fd) end\n");
   return 0;
 }
diff --git a/grading/userprog/read-bad-ptr.c b/grading/userprog/read-bad-ptr.c
index 860e485..5ddb2a3 100644
--- a/grading/userprog/read-bad-ptr.c
+++ b/grading/userprog/read-bad-ptr.c
@@ -11,7 +11,7 @@ main (void)
   if (handle < 2)
     printf ("(read-bad-ptr) fail: open() returned %d\n", handle);
 
-  read (handle, (char *) 0xc0101234, 123);
+  read (handle, (char *) 0x20101234, 123);
   
   printf ("(read-bad-ptr) end\n");
   return 0;
diff --git a/grading/userprog/review.txt b/grading/userprog/review.txt
index 38ea7ac..c48657e 100644
--- a/grading/userprog/review.txt
+++ b/grading/userprog/review.txt
@@ -1,65 +1,55 @@
-Design (/120 points)
---------------------
+Test cases [[/25]]
+------------------
+  -15 Didn't write own test cases
+  -10 Insufficient testing
 
-a) DESIGNDOC (/60 pts)
-    a) Arg passing                                          (/10)
-    b) System calls                                         (/20)
-         Didn't discuss global vs local allocation of fileID's
-         How to handle exceptions & why (ie killing processes
-           that do bad things)
-         Explaining choice of openFileID's & ASIDS
-    c) Multiprogramming                                     (/30)
-         How to find a free page.
-         Explaining how new processes are executed.
-         How they deal with running out of memory error on loading.
+Design [[/100]]
+---------------
 
-b) Other Design (/60 pts)
+Quality of DESIGNDOC
+  -10 Arg passing
+  -20 Copying data around:
+      User-to-kernel copying.
+      Kernel-to-user copying.
+      String copying.
+  -20 System calls:
+      Allocation of file descriptors.
+      Handling exceptions and related cleanup.
+      pid_t rationale (if they changed tid_t -> pid_t mapping).
+      Synchronization of system calls and filesystem.
 
-   1. Argument passing
-      No checking for page boundaries in argument passing               -10
-      Uses memcpy/bcopy/memmove or file reading/writing for             +5
-        copying up to/starting from page boundaries -- good job!
-        (Search for memcpy/bcopy, not just extern, make sure they call it
-        with the possibility of copying more than 4 bytes at a time. ALSO if
-        they do File Read/Writes then that is not byte-by-byte but they will
-        fail page crossing only take off for failing the pagecrossing test.)
-      Don't decomp / reuse translation code                             -5
-      Using strtok instead of strtok_r or strsep                        -1
-        (strtok is not thread-safe)
+Overall:
+  -1 Gratuitous use of malloc() (e.g. for allocating a list or a lock)
+  -1 Inappropriate use of ASSERT (e.g. to verify that malloc() succeeded)
 
-   2. System calls
-      No checking for page boundaries in system calls                   -20
-        (-5 if they only forgot for some system calls but did it somewhere)
-      Interrupts turned off for all system calls                        -10
-      Doesn't close open files after process exits                      -2
-      table/when file is closed, it is not removed from file table
-      Uses printf/fscanf/putc/getc when interacting                     -5
-        with StandardInput / StandardOutput
-      Using fixed length buffer for Read/Write                          -5
-      Using pointer to int casts as ASID/FileId without justifying      -5
+Program arguments:
+  +1 Support multiple pages of arguments.
 
-   3. Multiprogramming
-      Don't use the bitmap object                                       -5
-      Bitmap is not cleared when process dies                           -5
-      Access to bitmap is not sychronized                               -5
-      getting next ASID is not synchronized                             -5
-        ...or (mututally exclusive, depending on their solution)...
-      Doesn't use ASID's at all, but their system for identifying       -5
-        processes has synchronization or uniqueness problems (e.g. 
-        careless use of AddrSpace*'s)
-      Multiple translations for a page                                  -10
-        (One vaddr maps to two paddr's, or vice versa)
+User/kernel copying:
+  -5 Too many copies of user/kernel copying code
+  -10 Doesn't check for page boundaries
+  -3 Imperfect checking for page boundaries
+  -5 Doesn't check whether pointers are at or above PHYS_BASE
+  -2 Imperfect checking whether pointers are at or above PHYS_BASE
+  +3 Copies large chunks while properly observing page boundaries
+  +3 Scans for string null terminators w/o checking individual bytes
+     while properly observing page boundaries
+  +3 Uses get_user() and put_user() functions from FAQ for copying
 
-Style (/30 points)
-------------------
-0) Had to modify code to get to compile the first                       -10
-   time
-1) Minor changes to machine code                                        -10
-2) Extraneous output                                                    -5
-3) Unexplained dependencies                                             -5
-4) Not Decomposing Exception handler                                    -5
+System call design:
+  -5 Disables interrupts without reasonable justification
+  -2 Doesn't close open files at process exit
+  -2 Doesn't acquire file system lock to close files at process exit
+  -5 Buffer overflow in read or write system call
+  -5 System call error exit leaks memory/fails to release global lock
+  -5 Uses a pointer as a file descriptor or pid without justifying
+
+Style [[/25]]
+-------------
+  -5 Extraneous output caused warnings
+  -5 Didn't print process termination messages
+  -5 One big function for handling system calls
+  -5 No attempt to conform to existing coding style
 
-TESTCASEs (/30 points)
-----------------------
-    Don't write own testcases                                           -15
-    Not sufficient testing                                        up to -10
+Comments
+--------
diff --git a/grading/userprog/run-tests b/grading/userprog/run-tests
index dd7cd21..4f4bb10 100755
--- a/grading/userprog/run-tests
+++ b/grading/userprog/run-tests
@@ -489,11 +489,12 @@ sub fix_exit_codes {
 	local ($_) = $output[$i];
 	
 	my ($process, $code);
-	if ((($process, $code) = /^([-a-zA-Z0-9 ]+):.*[ \(](-?\d+)\b\)?$/)
-	    || (($process, $code) = /^([-a-zA-Z0-9 ]+) exit\((-?\d+)\)$/)
+	if ((($process, $code) = /^([-a-z0-9 ]+):.*[ \(](-?\d+)\b\)?$/)
+	    || (($process, $code) = /^([-a-z0-9 ]+) exit\((-?\d+)\)$/)
 	    || (($process, $code)
-		= /^([-a-zA-Z0-9 ]+) \(.*\): exit\((-?\d+)\)$/)
-	    || (($process, $code) = /^([-a-zA-Z0-9 ]+):\( (-?\d+) \) $/)
+		= /^([-a-z0-9 ]+) \(.*\): exit\((-?\d+)\)$/)
+	    || (($process, $code) = /^([-a-z0-9 ]+):\( (-?\d+) \) $/)
+	    || (($code, $process) = /^shell: exit\((-?\d+)\) \| ([-a-z0-9]+)/)
 ) {
 	    $process = substr ($process, 0, 15);
 	    $process =~ s/\s.*//;
diff --git a/grading/userprog/sc-bad-sp.c b/grading/userprog/sc-bad-sp.c
index d7a0f82..1153878 100644
--- a/grading/userprog/sc-bad-sp.c
+++ b/grading/userprog/sc-bad-sp.c
@@ -5,7 +5,7 @@ int
 main (void) 
 {
   printf ("(sc-bad-sp) begin\n"); 
-  asm volatile ("mov $0xc0101234, %esp; int $0x30");
+  asm volatile ("mov $0x20101234, %esp; int $0x30");
   printf ("(sc-bad-sp) end\n"); 
   return 0;
 }
diff --git a/grading/userprog/write-bad-fd.c b/grading/userprog/write-bad-fd.c
index 33df001..5f46d6b 100644
--- a/grading/userprog/write-bad-fd.c
+++ b/grading/userprog/write-bad-fd.c
@@ -6,7 +6,7 @@ main (void)
 {
   char buf = 123;
   printf ("(write-bad-fd) begin\n");
-  write (0xc0101234, &buf, 1);
+  write (0x20101234, &buf, 1);
   printf ("(write-bad-fd) end\n");
   return 0;
 }
diff --git a/grading/userprog/write-bad-ptr.c b/grading/userprog/write-bad-ptr.c
index 9431c70..b36f447 100644
--- a/grading/userprog/write-bad-ptr.c
+++ b/grading/userprog/write-bad-ptr.c
@@ -11,7 +11,7 @@ main (void)
   if (handle < 2)
     printf ("(write-bad-ptr) fail: open() returned %d\n", handle);
 
-  write (handle, (char *) 0xc0101234, 123);
+  write (handle, (char *) 0x20101234, 123);
   
   printf ("(write-bad-ptr) end\n");
   return 0;