定时器与时间管理、内存管理先前课的回顾及旁边的安排内核中的时间概念Linux中时间表关于同志近两年现实表现材料材料类招标技术评分表图表与交易pdf视力表复印pdf用图表说话pdf示硬件时钟和定时器Linux下的时钟中断和相关时间应用Linux显存页Linux显存区显存管理提供的服务显存管理缓存机制显存映射管理讲义商场陈列培训讲义免费下载搭石ppt讲义免费下载公安保密教育讲义下载病媒生物防控讲义可下载中学语文选修四讲义打包下载先前内容回顾和旁边的安排系统调用和中断(回顾上系统内容)中断处理程序的上、下半部机制LINUX下半部处理机制同步的精典问题LINUX内核同步实现降低一次课,课本内容完成后通过两个专题的方式降低对内核的认识管理讲义内核中的时间概念风波驱动与时间驱动内核中需管理相对时间和绝对时间内核时间的硬件基础(系统定时器以某种频度触发,hittingorpoping,该频度可以通过编程预定(tickrate)直接好处:更新系统运行时间更新实际时间定期均衡运行队列(SMP上)时间片定期统计管理讲义Linux中时间表示(HZ)节拍率(HZ)系统定时器频度,可以通过设置更改,系统启动时设置,不同体系结构下不同。如:在include/asm-i386/param.h中:#defineHz1000//相当于一秒中断1000次思索:时间的精确性书上P116表9-1给出通常情况下各类体系结构下的时钟中断频度理想的HZ值应当是多少?多时会形成中断频繁但提升精度(剖析:平均偏差)管理讲义Linux中时间表示(HZ)精度增强的进一步讨论一些关键系统调用的效率提升(poll(),select())进程抢
占的精度提高时间检测方面精度增强中断次数降低带来的问题综合考虑觉得目前体系结构的系统设为1000可以忍受。管理讲义Linux中时间表示(jiffies)全局变量linux内核定时器,拿来记录系统启动以来形成的节拍总量在中定义:Externunsignedlongvolatilejiffies;响应地有:Seconds*HZ=jiffies;(jiffies/HZ)=seconds;(还有一些其他的转换)有关jiffies的内部位数问题:溢出时间问题64位问题(2.6中)管理讲义Linux中时间表示(jiffies)64位与32位的结合Jiffies的盘桓unsignedlongtimeout=jiffies+HZ/2;/*执行一些任务….*/if(timeout
向时间上做一下转换,偏差会小一些。思索一下,为何?管理讲义硬件时钟和定时器体系结构提供了两种设备计时系统定时器实时时钟(RTC)linux 下载工具,不开机时靠电瓶供电工作,系统启动时,初始化xtime变量。管理讲义Linux下的时钟中断和相关时间应用时钟中断处理程序做的工作:获得xtime_lock锁,对jiffies_64和xtime进行保护(为何jiffies不用保护)应答或重新设置系统时钟周期性地使用墙壁时间更新实时时钟调用体系结构无关的时钟类库:do_timer():Jiffies_64变量加1更新资源消耗的统计值执行到期的动态定时器执行sheduler_tick()函数更新墙壁时间并存到xtime变量中估算平均负载值管理讲义Linux下的时钟中断和相关时间应用Do_timer()voiddo_timer(structpt_regs*regs){jiffies_64++;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下的
时钟中断和相关时间应用统计的不精确性依据里面的处理可以看出,一个节拍的时间要么给一个用户进程,要么给系统,这样做很不精确,由于在一个节拍中进程可能多次步入。这也是要采取更高频率的诱因。管理讲义Linux下的时钟中断和相关时间应用更新墙壁时钟Voidupdate_times(void){unsignedlongticks;ticks=jiffies–wall_jiffies;if(ticks){wall_jiffies+=ticks;update_wall_time(ticks);last_time_offset=0;calc_load(ticks);}管理讲义Linux下的时钟中断和相关时间应用实际时间定义在中,方式如下:Structtimespec{Time_ttv_sec;Longtv_nsec;}管理讲义Linux下的时钟中断和相关时间应用实际时间的更新和读取都须要锁。Write_seqlock(&xtime_lock);/*更新xtime…*/Write_sequnlock(&xtime_lock);Read_seqbegin(),read_seqretry();(P125)管理讲义Linux下的时钟中断和相关时间应用从用户空间获取时间的调用为Gettimeofday()内核中对应的系统调用为:sys_gettimeofday()P125管理讲义
Linux下的时钟中断和相关时间应用动态定时器一些工作要在前面一个相当的时间执行,这就须要定时器的控制linux内核定时器,定时器有时称作内核定时器使用定时器定时器由timer_list表示,定义在中。具体结构见:P126定义:structtimer_listmy_timer;初始化:init_timer(&my_timer);填充结构中须要的值:my_timer.expires=…my_timer.function=myfunction;激活定时器:add_timer(&my_timer);管理讲义Linux下的时钟中断和相关时间应用其他几个函数Mod_timer()Del_timer()管理讲义Linux下的时钟中断和相关时间应用定时器竞争条件定时器的实现在时钟中断处理程序的下半部执行:update_process_timers()函数android linux,该函数调用run_local_timers(){raise_softirq(TIMER_SOFTIRQ);}管理讲义Linux下的时钟中断和相关时间应用延后执行忙等待短延后管理讲义Linux显存页内核中显存的分配要复杂的多内核以数学页为单位分配显存化学页的大小取决于体系结构,通常4kB8kB管理讲义Linux显存页数据结构:中定义:Structpage{unsignedlongflags;Atomic_tcou
nt;Structlist_headlist;Structaddress_space*mapping;Unsignedlongindex;Structlist_headlru;Union{structpte_chain*chain;pte_addr_tdirect;}pteUnsignedlongprivate;Void*virtual;}管理讲义Linux显存区因为硬件的限制,内核并不能对所有的页一样看待。这样内核须要对页进行分类,分不同的区域。一些硬件只能容许个别特定的显存地址来执行DMA.一些体系结构其显存的数学地址范围比虚拟轮询范围大得多。这样有一些显存就不能总是映射到内核空间上。Linux对应有三个区ZONE_DMAZONE_NORMALZONE_HIGHMEM(P135)管理讲义显存管理提供的服务获得页Alloc_pages()Page_address(structpage*page)__get_free_pages()alloc_page()__get_free_page()管理讲义显存管理提供的服务获得填充为0的页Get_zeroed_page()释放页__free_pagesFree_pagesFree_page管理讲义显存管理提供的服务KmallocKfreeVmallocvfree管理讲义显存管理提供的服务Slab层一种缓存机制(P143-P148)管理讲义