精华内容
下载资源
问答
  • 编排 |strongerHuang微信公众号 |嵌入式专栏操作系统分为抢占式内核和非抢占式内核,通常RTOS都是抢占式内核。下面就来讲讲抢占式内核和非抢占式内核的内容。非抢占式内核非抢...

    编排 | strongerHuang

    微信公众号 | 嵌入式专栏

    操作系统分为抢占式内核和非抢占式内核,通常RTOS都是抢占式内核。

    下面就来讲讲抢占式内核和非抢占式内核的内容。

    非抢占式内核

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    免责声明:本文素材来源网络,版权归原作者所有。如涉及作品版权问题,请与我联系删除。

    —— The End ——

    推荐好文  点击蓝色字体即可跳转

     张一鸣:我的大学四年收获及工作感悟

    ☞ ARM与RISC-V的恩爱情仇

    ☞ 优雅地用宏实现环形缓冲区

    ☞ 函数指针,这6点你学会了吗?

    ☞ 简易PID算法的快速扫盲

    欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!

    长按识别二维码关注我

    你点的每个好看,我都认真当成了喜欢

    展开全文
  • 抢占式内核和非抢占式内核区别

    千次阅读 2020-01-02 17:55:59
    非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核 ...

    内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。


       非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核


       抢占式内核的意义:首先,这是将Linux应用于实时系统所必需的。实时系统对响应时间有严格的限定,当一个实时进程被实时设备的硬件中断唤醒后,它应在限定的时间内被调度执行。而Linux不能满足这一要求,因为Linux的内核是不可抢占的,不能确定系统在内核中的停留时间。事实上当内核执行长的系统调用时,实时进程要等到内核中运行的进程退出内核才能被调度,由此产生的响应延迟,在如今的硬件条件下,会长达100ms级。这对于那些要求高实时响应的系统是不能接受的。而可抢占的内核不仅对Linux的实时应用至关重要,而且能解决Linux对多媒体(video, audio)等要求低延迟的应用支持不够好的缺陷。

    展开全文
  • 抢占式和非抢占式内核

    千次阅读 2017-12-27 10:07:30
    非抢占式内核非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或...

    非抢占式内核

    非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核
    中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。非抢占式内核如下图所示。
    这里写图片描述
    非抢占式内核的优点有:
    中断响应快(与抢占式内核比较);
    允许使用不可重入函数;
    几乎不需要使用信号量保护共享数据。运行的任务占有CPU,不必担心被别的任务抢占。这不是绝对的,在打印机的使用上,仍需要满足互斥条件。

    非抢占式内核的缺点有:
    任务响应时间慢。高优先级的任务已经进入就绪态,但还不能运行,要等到当前运行着的任务释放CPU。
    非抢占式内核的任务级响应时间是不确定的,不知道什么时候最高优先级的任务才能拿到CPU的控制权,完全取决于应用程序什么时候释放CPU。


    可抢占式内核

    内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。
    如果是中断服务子程序使一个高优先级的任务进入就绪态,中断完成时,中断了的任务被挂起,优先级高的那个任务开始运行。抢占式内核如下图所示。
    这里写图片描述
    抢占式内核的优点有:
    使用抢占式内核,最高优先级的任务什么时候可以执行,可以得到CPU的使用权是可知的。使用抢占式内核使得任务级响应时间得以最优化。

    抢占式内核的缺点有:
    不能直接使用不可重入型函数。调用不可重入函数时,要满足互斥条件,这点可以使用互斥型信号量来实现。如果调用不可重入型函数时,低优先级的任务CPU的使用权被高优先级任务剥夺,不可重入型函数中的数据有可能被破坏。

    抢占式内核的意义:首先,这是将Linux应用于实时系统所必需的。实时系统对响应时间有严格的限定,当一个实时进程被实时设备的硬件中断唤醒后,它应在限定的时间内被调度执行。而Linux不能满足这一要求,因为Linux的内核是不可抢占的,不能确定系统在内核中的停留时间。事实上当内核执行长的系统调用时,实时进程要等到内核中运行的进程退出内核才能被调度,由此产生的响应延迟,在如今的硬件条件下,会长达100ms级。这对于那些要求高实时响应的系统是不能接受的。而可抢占的内核不仅对Linux的实时应用至关重要,而且能解决Linux对多媒体(video, audio)等要求低延迟的应用支持不够好的缺陷。


    参考文章

    1. Linux内核态抢占机制分析
    展开全文
  • UNIX采用抢占式内核,Linux采用非抢占式内核 内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。 ...

    UNIX采用抢占式内核,Linux采用非抢占式内核

    内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。


    非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核


    抢占式内核的意义:首先,这是将Linux应用于实时系统所必需的。实时系统对响应时间有严格的限定,当一个实时进程被实时设备的硬件中断唤醒后,它应在限定的时间内被调度执行。而Linux不能满足这一要求,因为Linux的内核是不可抢占的,不能确定系统在内核中的停留时间。事实上当内核执行长的系统调用时,实时进程要等到内核中运行的进程退出内核才能被调度,由此产生的响应延迟,在如今的硬件条件下,会长达100ms级。这对于那些要求高实时响应的系统是不能接受的。而可抢占的内核不仅对Linux的实时应用至关重要,而且能解决Linux对多媒体(video, audio)等要求低延迟的应用支持不够好的缺陷。

    展开全文
  • 抢占式内核非抢占式内核区别

    千次阅读 2013-09-11 20:45:56
    非抢占式内核: 高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核。 ...
  • 一、概括 (1)自旋锁适用于SMP系统,UP系统用spinlock是作死。 (2)保护模式下禁止内核抢占的方法:1、执行终端服务例程时2、执行软中断tasklet时3、设置...(4)在抢占式内核的spin_lock宏中,第一次关抢占,目的
  • 非抢占式内核在中断处理中,是不会切换到其他任务的,即使时间片已到 linux0.11内核属于抢占内核,如果一个进程在内核中执行,除非它主动让出,没有人会让它退出的 linux2.6内核属于抢占内核,如果进程在内核中...
  • 一、概括 (1)自旋锁适用于SMP系统,UP系统用spinlock是作死。 (2)保护模式下禁止内核抢占的方法:1、运行终端服务例程时2、运行软中断tasklet时3、设置本地CPU计数器...(4)在抢占式内核的spin_lock宏...
  •  内核即将返回用户空间的时候,如果need resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。在内核返回用户空间的时候,它知道自己是安全的。所以,内核无论是在从中断处理程序还是在系统调用后...
  • 抢占式和非抢占式

    千次阅读 2019-08-29 14:42:45
    抢占式内核与半抢占式内核的不同 Linux2.4只实现了“有条件抢占式”的调度。它的缺点在于:当进程在内核态时,调度的时机有局限。就是只能在xxx的前夕。例如:当外部来一中断,中断程序过程完后,需要一个用户进程...
  • simpleOS 是一个非抢占式内核,线程间用消息队列,事件标记通信。 simpleOS基本不要移植就可用于各种单片机上。 simpleOS目前支持8个任务,消息队列最大为15个字节。 牧笛Andy email:525908322@qq.com 2010-2-8
  • Linux2.4只实现了“有条件抢占式”的调度。它的缺点在于:当进程在内核态时,调度的时机有局限。就是只能在xxx的前夕。例如:当外部来一中断,中断程序过程完后,需要一个用户进程B对此进行进一步的处理(响应IP包...
  • 非抢占式内核概念:不管多高优先级的任务,都必须等待当前CPU任务完成或者当前CPU任务主动退出后才可以执行; 时间片:一颗CPU不可能同时做多个任务,CPU只是把工作时间分成很多小片段,把这些时间小片段简称时间片...
  • Linux抢占式内核的研究与实现.pdf
  • 摘要:介绍引入事件驱动观念的抢占式多任务微型实时内核——MicroStar的设计与实现;提出基于事件的优先级这一新概念。  关键词:事件驱动 优先级 任务管理 消息 信号 同步  市面上有很多优秀的嵌入式实时操作...
  • nuttx是可抢占式内核

    2017-06-22 14:09:49
    nuttx是可抢占式内核,也就是当某个任务处于执行时间片时,有一个高优先级别的需要执行,则切到高优先级任务执行。 抢占是通过中断来触发的,也就是某个中断发生了造成某个高优先级任务可以执行了,于是调度到高...
  • 绍引入事件驱动观念的抢占式多任务微型实时内核——MicroStar的设计与实现;提出基于事件的优先级这一新概念。
  • (1) linux上的自旋锁有三种实现:  1. 在单cpu,不可抢占内核中,自旋锁为空操作。  2. 在单cpu,可抢占内核中,自旋锁实现为“禁止内核抢占”,...  3....(2) 关于抢占式内核非抢占式内核:  在抢占式内
  • 实时Linux之二:抢占式内核 本文译者: 康华:计算机硕士,主要从事Linux操作系统内核、Linux技术标准、计算机安全、软件测试等领域的研究与开发工作,现就职于信息产业部软件与集成电路促进中心所属的MII-HP ...
  • 操作系统:抢占式x86_64 ISA内核

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,010
精华内容 8,404
关键字:

抢占式和非抢占式内核的区别