linux中nice和prio关系,进程调度 – Linux内核API task_nice

task_nice函数功能描述:此函数用于获取进程的nice值,nice值其实代表进程的优先级,此优先级与静态优先级有关,与静态优先级的关系是:nice=static_prio-120。

task_nice文件包含

#include

task_nice函数定义

在内核源码中的位置:linux-3.19.3/include/linux/sched.h

函数定义格式:

static inline int task_nice(const struct task_struct *p)

{

return PRIO_TO_NICE((p)->static_prio);

}

task_nice输入参数说明

此函数的第一个参数是进程描述符信息,其定义比较复杂,在内核注释中关于此参数说明比较详细,具体定义请参见内核源码文件linux-3.19.3/include/linux/sched.h。

task_nice返回参数说明

此函数返回的值是int型的变量,代表当前进程的nice值,其取值范围是-20~19, nice值越小,代表其优先级越大。

task_nice实例解析

编写测试文件:task_nice.c

头文件引用:

#include

#include

#include

#include

MODULE_LICENSE("GPL");

子进程函数定义:

int my_function(void * argc)

{

printk("in the kernel thread function! \n");

printk("the current static_prio is:%d\n", current->static_prio);

// 显示当前进程的静态优先级

printk("the current nice is:%d\n", task_nice(current)); //显示当前进程的nice值

printk("the current pid is:%d\n", current->pid); //显示当前进程的PID值

printk("out the kernel thread function\n");

return 0;

}

模块加载函数定义:

static int __init task_nice_init(void)

{

struct task_struct * result;

int priority;

printk("into task_nice_init.\n");

result=kthread_create_on_node(my_function, NULL, -1, "task_nice"); //创建新进程

wake_up_process(result);

priority=task_nice(result); //获取新进程的nice值

printk("the static_prio of the child thread is:%d\n", result->static_prio);

// 显示新进程的静态优先级

printk("the nice of the child thread is:%d\n", priority); //显示新进程的nice值

printk("the pid of new thread is :%d\n", result->pid);

//显示函数kernel_thread( )的返回结果

printk("the current static_prio is:%d\n", current->static_prio);

// 显示当前进程的静态优先级

printk("the current pid is:%d\n", current->pid); //显示当前进程的PID值

printk("the current nice is:%d\n", task_nice(current)); //显示当前进程的nice值

printk("out task_nice_init.\n");

return 0;

}

模块退出函数定义:

static void __exit task_nice_exit(void)

{

printk("Goodbye task_nice\n");

}

模块加载、退出函数调用:

module_init(task_nice_init);

module_exit(task_nice_exit);

实例运行结果及分析:

首先编译模块,执行命令insmod task_nice.ko插入内核模块,然后输入命令dmesg -c查看内核输出信息,会出现如图所示的结果。

482e82889e42001d89efda72a38ba572.png

结果分析:

由上图可以看出,刚创建的新进程其静态优先级是120,其nice值为0,对于父进程其静态优先级也是120, nice值也是0。函数task_nice( )能够获得进程的nice值,nice值的获取也是根据进程的静态优先级计算出来的,他们之间有固定的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值