定义

内核文件include/asm-generic/param.h定义了两者的值:

# undef HZ
# define HZ     CONFIG_HZ   /* Internal kernel timer frequency */
# define USER_HZ    100     /* some user interfaces are */
# define CLOCKS_PER_SEC (USER_HZ)       /* in "ticks" like times() */

其中CONFIG_HZ为通过make menuconfig配置的HZ值,一般为1000,即每秒钟jiffies增加1000个计数。实际值可参见代码中include/generated/autoconf.h文件。USER_HZ固定为100,用户层调用times系统调用,返回的是按照USER_HZ计算的jiffies值。

u64 jiffies_64_to_clock_t(u64 x)
{...x = div_u64(x * TICK_NSEC, (NSEC_PER_SEC / USER_HZ));return x;
}SYSCALL_DEFINE1(times, struct tms __user *, tbuf)
{...return (long) jiffies_64_to_clock_t(get_jiffies_64());
}

用户层与内核之间相关交互

两者定义的差别导致用户层与内核交互时,需要进行转换。除了以上的64位转换函数jiffies_64_to_clock_t。内核还提供了另外两个互换函数:

kernel/time.cclock_t jiffies_to_clock_t(unsigned long x)
{return div_u64((u64)x * TICK_NSEC, NSEC_PER_SEC / USER_HZ);
}unsigned long clock_t_to_jiffies(unsigned long x)
{return x * (HZ / USER_HZ);
}

Linux网桥的ioctl为例

代码位于文件net/bridge/br_ioctl.c中,示例为设置和获取bridge表项的最大超时时间:
static int old_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
{unsigned char mac[ETH_ALEN];struct net_bridge *br = netdev_priv(dev);unsigned long args[4];if (copy_from_user(args, rq->ifr_data, sizeof(args)))return -EFAULT;switch (args[0]) {case BRCTL_GET_BRIDGE_INFO:{struct __bridge_info b;b.max_age = jiffies_to_clock_t(br->max_age); //转化为USER_HZ表示的clockreturn 0;}case BRCTL_SET_BRIDGE_MAX_AGE:{unsigned long t = clock_t_to_jiffies(args[1]); //转化为HZ表示的jiffiesbr->bridge_max_age = t;return 0;}
}

获取运行系统HZ值

网络中邻居表的locktime参数,默认设置的是一个HZ,通过proc文件可读取:

cat /proc/sys/net/ipv4/neigh/ens160/locktime
100

内核版本

linux-3.10.0

用户USER_HZ与内核HZ的值相关推荐

  1. linux内核hz,linux内核中的HZ介绍

    时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 中定义或该文件包含的某个子平台相关文件中.作为通用的规则,即便如果知道 HZ 的值,在编程时 ...

  2. linux 物理内存用完了_Linux用户空间与内核空间(理解高端内存)

    Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图. Linux内核地址空间划分 通常32位L ...

  3. 4-15 OS(线程,用户态,内核态,页) 数据库(原子性,日志) JAVA(I/O)

    在internet services课上老师说到Capriccio 是用户模式下的thread library,OS课里第2个project也是实现一个用户模式下的线程库.之前用过POSIX库,我知道 ...

  4. linux信号机制 - 用户堆栈和内核堆栈的变化【转】

    转自:http://itindex.net/detail/16418-linux-%E4%BF%A1%E5%8F%B7-%E5%A0%86%E6%A0%88 此文只简单分析发送信号给用户程序后,用户堆 ...

  5. 用户空间和内核空间通讯之【proc文件系统】

    今天我们介绍另一种用户内核空间通信的方法:proc文件系统. proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失.proc文件系统最开始的设 ...

  6. 多线程之:用户态和内核态的区别

    一:大话版用户态和内核态 (1)用户态和内核态的概念? --->内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序 ---& ...

  7. 用户空间与内核空间数据交换的方式(9)------netlink【转】

    转自:http://www.cnblogs.com/hoys/archive/2011/04/10/2011722.html Netlink 是一种特殊的 socket,它是 Linux 所特有的,类 ...

  8. 用户层和内核层异常的处理流程

    文章目录 内核层异常的处理流程 用户层异常和内核层异常 KiDispatchException函数详解 RtlDispatchException函数的执行流程 用户层异常的处理流程 用户异常的处理流程 ...

  9. (整理)用户空间_内核空间以及内存映射

    内核空间和用户空间   现代操作系统采用虚拟存储器,对于32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也 ...

最新文章

  1. arcgis超级工具密码_忘记电脑密码怎么办?只需要简单这样做
  2. JDK源码重新编译——支持eclipse调试JDK源码--转载
  3. Win10:tensorflow 学习笔记(1)
  4. Android开发之高德地图定位成功返回的定位信息
  5. XP设置文件夹默认打开方式改为“资源管理器”
  6. mysql 21天_把整个Mysql拆分成21天,轻松掌握,搞定(中)
  7. OpenCV精进之路(九):图像轮廓和图像分割修复——图像修复技术
  8. AMESim中Demo简介
  9. 群辉安装linux软件下载,群晖系统Synology DSM安装ipkg包管理和套件安装方法
  10. PR转场插件 MAC版 FilmImpact Transition Pack v1-v2
  11. 自己动手做个智能小车(2)
  12. Xp计算机同步时间,xp电脑时间无法同步如何解决
  13. 苹果手机在哪搜索测试版软件,如何在 beta 版软件上测试你的 App
  14. C#多线程之三:解决多线程编程中大并发数等待唤醒的问题
  15. svg图标如何修改大小?
  16. 网易的爆款密码,藏在Q3财报里
  17. 台达PLC伺服追剪程序,电子凸轮,全部源代码,PLC程序和触 摸屏程序,DVP15MC。
  18. OpenGL(可编程管线):Bezier曲面
  19. oracle 无法分配32字节,ORA-04031:无法分配 32 字节的共享内存
  20. 安卓保存数据之onsaveInstanceStace(Bundle outState)的使用

热门文章

  1. 计算机音乐38度六,黑龙歌曲《38度6》是什么意思 体温在38.6°就叫一见钟情
  2. java获取calendar_java--获取当前时间(Calendar类)
  3. 关于byte超出范围
  4. 爬虫爬取数据为#123123数字乱码解决方案
  5. 数据挖掘实例(基于基站定位数据的商圈分析)
  6. 基于jQuery的AJAX实现三级联动菜单
  7. NLP----Baidu-中文词法分析(LAC)
  8. VS助手工具Visual Assist X 安装和卸载指导手册
  9. 关联规则算法——Apriori算法
  10. C#批量爬取网站验证码图片/爬取网页内容(1)