2017/6/21


时间这一概念在生活中至关重要,而在操作系统中也同样重要,其在系统中的功能绝不仅仅是给用户提供时间这么简单,内核的许多机制都依赖于时间子系统。但凡是要在某个精确的时间执行某个事件,必然会用到时间子系统。而内核中定时器的发展可以以2.6版本的内核作为一个分界点。之前主要是低分辨率定时器,2.6开发期间便引入了高分辨率定时器。分辨率的高低意味着时间粒度的大小。

本节重点介绍下涉及到的几个重点概念

  1. 时钟设备
  2. 周期时钟/动态时钟
  3. 高分辨率/低分辨率
  4. 定时器

时钟设备时钟设备算是最低层的硬件设备,具体的信号由时钟设备触发,其最主要的功能就是提供周期时钟。传统定时器就是基于这种周期时钟的。周期时钟的一个特性就是按照固定的时间间隔触发事件,这里就是引起中断。回想早起的基于时间片的进程调度算法可知周期时钟在其中扮演着不可或缺的作用。时钟设备有两个关键特性:1、支持周期性事件。2、支持单点触发事件。前者是实现周期时钟的基础。单点触发模式下,事件只能执行一次,下次的执行需要重新编程,显示设置执行的时间。所以后者是动态时钟的基础。 当时钟设备初始化时,默认是采用周期模式工作的。 且在初始化时,如果还没有明确的全局时钟设备,则采用该设备担当此职责。

周期时钟/动态时钟周期时钟和动态时钟仅仅是上述时钟设备工作的两种不同的模式。周期时钟负责周期性的触发事件;而动态时钟状态下,可以根据实际需要启用/禁止周期时钟。例如在电脑无事可做时,就不需要周期性的触发事件,这种情况下可以禁止周期时钟达到省电的效果。使用动态时钟的前提条件是时钟设备支持单点触发模式,否则无法启用动态时钟。在支持单点触发模式的时钟设备支持下,可以由周期时钟切换到动态时钟。

高分辨率/低分辨率分辨率的高低即需要硬件的支撑也需要软件的实现。二者和周期时钟以及动态时钟的关系是正交的,即低分辨率下可以实现周期时钟和动态时钟;高分辨率下也可以实现周期时钟和动态时钟。需要注意的是低分辨率下的动态时钟需要单点触发设备的支持,并且编译内核时需要选择固定的项。而在高分辨率下的周期时钟是通过模拟实现的,由于高分辨率下设备总是单点触发模式,所以其通过一个高分辨率定时器显示的设置周期性事件。

定时器定时器是在上述机制的基础上实现的延迟机制。分为低分辨率定时器和高分辨率定时器。低分辨率定时器在低分辨率系统上实现;而高分辨率定时器在二者均可实现,但是碍于低分辨率设备的限制,不能提供高分辨率信号,感觉仅仅是在高分辨率框架下实现的低分辨率定时器

时间子系统最主要的功能还是维护系统时间的有序性,以及基于时间所需要的一系列工作。而现在硬件架构多为多处理器架构,单个时钟设备下虽然也可以达到目的,但是会额外增加许多处理器间的通信开销,因此,现代处理器多为每个CPU都分配一个时钟设备。由其中一个负责全局的时间管理,如jiffies的更新,墙上时间的更新,以及计算全局负载。而局部的CPU上的设备一般负责进程统计、性能剖析和实现高分辨率定时器。高分辨率定时器只能工作在提供局部时钟设备的系统上,否则由于分辨率的增加,引起的时钟中断数量会急促增长造成CPU间的大量通信,从而降低系统性能。

参考资料:深入linux内核架构、linux3.10.1内核源码

linux下的时间管理概述的更多相关文章

  1. 安装VMtools vim编辑器的使用 压缩包命令 Linux下的用户管理 (第三天)

    VM tools:方便我们虚拟机和宿主机之间复制数据或移动文件等 安装VMtools 1.菜单栏-虚拟机-安装VM tools 将其选中 2.进入系统,在桌面位置里面有VM tools的光盘,双击进入 ...

  2. Linux下长时间ping网络加时间戳并记录到文本

    Linux下长时间ping网络加时间戳并记录到文本   由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...

  3. Linux下精确控制时间的函数

    Linux下精确控制时间的函数 在测试程序接口运行时间的时候,常用time,gettimeofday等函数,但是这些函数在程序执行的时候是耗费时间的,如果仅仅测试时间还行,但是如果程序中用到时间控制类 ...

  4. 【one day one linux】linux下的软件包管理工具

    Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat ...

  5. Linux下设置时间

    Linux下设置时间 提供两种最根本有效的方式,就是更改时区.这里以更改为国内上海时间例子,其他地方时区同理. 方法一 备份文件 mv /etc/localtime /etc/localtime.ba ...

  6. Linux下系统时间函数、DST等相关问题总结(转)

    Linux下系统时间函数.DST等相关问题总结 下面这个结构体存储了跟时区相关的位移量(offset)以及是否存在DST等信息,根据所在的时区信息,很容易找到系统时间与UTC时间之间的时区偏移,另外根 ...

  7. Linux下c语言环境概述

    Linux下C语言环境概述 主要涉及编辑器.编译链接器.调试器.项目管理工具 编辑器 Linux中常用的编辑器有vi和emacs 查看vim配置文件并编辑 编译链接器 在Linux中,最常用的编译器是 ...

  8. Linux 下权限的管理

    Linux 下权限的管理 我们都知道,Linux系统对于用户的权限管理是十分严格的. 那么,我们就来具体了解一下. 一. 用户 在Linux中按照类型用户分为两种:1.超级用户 2.普通用户 那么它们 ...

  9. 学习Linux下的文件目录管理

                    文件目录管理 一.认识Linux文件系统的架构 在Linux中是没有盘符这个概念的,即Linux中没有C盘和D盘的分盘.那么我们直接通过对目录的操作实现对磁盘的读写,因 ...

随机推荐

  1. Python入门教程 超详细1小时学会Python

    Python入门教程 超详细1小时学会Python 作者: 字体:[增加 减小] 类型:转载 时间:2006-09-08我要评论 本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Ja ...

  2. 一款基于jQuery带事件记录的日历插件

    之前我们也已经分享过不少jQuery日历插件,有些应用了CSS3的特性,外观就特别漂亮.今天要分享的这款jQuery日历插件不仅有着绚丽的外观,而且带有日期事件记录功能,点击日期即可展开事件记录窗口, ...

  3. udacity android 实践笔记: lesson 4 part b

    udacity android 实践笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...

  4. Xml解析之PULL解析 例1

    <?xml version="1.0" encoding="UTF-8"?> <persons> <person id=" ...

  5. MDI多文档窗体--在一个窗体中装载多个窗体

    创建MDI窗体之前,首先要明确两个概念:父窗体和子窗体,在MDI窗体中,起到容器作用的窗体被称为“父窗体”, 可放在父窗体中的其他窗体被称为子窗体,也成为MDI子窗体.当应用程序启动时,首先会显示父窗 ...

  6. http协议之报文详解

    一. 概述 用于HTTP协议交互的信息被称为HTTP报文.请求端(客户端)的http报文叫做请求报文,响应端的叫做响应报文. 报文,是网络中交换和传输的数据单元,即站点一次性要发送的数据块.报文包含了 ...

  7. JQuery操作表单相关使用总结

    select下拉列表onChange事件之JQuery实现: JQuery: $(document).ready(function () { $("#selectMenu").bi ...

  8. 查看sdk

  9. 【BZOJ】1670: [Usaco2006 Oct]Building the Moat护城河的挖掘(凸包)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1670 裸打了凸包.. #include <cstdio> #include <cs ...

  10. 《C++ Primer Plus》学习笔记 第1章 预备知识

    第一章 预备知识C++在C语言的基础上添加了对"面向对象编程"的支持和对"泛型编程"的支持.类 —— 面向对象模板 —— 泛型编程1.1 C++简介1.2 C+ ...