用户USER_HZ与内核HZ的值
定义
内核文件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为例
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的值相关推荐
- linux内核hz,linux内核中的HZ介绍
时钟中断由系统定时硬件以周期性的间隔产生,这个间隔由内核根据 HZ 值来设定,HZ 是一个体系依赖的值,在 中定义或该文件包含的某个子平台相关文件中.作为通用的规则,即便如果知道 HZ 的值,在编程时 ...
- linux 物理内存用完了_Linux用户空间与内核空间(理解高端内存)
Linux内核地址映射模型 x86 CPU采用了段页式地址映射模型.进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存. 段页式机制如下图. Linux内核地址空间划分 通常32位L ...
- 4-15 OS(线程,用户态,内核态,页) 数据库(原子性,日志) JAVA(I/O)
在internet services课上老师说到Capriccio 是用户模式下的thread library,OS课里第2个project也是实现一个用户模式下的线程库.之前用过POSIX库,我知道 ...
- linux信号机制 - 用户堆栈和内核堆栈的变化【转】
转自:http://itindex.net/detail/16418-linux-%E4%BF%A1%E5%8F%B7-%E5%A0%86%E6%A0%88 此文只简单分析发送信号给用户程序后,用户堆 ...
- 用户空间和内核空间通讯之【proc文件系统】
今天我们介绍另一种用户内核空间通信的方法:proc文件系统. proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失.proc文件系统最开始的设 ...
- 多线程之:用户态和内核态的区别
一:大话版用户态和内核态 (1)用户态和内核态的概念? --->内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序 ---& ...
- 用户空间与内核空间数据交换的方式(9)------netlink【转】
转自:http://www.cnblogs.com/hoys/archive/2011/04/10/2011722.html Netlink 是一种特殊的 socket,它是 Linux 所特有的,类 ...
- 用户层和内核层异常的处理流程
文章目录 内核层异常的处理流程 用户层异常和内核层异常 KiDispatchException函数详解 RtlDispatchException函数的执行流程 用户层异常的处理流程 用户异常的处理流程 ...
- (整理)用户空间_内核空间以及内存映射
内核空间和用户空间 现代操作系统采用虚拟存储器,对于32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也 ...
最新文章
- arcgis超级工具密码_忘记电脑密码怎么办?只需要简单这样做
- JDK源码重新编译——支持eclipse调试JDK源码--转载
- Win10:tensorflow 学习笔记(1)
- Android开发之高德地图定位成功返回的定位信息
- XP设置文件夹默认打开方式改为“资源管理器”
- mysql 21天_把整个Mysql拆分成21天,轻松掌握,搞定(中)
- OpenCV精进之路(九):图像轮廓和图像分割修复——图像修复技术
- AMESim中Demo简介
- 群辉安装linux软件下载,群晖系统Synology DSM安装ipkg包管理和套件安装方法
- PR转场插件 MAC版 FilmImpact Transition Pack v1-v2
- 自己动手做个智能小车(2)
- Xp计算机同步时间,xp电脑时间无法同步如何解决
- 苹果手机在哪搜索测试版软件,如何在 beta 版软件上测试你的 App
- C#多线程之三:解决多线程编程中大并发数等待唤醒的问题
- svg图标如何修改大小?
- 网易的爆款密码,藏在Q3财报里
- 台达PLC伺服追剪程序,电子凸轮,全部源代码,PLC程序和触 摸屏程序,DVP15MC。
- OpenGL(可编程管线):Bezier曲面
- oracle 无法分配32字节,ORA-04031:无法分配 32 字节的共享内存
- 安卓保存数据之onsaveInstanceStace(Bundle outState)的使用