System Calls Related to Scheduling
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.
The nice( ) System Call
The 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.
The sys_nice( )
service
routine handles the nice( )
system
call. Although the increment
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 CAP_SYS_NICE
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
change priorities, sys_nice( )
converts current->static_prio
to the range ...
Get Understanding the Linux Kernel, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.