---- DATA STRUCTURES ----
->> 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.
+>> 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 ----
->> Briefly describe what happens in a call to timer_sleep(), including
->> the effects of the timer interrupt handler.
+>> A2: Briefly describe what happens in a call to timer_sleep(),
+>> including the effects of the timer interrupt handler.
->> What steps are taken to minimize the amount of time spent in the timer
->> interrupt handler?
+>> A3: What steps are taken to minimize the amount of time spent in
+>> the timer interrupt handler?
---- SYNCHRONIZATION ----
->> How are race conditions avoided when multiple threads call
+>> A4: How are race conditions avoided when multiple threads call
>> timer_sleep() simultaneously?
->> How are race conditions avoided when a timer interrupt occurs during a
->> call to timer_sleep()?
+>> A5: How are race conditions avoided when a timer interrupt occurs
+>> during a call to timer_sleep()?
---- RATIONALE ----
->> Why did you choose this design? In what ways is it superior to
+>> A6: Why did you choose this design? In what ways is it superior to
>> another design you considered?
PRIORITY SCHEDULING
---- DATA STRUCTURES ----
->> 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.
+>> 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.
->> Explain the data structure used to track priority donation. Use ASCII
->> art to diagram a nested donation. (Alternately, submit a .png file.)
+>> B2: Explain the data structure used to track priority donation.
+>> Use ASCII art to diagram a nested donation. (Alternately, submit a
+>> .png file.)
---- ALGORITHMS ----
->> How do you ensure that the highest priority thread waiting for a lock,
->> semaphore, or condition variable wakes up first?
+>> B3: How do you ensure that the highest priority thread waiting for
+>> a lock, semaphore, or condition variable wakes up first?
->> Describe the sequence of events when a call to lock_acquire() causes a
->> priority donation. How is nested donation handled?
+>> B4: Describe the sequence of events when a call to lock_acquire()
+>> causes a priority donation. How is nested donation handled?
->> Describe the sequence of events when lock_release() is called on a
->> lock that a higher-priority thread is waiting for.
+>> B5: Describe the sequence of events when lock_release() is called
+>> on a lock that a higher-priority thread is waiting for.
---- SYNCHRONIZATION ----
->> Describe a potential race in thread_set_priority() and explain how
->> your implementation avoids it. Can you use a lock to avoid this race?
+>> B6: 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 ----
->> Why did you choose this design? In what ways is it superior to
+>> B7: Why did you choose this design? In what ways is it superior to
>> another design you considered?
ADVANCED SCHEDULER
---- DATA STRUCTURES ----
->> 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.
+>> 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.
---- ALGORITHMS ----
->> 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:
+>> C2: 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
32
36
->> 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?
+>> C3: 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?
->> How is the way you divided the cost of scheduling between code
+>> C4: How is the way you divided the cost of scheduling between code
>> inside and outside interrupt context likely to affect performance?
---- RATIONALE ----
->> Briefly critique your design, pointing out advantages and
+>> C5: 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?
->> 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?
+>> C6: 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
================