+--------------------+ | CS 140 | | PROJECT 1: THREADS | | DESIGN DOCUMENT | +--------------------+ ---- GROUP ---- >> Fill in the names and email addresses of your group members. FirstName LastName FirstName LastName FirstName LastName ---- PRELIMINARIES ---- >> If you have any preliminary comments on your submission, please give them >> here. >> Please cite any offline or online sources you consulted while >> preparing your submission, other than the Pintos documentation provided in >> the handout, the course textbooks, lecture notes, and office hours help. LOCKS ===== ---- DATA STRUCTURES ---- >> A1: Copy here the declaration of each new or changed `struct' or >> `struct' member, global or static variable, `typedef', or >> enumeration. Identify the purpose of each in 25 words or less. ---- ALGORITHMS ---- >> A2: Briefly describe what happens in lock_acquire(). >> A3: Briefly describe what happens in lock_release(). ---- SYNCHRONIZATION ---- >> A4: How are race conditions avoided when multiple threads call >> lock_acquire() simultaneously? >> A5: How are race conditions avoided in lock_release()? ---- RATIONALE ---- >> A6: Why did you choose this design? In what ways is it superior to >> another design you considered? ALARM CLOCK =========== ---- DATA STRUCTURES ---- >> B1: Copy here the declaration of each new or changed `struct' or >> `struct' member, global or static variable, `typedef', or >> enumeration. Identify the purpose of each in 25 words or less. ---- ALGORITHMS ---- >> B2: Briefly describe what happens in a call to timer_sleep(), >> including the effects of the timer interrupt handler. >> B3: What steps are taken to minimize the amount of time spent in >> the timer interrupt handler? ---- SYNCHRONIZATION ---- >> B4: How are race conditions avoided when multiple threads call >> timer_sleep() simultaneously? >> B5: How are race conditions avoided when a timer interrupt occurs >> during a call to timer_sleep()? ---- RATIONALE ---- >> B6: Why did you choose this design? In what ways is it superior to >> another design you considered? PRIORITY SCHEDULING =================== ---- DATA STRUCTURES ---- >> C1: Copy here the declaration of each new or changed `struct' or >> `struct' member, global or static variable, `typedef', or >> enumeration. Identify the purpose of each in 25 words or less. >> C2: Explain the data structure used to track priority donation. >> Use ASCII art to diagram a nested donation. (Alternately, submit a >> .png file.) ---- ALGORITHMS ---- >> C3: How do you ensure that the highest priority thread waiting for >> a lock, semaphore, or condition variable wakes up first? >> C4: Describe the sequence of events when a call to lock_acquire() >> causes a priority donation. How is nested donation handled? >> C5: Describe the sequence of events when lock_release() is called >> on a lock that a higher-priority thread is waiting for. ---- SYNCHRONIZATION ---- >> C6: Describe a potential race in thread_set_priority() and explain >> how your implementation avoids it. Can you use a lock to avoid >> this race? ---- RATIONALE ---- >> C7: Why did you choose this design? In what ways is it superior to >> another design you considered? ADVANCED SCHEDULER ================== ---- DATA STRUCTURES ---- >> D1: Copy here the declaration of each new or changed `struct' or >> `struct' member, global or static variable, `typedef', or >> enumeration. Identify the purpose of each in 25 words or less. ---- ALGORITHMS ---- >> D2: Suppose threads A, B, and C have nice values 0, 1, and 2. Each >> has a recent_cpu value of 0. Fill in the table below showing the >> scheduling decision and the priority and recent_cpu values for each >> thread after each given number of timer ticks: timer recent_cpu priority thread ticks A B C A B C to run ----- -- -- -- -- -- -- ------ 0 4 8 12 16 20 24 28 32 36 >> D3: 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? >> D4: How is the way you divided the cost of scheduling between code >> inside and outside interrupt context likely to affect performance? ---- RATIONALE ---- >> D5: Briefly critique your design, pointing out advantages and >> disadvantages in your design choices. If you were to have extra >> time to work on this part of the project, how might you choose to >> refine or improve your design? >> D6: The assignment explains arithmetic for fixed-point math in >> detail, but it leaves it open to you to implement it. Why did you >> decide to implement it the way you did? If you created an >> abstraction layer for fixed-point math, that is, an abstract data >> type and/or a set of functions or macros to manipulate fixed-point >> numbers, why did you do so? If not, why not? SURVEY QUESTIONS ================ >> About how many hours did your group spend on this project? How many hours >> would you say you personally spent? >> Did you find that working on a particular part of the assignment gave >> you greater insight into some aspect of OS design? >> Is there some particular fact or hint we should give students in >> future quarters to help them solve the problems? >> Any other comments?