系统中有非常多变量用来记录一个单调递增的现实,典型的有两个,一个是TCP的序列号。还有一个就是jiffies,可是由于计算机内表示的数字都是有限无界的,所以不论什么数字都不能做到全然意义的单调递增,它们仅仅是在绕圈圈,就像钟表一样,值域就是那些有限的数字。周而复始。

实际上无论是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的更多相关文章

  1. 对 jiffies 溢出、回绕及 time_after 宏的理解

    原文如下: 关于jiffies变量:     全局变量jiffies用来记录自启动以来产生的节拍的总数.系统启动时会将该变量初始化为0,此后,每当时钟中断产生时就会增加该变量的值.jiffies和另外 ...

  2. jiffies溢出与时间先后比较-time_after,time_before【转】

    转自:http://www.cnblogs.com/hfyinsdu/p/4600052.html 参考地址: http://blog.csdn.net/jk110333/article/detail ...

  3. jiffies溢出与时间先后比较-time_after,time_before

    参考地址: http://blog.csdn.net/jk110333/article/details/8177285 http://blog.chinaunix.net/uid-23629988-i ...

  4. linux内核中jiffies的回绕问题【转】

    本文转载自:http://blog.csdn.net/yuanlulu/article/details/6019862 ======================================== ...

  5. jiffies和HZ

    全局变量jiffies用来记录自系统启动以来产生的节拍的总数.启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值.一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的 ...

  6. Linux时间子系统之三:jiffies

    1. jiffies背景介绍 jiffies记录了系统启动以来,经过了多少tick. 一个tick代表多长时间,在内核的CONFIG_HZ中定义.比如CONFIG_HZ=200,则一个jiffies对 ...

  7. Linux内核jiffies简介

    在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...

  8. Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

    在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; ...

  9. linux 使用 jiffies 计数器

    这个计数器和来读取它的实用函数位于 <linux/jiffies.h>, 尽管你会常常只是包含 <linux/sched.h>, 它会自动地将 jiffies.h 拉进来. 不 ...

随机推荐

  1. numpy调试

    x1 = np.arange(9.0) 结果就是: array([ 0., 1., 2., 3., 4., 5., 6., 7., 8.]) 拿这个来初始化进行调试

  2. Dynamic Web Module版本对应tomcat版本

    MyEclipse2017+JDK 1.8环境下 Dynamic Web Module版本3.1要对应tomcat7.0以上版本,不然部署项目时会出现错误(会出现无法部署项目的情况). Dynamic ...

  3. Python应该怎样实现快速入门?

    作为一名Python爱好者,我也想跟大家分享分享我自学Python的一些小经验.搬来你的小板凳,听听看吧.也许,你会很有收获,也许你也走上了自学Python的不归路.开讲啦~ 首先,你要有自信心,要明 ...

  4. [Python3网络爬虫开发实战] 1.2.5-PhantomJS的安装

    PhantomJS是一个无界面的.可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作.CSS选择器.JSON.Canvas以及SVG. Selenium支持PhantomJS,这 ...

  5. MongoDB数据库的安装

    首先就是MongoDB的下载,可以去MongoDB官网进行下载,https://www.mongodb.com/download-center/community,也可以通过百度网盘直接下载, 链接: ...

  6. (十四)Python3 字符串格式化

    Python3 字符串格式化 字符串的格式化方法分为两种,分别为占位符(%)和format方式.占位符方式在Python2.x中用的比较广泛,随着Python3.x的使用越来越广,format方式使用 ...

  7. STM32——通用定时器基本定时功能

    STM32——————通用定时器基本定时功能                                                                           1.  ...

  8. 关于Filter中ServletRequest和ServletResponse强转HttpServletRequest和HttpServletResponse安全问题(向下转型一定不安全吗?)

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOE ...

  9. Xcode8、 iOS10 适配问题

    调用相机.相册.麦克风.位置等隐私问题崩溃解决办法 你的项目中访问了隐私数据,比如:相机,相册,联系人等,在Xcode8中打开编译的话,统统会crash,控制台会输出下面这样的日志: 这是因为iOS对 ...

  10. MYSQL Sorting result 把队列堆满了,该怎么办?

    show processlist;发现有200多个队列,select cardnum from table where xxxid = 31 order by abc_time desc 这样的一个排 ...