关于jiffies回绕以及time_after,time_before
实际上无论是TCP序列号还是jiffies,都面临一类问题。就是回绕问题。就像我们看钟表,1点时在11点前呢。还是在11点后呢?事实上这个问题并没有想象的那么easy回答。
我们用char型来简单描写叙述一下这个问题的解法。char仅仅有8位,二进制从00000000到11111111,假设用一个char表示jiffies,那么当其值已经达到11111111的时候,将面临一次跳变。即回归到0,这是由于11111111加1的话,将会得到100000000。然而char仅仅有8位,造成最高位溢出,所得到的结果就是00000000,这就是0点跳变。本质原因就是在跳变点附近,值域并非连续的。
11111111的十进制是255,显然和0并非连续的。
然而,11111111除了能够表示255之外,还能够表示-1。而-1和0却是连续的。我们知道。计算机内对于数据的存储是不区分符号的,符号仅仅是在计算的时候才依据指令的不同给与不同的解释,因此仅仅须要将无符号的jiffies看作是有符号的数字,就能够解决这个跳变问题。显然0是在-1后面的,这也就是说。0在255后面。
将有符号数字解释为无符号数字,仅仅是一种解释方式的不同。对于数据的表示没有不论什么影响,它仅仅影响计算。
有符号计算指令会将值域坐标轴往左平移半个值域宽度。从而将0点变成中点,而不是左端点。解决0点跳变问题。
然而这个仅仅在后半个值域空间有效,也就是说。对于char而言,系统仅仅能正确识别128以后的跳变,假设你測试129和1水更靠前,答案是129。然而假设你測试127和1谁更靠前。答案就是1!可是这已经足够了。由于对于jiffies的比較。基本都是附近值得比較。没有人会去比較如今和几千几万年以后的时间。
详情參见time_after,time_before宏。
关于jiffies回绕以及time_after,time_before的更多相关文章
- 对 jiffies 溢出、回绕及 time_after 宏的理解
原文如下: 关于jiffies变量: 全局变量jiffies用来记录自启动以来产生的节拍的总数.系统启动时会将该变量初始化为0,此后,每当时钟中断产生时就会增加该变量的值.jiffies和另外 ...
- jiffies溢出与时间先后比较-time_after,time_before【转】
转自:http://www.cnblogs.com/hfyinsdu/p/4600052.html 参考地址: http://blog.csdn.net/jk110333/article/detail ...
- jiffies溢出与时间先后比较-time_after,time_before
参考地址: http://blog.csdn.net/jk110333/article/details/8177285 http://blog.chinaunix.net/uid-23629988-i ...
- linux内核中jiffies的回绕问题【转】
本文转载自:http://blog.csdn.net/yuanlulu/article/details/6019862 ======================================== ...
- jiffies和HZ
全局变量jiffies用来记录自系统启动以来产生的节拍的总数.启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值.一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的 ...
- Linux时间子系统之三:jiffies
1. jiffies背景介绍 jiffies记录了系统启动以来,经过了多少tick. 一个tick代表多长时间,在内核的CONFIG_HZ中定义.比如CONFIG_HZ=200,则一个jiffies对 ...
- Linux内核jiffies简介
在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...
- Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解
在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...
- linux 使用 jiffies 计数器
这个计数器和来读取它的实用函数位于 <linux/jiffies.h>, 尽管你会常常只是包含 <linux/sched.h>, 它会自动地将 jiffies.h 拉进来. 不 ...
随机推荐
- java配置日志总结
log4j 搭建日志环境 简单非maven项目,只需要引入log4j.jar,在类路径下添加log4j.properties即可 简单maven项目,只需要在pom.xml引入dependency,在 ...
- Linux基础学习一
swap:虚拟内存ctrl+a:跳到命令首部 ctrl+e:跳到命令尾部alias:指令别名cp -r:递归复制粘贴mv 源路径 目标路径:移动操作 (如果提示是否覆盖,在mv前加\即可不提示:\mv ...
- Centos6.5下 执行“ll”提示“-bash: ll: command not found”
ll 是 ls -l的别名,之所所以 ll出现错误是因为没有定义别名. 如果要实现ll 命令,可以做如下操作: 编辑 ~./bashrc 添加 ls -l 的别名为 ll即可 [root@Centos ...
- gcc 编译多个源文件
序 Linux 内核和许多其他自由软件以及开放源码应用程序都是用 C 语言编写并使用 GCC 编译的. 编译C++程序 编译.链接命令 -c 只编译不里链接 -o链接 例: g++ file1 -c ...
- clip-path实现loading圆饼旋转效果以及其他方法
一.loading效果 二.clip-path css中的剪切clip-path属性是CSS Masking模块的一部分. 矩形 clip-path:inset(top right bottom le ...
- Fiddler抓取https相关设置
转自:https://www.cnblogs.com/joshua317/p/8670923.html 很多使用fiddler抓包,对于http来说不需太多纠结,随便设置下就能用,但是抓取https就 ...
- HDU-2817,同余定理+快速幂取模,水过~
A sequence of numbers Time Limit: 2000/1 ...
- POJ-20407Relatives/NYOJ-333mdd的烦恼,欧拉函数简单应用,模板A
poj Relatives Time Limit: 1000MS Memory Li ...
- HDU 3537 Mock Turtles型翻硬币游戏
题目大意: 每次可以翻1个或者2个或者3个硬币,但要保证最右边的那个硬币是正面的,直到不能操作为输,这题目还有说因为主人公感情混乱可能描述不清会有重复的硬币说出,所以要去重 这是一个Mock Turt ...
- redis持久化机制【十三】
一.Redis提供了哪些持久化机制: redis的高性能是因为其所有数据都存在了内存中 ,为了使redis在重启之后数据仍然不丢失,需要将数据同步到硬盘中,这一过程就是持久化. redis支持两种方式 ...