85 lines
3.8 KiB
Plaintext
85 lines
3.8 KiB
Plaintext
@strong{Part A - Codebase Preview: Questions to Prepare for the MCQ AnswerBook Test}
|
|
|
|
@enumerate
|
|
|
|
@item Which Git command should you run to retrieve a copy of your individual repository for PintOS Task 0 in your local directory?
|
|
(@dfn{Hint: be specific to this task and think about ease of use.})
|
|
|
|
@item Why is using the strcpy() function to copy strings usually a bad idea?
|
|
(@dfn{Hint: be sure to clearly identify the problem.})
|
|
|
|
@item If test @file{src/tests/devices/alarm-multiple} fails, where would you find its output and result logs? Provide both paths and file names.
|
|
(@dfn{Hint: you might want to run this test to find out.})
|
|
|
|
@item In PintOS, a thread is characterized by a struct and an execution stack.
|
|
|
|
(a) What are the limitations on the size of these data structures?
|
|
|
|
(b) Explain how this relates to stack overflow and how PintOS identifies it.
|
|
|
|
@item Explain how thread scheduling in PintOS currently works in roughly 300 words. Include the chain of execution of function calls.
|
|
(@dfn{Hint: we expect you to at least mention which functions participate in a context switch, how they interact, how and when the thread state is modified and the role of interrupts.})
|
|
|
|
|
|
@item In PintOS, what is the default length (in ticks and in seconds) of a scheduler time slice?
|
|
(@dfn{Hint: read the Task 0 documentation carefully.})
|
|
|
|
@item In PintOS, how would you print an unsigned 64 bit @code{int}?
|
|
(Consider that you are working with C99). Don't forget to state any inclusions needed by your code.
|
|
|
|
@item Explain the property of @strong{reproducibility} and how the lack of reproducibility will affect debugging.
|
|
|
|
@item In PintOS, locks are implemented on top of semaphores.
|
|
|
|
(a) How do the functions in the API of locks relate to those of semaphores?
|
|
|
|
(b) What extra property do locks have that semaphores do not?
|
|
|
|
@item Define what is meant by a @strong{race-condition}. Why is the test @code{if(x != null)} insufficient to prevent a segmentation fault from occurring on an attempted access to a structure through the pointer @code{x}?
|
|
(@dfn{Hint: you should assume that the pointer variable is correctly typed, that the structure was successfully initialised earlier in the program and that there are other threads running in parallel.})
|
|
|
|
@end enumerate
|
|
|
|
@strong{Part B - The Alarm Clock}
|
|
|
|
Reimplement @code{timer_sleep()}, defined in @file{devices/timer.c}.
|
|
(@b{30 marks})
|
|
|
|
Although a working implementation of @code{timer_sleep} is provided, it "busy waits", that is, it spins in a loop checking the current time and calling @code{thread_yield()} until enough time has gone by.
|
|
You need to reimplement it to avoid busy waiting.
|
|
Further instructions and hints can be found in the PintOS manual.
|
|
|
|
The marks for this question are awarded as follows:
|
|
|
|
Passing the Automated Tests (@b{8 marks}).
|
|
|
|
Performance in the Code Review (@b{12 marks}).
|
|
|
|
Answering the Design Document Questions below (@b{10 marks}).
|
|
|
|
@itemize @w{}
|
|
@item @b{Data Structures}
|
|
|
|
A1: Copy here the declaration of each new or changed `@code{struct}' or `@code{struct}' member, global or static variable, `@code{typedef}', or enumeration. Identify the purpose of each in roughly 25 words. (@b{2 marks})
|
|
|
|
@item @b{Algorithms}
|
|
|
|
A2: Briefly describe what happens in a call to @code{timer_sleep()}, including the actions performed by the timer interrupt handler on each timer tick. (@b{2 marks})
|
|
|
|
A3: What steps are taken to minimize the amount of time spent in the timer interrupt handler? (@b{2 marks})
|
|
|
|
@item @b{Synchronization}
|
|
|
|
A4: How are race conditions avoided when multiple threads call @code{timer_sleep()} simultaneously? (@b{1 mark})
|
|
|
|
A5: How are race conditions avoided when a timer interrupt occurs during a call to @code{timer_sleep()}? (@b{1 mark})
|
|
|
|
@item @b{Rationale}
|
|
|
|
A6: Why did you choose this design?
|
|
In what ways is it superior to another design you considered? (@b{2 marks})
|
|
|
|
@end itemize
|
|
|
|
|