linux进程创建时间,linux进程创建时间计算

欢迎访问小站,阅读此文http://www.yandong.org/archives/501

简介

墙上时间,也就是距离1970年1月1日的时间,在linux kernel内部没多大用处,对其的应用多在用户空间。

本文的目的在于在kernel里面计算得到 进程创建的墙上时间

计算公式

xtime.tv_sec-(jiffies/HZ)+300+p->real_start_time.tv_sec

意思就是,当前的墙上时间(xtime) 减去系统启动后的节拍(jiffies)/频率(HZ)   这样得到的是系统启动的墙上时间,即距离1970.1.1的秒数,然后再加上进程结构体中 保存的距离系统启动时间的秒数(p->real_start_time.tv_sec)。

下面分别解释:

task_struct中的时间

p->real_start_time.tv_sec

其中的p是task_struct指针,指向的是进程创建距离系统启动的时间.

task_struct中有两个时间:start_time 和 real_start_time,其中后者包含睡眠时间。

下面是进程创建的部分源码

do_posix_clock_monotonic_gettime(&p->start_time);p->real_start_time=p->start_time;monotonic_to_bootbased(&p->real_start_time);//真实启动时间还须要加上总的睡眠时间

xtime介绍

摘自《深入理解linux内核》

所有的PC都包含一个叫实时时钟(Renl Time Clock RTC)的时钟,它是独立于CPU和所有其他芯片的。

即使当PC呗切断电源,RTC还继续工作,因为它靠一个小电池或蓄电池供电。CMOS RAM和RTC被集成在一个芯片上。

Linux只用RTC来获取时间和日期。不过对/dev/rtc设备文件操作,也允许对RTC编程。

内核利用 get_cmos_time函数从实时时钟上读取字1970.1.1(UTC)午夜以来经过的秒数。

xtime_lock顺序所(seqlock)消除了对xtime变量同时访问而可能发生的竞争条件,

对于2.6内核,其定义为(/include/linux/time.h)

externstructtimespec xtime;

对于3.5内核,其定义为(kernel/time/timekeeping.c)

structtimekeeper{...structtimespec xtime;...};staticstructtimekeeper timekeeper;

xtime的获取

因为很难原子的访问结构体中的两个变量,所以kernel并不鼓励直接访问xtime变量,可以使用相关函数

//include/linux/time.hstructtimespec current_kernel_time(void);externvoiddo_gettimeofday(structtimeval*tv);

所以如果在module里面直接使用 xtime,是不行的。但是可以通过硬编码的方式获取

比如:

long*xtime_ptr=&xtime;或者long*xtimr_ptr=0xc0803980

其中的 0xc0803980这个值,是从System.map中获得的,xtime是个全局符号,所有从sytem.map中可以获得它的地址

root@hyd:/home/l# cat /boot/System.map-2.6 | grep xtimec0156230 T update_xtime_cache

c06e3c00 D xtime_lock

c072f654 D inet_peer_gc_maxtime

c0803980 B xtime

c08039a0 b xtime_cache

jiffies介绍

简介

全局变量jiffies用来记录自系统启动以来产生的节拍的总数。

它被用来记录系统自开机以来,已经过了多少tick。每发生一次timer interrupt,Jiffies变数会被加一。

启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。

因为一秒内时钟中断的次数等于Hz,所以jiffes一秒内增加的值也就为Hz,系统运行时间以秒为单位计算,就等于jiffes/Hz。

定义

externu64 __jiffy_data jiffies_64;externunsignedlongvolatile__jiffy_data jiffies;

其中,jiffies_64 和 jiffies 的低32位是重合的,因为32为的jiffies 最多50天就溢出了,而jiffies_64则不用关注溢出问题。

初始化

#define INITIAL_JIFFIES((unsignedlong)(unsignedint)(-300*HZ))jiffies=INITIAL_JIFFIES

可以看出 jiffies 被初始化为5分钟后溢出的一个值,这是为了方便内核调试,以便故障早点出来。

获取

由于jiffies_64 是一个符合变量,不能直接获取,需要下面的使用辅助函数

#if(BITS_PER_LONG<64)u64 get_jiffies_64(void);#elsestaticinline u64 get_jiffies_64(void){return(u64)jiffies;}#endif

当然也可以使用硬编码的方式使用  jiffies

root@hy:/home/#cat/boot/System.map|grep"D jiffies"c06e3b00 D jiffies

c06e3b00 D jiffies_64

从中也可以看到 jiffies 与 jiffies_64的地址是相同的

使用

由于jiffies在五分钟之后,便溢出,所以使用jiffies的原则如下

//如果jiffies变量类型是32位无符号intmax_count=0xffffffffor

max_count=0xffffffffffffffff(64-bit)//如果没有溢出,系统启动后运行的节拍数:jiffies-ITIAL_JIFFIES//系统启动来5分钟的节拍数就是(到jiffies溢出的前一拍):max_count-INITIAL_JIFFIES

在我的代码中,我是这样使用的

unsigendlongjiffies_test=jiffies+HZ;if(time_after(jiffies,jiffies_test)){jiffies=MAX_JIFFIES-jiffies;}else{jiffies=jiffies-INITIAL_JIFFIES;}

其中的 time_after 是内核提供的四个比较函数之一

#definetime_after(a,b)\(typecheck(unsignedlong,a)&&\

typecheck(unsignedlong,b)&&\((long)(b)-(long)(a)<0))#definetime_before(a,b)time_after(b,a)#definetime_after_eq(a,b)\(typecheck(unsignedlong,a)&&\

typecheck(unsignedlong,b)&&\((long)(a)-(long)(b)>=0))#definetime_before_eq(a,b)time_after_eq(b,a)

为什么time_after能判断溢出呢?

待续,或者 参考下面链接

链接

http://book.51cto.com/art/200810/93773.htm

http://blog.csdn.net/michaelcao1980/article/details/7826326

http://lxr.oss.org.cn/source/include/linux/jiffies.h?v=2.6.30#L167

http://blog.csdn.net/chchchdx123/article/details/6270022

http://linux.gongxiang8.com/456430/

如果您喜欢这篇文章,欢迎分享订阅。本文内容遵CC版权协议 转载请注明出处www.yandong.org

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

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

相关文章

火焰传感器感应有火亮灯代码_智能无线感应灯火了,光感人感2种传感器感应,做照明品牌的几光...

智能无线感应灯火了&#xff0c;光感人感2种传感器感应&#xff0c;做照明品牌的几光曾经无数次幻想过的一个生活画面 &#xff1a;清晨推开厨房的门&#xff0c;有一束微弱的光跟随着自动亮起&#xff1b;然后倒一杯温开水给自己&#xff1b;手清扫过橱柜&#xff0c;一束亮光…

ax200网卡支持Linux吗,Deepin 20和Win10双系统中AX200网卡不能用的请关闭快速启动

如果你有Deepin 20和Win10双系统中机械革命CODE 01 AX200网卡不能用&#xff0c;不能上网的问题&#xff0c;请尝试关闭一下Win10的快速启动&#xff0c;或许问题就能解决了&#xff0c;以下是相关的问题例子。电脑配置参数CPU&#xff1a;AMD R7 4800H。内存&#xff1a;16G D…

线程同步有几种方法_架构师面试必问的多线程状态切换及常用方法

架构师面试必问的多线程状态切换及常用方法一、问题背景Java架构师面试中&#xff0c;多线程状态切换及常用方法几乎是必问的&#xff0c;要掌握创建多线程的方式和方法。二、创建多线程的几种方式2.1方式一继承Threadpublic class ThreadDemo extends Thread{public void run(…

curaengine linux编译,Cura源码在Ubuntu15.04上编译脚本(成功)

Cura是著名的3D打印切片和控制软件。新的版本采用Qt和Python进行了重构&#xff0c;界面变化也非常大&#xff0c;目前还在开发中&#xff0c;运行问题还有不少。这里介绍如何从源代码进行Cura的编译&#xff0c;可以抢先体验新版的界面设计和根据需要进行订制。这个把相关的脚…

线程等待通知 linux,Java 线程协作 wait(等待)与 notiy(通知)

一.wait()、notify()和notifyAll()为了更好的支持多线程之间的协作&#xff0c;JDK提供了三个重要的本地方法//调用某个对象的wait()方法能让当前线程阻塞&#xff0c;并且当前线程必须拥有此对象的锁.public final void wait() throws InterruptedException {wait(0);}//调用某…

新买的笔记本电脑怎么分盘_别再吐槽游戏本越玩越慢:笔记本电脑降速揭秘+散热维护小贴士...

花大价钱买的电竞本&#xff0c;配置越高&#xff1f;降速越狠&#xff1f;夏天到了&#xff0c;日益升高的温度不会影响我们日常搞机的热情~ 新买的4核、6核、8核游戏本照样在各大游戏中征战四方。然而&#xff0c;为什么明明配置很高的笔记本电脑&#xff0c;突然变得如老牛拉…

linux中开启514端口,linux中开启指定端口

1.修改/etc/sysconfig/iptables文件&#xff0c;增加如下一行&#xff1a;-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT重启 iptablesservice iptables restart2.…

zenmap nmap输出无显示_双路显示控制仪XME-H80-1616价格报价

双路显示控制仪XME-H80-1616价格报价 主要性能二十多种输入信号可选择&#xff1a; 测量输入信号可进行开方及小信号切除。 过程量、给定值、控制量、阀位反馈量等多重显示&#xff1b;测量值与给定值的显示可进行加减运算。 控制量PID调节正反作用选择。 可设置PID调节器的上下…

linux查看进程详细信息top,linux查看系统进程信息命令 px,top详解

linux查看系统进程信息命令 px,top详解发表于&#xff1a;2011-03-10来源&#xff1a;作者&#xff1a;点击数&#xff1a;linux查看系统进程信息命令 px,top详解 软件测试 ps ax命令是显示一个当前系统进程的列表&#xff0c;该列表中包括其它用户拥有的进程&#xff0c; -a 显…

capture 部分元器件编号_十大电子元器件及其相关基础知识

导读对于从事电子行业的工程师来说&#xff0c;电子元器件是每天都需要去接触&#xff0c;每天都需要用到的&#xff0c;但其实里面的门门道道很多工程师未必了解。文中列举出工程师们常用的十大电子元器件&#xff0c;及相关的基础概念和知识。常用电子元器件有哪些&#xff1…

linux+硬盘rd5,Raid磁盘阵列

Raid:是冗余磁盘阵列的缩写。raid技术主要解决的问题的容量组合、高读写速度、同步备份(实时备份&#xff0c;即镜像)等功能。Raid的实现方法&#xff1a;硬raid:通过raid卡来raid功能。优点&#xff1a;性能高、稳定性好。 缺点&#xff1a;成本较高&#xff0c;因为需要买rai…

苹果笔记本能玩英雄联盟吗_英雄联盟手游可以玩云顶之弈吗 独立还是内置

众所周知&#xff0c;端游云顶之弈和英雄联盟是一个客户端的&#xff0c;必须下载英雄联盟才能玩云顶之弈。那么Lol手游内能否玩上云顶之弈手游呢?今日光耀菌就解答这个问题&#xff0c;留有疑惑的玩家们快来了解一番吧!LOL手游能玩云顶之弈吗?首先目前版本的lol手游内&#…

linux8安装ftp服务,CentOS8.0 安装配置ftp服务器的实现方法

CentOS8.0-1905发布后&#xff0c;尝试将FTP服务器迁移至新版本的CentOS中&#xff0c;但是测试过程中&#xff0c;在防火墙中开放ftp服务后&#xff0c;仍然一直无法连接&#xff0c;如果使用lftp或ftp工具测试&#xff0c;会提示【没有到主机的路由】错误。但是关闭防火墙后&…

win10关机后自动重启_Win10关机风扇还在转|解决win10关机后风扇继续转方法

Win10如果配合固态硬盘使用&#xff0c;可以实现开关机速度快。但是有些用户发现电脑在关机的时候&#xff0c;屏幕是关掉了&#xff0c;可风扇还继续在转&#xff0c;其主要原因是因为系统还没有完全关闭导致的&#xff0c;这篇文章系统部落将会给大家带来两个解决方法&#x…

linux ssh 插件,玩转VSCode插件之Remote-SSH的使用情况

前言每当更换电脑就要从新搭建一遍开发环境。。。每当拉完最新代码程序在本地跑不起来的时候就要检查服务器和开发电脑的环境。。。每当服务器上出Bug的时候就想如果可以能够调试服务器代码多好啊。。你是不是早就受够了vim这个煞笔编辑器。。。现在最火的是云原生应用&#xf…

保护眼睛的电脑设置_干货,怎么设置显示器,才能保护好我们的眼睛?

复工开始&#xff0c;网课不断&#xff0c;我们的眼睛又迎来了一波挑战&#xff01;你是不是有的时候会因为长时间用眼看显示器而流泪不止(不是因为看电视剧感动哈)&#xff0c;或者是长时间工作而眼部疲劳&#xff0c;你也明白一直用显示器伤眼可是不得不用&#xff01;楼主去…

linux .la文件的作用,.la文件 和 libtool

Linux下文件的类型是不依赖于其后缀名的&#xff0c;但一般来讲&#xff1a;.o 是目标文件&#xff0c;相当于Windows中的.obj文件.so 为共享库&#xff0c;是shared object&#xff0c;用于动态连接的&#xff0c;和dll差不多.a 为静态库&#xff0c;是好多个.o合在一起&#…

html输入密码跳转页面_【小乔锦囊】角色/仓库密码无法清除,怎么办?

— ◆ 小 乔 锦 囊 ◆ —近期&#xff0c;小乔收到玩家宝宝们的提问&#xff1a;在客服专区中进行角色或仓库密码的清除时&#xff0c;会收到登录验证失败的提示&#xff0c;应该怎么办&#xff1f;辛苦玩家宝宝们的热心反馈&#xff01;该问题目前已在紧急修复中。同时&#x…

linux redis 5.6扩展,Windows下为PHP5.6安装Redis扩展和memcached扩展

2.根据PHP版本号&#xff0c;编译器版本号和CPU架构&#xff0c;选择php_redis-2.2.5-5.6-ts-vc11-x64.zip和php_igbinary-1.2.1-5.5-ts-vc11-x64.zip下载地址&#xff1a;http://windows.php.net/downloads/pecl/snaps/redis/2.2.5/http://windows.php.net/downloads/pecl/rel…

string拼接_String拼接操作-的优化

很多讲Java优化的文章都会强调对String拼接的优化。倒不用特意记&#xff0c;本质上在于对不可变类优势和劣势的理解上。需要关注的是编译器对String拼接做出的优化&#xff0c;在简单场景下的性能能够与StringBuilder相当&#xff0c;复杂场景下仍然有较大的性能问题。网上关于…