操作系统中的进程调度与内存管理
1. 进程调度相关系统调用
在操作系统中,有多个系统调用可用于让进程改变其优先级和调度策略。一般而言,用户可以降低自己进程的优先级,但如果要修改其他用户进程的优先级或提高自己进程的优先级,则需要超级用户权限。
1.1 nice()系统调用
nice()系统调用允许进程改变其基本优先级。该调用的增量参数中的整数值用于修改进程描述符的nice字段。Unix的nice命令就是基于此系统调用,让用户能以修改后的调度优先级运行程序。
sys_nice()服务例程处理nice()系统调用。尽管增量参数可以是任意值,但绝对值大于40的值会被截断为40。传统上,负值表示提高优先级的请求,需要超级用户权限;正值表示降低优先级的请求。若增量为负,函数会调用capable()函数验证进程是否有CAP_SYS_NICE能力,还会调用security_task_setnice()安全钩子。若用户有修改优先级的权限,sys_nice()会将当前进程的静态优先级转换为nice值范围,加上增量值,然后调用set_user_nice()函数。该函数会获取本地运行队列锁,更新当前进程的静态优先级,调用resched_task()函数让其他进程抢占当前进程,最后释放运行队列锁。不过,nice()系统调用仅用于向后兼容,已被setpriority()系统调用取代。
1.2 getpriority()和setpriority()系统调用
nice()系统调用仅影响调用它的进程,而getpriority()和setpriority()系统调用则作用于给定组中所有进程的基本优先级。getpriority()返回给定组中所有进程
超级会员免费看
订阅专栏 解锁全文
1793

被折叠的 条评论
为什么被折叠?



