仓酷云
标题:
带来一篇Linux内审定时器条记
[打印本页]
作者:
冷月葬花魂
时间:
2015-1-16 12:47
标题:
带来一篇Linux内审定时器条记
如果你让他去用linux搭建一个web服务器,做一个linux网关,他就什么都不会了.他们把时间都浪费在了版本的转换上了.
80X86系统布局上,经常使用的准时器电路
及时时钟(RTC)
RTC内核经由过程IRQ8上收回周期性的中止,频次在2-8192HZ之间,失落电后仍然事情,内核经由过程会见0x70和0x71I/O端口会见RTC。
工夫戳计时器(TSC)
使用CLK输出引线,吸收内部振荡器的时钟旌旗灯号,该盘算器是使用64位的工夫戳计时器存放器来完成额,与可编程距离准时器传送来的工夫丈量比拟,更加准确。
可编程距离准时器(PIT)
PIT的感化相似于微波炉的闹钟,PIT永久之内核断定的流动频次收回中止,但频次不算高。
CPU当地准时器
使用PIC大概APIC总线的时钟盘算。
高精度工夫准时器(HPET)
功效对照壮大,家机很罕用,也不往记了。
ACPI电源办理准时器
它的时钟旌旗灯号具有约莫为3.58MHZ的流动频次,该设备实践上是一个复杂的计数器,为了读取盘算器的值,内核必要会见某个I/O端口,必要初始化
准时器的数据布局
使用timer_opts形貌准时器
Timer_opts的数据布局
Name:标记准时器员的一个字符串
Mark_offset:纪录上一个节奏入手下手所经由的工夫,由时钟中止处置程序挪用
Get_offset前往自上一个节奏入手下手所经由的工夫
Monotonic_clock:前往自内核初始化入手下手所经由的纳秒数
Delay:守候制订数量的“轮回”
准时插补
就仿佛我们要为1小时35分34秒举行准时,我们不成能用秒表往统计,一定先利用盘算时的表,再用盘算分的,最初才用秒表,在80x86架构的准时器也会利用各类准时器往举行准时插补,我们能够经由过程cur_timer指针来完成。
单处置器体系上的计时系统布局
一切与准时有关的举动都是由IRQ线0上的可编程距离准时器的中止触发。
初始化阶段
1.初始化间,time_init()函数被挪用来创建计时系统布局
2.初始化xtime变量(xtime变量寄存以后工夫和日期,它是一个timespec范例的数据布局)
3.初始化wall_to_monotonic变量,它跟xtime是统一范例的,但它寄存将加在xtime上的形貌和纳秒数,如许即便突发改动xtime也不会遭到影响。
4.看是不是撑持高精度计时器HPET
5.挪用select_timer()选择体系中可使用的最好的准时资本,并让cur_timer变量指向该准时器
6.挪用setup_irq(0,&irq0)来创立与IRQ响应的中止门。
时钟中止处置程序
1.在xtime_lock按次锁发生一个write_seqlock()来回护与准时相干的内核变量,如许避免中止让该历程被制止。
2.实行cur_timer准时器工具的mark_offset办法(纪录上一个节奏入手下手所经由的工夫,由时钟中止处置程序挪用)
3.挪用do_timer_interrupt函数,步骤为
a)使jiffies_64值增1
b)挪用updata_times()函数来更新体系日期和工夫。
c)挪用updata_process_times()函数为当地CPU实行几个与准时相干的计数器感化。
d)挪用profile_tick()函数
e)假如使用内部时钟来同步体系时钟,则每隔660秒,挪用一次st_rtc_mmss()函数来调剂及时时钟。
f)挪用write_sequnlokc()开释xtime_lock按次锁。
4.前往值1,呈报中止已无效地处置了。
这个还算复杂,接上去是多处置器体系上的计时系统计划。
多处置器体系上的计时系统
初始化阶段
经由过程calibrate_APIC_clock()盘算当地APIC多久才发生一次中止。
全局时钟中止处置程序
SMP版本的timer_interrupt()处置程序与UP版本的处置程序在几个中央有差别。
Timer_interrupt()挪用函数do_timer_interrupt()向I/OAPIC芯片的一个端口写进,以应对准时器的中止请求。
Updata_process_times()函数不被挪用,由于该函数实行与特定CPU相干的操纵
Profile_tick()不被挪用,由于该函数一样实行与特定CPU相干的操纵。
静态准时器
这部分使用很简单,但要了解静态准时器的机理,真的澹退邓涤玫牟糠职伞
静态准时器寄存在timer_list布局中
Structtime_list{
Structlist_headentry;
Spinlock_tlock;
Unsignedlongmagic;
Void(*function)(unsignedlong);
Unsignedlongdata;
Tvec_base_t*base
};
Entry字段用于将软准时器拔出双向轮回链表行列中,其值该链表依据准时器expires字段的值将他们分组摊开(假如对静态准时器完成道理没乐趣的,能够忽视,不必要要设置的项目)
Expries字段给出准时器到期工夫,工夫用拍子数暗示,一样平常都是unsignedlongexpire=timeout+jiffies
Lock自旋锁
Function准时发生中止后,实行得函数
Data,能够界说一个独自的通用函数来处置多个设备驱动程序超时的成绩
</p>
网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup
作者:
精灵巫婆
时间:
2015-1-17 23:46
对于英语不是很好的读者红旗Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。
作者:
灵魂腐蚀
时间:
2015-1-21 13:25
写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。
作者:
飘灵儿
时间:
2015-1-30 19:25
虽然大家都比较喜欢漂亮的mm,但是在学 linux 的过程中,还是要多和“男人”接触一下:P 遇到问题的时候,出来看说和上网查之外,就是要多用 linux 下的 man 命令找找帮助。
作者:
小女巫
时间:
2015-2-6 15:36
对我们学习操作系统有很大的帮助,加深我们对OS的理解。?
作者:
活着的死人
时间:
2015-2-16 22:17
你需要提供精确有效的信息。Linux这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。
作者:
变相怪杰
时间:
2015-3-5 11:01
其实老师让写心得我也没怎么找资料应付,自己想到什么就写些什么,所以不免有些凌乱;很少提到编程,因为那些在实验报告里已经说了,这里再写就多余了。
作者:
第二个灵魂
时间:
2015-3-12 05:22
熟悉并掌握安装Linux,安装是学习的前提。目前较常见的安装方法有二种:
作者:
分手快乐
时间:
2015-3-19 18:28
linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2