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

上传人:wuy****n92 文档编号:55134107 上传时间:2022-10-30 格式:PPT 页数:29 大小:40.50KB
返回 下载 相关 举报
linux内核源代码分析-定时器与时间管理.ppt_第1页
第1页 / 共29页
linux内核源代码分析-定时器与时间管理.ppt_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《linux内核源代码分析-定时器与时间管理.ppt》由会员分享,可在线阅读,更多相关《linux内核源代码分析-定时器与时间管理.ppt(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、te)直接用处:更新系统运行时间更新实际时间定期均衡运行队列(SMP上)时间片定期统计Linux中时间表示(HZ)节拍率(HZ)系统定时器频率,可以通过设置修改,系统启动时设置,不同体系结构下不同。如:在中:#define Hz 1000 /相当于1秒中断1000次思考:时间的精确性书上P116表9-1给出一般情况下各种体系结构下的时钟中断频率理想的HZ值应该是多少?多时会产生中断频繁但提高精度(分析:平均误差)Linux中时间表示(HZ)精度提高的进一步讨论一些关键系统调用的效率提高(poll(),select())进程抢占的精度提高时间测量方面精度提高中断次数增加带来的问题综合考虑认为目前

3、体系结构的系统设为1000可以忍受。Linux中时间表示(jiffies)全局变量,用来记录系统启动以来产生的节拍总数在中定义:Extern unsigned long volatile jiffies;响应地有:Seconds*HZ=jiffies;(jiffies/HZ)=seconds;(还有一些其他的转换)有关jiffies的内部位数问题:溢出时间问题64位问题(中)Linux中时间表示(jiffies)64位与32位的结合Jiffies的回绕unsigned long timeout=jiffies+HZ/2;/*执行一些任务.*/if(timeout jiffies)未超时,正常处

4、理else 超时,错误处理;Linux中时间表示(jiffies)回绕的处理:time_afterTime_beforeTime_after_eqTime_before_eq分析怎样避免的回绕影响(借用了LONG的符号)Linux中时间表示(用户空间和HZ)内核改变HZ的值会影响一些基于原来值的应用内核需要导出合适的jeffies值若新旧HZ数差整数倍则比较简单#define jiffies_to_clock(x)(x)/(HZ/USER_HZ)否则,需要向时间上做一下转换,误差会小一些。思考一下,为什么?硬件时钟和定时器体系结构提供了两种设备计时系统定时器实时时钟(RTC),不开机时靠电池供

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

6、s_64+;update_process_times(user_mode(regs);update_times();Linux下的时钟中断和相关时间应用Void update_process_times(int user_tick)Struct task_struct*p=current;Int cpu=smp_processor_id()Int system=user_tick 1;(见书上P123)Linux下的时钟中断和相关时间应用统计的不精确性根据上面的处理可以看出,一个节拍的时间要么给一个用户进程,要么给系统,这样做很不精确,因为在一个节拍中进程可能多次进入。这也是要采取更高频率的原

7、因。Linux下的时钟中断和相关时间应用更新墙上时钟Void update_times(void)unsigned long ticks;ticks=jiffies wall_jiffies;if(ticks)wall_jiffies+=ticks;update_wall_time(ticks);last_time_offset=0;calc_load(ticks);Linux下的时钟中断和相关时间应用实际时间定义在中,形式如下:Struct timespecTime_t tv_sec;Long tv_nsec;Linux下的时钟中断和相关时间应用实际时间的更新和读取都需要锁。Write_se

8、qlock(&xtime_lock);/*更新xtime*/Write_sequnlock(&xtime_lock);Read_seqbegin(),read_seqretry();(P125)Linux下的时钟中断和相关时间应用从用户空间获取时间的调用为Gettimeofday()内核中对应的系统调用为:sys_gettimeofday()P125Linux下的时钟中断和相关时间应用动态定时器一些工作要在后面一个相当的时间执行,这就需要定时器的控制,定时器有时也称内核定时器使用定时器定时器由timer_list表示,定义在中。具体结构见:P126 定义:struct timer_list m

9、y_timer;初始化:init_timer(&my_timer);填充结构中需要的值:=myfunction;激活定时器:add_timer(&my_timer);Linux下的时钟中断和相关时间应用其他几个函数Mod_timer()Del_timer()Linux下的时钟中断和相关时间应用定时器竞争条件定时器的实现在时钟中断处理程序的下半部执行:update_process_timers()函数,该函数调用run_local_timers()raise_softirq(TIMER_SOFTIRQ);Linux下的时钟中断和相关时间应用延迟执行忙等待短延迟Linux内存页内核中内存的分配要复

10、杂的多内核以物理页为单位分配内存物理页的大小取决于体系结构,一般4kB8kBLinux内存页数据结构:中定义:Struct page unsigned long flags;Atomic_t count;Struct list_head list;Struct address_space*mapping;Unsigned long index;Struct list_head lru;Union struct pte_chain*chain;pte_addr_t direct;pteUnsigned long private;Void*virtual;Linux内存区由于硬件的限制,内核并不能

11、对所有的页一样看待。这样内核需要对页进行分类,分不同的区域。一些硬件只能允许某些特定的内存地址来执行DMA.一些体系结构其内存的物理地址范围比虚拟寻址范围大得多。这样有一些内存就不能总是映射到内核空间上。Linux对应有三个区ZONE_DMAZONE_NORMALZONE_HIGHMEM(P135)内存管理提供的服务获得页Alloc_pages()Page_address(struct page*page)_get_free_pages()alloc_page()_get_free_page()内存管理提供的服务获得填充为0的页Get_zeroed_page()释放页_free_pagesFree_pagesFree_page内存管理提供的服务KmallocKfreeVmallocvfree内存管理提供的服务Slab层一种缓存机制(P143-P148)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁