Linux 时钟与计时器
对 Linux 系统来说,时钟和计时器是两个十分重要的概念。时钟反应的是绝对时间,也可认为是实时时间。计时器反应的则是相对时间,即相对于系统启动后的计时。操作系统内核需要管理运行时间(uptime)和墙上时间(wall time),而内核中大量事务需要由时间驱动。
系统时钟
系统内核需要借助硬件设施来管理时间,实时时钟(RTC)是用来持久存放系统时间的设备,它由主机电池供电,因此即使关闭系统,实时时钟仍然在持续工作。
当系统启动时,系统内核从实时时钟(RTC)读取实时时间,并将该时间转换为自 1970 年 1 月 1 日零时零分零秒以来所经历的秒数(即 Linux 时间秒),并将该秒数保存在系统变量 xtime 中。可以说实时时钟的主要作用就是初始化 xtime 变量。
系统计时器
系统计时器驱动着周期性发生的事件,在 X86 架构的系统中,系统计时器通常是一种可编程硬件芯片。系统计时器的频率称之为节拍率(tick rate),在内核中使用 HZ 变量来表示节拍率。
对 X86 架构系统而言,内核版本 2.4 之前,系统计时器的节拍率为 100。自内核版本 2.6 开始,系统计时器节拍率设置为 1000。节拍率 HZ = 1000 的含义是系统计时器每秒钟可产生 1000 次中断请求,每一个计时中断周期称之为一个节拍(tick),也就是说每个节拍时长为 1 秒 / 1000次 = 0.001 秒 = 1 毫秒。节拍的时长决定着系统时间控制的精度,当节拍率从 100 提升到 1000 时,也就意味着系统计时器的精度从 10 毫秒提升到了 1 毫秒,这大大提高了系统对时间驱动事件调度的精度。而过于频繁的时钟中断会不可避免地增加系统计时开销。
系统计时器及其计时中断处理程序是 Linux 内核管理机制的中枢,计时中断处理程序会定期地处理以下事务(包含而不限于):
- 更新系统运行时间(uptime)
- 更新墙上时间(wall time)
- 在对称多处理器系统(SMP)上,均衡调度各处理器上的运行队列
- 检查当前进程时间片(time slice)是否耗尽,如果耗尽,则重新调度
- 运行超时的动态定时器
- 更新资源耗尽和处理器时间的计算
节拍、节拍率、节拍数
运行时的 Linux 内核会周期性地发出计时中断请求(IRQ),每秒钟发出的计时中断请求数称之为节拍率,每次计时中断周期称之为节拍,实际计时中断次数称之为节拍数。
Linux 内核的节拍率在编译时通过变量 HZ 来指定,一般设置为 100 或 1000,表示每秒中断 100 次或 1000 次。如果节拍率设置为 1000,那么一个节拍周期则为 1 秒 / 1000 次 = 1 毫秒。Linux 系统使用变量 jiffies 来记录系统开机以来经历的节拍数,即从系统启动开始,每发生一次计时中断,jiffies 则加 1。通过计算 jiffies 所表示的节拍数,便可得到系统的运行时间。
节拍数转换为时间
时间(秒) = 节拍数 × 节拍时长 = 节拍数 / 节拍率
时间转换为节拍数
节拍数 = 时间(秒) / 节拍时长 = 时间(秒) × 节拍率
因此若已知系统内核 HZ = 1000,jiffies = 1000 时,便可以快速算出系统的运行时间为 jiffies / HZ = 1000 / 1000 = 1 秒。
术语
| 名词 | 释义 | 备注 |
|---|---|---|
| Real Time Clock (RTC) | 实时时钟 | |
| Wall Time | 墙上时钟 | 即当前实时时间 |
| Uptime | 运行时间 | |
| Time Slice | 时间片 | |
| Timer | 计时器 | |
| Timer Interrupt Request (IRQ) | 计时中断请求 | |
| HZ | 每秒计时中断请求次数,也可称为节拍率(tick rate) | HZ 值一般为 100, 250, 300 或 1000。最常见的为 1000 和 100。 |
| Tick | 节拍 | Tick 与 HZ 互为倒数,表示单次计时中断的时长。 |
| Jiffies | 节拍数 | 表示系统开机以来的节拍数,即经历的 Tick 数量。 |
| Second (s) | 秒 | |
| Millisecond (ms) | 毫秒 | 1s = 1000ms |
| Microsecond (us) | 微秒 | 1ms = 1000us |
| Nanosecond (ns) | 纳秒 | 1us = 1000ns |
| Picosecond (ps) | 皮秒 | 1ns = 1000ps |
Ref.:
Linux 内核中的 jiffies 及其作用介绍及 jiffies 等相关函数详解
Linux Kernel - Jiffies
Kernel Timer Systems
Linux 时钟与计时器的更多相关文章
- linux时钟管理
ref https://access.redhat.com/solutions/18627 在el5中 如何查看系统现在使用的clock source是什么? 答: 方式1:需要说明的是不能保证这个两 ...
- 转载:Linux 时钟基础学习
1.HZ Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts.举例来说,HZ为1000,代表每秒有1000次ti ...
- linux时钟基本概念、CST与UTC、以及NTP简单设置
1,安装linux的时候在设置时间的时候有一个选项:system clock uses UTC,那么这个UTC是什么意思呢? 世界协调时间(Universal Time Coordinated,UTC ...
- linux时钟系统概述
1. 了解下linux系统中一些时间概念,在kernel/time/timekeeping.c中定义了多个时间.RTC时间:在PC中,RTC时间又叫CMOS时间,通常由一个专门的计时硬件来实现,软件可 ...
- linux时钟同步
方法1. ntpdate ip 搜索时钟服务器.找一个靠谱的时钟ip执行以上命令即可 可以把这个加入crontab中定时同步.# /usr/sbin/ntpdate 210.72.145.44 > ...
- linux 时钟源初步分析linux kernel 时钟框架详细介绍
初步概念: 看datasheet的关于时钟与定时器的部分, FCLK供给cpu, HCLK供给AHB总线设备(存储器控制器,中断控制器.LCD控制器.DMA.USB主机控制器等), PCLK供给APB ...
- Linux时钟
一.前言 时钟或者钟表(clock)是一种计时工具,每个人都至少有一块,可能在你的手机里,也可能佩戴在你的手腕上.如果Linux也是一个普通人的话,那么她的手腕上应该有十几块手表,包括:CLOCK_R ...
- linux时钟概念CST与UTC、以及NTP简单设置
1.世界协调时间(Universal Time Coordinated,UTC): GPS 系统中有两种时间区分,一为UTC,另一为LT(地方时)两者的区别为时区不同,UTC就是0时区的时间,地方时为 ...
- 嵌入式linux——时钟(三)
今天写第一篇,S3C2440的时钟,配置好时钟系统,各个模块才能正常有效的工作,为了了解始终系统,必须要阅读芯片手册,尽量看英文版的,这样还能捎带着增加一下阅读英语计数文档的能力. 概览 在2440数 ...
随机推荐
- 搭建Java环境JDK,和运行环境JRE
1:想要学习Java第一步就是搭建Java环境,就是安装JDK,又因为JDK里面包含JRE,所以在安装JDK的过程中就安装了JRE,所以以下只是给出了JDK的安装包,自行下载安装即可 链接:http: ...
- FreeCodeCamp 前端初级算法(个人向)
freecodecamp 初级算法地址戳这里 Reverse a String 翻转字符串 function reverseString(str) { str=str.split("&quo ...
- javascript设计模式与开发实践阅读笔记(7)——迭代器模式
迭代器模式:指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺 ...
- WPS 文字排版 标题回车后标题号自动增加
飞思卡来互联网提供全球性的 看了看 风格的呵呵 合格否d合格否的 secure embedded嵌入式解 个国家和地区,注册了成千上万项专利,产品面向 物联网,汽车电子,消费电子,工业及网络设备等市 ...
- 【micropython】用python来进行BadUSB的USB-HID测试(含无线控制)
转载请注明:@小五义http://www.cnblogs.com/xiaowuyiQQ群:64770604 本文以TPYBoardv101开发板为例讲解了利用micropython进行BadUSB的u ...
- PHOTOSHOP CC 2015插件安装方法
收到很多评论说不能安装.抱歉,这里解释一下,不是所有插件都能用这个方法,安装不了的只能等插件更新了,这里只是给大家一个尝试的方法,有一些插件可以用这个方法安装. 试试嘛,如果懒得试,可以忽略这篇文章. ...
- git .gitignore 文件 解决二进制文件冲突问题
.gitignore 主要是添加 忽略文件 .最近团队开发经常出现 UserInterfaceState.xcuserstate 冲突,打开发现是二进制文件 ,没法解决冲突. 只好 rm -rf 之 ...
- GPRM/GNRMC定位信息的读取与解析
帧头 UTC时间 状态 纬度 北纬/南纬 经度 东经/西经 速度 $GPRMC hhmmss.sss A/V ddmm.mmmm N/S dddmm.mmmm E/W 节 方位角 UTC日期 磁偏角 ...
- android实现自动升级并安装打开
http://blog.csdn.net/wa991830558/article/details/41014673 这是一个比较简单的程序,但网上还是有很多人问起这个问题,并且回答的人,也没有完全回答 ...
- 云服务器 ECS Linux 系统盘数据转移方法
转自:https://help.aliyun.com/knowledge_detail/41400.html 问题描述 购买云服务器 ECS Linux 服务器时,未购买数据盘,使用一段时间后,随着业 ...