当前位置: 首页 > news >正文

Linux内核中的时间

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

时间在内核中占有重要地位,操作系统必须随时都能获得当前时间,其次操作系统必须提供一种计时器可以通知内核某一段时间已经过去了。时间在内核中最 常见的应用就是进程调度,内核不但要为每个进程分配时间片,而且要周期性的对可运行队列中的进程进行调整。Linux内核中的时间由两种设备同时进行计 时:实时时钟和系统定时器。

实时时钟

实时时钟(Real Time Clock)用来永久存放系统时间,即便系统关闭也可以靠主板上的电池继续进行计时。由于RTC通常和CMOS被集成在一起,因此RTC也称为CMOS时 钟。虽然可以通过操作/dev/rtc对RTC进行编程,但是一般Linux只用RTC来获取当前的时间和日期。当系统启动时,内核通过读取RTC来初始 化墙上时间,该时间存放在xtime变量中。所谓墙上时间也就是当前的实际时间。

系统定时器

系统定时器是内核时间机制中最重要的一部分,它提供了一种周期性触发中断机制,即系统定时器以HZ(时钟节拍率)为频率自行触发时钟中断。当时钟中断发生时,内核就通过时钟中断处理程序timer_interrupt()对其进行处理。
系统定时器完全由操作系统管理,因此也成为系统时钟或者软件时钟。当系统启动时,内核通过RTC初始化系统定时器,系统定时器接着由操作系统共掌管,进行 固定频率的定时。可以看到,系统时间并不是传统意义上的那种计时时钟,而是通过定时这种特殊的方式来表现时间。在x86架构下,系统时钟通过可编程间隔定 时器(PIT)这种设备产生定时。

内核定时器

内核定时器也称为动态定时器,它可以使任务能在指定的时间点上执行。要使用定时器,必须先设置好定时器超时的时间,指定超时发生后应该执行的内核函 数,最后激活这个定时器实例。当定时器超时的时候,该内核函数将被自动执行(但不周期执行),执行完毕后自行销毁,这也是内核定时器被称为动态定时器的原 因。

获得时间

内核通过xtime变量保存墙上时间,该变量是timespec类型的,在linux/time.h中定义如下:

1struct timespec {
2        __kernel_time_t tv_sec;                 /* seconds */
3        long            tv_nsec;                /* nanoseconds */
4};

其中,tv_sec是以秒为单位时间,它保存着从1970年7月1日以来经过的时间,而tv_nsec记录自上一秒开始经过的纳秒数。

在最新的内核中,xtime未导出因此不能在内核模块中使用。不过内核提供了内核函数current_kernel_time()来获取当前时间,该函数返回timespec类型的时间。

转载于:https://my.oschina.net/u/174242/blog/72937

相关文章:

  • 写好注释的方法小结
  • 如何把Access中数据导入Mysql中 (转)
  • 隐藏windows7/8“卸载或更改程序”里的软件
  • C# 5.0中新增特性
  • nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
  • android 介绍
  • 前端性能--指标分析
  • 参加2012 OpenStack亚太技术大会
  • LVS笔记,(一)
  • Table doesn't have a primary key
  • linux 免密登录常见问题
  • JAVA数据结构的个人见解之绪论
  • UIScrollView 加载多个view view还可以交换顺序(2)
  • 迷宫最短路径(DFS)
  • SegmentFault for Android 3.0 发布
  • Angularjs之国际化
  • css属性的继承、初识值、计算值、当前值、应用值
  • download使用浅析
  • If…else
  • Laravel5.4 Queues队列学习
  • leetcode386. Lexicographical Numbers
  • mac修复ab及siege安装
  • 给第三方使用接口的 URL 签名实现
  • 理清楚Vue的结构
  • 微信小程序填坑清单
  • 我是如何设计 Upload 上传组件的
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 做一名精致的JavaScripter 01:JavaScript简介
  • 如何正确理解,内页权重高于首页?
  • ​520就是要宠粉,你的心头书我买单
  • ​linux启动进程的方式
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #QT项目实战(天气预报)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C#)一个最简单的链表类
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (js)循环条件满足时终止循环
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • ****Linux下Mysql的安装和配置
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Framework杂记
  • .net对接阿里云CSB服务
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [2]十道算法题【Java实现】
  • [ABC294Ex] K-Coloring
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C++][基础]1_变量、常量和基本类型
  • [C++]unordered系列关联式容器
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [C语言]——C语言常见概念(1)
  • [DAU-FI Net开源 | Dual Attention UNet+特征融合+Sobel和Canny等算子解决语义分割痛点]
  • [Flex][问题笔记]TextArea滚动条问题