关于linux内核中使用的时钟

简介:

linux内核里面用了很多的时钟,其实这些时钟的用处无外乎就几种:1.作为心跳,中断cpu;2.使得用户可以获取当前时间;3.实时测量;4.定时 服务。知道了使用目的后,我们来看看到底有哪些时钟供我们选择使用:关于这些时钟的概念,网上已经存在不少文章了,为了不重复(浪费互联网空间),咱就先来个引用。 
/*摘录开始:http://blog.chinaunix.net/u1/55599/showart.php?id=1179259 
1):实时时钟(RTC) 
该时钟独立于CPU和其它芯片.即使PC断电,该时钟还是继续运行.该计时由一块单独的芯片处理,并把时钟值存放CMOS.该时间可参在IRQ8上周期性的产生时间信号.频率在2Hz ~ 8192Hz之间.但在linux中,只是用RTC来获取当前时间. 
2):时间戳计时器(TSC) 
CPU附带了一个64位的时间戳寄存器,当时钟信号到来的时候.该寄存器内容自动加1 
3):可编程中断定时器(PIC) 
该设备可以周期性的发送一个时间中断信号.发送中断信号的间隔可以对其进行编程控制.在linux系统中,该中断时间间隔由HZ表示.这个时间间隔也被称为一个节拍(tick). 
在 ./include/asm-i386/param.h 定义 
10#ifndef HZ 
11#define HZ 100 
12#endif 
4):CPU本地定时器 
在处理器的本地APIC还提供了另外的一定定时设备.CPU本地定时器也可以单次或者周期性的产生中断信号.与上次描述的PIC相比.它有以下几点的区别: 
APIC本地计时器是32位.而PIC是16位.由此APIC本地计时器可以提供更低频率的中断信号 
本地APIC只把中断信号发送给本地CPU.而PIC发送的中断信号任何CPU都可以处理 
APIC定时器是基于总线时钟信号的.而PIC有自己的内部时钟振荡器 
5):高精度计时器(HPET) 
在linux2.6中增加了对HPET的支持.HPET是一种由intel开发的新型定时芯片.该设备有一组寄时器,每个寄时器对应有自己的时钟信号,时钟信号到来的时候就会自动加1.一个 hpet包括了一个固定频率的数值增加的计数器以及3到32个独立的计时器,这每一个计时器有包涵了一个比较器和一个寄存器(保存一个数值,表示触发中断时机)。每一个比较器都比较计数器中的数值和寄存器中的数值,当这两个数值相等时,将产生一个中断 
实际上,在intel多理器系统与单处理器系统还有所不同: 
在单处理系统中.所有计时活动过由PIC产生的时钟中断信号触发的 
在多处理系统中,所有普通活动是由PIC产生的中断触发.所有具体的CPU活动,都由本地APIC触发的. 
*/摘录完毕 
好了,上面对这么多种时钟的概念已经阐述的很清楚了,那么他们之间到底有何联系呢?幸运的是,在2.6.21内核以后,一切变得不言自明了,2.6.21以上内核将时钟框架进行了进一步的抽象整理,抽象出了两个概念: 
struct clocksource :对硬件时钟设备的抽象,描述时钟源,强调静态事物,源头 
struct clock_event_device :时钟的事件的抽象,描述硬件时钟中断发生时要执行的动作,强调在时钟源上面的动态方面。 
这两个概念被抽象出来以后,我们就可以用面向对象的思路来分析了。仔细看看这两个概念,它们的偶合性极低,但是还是有联系的,比如如果你将 clock_event_device设置成one-shot,而clocksource确是一个精度及其低的时钟源,那么系统的响应将会相当慢,它们实 际上会影响到对方。 
仔细研究一下上面的众多时钟,有的可以产生中断,有的仅仅是一个计数器,有的...,那么我们怎么读时钟源啊,不要急,每个clocksource都有一个回调函数用来读取时钟源当前值:

struct clocksource {



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274051

相关文章
|
16天前
|
Linux C语言
Linux内核队列queue.h
Linux内核队列queue.h
|
1月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
【Shell 命令集合 系统设置 】Linux 生成并更新内核模块的依赖 depmod命令 使用指南
32 0
|
1月前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 卸载已加载的内核模块rmmod命令 使用指南
29 1
|
9天前
|
算法 Linux 调度
深入理解Linux内核的进程调度机制
【4月更文挑战第17天】在多任务操作系统中,进程调度是核心功能之一,它决定了处理机资源的分配。本文旨在剖析Linux操作系统内核的进程调度机制,详细讨论其调度策略、调度算法及实现原理,并探讨了其对系统性能的影响。通过分析CFS(完全公平调度器)和实时调度策略,揭示了Linux如何在保证响应速度与公平性之间取得平衡。文章还将评估最新的调度技术趋势,如容器化和云计算环境下的调度优化。
|
14天前
|
算法 Linux 调度
深度解析:Linux内核的进程调度机制
【4月更文挑战第12天】 在多任务操作系统如Linux中,进程调度机制是系统的核心组成部分之一,它决定了处理器资源如何分配给多个竞争的进程。本文深入探讨了Linux内核中的进程调度策略和相关算法,包括其设计哲学、实现原理及对系统性能的影响。通过分析进程调度器的工作原理,我们能够理解操作系统如何平衡效率、公平性和响应性,进而优化系统表现和用户体验。
20 3
|
21天前
|
负载均衡 算法 Linux
深度解析:Linux内核调度器的演变与优化策略
【4月更文挑战第5天】 在本文中,我们将深入探讨Linux操作系统的核心组成部分——内核调度器。文章将首先回顾Linux内核调度器的发展历程,从早期的简单轮转调度(Round Robin)到现代的完全公平调度器(Completely Fair Scheduler, CFS)。接着,分析当前CFS面临的挑战以及社区提出的各种优化方案,最后提出未来可能的发展趋势和研究方向。通过本文,读者将对Linux调度器的原理、实现及其优化有一个全面的认识。
|
21天前
|
Ubuntu Linux
Linux查看内核版本
在Linux系统中查看内核版本有多种方法:1) 使用`uname -r`命令直接显示版本号;2) 通过`cat /proc/version`查看内核详细信息;3) 利用`dmesg | grep Linux`显示内核版本行;4) 如果支持,使用`lsb_release -a`查看发行版及内核版本。
36 6
|
24天前
|
Linux 内存技术
Linux内核读取spi-nor flash sn
Linux内核读取spi-nor flash sn
18 1
|
30天前
|
存储 网络协议 Linux
【Linux 解惑 】谈谈你对linux内核的理解
【Linux 解惑 】谈谈你对linux内核的理解
24 0
|
1月前
|
存储 Linux Shell
【Shell 命令集合 系统设置 】Linux 显示Linux内核模块的详细信息 modinfo命令 使用指南
【Shell 命令集合 系统设置 】Linux 显示Linux内核模块的详细信息 modinfo命令 使用指南
26 0