jiffies变量,是在linux内核源码中经常可以看见的一个变量。jiffies,即jiffy的复数形式,jiffy的汉语解释为瞬间的意思,从变量名上看,jiffies的含义为记录系统的当前时间。查看Linux内核的源码,可以发现,jiffies是一个宏定义,# define jiffies raid6_jiffies(),所以jiffies的值实际上是调用raid6_jiffies()的返回值.

raid6_jiffies()是Linux内核源码中的一个内联函数, 其定义如下:

static inline uint32_t raid6_jiffies(void) {

struct timeval tv;

gettimeofday(&tv, NULL);

return tv.tv_sec*1000 + tv.tv_usec/1000;

}

struct timeval结构体的定义如下:

struct timeval {

time_t tv_sec; /* seconds */

suseconds_t tv_usec; /* microseconds */

};

struct timeval中含有两个字段, tv_sec和tv_usec, 一个用于记录秒数, 一个用于记录毫秒数. time_t实质上是long类型, 将long重新定义成了time_t类型; susecong_t与time_t相同, 实质上也是long类型. 在Linux内核源码的实现过程中, 为了能清晰地表示变量的含义和功能,常常会将一些数据类型进行重定义, 使其变得一目了然, 可以从变量类型上判断变量的功能.

gettimeofday(&tv, NULL)方法的实现, 如下所示:

static force_inline int gettimeofday(struct timeval *tv, struct timezone *tz)

{

int ret;

asm volatile("syscall"

: "=a" (ret)

: "0" (__NR_gettimeofday),"D" (tv),"S" (tz) : __syscall_clobber );

return ret;

}

在其中, 内嵌了一段asm汇编代码. asm表示后面的代码为内嵌汇编, volatile表示编译器不需要优化代码, 后面的指令保留原样, 括号里的是汇编指令, asm和volatile分别为__asm__和__volatile__的别名, 含义相同.

内嵌汇编语法如下:

__asm__(汇编语句模板:输出部分:输入部分:破坏描述部分), 四个部分用”:”隔开, 除汇编语句模板外, 其余部分可选.

具体汇编语法可参照博客https://blog.csdn.net/pbymw8iwm/article/details/8227839.

在此函数中, 涉及到syscall指令的用法.

syscall指令, 从操作系统获得服务.

如何使用:

1. 从$0寄存器中读取服务数

2. 从$a0, $a1等寄存器中读取参数值(如果有)

3. 发送syscall指令

4. 从结果寄存器中取回返回值(如果有)

不过syscall指令在此处究竟是如何使用的, 依然不十分清楚. 若有清楚的大神, 希望可以不吝赐教.

通过syscall调用得到系统时间, 并存储在struct timeval类型结构体tv中. 由于在raid6_jiffies()中调用gettimefday(&tv, NULL)时, 传递的是&tv, 所以在gettimeofday()中对tv的操作, 便确确实实地改变了tv的值.

tv.tv_sec存储的是系统当前时间的秒数, 单位为秒, *1000得到毫秒数; tv.tv_usec存储的是微秒数, /1000得到的是毫秒数(此处分析, tv.tv_usec存储的应该为不足1s的部分的微秒数). 两者相加, 得到当前系统时间的毫秒数.

jiffies字段详解相关推荐

  1. Open vSwitch相关字段详解之L4:TCP, UDP, SCTP

    文章目录 字段概览 字段详解 TCP tcp_src/tp_src.tcp_dst/tp_dst tcp_flags UDP udp_src.udp_dst SCTP sctp_src.sctp_ds ...

  2. Open vSwitch相关字段详解之L3:IPv4IPv6

    文章目录 字段概览 字段详解 ip_src/nw_src.ip_dst/nw_dst ipv6_src.ipv6_dst nw_proto/ip_proto nw_ttl ip_frag/nw_fra ...

  3. Open vSwitch VLAN相关字段详解(dl_vlan、dl_vlan_pcp、vlan_vid、vlan_pcp、vlan_tci)

    文章目录 字段概览 字段详解 vlan_tci vlan_vid vlan_pcp dl_vlan/dl_vlan_pcp 字段概览 字段名 长度 格式 Masking 前置项 访问权限 OpenFl ...

  4. cat /proc/meminfo 各字段详解

    一.cat /proc/meminfo 各字段详解 / $ cat /proc/meminfo MemTotal: 877368 kB :所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码 ...

  5. Linux——更改文件及目录权限(d rwx r-x r-x字段详解+更改代码指令)

    目录 一.d rwx r-x r-x .字段详解: 二.Chmod (更改文件所属组权限) (1)指令讲解: (2)实列:让其他用户对test.txt文件增加写的权限 三.改变文件的所属者,所属组权限 ...

  6. Renix签名字段详解——网络测试仪实操

    一.签名字段简介 在添加/修改流量时,会有一个签名字段选项 (1)勾选以后,RENIX软件在发流时,会把每个报文的Payload(净荷)的最后18字节修改为特殊的值,用来统计流的时延.丢包等内容 (2 ...

  7. 「全网最细」:MRP1视图所有字段详解及实战应用 - 合集

    : 视频详解 注:本文章建议要结合视频进行观看 声明:本文仅代表原作者观点,仅用于SAP软件的应用和学习,不代表SAP公司.注:文中所示截图来源于SAP软件或PA官方教材,相应著作版权归SAP所有. ...

  8. Open vSwitch ETHERNET相关字段详解(eth_src/dl_src、eth_dst/dl_dst、eth_type/dl_type)

    文章目录 字段概览 字段详解 eth_type/dl_type 字段概览 备注:由于历史原因,某些字段会有多个名字,如下表,/后面表示该字段的其他名字 字段名 长度 格式 Masking 前置项 访问 ...

  9. tsconfig 配置文件各字段详解

    tsconfig 配置文件各字段详解 files 需要解析的ts的文件. {"files": ["./index.ts"] } 当找不到对应的文件时会报错. e ...

最新文章

  1. Net设计模式实例之建造者模式(Builder Pattern)(2)
  2. 在ABAP/4中声明表格控制
  3. SQL 100+个最佳入门案例实践(覆盖Oralce、SQL Server、Mysql)之基础操作_1_检索数据
  4. 【Linux】一步一步学Linux——dmesg命令(74)
  5. 水稻已知os基因号,利用DAVIA进行GO功能富集分析
  6. JAVA 简单的抽奖程序
  7. Introduction MBG
  8. 小米超大杯旗舰不叫12 Ultra:或命名为MIX 5 Pro
  9. 理解JS散度(Jensen–Shannon divergence)
  10. Vue表单输入绑定(v-model)
  11. 给大家介绍六个不错的数据分析工具
  12. VUE组件日时分秒倒计时
  13. 测试工程师等级评定细则
  14. iOS 启动页加入动态的广告实现
  15. Promise ,Promise.all 和Promise.race的区别
  16. 微服务实战系列之SpringCloud Alibaba学习(四)
  17. How to Write a Spelling Corrector
  18. 第十期-Linux内核补丁源码分析(2)
  19. 电子书翻页效果(转)
  20. 电平转换总结(ZZ)

热门文章

  1. 电阻,电容,电感这些知识你会了吗
  2. C语言操作MYSQL简易教程
  3. W5500初始化过程
  4. 18:Polly-异步的委托执行
  5. android仿ios菊花,简易仿ios菊花加载loading图
  6. JavaScript删除字符串中指定字符的四种方法
  7. jquery 取值 赋值
  8. Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想
  9. 怎样取消计算机用户帳户密码,Win10如何删除关闭电脑登录密码?
  10. vant 引入 iconfont 图标,图标变形,图标斜斜歪了