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盘的分盘.那么我们直接通过对目录的操作实现对磁盘的读写,因 ...
随机推荐
- Android——Activity和Intent及Activity的生命周期
实验Activity的生命周期 package com.example.chenshuai.test; import android.app.Activity; import android.os.B ...
- hive表分区的修复
hive从低版本升级到高版本或者做hadoop的集群数据迁移时,需要重新创建表和表分区,由于使用的是动态分区,所以需要重新刷新分区表字段,否则无法查看数据. 在hive中执行中以下命令即可自动更新元数 ...
- easy UI动态赋值
1,首先怎么清除这个值 $('#filegrid').datagrid('loadData', { total: 0, rows: [] }); 2,清除后,通过post提交请求,怎么将新植穿进去,这 ...
- 02 观察 mysql 周期性变化
()首先写一个shell 脚本 vim mysql_status.sh 脚本如下: #!bin/bash while true do mysqladmin -urooy ext|awk '/Queri ...
- [浪风分享] PHP开发必看 我现在是这样编程的
我在做什么 曾经,我试过接到一些需求.一眼带过后,脑袋马上随着高昂的斗志沉溺在代码的世界中 ,马不停蹄地敲着键盘直到最后测试的完成.我从思绪中恢复过来,乍一看自己写的功能,和需求差了十万八千里,我TM ...
- php如何判断两个时间的时间差
$time1=2011-11-11 11:11:11$time2=2016-12-10 16:58:13 代码: if(abs(strtotime($time2)-strtotime($time1)) ...
- Linux性能分析top iostat vmstat free
最近看到一大牛的分析报告,才知道笔者认识这4个命令是多么肤浅,其实要读懂内存的信息,是要一些功力的.1.top VIRT 虚拟内存总量,VIRT=SWAP+RESSWAP ...
- 修改CFileDialog的标题
CFileDialog f(TRUE); f.m_ofn.lpstrTitle = "我的标题"; f.DoModal(); 设置标题! CFileDialog ...
- python3----练习题(....)
# 保存文件(文本,图片,视频...) 1 def save_file(): url = 'http://css.8684.cn/citys/images/line/45.jpg' root = r' ...
- [转]ASP.NET MVC 5 - 控制器
MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...