Several system calls have been introduced to allow processes to change their priorities and scheduling policies. As a general rule, users are always allowed to lower the priorities of their processes. However, if they want to modify the priorities of processes belonging to some other user or if they want to increase the priorities of their own processes, they must have superuser privileges.
nice( ) [*] system call allows processes to change their base
priority. The integer value contained in the
increment parameter is used to modify the
nice field of the process
descriptor. The nice Unix command,
which allows users to run programs with modified scheduling priority,
is based on this system call.
sys_nice( ) service
routine handles the
nice( ) system
call. Although the
parameter may have any value, absolute values larger than 40 are
trimmed down to 40. Traditionally, negative values correspond to
requests for priority increments and require superuser privileges,
while positive ones correspond to requests for priority decreases. In
the case of a negative increment, the function invokes the
capable( ) function to verify whether the
process has a
capability. Moreover, the function invokes the
security_task_setnice( ) security hook. We
discuss that function in Chapter
20. If the user turns out to have the privilege required to
current->static_prio to the range ...