0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

strongerHuang 来源:嵌入式专栏 2023-05-29 10:47 次阅读

操作系统一般分为抢占式内核和非抢占式内核,通常RTOS都是抢占式内核。你知道抢占式内核和非抢占式内核的区别吗?

非抢占式内核

非抢占式内核要求每个任务(线程)都做一些事情来明确放弃对 CPU 的控制,为了保持多任务并发的错觉,必须要有这一步操作。

非抢占式调度也称为协作多任务,任务相互协作以共享 CPU,异步事件仍然由 ISR 处理。ISR 可以使更高优先级的任务准备好运行,但 ISR 总是返回到被中断的任务。

只有当当前任务放弃 CPU 时,新的更高优先级任务才会获得对 CPU 的控制。

非抢占式内核的优点之一是中断延迟更低,在任务级别,非抢占内核也可以使用不可重入函数。每个任务都可以使用不可重入函数,而不必担心被另一个任务破坏。这是因为每个任务都可以在放弃 CPU 之前运行到完成。但是,不应允许不可重入函数放弃对 CPU 的控制。

使用非抢占式内核的任务级响应可能比前台/后台系统低得多,因为任务级响应现在由最长任务的时间给出。

非抢占式内核的另一个优点是较少需要通过使用信号量来保护共享数据。每个任务都拥有 CPU,你不必担心任务会被抢占。当然,这不是绝对的,在某些情况下,仍应使用信号量。共享 I/O 设备可能仍需要使用互斥信号量;例如,任务可能仍需要对打印机的独占访问。

wKgaomR0E86Ac-pdAATy3svZYXE638.png

(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 完成时,被中断的任务被挂起并恢复新的更高优先级任务。

wKgZomR0E86APuE6AAFq7z7Ua_4626.png

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

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

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

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

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

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

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

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1309

    浏览量

    39846
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206549
  • 操作系统
    +关注

    关注

    37

    文章

    6284

    浏览量

    121876
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41023
  • ISR
    ISR
    +关注

    关注

    0

    文章

    38

    浏览量

    14296

原文标题:操作系统中抢占式和非抢占式内核的区别

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一种基于单片机的抢占实时嵌入操作系统设计

    一种基于单片机的抢占实时嵌入操作系统设计
    发表于 04-22 12:59

    嵌入领域linux作为实时操作系统的缺点

    `linux以自由和开发源码赢得了许多工程师的青睐,现在许多嵌入产品使用的是linux系统,然而linux内核作为实时操作系统有非常,明显的几个缺点1.任务调度的缺点Linux最初的
    发表于 01-06 13:31

    关于实时嵌入操作系统的一些概念讨论(一)

    与带实时操作系统的程序的实时性没有区别, 当然要去掉DELAY函数; 6\LINUX与UCOS都是非常优秀的操作系统, 他们只是适用的场合不同, 因此, 国产的嵌入
    发表于 02-07 00:05

    【安富莱】【RTX操作系统教程】第10章 任务调度-抢占,时间片和合作

    第10章 任务调度-抢占,时间片和合作 本章教程为大家将介绍RTX操作系统支持的任务调度方式,抢占
    发表于 01-25 13:57

    转:第14章 任务调度—抢占,时间片和合作

    本章教程为大家将介绍FreeRTOS操作系统支持的任务调度方式:抢占,时间片和合作,这部分算是FreeRTOS操作系统的核心了。对于初学
    发表于 08-30 09:55

    第10章 任务调度-抢占,时间片和合作

    转rtx操作系统本章教程为大家将介绍RTX操作系统支持的任务调度方式,抢占,时间片和合作,这部分算是RTX
    发表于 10-04 18:11

    如何选择一个合适的嵌入操作系统

    抢占的互斥量来替代自旋锁;除了使用preempt_disable()保护的区域以外,内核的所有地方都开启了自愿
    发表于 06-03 13:19

    实时操作系统概念

    对很多嵌入系统来说,一个设计良好的实时操作系统可以让开发工程师把握系统执行任何任务或响应任何关键事件的时间,满足系统实时性要求。为了理解R
    发表于 07-19 06:18

    Linux内核抢占和用户抢占的概念和区别

    本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可
    发表于 08-05 08:18

    详解Linux内核抢占实现机制

    本文详解了Linux内核抢占实现机制。首先介绍了内核抢占和用户抢占的概念和区别,接着分析了不可
    发表于 08-06 06:16

    如何选择一个合适的嵌入操作系统

    抢占的互斥量来替代自旋锁;除了使用preempt_disable()保护的区域以外,内核的所有地方都开启了自愿
    发表于 07-22 09:59

    嵌入操作系统抢占调度策略是什么

    嵌入操作系统抢占调度策略是什么
    发表于 04-28 06:23

    嵌入Linux操作系统调度算法的相关资料分享

    嵌入Linux操作系统调度算法研究嵌入操作系统在互联网时代的今天得到广泛应用。Linux系统本身并不是严格的实时
    发表于 11-05 08:15

    介绍一个模仿RTOS内核抢占任务调度器

    这是一个模仿RTOS内核抢占任务调度器,最大32级优先级(可自定义级数)、每级最大256个任务;集成软定时器功能(需要一个硬定时器支持),分为定时单位10us和1ms两种,每种最
    发表于 12-06 07:57

    请问一下RTThread是属于抢占还是合作

    一般的PC都是抢占的,是中断实现的,rtthread有中断;合作的不会切换任务直到显地yield,个人在使用rtthread时,遇到过没加rt_thread_mdelay就卡住的
    发表于 08-26 11:38