linux里的抢占-preempt

linux里的抢占-preempt,第1张

1. 什么是抢占

抢占就是进城切换, 以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)。

按照可抢占优先级调度算法进行。

就绪态的实时任务立即抢占非实时任务。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7356332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存