jiffies字段详解
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字段详解相关推荐
- 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 ...
- 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 ...
- 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 ...
- cat /proc/meminfo 各字段详解
一.cat /proc/meminfo 各字段详解 / $ cat /proc/meminfo MemTotal: 877368 kB :所有可用RAM大小(即物理内存减去一些预留位和内核的二进制代码 ...
- Linux——更改文件及目录权限(d rwx r-x r-x字段详解+更改代码指令)
目录 一.d rwx r-x r-x .字段详解: 二.Chmod (更改文件所属组权限) (1)指令讲解: (2)实列:让其他用户对test.txt文件增加写的权限 三.改变文件的所属者,所属组权限 ...
- Renix签名字段详解——网络测试仪实操
一.签名字段简介 在添加/修改流量时,会有一个签名字段选项 (1)勾选以后,RENIX软件在发流时,会把每个报文的Payload(净荷)的最后18字节修改为特殊的值,用来统计流的时延.丢包等内容 (2 ...
- 「全网最细」:MRP1视图所有字段详解及实战应用 - 合集
: 视频详解 注:本文章建议要结合视频进行观看 声明:本文仅代表原作者观点,仅用于SAP软件的应用和学习,不代表SAP公司.注:文中所示截图来源于SAP软件或PA官方教材,相应著作版权归SAP所有. ...
- Open vSwitch ETHERNET相关字段详解(eth_src/dl_src、eth_dst/dl_dst、eth_type/dl_type)
文章目录 字段概览 字段详解 eth_type/dl_type 字段概览 备注:由于历史原因,某些字段会有多个名字,如下表,/后面表示该字段的其他名字 字段名 长度 格式 Masking 前置项 访问 ...
- tsconfig 配置文件各字段详解
tsconfig 配置文件各字段详解 files 需要解析的ts的文件. {"files": ["./index.ts"] } 当找不到对应的文件时会报错. e ...
最新文章
- Net设计模式实例之建造者模式(Builder Pattern)(2)
- 在ABAP/4中声明表格控制
- SQL 100+个最佳入门案例实践(覆盖Oralce、SQL Server、Mysql)之基础操作_1_检索数据
- 【Linux】一步一步学Linux——dmesg命令(74)
- 水稻已知os基因号,利用DAVIA进行GO功能富集分析
- JAVA 简单的抽奖程序
- Introduction MBG
- 小米超大杯旗舰不叫12 Ultra:或命名为MIX 5 Pro
- 理解JS散度(Jensen–Shannon divergence)
- Vue表单输入绑定(v-model)
- 给大家介绍六个不错的数据分析工具
- VUE组件日时分秒倒计时
- 测试工程师等级评定细则
- iOS 启动页加入动态的广告实现
- Promise ,Promise.all 和Promise.race的区别
- 微服务实战系列之SpringCloud Alibaba学习(四)
- How to Write a Spelling Corrector
- 第十期-Linux内核补丁源码分析(2)
- 电子书翻页效果(转)
- 电平转换总结(ZZ)