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

上传人:牧羊曲112 文档编号:5437927 上传时间:2023-07-07 格式:PPT 页数:29 大小:333.97KB
返回 下载 相关 举报
linux内核源代码分析-定时器与时间管理.ppt_第1页
第1页 / 共29页
linux内核源代码分析-定时器与时间管理.ppt_第2页
第2页 / 共29页
linux内核源代码分析-定时器与时间管理.ppt_第3页
第3页 / 共29页
linux内核源代码分析-定时器与时间管理.ppt_第4页
第4页 / 共29页
linux内核源代码分析-定时器与时间管理.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《linux内核源代码分析-定时器与时间管理.ppt》由会员分享,可在线阅读,更多相关《linux内核源代码分析-定时器与时间管理.ppt(29页珍藏版)》请在三一办公上搜索。

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

2、ck rate)直接用处:更新系统运行时间更新实际时间定期均衡运行队列(SMP上)时间片定期统计,Linux中时间表示(HZ),节拍率(HZ)系统定时器频率,可以通过设置修改,系统启动时设置,不同体系结构下不同。如:在include/asm-i386/param.h中:#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位问题(2.6中),Linux中时间表示(jiffies),64位与32位的结合Jiffies的回绕unsigned long timeout=jiffies+HZ/

4、2;/*执行一些任务.*/if(timeout jiffies)未超时,正常处理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)否则,需要向时间上做一下转换,误差会小一些。思考一下,为什么?,

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

6、o_timer()void do_timer(struct pt_regs*regs)jiffies_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_s

8、ec;Long tv_nsec;,Linux下的时钟中断和相关时间应用,实际时间的更新和读取都需要锁。Write_seqlock(P125),Linux下的时钟中断和相关时间应用,从用户空间获取时间的调用为Gettimeofday()内核中对应的系统调用为:sys_gettimeofday()P125,Linux下的时钟中断和相关时间应用,动态定时器一些工作要在后面一个相当的时间执行,这就需要定时器的控制,定时器有时也称内核定时器使用定时器定时器由timer_list表示,定义在中。具体结构见:P126 定义:struct timer_list my_timer;初始化:init_timer(

9、,Linux下的时钟中断和相关时间应用,其他几个函数Mod_timer()Del_timer(),Linux下的时钟中断和相关时间应用,定时器竞争条件定时器的实现在时钟中断处理程序的下半部执行:update_process_timers()函数,该函数调用run_local_timers()raise_softirq(TIMER_SOFTIRQ);,Linux下的时钟中断和相关时间应用,延迟执行忙等待短延迟,Linux内存页,内核中内存的分配要复杂的多内核以物理页为单位分配内存物理页的大小取决于体系结构,一般4kB8kB,Linux内存页,数据结构:中定义:Struct page unsign

10、ed 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内存区,由于硬件的限制,内核并不能对所有的页一样看待。这样内核需要对页进行分类,分不同的区域。一些硬件只能允许某些特定的内存地址来执行DMA.一些体系结构其内存的物理地址范围比

11、虚拟寻址范围大得多。这样有一些内存就不能总是映射到内核空间上。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),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号