良许Linux教程网 干货合集 操作系统中抢占式和非抢占式内核的区别

操作系统中抢占式和非抢占式内核的区别

抢占式内核

抢占式内核允许操作系统在任何时间中断正在执行的任务并切换到另一个具有更高优先级的任务。这种方式可以确保更高优先级的任务能够及时获得 CPU 的控制,提高系统的响应性能。

在抢占式内核中,任务无需主动放弃 CPU 的控制权,操作系统可以根据任务的优先级和调度策略来确定何时进行任务切换。当存在更高优先级的任务需要执行时,操作系统会立即中断当前任务并将 CPU 分配给新的任务。

抢占式内核的优点之一是能够实现更细粒度的任务调度,以确保高优先级任务及时执行。它可以在任何时候中断任务,使得系统可以更灵活地响应外部事件和异步请求。抢占式内核也更适合处理实时应用,因为它可以保证任务得到及时处理,而不会因其他低优先级任务的长时间执行而导致延迟。

然而,抢占式内核可能存在一些问题。由于任务可以随时被中断,可能会导致上下文切换的开销增加,影响系统的性能。此外,抢占式内核对共享资源的访问需要更加仔细的处理,以避免竞争条件和数据不一致性的问题。因此,在设计抢占式内核时,需要考虑如何进行良好的同步和互斥机制,以确保数据的一致性和正确性。

总的来说,抢占式内核可以提供更高的系统灵活性和响应性,适用于需要实时性和高并发性能的场景。但在一些资源受限的环境下,可能需要权衡上下文切换的开销和系统性能的平衡。

(1) 任务正在执行但被中断。

(2) 如果中断被使能,CPU 向量(跳转)到 ISR。

(3) ISR 处理事件并使更高优先级的任务准备好运行。

(4) ISR完成后,执行返回指令,CPU返回被中断的任务。

(5) 任务代码在中断指令之后的指令处恢复。

(6) 当任务代码完成时,它调用内核提供的服务,将 CPU 交给另一个任务。

(7) 内核看到更高优先级的任务已经准备好运行,因此,内核执行上下文切换,以便它可以运行(即执行)更高优先级的任务来处理由 ISR 发出信号的事件。

非抢占式内核最重要的缺点是响应性:已准备好运行的较高优先级任务可能需要等待很长时间才能运行,因为当前任务应该及时放弃CPU使用权。

与前台/后台系统中的后台执行一样,非抢占式内核中的任务级响应时间是不确定的;你永远不知道最高优先级的任务何时才能获得 CPU 的控制权。这个操作由你的应用程序来决定怎么时候放弃对 CPU 的控制。

总而言之,非抢占式内核允许每个任务运行,直到它自愿放弃对 CPU 的控制。中断抢占任务,ISR 完成后,ISR 返回到被中断的任务。任务级响应比前台/后台系统要好得多,但仍然是不确定的,因此,很少有商业内核是非抢占式的。

抢占式内核

μC/OS-II、RTT等大多数实时内核都是抢占式的,准备运行的最高优先级任务始终被赋予 CPU 控制权。

当一个任务使更高优先级的任务准备好运行时,当前任务被抢占(挂起)并且更高优先级的任务立即获得 CPU 的控制权。

如果 ISR 使更高优先级的任务准备就绪,当 ISR 完成时,被中断的任务被挂起并恢复新的更高优先级任务。

image-20231029214150015
image-20231029214150015

(1) 任务正在执行但被中断。

(2) 如果中断被使能,CPU 向量(跳转)到 ISR。

(3) ISR 处理事件并使更高优先级的任务准备好运行。ISR 完成后,调用内核提供的服务(即调用内核提供的函数)。

(4) & (5) 该函数知道一个更重要的任务已经准备好运行,因此内核将执行上下文切换并执行更重要的代码而不是返回到被中断的任务任务。当更重要的任务完成时,内核提供的另一个函数被调用,让任务进入休眠状态,等待事件(即 ISR)发生。

(6) & (7) 然后内核“看到”需要执行一个较低优先级的任务,并完成另一个上下文切换以恢复被中断任务的执行。

使用抢占式内核,最高优先级任务的执行是确定性的;你可以确定它何时可以控制 CPU。因此,通过使用抢占式内核可以最大限度地减少任务级响应时间。

使用抢占式内核的应用程序代码不应使用不可重入函数,除非通过使用互斥信号量确保对这些函数的独占访问,因为低优先级和高优先级任务都可以使用公共函数。如果较高优先级的任务抢占正在使用该功能的较低优先级的任务,则可能会发生数据损坏。

总而言之,抢占式内核始终执行准备运行的最高优先级任务。中断抢占任务,完成 ISR 后,内核将继续执行准备运行的最高优先级任务(而不是被中断的任务)。任务级别的响应是最佳的和确定性的,当系统响应性很重要时,建议使用抢占式内核。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部