linux内核中测量时间的方法,Linux内核中获取时间函数do_gettimeofday

内核代码能一直获取一个当前时间的表示, 通过查看 jifies 的值. 常常地, 这个值只代表从最后一次启动以来的时间, 这个事实对驱动来说无关, 因为它的生命周期受限于系统的 uptime. 如所示, 驱动可以使用 jiffies 的当前值来计算事件之间的时间间隔(例如, 在输入驱动中从单击中区分双击或者计算超时). 简单地讲, 查看 jiffies 几乎一直是足够的, 当你需要测量时间间隔. 如果你需要对短时间流失的非常精确的测量, 处理器特定的寄存器来帮忙了( 尽管它们带来严重的移植性问题 ).

它是非常不可能一个驱动会需要知道墙上时钟时间, 以月, 天, 和小时来表达的; 这个信息常常只对用户程序需要, 例如 cron 和 syslogd. 处理真实世界的时间常常最好留给用户空间, 那里的 C 库提供了更好的支持; 另外, 这样的代码常常太策略相关以至于不属于内核. 有一个内核函数转变一个墙上时钟时间到一个 jiffies 值, 但是:

#include

unsigned long mktime (unsigned int year, unsigned int mon, unsigned int day, unsigned int hour, unsigned int min, unsigned int sec);

重复:直接在驱动中处理墙上时钟时间往往是一个在实现策略的信号, 并且应当因此而被置疑.

虽然你不会一定处理人可读的时间表示, 有时你需要甚至在内核空间中处理绝对时间. 为此, 输出了 do_gettimeofday 函数. 当被调用时, 它填充一个 struct timeval 指针 -- 和在 gettimeofday 系统调用中使用的相同 -- 使用类似的秒和毫秒值. do_gettimeofday 的原型是:

#include

void do_gettimeofday(struct timeval *tv);

这段源代码声明 do_gettimeofday 有" 接近毫秒的精度", 因为它询问时间硬件当前 jiffy 多大比例已经流失. 这个精度每个体系都不同, 但是, 因为它依赖实际使用中的硬件机制. 例如, 一些 m68knommu 处理器, Sun3 系统, 和其他 m68k 系统不能提供大于 jiffy 的精度. Pentium 系统, 另一方面, 提供了非常快速和精确的小于嘀哒的测量, 通过读取本章前面描述的时戳计数器.

当前时间也可用( 尽管使用 jiffy 的粒度 )来自 xtime 变量, 一个 struct timespec 值. 不鼓励这个变量的直接使用, 因为难以原子地同时存取这 2 个字段. 因此, 内核提供了实用函数 current_kernel_time:

#include

struct timespec current_kernel_time(void);

用来以各种方式获取当前时间的代码, 可以从由 O' Reilly 提供的 FTP 网站上的源码文件的 jit ("just in time") 模块获得. jit 创建了一个文件称为 /proc/currentime, 当读取时, 它以 ASCII 码返回下列项: 当前的 jiffies 和 jiffies_64 值, 以 16 进制数的形式. 如同 do_gettimeofday 返回的相同的当前时间. 由 current_kernel_time 返回的 timespec. 我们选择使用一个动态的 /proc 文件来保持样板代码为最小 -- 它不值得创建一整个设备只是返回一点儿文本信息. 这个文件连续返回文本行只要这个模块加载着; 每次 read 系统调用收集和返回一套数据, 为更好阅读而组织为 2 行. 无论何时你在少于一个时钟嘀哒内读多个数据集, 你将看到 do_gettimeofday 之间的差别, 它询问硬件, 并且其他值仅在时钟嘀哒时被更新. 1、使用rtc设备,这个时钟可以用于各种模式  2、借鉴系统调用adjtimex  这里使用第二种方式 系统调用adjtimex 一直跟下去,会发现最后调用  void do_gettimeofday(struct timeval *tv) 那么直接使用do_gettimeofday,能够得到struct timeval struct timeval {  time_t tv_sec; /* seconds */  suseconds_t tv_usec; /* microseconds */  }; 那么就需要将这个tv_sec,即1970年开始至今的秒数转换为年月日时分秒  其实内核已经有这样的函数  /*  * Convert seconds since 01-01-1970 00:00:00 to Gregorian date.  */  void rtc_time_to_tm(unsigned long time, struct rtc_time *tm) 唯一的不足是转换得到的是UTC时间,同北京时间差8小时。要想达到用户态localtime()的效果,必须获得/etc/localtime 中的时区信息。 示例代码: #include   #include   #include /*添加到合适位置*/ struct timex  txc;  struct rtc_time tm;  do_gettimeofday(&(txc.time));  rtc_time_to_tm(txc.time.tv_sec,&tm);  printk(“UTC time :%d-%d-%d %d:%d:%d /n”,tm.tm_year+1900,tm.tm_mon, tm.tm_mday,tm.tm_hour,tm.tm_min,tm.tm_sec);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 函数递归_Python零基础之三元表达式、函数递归、匿名函数教程!超级详细!...

目录一、三元表达式二、函数递归 递归调用的定义递归分为两个阶段:递归,回溯三、匿名函数 什么是匿名函数?有名字的函数与匿名函数的对比lambda匿名函数的应用四、内置函数 #注意:内置函数id()可以返回一个对象的身份,…

linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高

一、CPU过高分析1)使用TOP命令查看CPU、内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比。其中CPU状态中标示id的为空闲CPU百分比。当空闲CPU百分比越低,说明CPU占用率越高。2)…

python输入半径计算球的体积_如何用Python中的Monte-Carlo方法计算10维球体积?

你的日常生活中有很多问题. 您收到的错误消息来自您的行 r 2.0*np.random.uniform(0,1,iter) - 1.0 函数调用np.random.uniform(0,1,iter)不会创建单个随机数.相反,像大多数numpy函数一样,它返回一个数组 – 在这种情况下,是一个你声明的长度的向量(在本例中是iter).所以r也是…

linux怎样以root用户运行,如何在Linux机器中以root用户身份运行Elastic...

我试图在我的Linux计算机上运行Elasticsearch 5.2.1,我是它的root用户.当我尝试执行Elasticsearch时.我收到以下错误,[2017-03-15T03:26:18,976][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [elk_data1] uncaught exception in thread [main]org.elasticsearch.boot…

python语言的两种注释方法_python编程时添加中文注释的方法

python编程时添加中文注释的方法 发布时间:2020-08-24 17:09:52 来源:亿速云 阅读:77 作者:小新 这篇文章主要介绍python编程时添加中文注释的方法,文中介绍的非常详细,具有一定的参考价值,感兴…

springboot 获取application参数_LOOK ! SpringBoot的外部化配置最全解析

本篇要点介绍各种配置方式的优先级。介绍各种外部化配置方式。介绍yaml的格式及原理。介绍如何绑定并测试类型安全的属性配置。介绍ConfigurationProperties与Value的区别。一、SpringBoot官方文档对于外部化配置的介绍及作用顺序SpringBoot支持多种外部化配置,以便…

spark入门_入门必读 | Spark 论文导读

Resilient Distributed Datasets: A fault-tolerant abstraction for in-Memory cluster computing, 是讲述 Spark RDD 的基础论文,通读论文能给我们带来全景的 Spark 知识面摘要:RDD,全称Resilient Distributed Dataset,可伸缩性数据集。使用…

Qt在linux下无法输入中文,Ubuntu使用集成开发环境QT无法输入中文的解决方法

QT Creator是轻量级集成开发环境,在Ubuntu系统操作中,使用QT时无法输入中文,遇到这种情况要如何处理呢?下面小编就给大家介绍下Ubuntu如何解决QT无法输入中文问题。1 安装搜狗输入法,(如果你想用ubuntu自带的输入法也没…

altium pcb 信号高亮_在PCB设计中高效的放置元件技巧

在印刷电路板设计中,设置电路板轮廓后,将零件(占地面积)调用到工作区。然后将零件重新放置到正确的位置,并在完成后进行接线。组件放置是这项工作的第一步,对于之后的平滑布线工作是非常重要的工作。如果在接线工作期间模块不足&a…

linux升级ssh到6.6版本,CentOS6.5 openssh升级到openssh-7.6版本

CentOS6.5 openssh升级到openssh-7.6版本2018-8-3 foooy升级前保证故障后能现场处理,或者远程卡处理,否则不要这样直接升级yum install -y gcc openssl-devel pam-devel rpm-buildwget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.6…

python中csv文件通过什么表示字符_python_写入csv文件时候无法进行原样写入(写入字符串中出现逗号,时候,csv文件自动分成两个单元格)...

问题描述: 写入csv文件时候无法进行原样写入(写入字符串中出现逗号","时候,csv文件自动分成两个单元格) with open("test.csv","w") as f: f.write("闲暇时,我会被一段,配乐诗朗诵,所感动,悲伤…

linux爬365租房没有数据,新手求助,LINUX下安装11G不能MOUNT数据库

各位,我是新手,请帮我看一下这样的情况该如何处理,谢谢啦。[rootlocalhost ~]# su - oracle[oraclelocalhost ~]$ sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on Tue Mar 23 16:04:25 2010Copyright (c) 1982, 2009, Oracle. A…

rabbitmq怎样确认是否已经消费了消息_阿里Java研发二面:了解RabbitMQ?说说RabbitMQ可靠性投递...

上期写到高并发下RabbitMq消息中间件你应该介么玩今天给小伙伴说说!有自己看法的也可以在评论区留言探讨,也可以转发关注下我以后会长期分享!目录:确保消息发送到RabbitMQ服务器确保消息被正确的路由确保消息在队列正确地存储确保…

linux 装完yum不能用,【linux】yum 不能安装应用,提示There are no enabled repos Run “yum repolist all”...

回答一般来说著名的linux系统基本上分两大类:1 RedHat系列:Redhat、Centos、Fedora等2 Debian系列:Debian、Ubuntu等RedHat 系列:1 常见的安装包格式 rpm 包,安装rpm包的命令是 “rpm -参数”2 包管理工具 yum3 支持ta…

更新fielddata为true_线程与更新UI,细谈原理

前言 相信不少读者都阅读过相类似的文章了,但是我还是想完整的把这之间的关系梳理清楚,细节聊好,希望你也能从中学到一些。进入正题,大家应该都听过这样一句话——“UI更新要在主线程,子线程更新UI会崩溃”。久而久之就…

linux sublime3 插件安装插件,手动安装sublimeText3插件

就在今天下午,我花了一个小时的时间安装sublime3插件stylus,就是为了让stylus文件能够高亮显示。网上找了很多方法,可以通过package control安装,然而,我的sublime package control能够正常显示,插件列表也…

vbs打开软件光标停在第一个输入框_三维设计软件,3DMAX最全快捷键大全,赶快收藏哦...

文章后有获取软件的方式。基本快捷键A-角度捕捉开关 B-切换到底视图C-切换到摄象机视图D-封闭视窗E-切换到轨迹视图F-切换到前视图G-切换到网格视图H-显示通过名称选择对话框I-交互式平移J-选择框显示切换K-切换到背视图L-切换到左视图M-材质编辑器N-动画模式开关O-自适应退化开…

linux通过延长器改变分辨率,HDMI延长器的优势及常见问题(转载)(转载)

HDMI延长器普遍用于一切需要进行HDMI信号调配和组合的领域,比如:军工、多媒体教学、电视电话会议、大屏幕显示、会展、金融、科研,天气、超市、会议系统等领域。以达到确保信号长间隔无衰减的传输。HDMI延长器的优势1、HDMI单网线延长器, 直接…

mfc读取txt文件并显示_Python入门丨文件读写

文件读写文件读写,是Python代码调用调用电脑文件的主要功能,能被用于读取和写入文本记录、音频片段、Excel文档、保存邮件以及任何保存在电脑上的东西。读取文件读取文件三个步骤:准备工作:首先在桌面新建了一个test文件夹&#x…

c语言最简单程序实例,C语言第一个简单实例

在信息化、智能化的世界里,可能很早很早 我们就听过许多IT类的名词,C语言也在其中,我们侃侃而谈,到底C程序是什么样子?让我们先看简单的一个例子:#include /*引入头文件*/int main(void) …