adam's home
* Static priority:
[100, 139) - Nice: [-20, 19)
* Base Time Slice - depends on static priority (5ms - 800ms). By default 100 ms.
* Dynamic priority:
dynamic priority (100 - 139) - depends on static priority, and bonus (0 - 10) - actually
used to select the new process to run.
Bunus depends on Average Sleep Time
* The run queue data structure:
a. Per-CPU
struct runqueue
{
prio_array_t * active;
prio_array_t * expired;
}
typedef struct list_head[NR_PRIO] prio_array_t;
* scheduler_tic() function:
Call in each timer tick, update the time slice of "Current" task.
For task run out of time slice - normal process, moved to expire queue, - real-time, move to
tail of priority list in active queue.
* schedule()
Select the next task to run, do context swith
a) Direct invocation - when a task want's to go asleep
b) lazy invocation - set TIF_NEED_RESCHED flag of "Current". Checked when returnning to user mode
Sunday, July 02, 2006
Subscribe to:
Posts (Atom)