Linux内核API __round_jiffies_up

__round_jiffies_up函数功能描述:函数__round_jiff ies_up( )用于将参数j表示的节拍变成HZ(250)的整数倍,即表示的时间是整秒,并且返回的数据一定大于当前的节拍数,相当于向上取整。对于不同的CPU取整的结果是不一样的,对于CPU 0,则结果是250的整数倍,如果是CPU 1,则结果加3是250的整数倍。

__round_jiffies_up文件包含

#include<linux/timer.h>

__round_jiffies_up函数定义

在内核源码中的位置:linux-3.19.3/kernel/time/timer.c

函数定义格式:

unsigned long __round_jiff ies_up(unsigned long j, int cpu)

__round_jiffies_up输入参数说明

  • 函数__round_jiff ies( )的第一个参数表示的是输入的节拍数,要取整的节拍数。
  • 第二个参数是对应的CUP对象,可以取0、1两个值(注:根据机器的CPU个数确定,本机两个CPU,如果4个CPU,可取0、1、2、3四个值,依次类推)。

__round_jiffies_up返回参数说明

  • 函数的返回结果是对参数j取整之后的结果,表示的是整秒对应的节拍数,对于CPU 0,则结果是250的整数倍,对于CPU 1,则结果加3是250的整数倍。

__round_jiffies_up实例解析

编写测试文件:__round_jiff ies_up.c

头文件引用:

#include <linux/module.h>
#include<linux/timer.h>
MODULE_LICENSE("GPL");

模块加载函数定义:

int __init __round_jiffies_up_init(void)
{
    printk("into __round_jiffies_up_init\n");
    unsigned long j=jiffies;     //获取当前节拍数
    unsigned long __result1=__round_jiffies_up(j,0); //参数j代表当前节拍数,0代表CPU编号
    unsigned long __result2=__round_jiffies_up(j,1); //参数j代表当前节拍数,1代表CPU编号
    printk("the current jiffies is :%ld\n", j);    //显示当前节拍

    /*显示函数调用结果*/
    printk("the __result1 of the __round_jiffies_up(j,0) is :%ld\n", __result1);
    printk("the __result2 of the __round_jiffies_up(j,1) is :%ld\n", __result2);
    printk("out __round_jiffies_up_init\n");
    return 0;
}

模块退出函数定义:

void __exit __round_jiffies_up_exit(void)
{
    printk("Goodbye __round_jiffies_up\n");
}

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

module_init(__round_jiffies_up_init);
module_exit(__round_jiffies_up_exit);

实例运行结果及分析:

执行命令insmod __round_jiff ies_up.ko插入模块,然后输入命令dmesg -c查看内核输出信息,出现如图所示结果。

Linux内核API __round_jiffies_up

结果分析:

图中可以看出调用函数__round_jiffies_up( )对于CPU 0节拍取整结果肯定是250的整数倍,对于CPU 1节拍取整结果加3肯定是250的整数倍。

对于相同的节拍数CPU 0总比CPU 1多3个节拍,这样不会使两个CPU同时处于某一状态,而是在两个CPU之间进行轮换。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程