| 1: | When we described process states, we described the "waiting or blocking" state as the state a process finds itself in when it is not running nor ready to run. What are the differences between waiting and blocking? Under what conditions would a process find itself in the waiting state, and under what conditions would it be in the blocking state? |
| 2: | Find the kernel code where a process is set from a running state to the blocked state. To put it another way, find where the state of the current->state goes from TASK_RUNNING to TASK_STOPPED. |
| 3: | To get an idea of how long it would take a counter to "roll over," do the following calculations. If a 64-bit decrementer runs at 500MHz, how long would it take to terminate with the following values? 0x000000000000ffff 0x00000000ffffffff 0xffffffffffffffff
|
| 4: | Older versions of Linux used sti() and cli() to disable interrupts when a section of code should not be interrupted. The newer versions of Linux use spin_lock() instead. What is the main advantage of the spinlock? |
| 5: | How does the x86 routine do_IRQ() and the PPC routine ppc_irq_dispatch_handler() allow for shared interrupts? |
| 6: | Why is it not recommended that a system call be accessed from kernel code? |
| 7: | How many run queues are there per CPU on a Linux system running the 2.6 kernel? |
| 8: | When a process forks a new process, does Linux require it to give up some of its timeslice? If so, why? |
| 9: | How can processes get reinserted into the active priority array of a run queue after their timeslice has expired? What is a normal process' priority range? What about real-time processes? |