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?