From: Ben Pfaff Date: Thu, 14 Oct 2004 04:18:14 +0000 (+0000) Subject: Remove patch against test.c X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=caeb8f8ce9379914671abcd5f194873800b81130;p=pintos-anon Remove patch against test.c --- diff --git a/solutions/p1-3.patch b/solutions/p1-3.patch index db95713..fed4771 100644 --- a/solutions/p1-3.patch +++ b/solutions/p1-3.patch @@ -147,203 +147,6 @@ diff -u -p -u -r1.14 synch.c intr_set_level (old_level); } -Index: threads/test.c -=================================================================== -RCS file: /u/blp/cvs/pintos/src/threads/test.c,v -retrieving revision 1.4 -diff -u -p -u -r1.4 test.c ---- threads/test.c 17 Sep 2004 06:52:27 -0000 1.4 -+++ threads/test.c 11 Oct 2004 07:29:34 -0000 -@@ -1,110 +1,109 @@ -+/* Problem 1-3: Priority Scheduling tests. -+ -+ Based on a test originally submitted for Stanford's CS 140 in -+ winter 1999 by by Matt Franklin -+ , Greg Hutchins -+ , Yu Ping Hu . -+ Modified by arens. */ -+ - #include "threads/test.h" - #include - #include "threads/synch.h" - #include "threads/thread.h" --#include "devices/timer.h" - --static void test_sleep (int iterations); -+static void test_preempt (void); -+static void test_fifo (void); -+static void test_donate_return (void); - - void - test (void) - { -- test_sleep (1); -- test_sleep (7); -+ /* Make sure our prority is the default. */ -+ ASSERT (thread_get_priority () == PRI_DEFAULT); -+ -+ //test_preempt (); -+ //test_fifo (); -+ test_donate_return (); - } - --/* Based on a test originally submitted for Stanford's CS 140 in -- winter 1998 by Rob Baesman , Ben -- Taskar , and Toli Kuznets -- . */ --struct sleep_thread_data -- { -- int64_t start; /* Start time. */ -- int duration; /* Number of ticks to sleep. */ -- int iterations; /* Number of iterations to run. */ -- int *product; /* Largest product so far. */ -- struct lock *lock; /* Lock on access to `product'. */ -- struct semaphore done; /* Completion semaphore. */ -- tid_t tid; /* Thread ID. */ -- }; -+static thread_func simple_thread_func; -+static thread_func acquire_thread_func; - --static void sleeper (void *); -+static void -+test_preempt (void) -+{ -+ printf ("\n" -+ "Testing priority preemption.\n"); -+ thread_create ("high-priority", PRI_DEFAULT + 1, simple_thread_func, NULL); -+ printf ("The high-priority thread should have already completed.\n" -+ "Priority preemption test done.\n"); -+} - - static void --test_sleep (int iterations) -+test_fifo (void) - { -- struct sleep_thread_data threads[5]; -- const int thread_cnt = sizeof threads / sizeof *threads; -- struct lock lock; -- int64_t start; -- int product; - int i; -- -+ - printf ("\n" -- "Testing %d sleeps per thread.\n" -- "If successful, product of iteration count and\n" -- "sleep duration will appear in nondescending order.\n", -- iterations); -- -- /* Start all the threads. */ -- product = 0; -- lock_init (&lock, "product"); -- start = timer_ticks (); -- for (i = 0; i < thread_cnt; i++) -+ "Testing FIFO preemption.\n" -+ "5 threads will iterate 10 times in the same order each time.\n" -+ "If the order varies then there is a bug.\n"); -+ -+ thread_set_priority (PRI_DEFAULT + 2); -+ for (i = 0; i < 5; i++) - { -- struct sleep_thread_data *t; - char name[16]; -- -- snprintf (name, sizeof name, "thread %d", i); -- t = threads + i; -- t->start = start; -- t->duration = (i + 1) * 10; -- t->iterations = iterations; -- t->product = &product; -- t->lock = &lock; -- sema_init (&t->done, 0, name); -- t->tid = thread_create (name, PRI_DEFAULT, sleeper, t); -- } -- -- /* Wait for all the threads to finish. */ -- for (i = 0; i < thread_cnt; i++) -- { --#ifdef THREAD_JOIN_IMPLEMENTED -- thread_join (threads[i].tid); --#else -- sema_down (&threads[i].done); --#endif -+ snprintf (name, sizeof name, "%d", i); -+ thread_create (name, PRI_DEFAULT + 1, simple_thread_func, NULL); - } -+ thread_set_priority (PRI_DEFAULT); - -- printf ("...done\n"); -+ printf ("FIFO preemption test done.\n"); - } - - static void --sleeper (void *t_) -+test_donate_return (void) - { -- struct sleep_thread_data *t = t_; -- int i; -+ struct lock lock; - -- for (i = 1; i <= t->iterations; i++) -- { -- int old_product; -- int new_product = i * t->duration; -+ printf ("\n" -+ "Testing priority donation.\n" -+ "If the statements printed below are all true, you pass.\n"); - -- timer_sleep ((t->start + new_product) - timer_ticks ()); -+ lock_init (&lock, "donor"); -+ lock_acquire (&lock); -+ thread_create ("acquire1", PRI_DEFAULT + 1, acquire_thread_func, &lock); -+ printf ("This thread should have priority %d. Actual priority: %d.\n", -+ PRI_DEFAULT + 1, thread_get_priority ()); -+ thread_create ("acquire2", PRI_DEFAULT + 2, acquire_thread_func, &lock); -+ printf ("This thread should have priority %d. Actual priority: %d.\n", -+ PRI_DEFAULT + 2, thread_get_priority ()); -+ lock_release (&lock); -+ printf ("acquire2 and acquire1 must already have finished, in that order.\n" -+ "This should be the last line before finishing this test.\n" -+ "Priority donation test done.\n"); -+} - -- lock_acquire (t->lock); -- old_product = *t->product; -- *t->product = new_product; -- lock_release (t->lock); -- -- printf ("%s: duration=%d, iteration=%d, product=%d\n", -- thread_name (), t->duration, i, new_product); -- -- if (old_product > new_product) -- printf ("%s: Out of order sleep completion (%d > %d)!\n", -- thread_name (), old_product, new_product); -- } -+static void -+simple_thread_func (void *aux UNUSED) -+{ -+ int i; - -- /* Signal completion. */ -- sema_up (&t->done); -+ for (i = 0; i < 5; i++) -+ { -+ printf ("Thread %s iteration %d\n", thread_name (), i); -+ thread_yield (); -+ } -+ printf ("Thread %s done!\n", thread_name ()); -+} -+ -+static void -+acquire_thread_func (void *lock_) -+{ -+ struct lock *lock = lock_; -+ -+ lock_acquire (lock); -+ printf ("%s: got the lock\n", thread_name ()); -+ lock_release (lock); -+ printf ("%s: done\n", thread_name ()); - } Index: threads/thread.c =================================================================== RCS file: /u/blp/cvs/pintos/src/threads/thread.c,v