抢占就是进城切换, 以thread_info->preempt_count标识。
thread_info->preempt_count一物多用:
bit0-7代表的是抢占的次数,最大抢占深度为256次,
bit8-15代表的是软中断的次数,最大也是256次,
bit16-19表示中断的次数,注释的大概意思是避免中断嵌套,但是也不能防止某些驱动中断嵌套使用中断,所以嵌套16层也是最大次数了。
bit20~23代表的NMI中断
2.抢占的函数:
spin_lock()/spin_unlock()
disable_preempt()/enable_preempt()--禁止或使能内核抢占,调用下面的inc_preempt_count()/dec_preempt_count(),加了memory barrier。
inc_preempt_count()/dec_preempt_count()
get_cpu()/put_cpu()
3.调度点
a) 进程被阻塞时
b) 调整参数时,比如通过sched_setscheduler() ,nice()等函数调整进程的调度策略,静态优先级时
c) 睡眠进程被唤醒时,比如wake_up唤醒等待队列中的进程时,如果该进程具有更高优先级则会设置当前
进程TIF_NEED_RESCHED,如果允许内核态抢占,则会调度一次
d)中断处理完时,如果中断处理过程中设置了TIF_NEED_SCHED标志,中断返回时,不论是要返回内核态还是用户态,都会发生一次抢占.当然,在这也会检查有没有软中断需要处理。
e)执行了preempt_enable()函数。
学习linux买《跟老男孩学Linux运维Web集群实战》等书籍,学习linux更建议去专业的培训机构进行培训,推荐选择【达内教育】,该机构独创TTS8.0教学系统,1v1督学,跟踪式学习,有疑问随时沟通。linux产业市场规模快速增长,人才需求数量激增。相关云计算企业加大对核心技术的投入,提高对客户的服务,无论从技术层面,运营商层面还是集成与服务提供层面,人才需求巨大。Linux工程师属于新型高端人才,其薪资也处于业内较高水平。因此既精于【Linux云计算】又精于Python开发的运维工程师,已然成为IT行业高薪且有逼格的高端从业者。不仅是互联网的高端技术人才,还成为了各个互联网公司备受争抢的人才。感兴趣的话点击此处,免费学习一下
想了解更多有关学习linux的相关信息,推荐咨询【达内教育】。作为国内IT培训的领导品牌,达内的每一名员工都以“帮助每一个学员成就梦想”为己任,也正因为达内人的执着与努力,达内已成功为社会输送了众多合格人才,为广大学子提供更多IT行业高薪机会,同时也为中国IT行业的发展做出了巨大的贡献。达内IT培训机构,试听名额限时抢购。
可以吧,linux内核的三种调度方法:
1,SCHED_OTHER 分时调度策略,
2,SCHED_FIFO实时调度策略,先到先服务
3,SCHED_RR实时调度策略,时间片轮转
实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了cpu最少的进程将会得到优先调度。
SHCED_RR和SCHED_FIFO的不同:
当采用SHCED_RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平。
SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃。
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO时必须等待该进程主动放弃后才可以运行这个优先级相同的任务。而RR可以让每个任务都执行一段时间。
相同点:
RR和FIFO都只用于实时任务。
创建时优先级大于0(1-99)。
按照可抢占优先级调度算法进行。
就绪态的实时任务立即抢占非实时任务。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)