linux下的时间管理概述
2017/6/21
时间这一概念在生活中至关重要,而在操作系统中也同样重要,其在系统中的功能绝不仅仅是给用户提供时间这么简单,内核的许多机制都依赖于时间子系统。但凡是要在某个精确的时间执行某个事件,必然会用到时间子系统。而内核中定时器的发展可以以2.6版本的内核作为一个分界点。之前主要是低分辨率定时器,2.6开发期间便引入了高分辨率定时器。分辨率的高低意味着时间粒度的大小。
本节重点介绍下涉及到的几个重点概念
- 时钟设备
- 周期时钟/动态时钟
- 高分辨率/低分辨率
- 定时器
时钟设备时钟设备算是最低层的硬件设备,具体的信号由时钟设备触发,其最主要的功能就是提供周期时钟。传统定时器就是基于这种周期时钟的。周期时钟的一个特性就是按照固定的时间间隔触发事件,这里就是引起中断。回想早起的基于时间片的进程调度算法可知周期时钟在其中扮演着不可或缺的作用。时钟设备有两个关键特性:1、支持周期性事件。2、支持单点触发事件。前者是实现周期时钟的基础。单点触发模式下,事件只能执行一次,下次的执行需要重新编程,显示设置执行的时间。所以后者是动态时钟的基础。 当时钟设备初始化时,默认是采用周期模式工作的。 且在初始化时,如果还没有明确的全局时钟设备,则采用该设备担当此职责。
周期时钟/动态时钟周期时钟和动态时钟仅仅是上述时钟设备工作的两种不同的模式。周期时钟负责周期性的触发事件;而动态时钟状态下,可以根据实际需要启用/禁止周期时钟。例如在电脑无事可做时,就不需要周期性的触发事件,这种情况下可以禁止周期时钟达到省电的效果。使用动态时钟的前提条件是时钟设备支持单点触发模式,否则无法启用动态时钟。在支持单点触发模式的时钟设备支持下,可以由周期时钟切换到动态时钟。
高分辨率/低分辨率分辨率的高低即需要硬件的支撑也需要软件的实现。二者和周期时钟以及动态时钟的关系是正交的,即低分辨率下可以实现周期时钟和动态时钟;高分辨率下也可以实现周期时钟和动态时钟。需要注意的是低分辨率下的动态时钟需要单点触发设备的支持,并且编译内核时需要选择固定的项。而在高分辨率下的周期时钟是通过模拟实现的,由于高分辨率下设备总是单点触发模式,所以其通过一个高分辨率定时器显示的设置周期性事件。
定时器定时器是在上述机制的基础上实现的延迟机制。分为低分辨率定时器和高分辨率定时器。低分辨率定时器在低分辨率系统上实现;而高分辨率定时器在二者均可实现,但是碍于低分辨率设备的限制,不能提供高分辨率信号,感觉仅仅是在高分辨率框架下实现的低分辨率定时器
时间子系统最主要的功能还是维护系统时间的有序性,以及基于时间所需要的一系列工作。而现在硬件架构多为多处理器架构,单个时钟设备下虽然也可以达到目的,但是会额外增加许多处理器间的通信开销,因此,现代处理器多为每个CPU都分配一个时钟设备。由其中一个负责全局的时间管理,如jiffies的更新,墙上时间的更新,以及计算全局负载。而局部的CPU上的设备一般负责进程统计、性能剖析和实现高分辨率定时器。高分辨率定时器只能工作在提供局部时钟设备的系统上,否则由于分辨率的增加,引起的时钟中断数量会急促增长造成CPU间的大量通信,从而降低系统性能。
参考资料:深入linux内核架构、linux3.10.1内核源码
linux下的时间管理概述的更多相关文章
- 安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)
VM tools:方便我们虚拟机和宿主机之间复制数据或移动文件等 安装VMtools 1.菜单栏-虚拟机-安装VM tools 将其选中 2.进入系统,在桌面位置里面有VM tools的光盘,双击进入 ...
- Linux下长时间ping网络加时间戳并记录到文本
Linux下长时间ping网络加时间戳并记录到文本 由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...
- Linux下精确控制时间的函数
Linux下精确控制时间的函数 在测试程序接口运行时间的时候,常用time,gettimeofday等函数,但是这些函数在程序执行的时候是耗费时间的,如果仅仅测试时间还行,但是如果程序中用到时间控制类 ...
- 【one day one linux】linux下的软件包管理工具
Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat ...
- Linux下设置时间
Linux下设置时间 提供两种最根本有效的方式,就是更改时区.这里以更改为国内上海时间例子,其他地方时区同理. 方法一 备份文件 mv /etc/localtime /etc/localtime.ba ...
- Linux下系统时间函数、DST等相关问题总结(转)
Linux下系统时间函数.DST等相关问题总结 下面这个结构体存储了跟时区相关的位移量(offset)以及是否存在DST等信息,根据所在的时区信息,很容易找到系统时间与UTC时间之间的时区偏移,另外根 ...
- Linux下c语言环境概述
Linux下C语言环境概述 主要涉及编辑器.编译链接器.调试器.项目管理工具 编辑器 Linux中常用的编辑器有vi和emacs 查看vim配置文件并编辑 编译链接器 在Linux中,最常用的编译器是 ...
- Linux 下权限的管理
Linux 下权限的管理 我们都知道,Linux系统对于用户的权限管理是十分严格的. 那么,我们就来具体了解一下. 一. 用户 在Linux中按照类型用户分为两种:1.超级用户 2.普通用户 那么它们 ...
- 学习Linux下的文件目录管理
文件目录管理 一.认识Linux文件系统的架构 在Linux中是没有盘符这个概念的,即Linux中没有C盘和D盘的分盘.那么我们直接通过对目录的操作实现对磁盘的读写,因 ...
随机推荐
- Log4j容器深入探究
1.思考 容器是什么? 水壶是容器,水壶中存放着水,等我们需要水了,直接用 Spring中的ApplicationContext是容器,里面存放着各种Bean,等我们需要了直接用,并且可以创建管理Be ...
- vsftpd 服务移植出现 500 oops : socket 解决
一开始, 在vsftpd 打印的错误是 500 oops : socket 在 vsftpd 源码里面找到 buildroot-2016.05/output/build/vsftpd-3.0.3/sy ...
- 16V554 的测试代码
//------------------------------------------------------------------------ #include "AT16C554 ...
- 关于Unity的组件和作用
一.Transform组件 整个场景由节点树组成. 节点+Transform组件,每个Transform有自己的孩子Transform,由Transform组成Transform树,而每个Transf ...
- TensorFlow基础笔记(4) Tensor Transformation
https://segmentfault.com/a/1190000008793389 抽取 tf.slice(input_, begin, size, name=None):按照指定的下标范围抽取连 ...
- GIMP 使用
在更改uboot启动logo的时候,需要P图,使用了linux的gimp.本文记录如何更改图片大小以及居中显示. 设置画布大小 在图片中右键 image -> Canvas Size 图片居中 ...
- 【BZOJ】1638: [Usaco2007 Mar]Cow Traffic 奶牛交通(dfs+dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1638 一条边(u, v)经过的数量=度0到u的数量×v到n的数量 两次记忆化dfs算出他们即可 #i ...
- 分享在github超酷超炫特效动画,不看你会懊悔的。
有图有真相直接上效果图,有须要的朋友们能够到连接上去下载. 下载地址:https://github.com/ChrisRenke/DrawerArrowDrawable 下载地址:https://gi ...
- 自己动手写CPU之第九阶段(2)——载入存储指令说明2(lwl、lwr)
将陆续上传新书<自己动手写CPU>.今天是第38篇,我尽量每周四篇,可是近期已经非常久没有实现这个目标了.一直都有事,不好意思哈. 开展晒书评送书活动,在q=%E4%BA%9A%E9%A9 ...
- 使用openstack部署云计算服务环境
环境: 系统 硬盘 IP hostname redhat 7 sda 20G 192.168.0.70 openstack.com 64位 sdb 20G 配置网卡 [root@opens ...