linuxnohz下的timer机制和进程调度

linuxnohz下的timer机制和进程调度

ID:39465414

大小:51.00 KB

页数:9页

时间:2019-07-04

linuxnohz下的timer机制和进程调度_第1页
linuxnohz下的timer机制和进程调度_第2页
linuxnohz下的timer机制和进程调度_第3页
linuxnohz下的timer机制和进程调度_第4页
linuxnohz下的timer机制和进程调度_第5页
资源描述:

《linuxnohz下的timer机制和进程调度》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、窗体顶端nohz下的timer机制和进程调度在2.6.21内核之前,时钟中断是周期的,即以HZ为频率,系统总是被动的接受时钟中断,然后运行中断处理程序。如果实在没有任务可以运行,那么就执行idle,这也许也算一种创意,可是时钟中断还是会周期性的打破idle,然后查询有没有需要做的事情,如果没有继续idle以往的进程在特定的固定时间片内运行,时钟的定时中断提供了时间片的监督工作,一切显得十分和谐,可是系统内核本身就是没有主权,一切都在硬件的安排下进行。随后的2.6.22以后,nohz才出现,nohz其实就是动态设置下一次的中断时间而不是使用系统无条件的默认的HZ中断。这样cfs调度器

2、,再也不用受制于底层的时钟以及时间片分配特性,linux可以动态设置时间片长短,按照自己的方式来进行调度。 nohz其实就是托了抽象出来的clocksource和clock_event_device的福,clocksource和clock_event_device,这两个结构体就是时钟以及时钟行为的抽象。 先熟悉两个数据结构structtimer_list:软件时钟,记录了软件时钟的到期时间以及到期后要执行的操作。structtvec_base:用于组织、管理软件时钟的结构。在SMP系统中,每个CPU有一个。   structtimer_list{   structlist_hea

3、dentry;            //所在的链表   unsignedlongexpires;            //到期时间,以tick为单位   void(*function)(unsignedlong);   //回调函数,到期后执行的操作   unsignedlongdata;               //回调函数的参数   structtvec_t_base_s*base;         //记录该软件时钟所在的structtvec_base变量#ifdefCONFIG_TIMER_STATS   void*start_site;   charstart_c

4、omm[16];   intstart_pid;#endif};structtvec_t_base_s{   spinlock_tlock;   structtimer_list*running_timer;   //正在处理的软件时钟   unsignedlongtimer_jiffies;      //当前正在处理的软件时钟到期时间   tvec_root_ttv1;               //保存了到期时间从timer_jiffies到timer_jiffies+2的8次方之间(包括边缘值)的所有软件时钟   tvec_ttv2;                   

5、  //保存了到期时间从timer_jiffies+2的8次方到timer_jiffies+2的14次方之间(包括边缘值)的所有软件时钟   tvec_ttv3;                     //14~20   tvec_ttv4;                     //20~26   tvec_ttv5;                     //26~32}____cacheline_aligned;typedefstructtvec_t_base_stvec_base_t;//下面开始跟踪内核中timer的代码,内核版本2.6.24/* *Thisfunc

6、tionrunstimersandthetimer-tqinbottomhalfcontext. */staticvoidrun_timer_softirq(structsoftirq_action*h)      //定时器中断下半部{   tvec_base_t*base=__get_cpu_var(tvec_bases);      //取得CPU的tvec_base_t结构数据   hrtimer_run_queues();                        //这里有机会切换到nohz或者hres   if(time_after_eq(jiffies,base

7、->timer_jiffies))   //如果当前jiffies>=定时器到期base->timer_jiffies      __run_timers(base);                        //运行定时器回调函数} /* *Calledfromtimersoftirqeveryjiffy,expirehrtimers: * *ForHRTitsthefallbackcodetorunthesoftirqinthetimer *softirqc

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

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

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