- updated some tasks to reflect current state/work already done.
authorGodmar Back <godmar@gmail.com>
Wed, 9 Jan 2008 20:07:35 +0000 (20:07 +0000)
committerGodmar Back <godmar@gmail.com>
Wed, 9 Jan 2008 20:07:35 +0000 (20:07 +0000)
- still in need of update

TODO

diff --git a/TODO b/TODO
index 108a05d97539c835445774c91bcc9773a02de425..73a47a709d7cc3ea2eb0daa5ae2a94a095acb18a 100644 (file)
--- a/TODO
+++ b/TODO
@@ -8,9 +8,9 @@
 
 * Internal tests.
 
-* Godmar: Introduce memory leak robustness tests - both for the
-  well-behaved as well as the mis-behaved case - that tests that the
-  kernel handles low-mem conditions well.
+* Godmar: Extend memory leak robustness tests.
+  multi-oom should still pass in project 3/4 because kernel will run out
+  of kernel pool memory before running out of swap space.
 
 * Godmar: Another area is concurrency. I noticed that I had passed all
   tests with bochs 2.2.1 (in reproducibility mode). Then I ran them
   quantitative evaluation in your report - this could then be part of
   their test score.
 
+* Godmar: the spec says that illegal syscall arguments can be handled either by
+  terminating the process, or by returning an error code such as -1.
+
+    Looking at http://gback.cs.vt.edu:8080/source/xref/tests/userprog/write-bad-ptr.c
+    and http://gback.cs.vt.edu:8080/source/xref/tests/userprog/write-bad-ptr.ck
+    I'm wondering if write-bad-ptr isn't forcing them to terminate the
+    process(?). Even though write-bad-ptr.ck has a provision to allow
+    continuation after returning -1, wouldn't it still fail since the test
+    executes:
+    fail ("should have exited with -1");
+    ?
+
+* Godmar: mmap-inherit needs a IGNORE_USER_FAULTS since we say to "not output
+    any messages Pintos doesn't already print." - which technically puts
+    the onus on us to ignore the default page fault msg whenever a test is
+    expected to fault.
+
+* Godmar: add _end to user.lds script and construct some tests that fail
+    unless students check a region for validity rather than just the first
+    address of a region. Right now, unfortunately, they pass all p2 tests
+    with just checking the first address. [A possible problem is that the
+    tests may be unable to tell termination due to unintentional fault
+    from willful termination when address check fails. Should we require
+    they return -1/EINVAL on a bad address and disallow termination? Or
+    construct a test that they'll likely fail if they unintentionally
+    terminate, maybe while holding the filesystem lock? Or require that
+    the diagnostic message only be output when fault occurs in user mode?
+    Something to think about.]
+
 * Threads project:
 
   - Godmar:
 
     What answer are you looking for for this design document question?
 
-  - Godmar:
-
-    >> Did any ambiguities in the scheduler specification make values in the
-    >> table uncertain?  If so, what rule did you use to resolve them?  Does
-    >> this match the behavior of your scheduler?
-
-    My guess is that you're referring to the fact the scheduler
-    specification does not prescribe any order in which the priorities of
-    all threads are updated, so if multiple threads end up with the same
-    priority, it doesn't say which one to pick.  ("round-robin" order
-    would not apply here.)
-
-    Is that correct?
-
-  - Godmar:
-    
-    One of my groups implemented priority donation with these data
-    structures in synch.cc:
-    ---
-    struct value
-    {
-      struct list_elem elem;      /* List element. */
-      int value;                  /* Item value. */
-    };
-
-    static struct value values[10];
-    static int start = 10;
-    static int numNest = 0;
-    ---
-    In their implementation, the "elem" field in their "struct value" is
-    not even used.
-
-    The sad part is that they've passed all tests that are currently in
-    the Pintos base with this implementation. (They do fail the additional
-    tests I added priority-donate-sema & priority-donate-multiple2.)
-
-    Another group managed to pass all tests with this construct:
-    ---
-    struct lock
-      {
-       struct thread *holder;      /* Thread holding lock (for debugging). */
-       struct semaphore semaphore; /* Binary semaphore controlling access. */
-       //*************************************
-       int pri_prev;
-       int pri_delta;              //Used for Priority Donation
-       /**************************************************/
-      };
-    ---
-    where "pri_delta" keeps track of "priority deltas." They even pass
-    priority-donate-multiple2.
-
-    I think we'll need a test where a larger number of threads & locks
-    simultaneously exercise priority donation to weed out those
-    implementations.
-
-    It may also be a good idea to use non-constant deltas for the low,
-    medium, and high priority threads in the tests - otherwise, adding a
-    "priority delta" might give - by coincidence - the proper priority for
-    a thread.
-
   - Godmar: Another thing: one group passed all tests even though they
     wake up all waiters on a lock_release(), rather than just
     one. Since there's never more than one waiter in our tests, they
   - Get rid of rox--causes more trouble than it's worth
 
   - Extra credit: specifics on how to implement sbrk, malloc.
+    Godmar: I have a sample solution and tests for that!  Stay tuned.
 
   - Godmar: We're missing tests that pass arguments to system calls
     that span multiple pages, where some are mapped and some are not.
     pages that can be touched during a call to read()/write() passes
     all tests.
 
-  - Godmar: Need some tests that test that illegal accesses lead to
-    process termination. I have written some, will add them. In P2,
-    obviously, this would require that the students break this
-    functionality since the page directory is initialized for them,
-    still it would be good to have.
-
   - Godmar: There does not appear to be a test that checks that they
     close all fd's on exit.  Idea: add statistics & self-diagnostics
     code to palloc.c and malloc.c.  Self-diagnostics code could be
     kernel memory is free.  Add a system call
     "get_kernel_memory_information".  User programs could engage in a
     variety of activities and notice leaks by checking the kernel
-    memory statistics.
-
-  - Godmar: is there a test that tests that they properly kill a process that
-    attempts to access an invalid address in user code, e.g. *(void**)0 =
-    42;?
-
-    It seems all of the robustness tests deal with bad pointers passed to
-    system calls (at least judging from test/userprog/Rubric.robustness),
-    but none deals with bad accesses by user code, or I am missing
-    something.
-
-    ps: I found tests/vm/pt-bad-addr, which is in project 3 only, though.
-
-    For completeness, we should probably check read/write/jump to unmapped
-    user virtual address and to mapped kernel address, for a total of 6
-    cases. I wrote up some tests, see
-    http://people.cs.vt.edu/~gback/pintos/bad-pointers/
-
-  - process_death test needs improvement
+    memory statistics. 
+    - note: multi-oom tests that now.
 
   - Godmar: In the wait() tests, there's currently no test that tests
     that a process can only wait for its own children. There's only
     - Might want to add a feature whereby kernel arguments can be
       given interactively, rather than passed on-disk.  Needs some
       though.
+
+==========================================================================
+============================== COMPLETED TASKS ===========================
+==========================================================================
+
+* Godmar: Introduce memory leak robustness tests - both for the
+  well-behaved as well as the mis-behaved case - that tests that the
+  kernel handles low-mem conditions well.
+
+    - handled by new multi-oom.
+
+* Godmar: improved priority inheritance tests (see priority-donate-chain)
+