linux内核源代码分析-定时器与时间管理.ppt

linux内核源代码分析-定时器与时间管理.ppt

ID:48049311

大小:72.50 KB

页数:29页

时间:2020-01-13

linux内核源代码分析-定时器与时间管理.ppt_第1页
linux内核源代码分析-定时器与时间管理.ppt_第2页
linux内核源代码分析-定时器与时间管理.ppt_第3页
linux内核源代码分析-定时器与时间管理.ppt_第4页
linux内核源代码分析-定时器与时间管理.ppt_第5页
资源描述:

《linux内核源代码分析-定时器与时间管理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、定时器与时间管理、内存管理上次课的回顾及后面的安排内核中的时间概念Linux中时间表示硬件时钟和定时器Linux下的时钟中断和相关时间应用Linux内存页Linux内存区内存管理提供的服务内存管理缓存机制内存映射上次内容回顾和后面的安排系统调用和中断(回顾上节课内容)中断处理程序的上、下半部机制LINUX下半部处理机制同步的经典问题LINUX内核同步实现增加一次课,课本内容完成后通过两个专题的形式增加对内核的认识内核中的时间概念事件驱动与时间驱动内核中需管理相对时间和绝对时间内核时间的硬件基础(系统定时器以某

2、种频率触发,hittingorpoping,该频率可以通过编程预定(tickrate)直接用处:更新系统运行时间更新实际时间定期均衡运行队列(SMP上)时间片定期统计Linux中时间表示(HZ)节拍率(HZ)系统定时器频率,可以通过设置修改,系统启动时设置,不同体系结构下不同。如:在include/asm-i386/param.h中:#defineHz1000//相当于1秒中断1000次思考:时间的精确性书上P116表9-1给出一般情况下各种体系结构下的时钟中断频率理想的HZ值应该是多少?多时会产生中断频繁但

3、提高精度(分析:平均误差)Linux中时间表示(HZ)精度提高的进一步讨论一些关键系统调用的效率提高(poll(),select())进程抢占的精度提高时间测量方面精度提高中断次数增加带来的问题综合考虑认为目前体系结构的系统设为1000可以忍受。Linux中时间表示(jiffies)全局变量,用来记录系统启动以来产生的节拍总数在中定义:Externunsignedlongvolatilejiffies;响应地有:Seconds*HZ=jiffies;(jiffies/HZ)=

4、seconds;(还有一些其他的转换)有关jiffies的内部位数问题:溢出时间问题64位问题(2.6中)Linux中时间表示(jiffies)64位与32位的结合Jiffies的回绕unsignedlongtimeout=jiffies+HZ/2;/*执行一些任务….*/if(timeout

5、避免的回绕影响(借用了LONG的符号)Linux中时间表示(用户空间和HZ)内核改变HZ的值会影响一些基于原来值的应用内核需要导出合适的jeffies值若新旧HZ数差整数倍则比较简单#definejiffies_to_clock(x)((x)/(HZ/USER_HZ))否则,需要向时间上做一下转换,误差会小一些。思考一下,为什么?硬件时钟和定时器体系结构提供了两种设备计时系统定时器实时时钟(RTC),不开机时靠电池供电工作,系统启动时,初始化xtime变量。Linux下的时钟中断和相关时间应用时钟中断处理程序

6、做的工作:获得xtime_lock锁,对jiffies_64和xtime进行保护(为什么jiffies不用保护)应答或重新设置系统时钟周期性地使用墙上时间更新实时时钟调用体系结构无关的时钟例程:do_timer():Jiffies_64变量加1更新资源消耗的统计值执行到期的动态定时器执行sheduler_tick()函数更新墙上时间并存到xtime变量中计算平均负载值Linux下的时钟中断和相关时间应用Do_timer()voiddo_timer(structpt_regs*regs){jiffies_64+

7、+;update_process_times(user_mode(regs));update_times();}Linux下的时钟中断和相关时间应用Voidupdate_process_times(intuser_tick){Structtask_struct*p=current;Intcpu=smp_processor_id()Intsystem=user_tick^1;…}(见书上P123)Linux下的时钟中断和相关时间应用统计的不精确性根据上面的处理可以看出,一个节拍的时间要么给一个用户进程,要么给系

8、统,这样做很不精确,因为在一个节拍中进程可能多次进入。这也是要采取更高频率的原因。Linux下的时钟中断和相关时间应用更新墙上时钟Voidupdate_times(void){unsignedlongticks;ticks=jiffies–wall_jiffies;if(ticks){wall_jiffies+=ticks;update_wall_time(ticks);last_time_offs

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。