精华内容
下载资源
问答
  • 抢占式系统优点

    2014-02-27 15:42:00
    大多数商用内核都是抢占式的,至于抢占式和非抢占式的最大区别就在于任务的响应性能,非抢占的响应性能相较而言更差,且响应时间无法确定。 这种模式的系统更倾向于基础的前后台模式。 非抢占的使用是较少的,但从...

    大多数商用内核都是抢占式的,至于抢占式和非抢占式的最大区别就在于任务的响应性能,非抢占的响应性能相较而言更差,且响应时间无法确定。

    这种模式的系统更倾向于基础的前后台模式。

    非抢占的使用是较少的,但从问题的全面性来说,认识非抢占的优势也是很不错的。

    1.中断延迟低,退出中断时不用进行上下文切换,时间自然就少了。

    2.任务级上,可使用不可重入函数。

    3.不需要考虑共享数据的保护。其他任务不会抢占,本任务拥有的资源会自己独有下去。

    转载于:https://www.cnblogs.com/ideawu1001/p/3571677.html

    展开全文
  • 原来实时系统是和抢占式系统是对应的。哈哈,今天才明白!   抢占式多任务操作系统:  在 Windows 3.1 中,多任务方式是“协作式多任务”,意思是说一个任务得到了 CPU 时间,除非它自己放弃使用 CPU ,...

    原来实时系统是和抢占式系统是对应的。哈哈,今天才明白!

     

    抢占式多任务操作系统:

            在 Windows 3.1 中,多任务方式是“协作式多任务”,意思是说一个任务得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,放弃使用,其它的任务也如此,才能保证系统的正常运行;而在 Windows 95 中使用的就是“抢占式多任务”了,它的总控制权在 Windows 手中,Windows 会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,Windows 会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务……。这种方式上的不同造成 95 和 3.1 性能上的不同:3.1 中如果有一个任务死锁,则系统也同样死锁;95 中有一个任务死锁,系统仍能正常运行。

     

    实时系统

            指电脑使用者发出一要求时,在一个限定的时间内,电脑系统回复使用者的要求。一般的反应时间视行业而定,约在数秒之内,时间越短则使用者的满意度越高,但也需要较好的电脑 系统。大部分线上系统以响应时间的长短来评估系统的效率,越短的反应时间表示系统效率越高。

      或指计算机对于外来信息能够及时进行处理,并在控制对象允许时间范围内作出快速反应,实时系统对响应时间的要求比分时系统更高。实时系统按其使用方式不同可分为:实时控制系统、实时信息处理系统。

     

    分时系统

            分时操作系统 (time-sharing system)——70年代中期至今

      “分时”的含义:分时是指多个用户分享使用同一台计算机。多个程序分时共享硬件和软件资源。

      分时(Time Sharing)操作系统的工作方式是:一台主机连接了若干个终端,每个终端有一个用户在使用。用户交互式地向系统提出命令请求,系统接受每个用户的命令,采用时间片轮转方式处理服务请求,并通过交互方式在终端上向用户显示结果。用户根据上步结果发出下道命。分时操作系统将CPU的时间划分成若干个片段,称为时间片。操作系统以时间片为单位,轮流为每个终端用户服务。每个用户轮流使用一个时间片而使每个用户并不感到有别的用户存在。分时系统具有多路性、交互性、“独占”性和及时性的特征。多路性指,伺时有多个用户使用一台计算机,宏观上看是多个人同时使用一个CPU,微观上是多个人在不同时刻轮流使用CPU。交互性是指,用户根据系统响应结果进一步提出新请求(用户直接干预每一步)。“独占”性是指,用户感觉不到计算机为其他人服务,就像整个系统为他所独占。及时性指,系统对用户提出的请求及时响应。

     

    抢占式多任务操作系统(分时系统):

            在 Windows 3.1 中,多任务方式是“协作式多任务”,意思是说一个任务得到了 CPU 时间,除非它自己放弃使用 CPU ,否则将完全霸占 CPU ,所以任务之间需要协作——使用一段时间的 CPU ,放弃使用,其它的任务也如此,才能保证系统的正常运行;而在 Windows 95 中使用的就是“抢占式多任务”了,它的总控制权在 Windows 手中,Windows 会轮流询问每一个任务是否需要使用 CPU ,需要使用的话就让它用,不过在一定时间后,Windows 会剥夺当前任务的 CPU 使用权,把它排在询问队列的最后,再去询问下一个任务……。这种方式上的不同造成 95 和 3.1 性能上的不同:3.1 中如果有一个任务死锁,则系统也同样死锁;95 中有一个任务死锁,系统仍能正常运行。

     

    转载于:https://my.oschina.net/guqiwei/blog/351140

    展开全文
  • 抢占式实时操作系统Here you will learn about difference between preemptive and non-preemptive scheduling in os. 在这里,您将了解os中抢占式和非抢占式调度之间的区别。 Preemptive Scheduling 抢占式...

    非抢占式实时操作系统

    Here you will learn about difference between preemptive and non-preemptive scheduling in os.

    在这里,您将了解os中抢占式和非抢占式调度之间的区别。

    Preemptive Scheduling

    抢占式调度

    Preemptive Scheduling means once a process started its execution, the currently running process can be paused for a short period of time to handle some other process of higher priority, it means we can preempt the control of CPU from one process to another if required.

    抢占式调度是指一旦某个进程开始执行,就可以将当前正在运行的进程暂停一小段时间,以处理其他更高优先级的进程,这意味着如果需要,我们可以将对一个进程的CPU控制权抢占到另一个进程。

    A computer system implementing this supports multi-tasking as it gives the user impression that the user can work on multiple processes.

    实现此目的的计算机系统支持多任务,因为它给用户留下了用户可以在多个进程上工作的印象。

    It is practical because if some process of higher priority is encountered then the current process can be paused to handle that process.

    这是实用的,因为如果遇到某些优先级更高的进程,则可以暂停当前进程以处理该进程。

    Examples:- SRTF, Priority, Round Robin, etc.

    示例: -SRTF,优先级,循环查询等。

    Non-Preemptive Scheduling

    非抢占式调度

    Non-Preemptive Scheduling means once a process starts its execution or the CPU is processing a specific process it cannot be halted or in other words we cannot preempt (take control) the CPU to some other process.

    非抢占式调度是指一旦某个进程开始执行或CPU正在处理特定进程,就无法停止调度,换句话说,我们无法将CPU抢占(控制)其他进程。

    A computer system implementing this cannot support the execution of process in a multi task fashion. It executes all the processes in a sequential manner.

    实现此目的的计算机系统不能支持以多任务方式执行过程。 它以顺序方式执行所有过程。

    It is not practical as all processes are not of same priority and are not always known to the system in advance.

    这是不切实际的,因为所有过程都不具有相同的优先级,并且系统并不总是事先知道的。

    Examples:- FCFS, SJF, Priority, etc.

    例如: - FCFSSJF优先级等。

    Difference between Preemptive and Non-Preemptive Scheduling in OS

    Image Source

    图片来源

    操作系统中抢占式和非抢占式的区别 (Difference between Preemptive and Non-Preemptive Scheduling in OS)

    Preemptive Scheduling Non-Preemptive Scheduling
    Processor can be preempted to execute a different process in the middle of execution of any current process. Once Processor starts to execute a process it must finish it before executing the other. It cannot be paused in middle.
    CPU utilization is more compared to Non-Preemptive Scheduling. CPU utilization is less compared to Preemptive Scheduling.
    Waiting time and Response time is less. Waiting time and Response time is more.
    The preemptive scheduling is prioritized. The highest priority process should always be the process that is currently utilized. When a process enters the state of running, the state of that process is not deleted from the scheduler until it finishes its service time.
    If a high priority process frequently arrives in the ready queue, low priority process may starve. If a process with long burst time is running CPU, then another process with less CPU burst time may starve.
    Preemptive scheduling is flexible. Non-preemptive scheduling is rigid.
    Ex:- SRTF, Priority, Round Robin, etc. Ex:- FCFS, SJF, Priority, etc.
    抢占式调度 非抢占式调度
    在任何当前进程的执行过程中,处理器都可以抢先执行不同的进程。 一旦处理器开始执行一个进程,它必须先完成它,然后再执行另一个进程。 它不能在中间暂停。
    与非抢先式调度相比,CPU利用率更高。 与抢先式调度相比,CPU利用率更低。
    等待时间和响应时间更少。 等待时间和响应时间更长。
    优先调度是优先的。 最高优先级的进程应始终是当前使用的进程。 当某个进程进入运行状态时,直到完成服务时间,该进程的状态才会从调度程序中删除。
    如果高优先级进程频繁到达就绪队列,则低优先级进程可能会饿死。 如果突发时间较长的进程正在运行CPU,则另一个CPU突发时间较短的进程可能会饿死。
    抢占式调度非常灵活。 非抢占式调度是严格的。
    例如:-SRTF,优先级,循环查询等。 例如:-FCFS,SJF,优先级等

    This article is submitted by Rahul Maheshwari. You can connect with him on facebook.

    本文由Rahul Maheshwari提交 您可以在Facebook上与他建立联系。

    Comment below if you have any queries related to above tutorial for difference between preemptive and non-preemptive scheduling in os.

    如果您对os中的抢占式和非抢占式调度之间的区别有任何疑问,请在下面评论。

    翻译自: https://www.thecrazyprogrammer.com/2017/03/difference-preemptive-non-preemptive-scheduling-os.html

    非抢占式实时操作系统

    展开全文
  • 抢占式交通信号控制系统,郑耀明,,本文通过研究交通信号控制系统特点与计算机操作系统作业调度算法,提出了一种新的控制机制--抢占式交通信号控制系统。目的是提高�
  • 操作系统对于初学者来说是一个很神秘的东西,里面很多原理摸不清楚,导致还没入门就放弃了。本文就来从底层开始,详细讲述抢占式操作系统(大多数RTOS)的抢占原理。包含:线程基础原理线程之间抢...

    操作系统对于初学者来说是一个很神秘的东西,里面很多原理摸不清楚,导致还没入门就放弃了。

    本文就来从底层开始,详细讲述抢占式操作系统(大多数RTOS)的抢占原理。

    包含:

    • 线程基础原理

    • 线程之间抢占

    • 中断抢占线程

    • 中断抢占中断

    strongerHuang

    1

    运行多个线程

    1.单核“单线程

    严格来说,单核处理器一次只能执行一条指令,也就是说只能“单线程(当然,多核处理器就不一样)

    为了在单核处理器上运行多个线程,我们实际上需要定期在线程之间进行快速切换,以便用户感觉多个线程在并行运行。

    比如处理器执行两个线程,处理器实际在两个线程之间来回切换,如下图:

    2.处理器在线程之间切换,它是如何做到的?

    我们说的单核处理器是“单线程的,它有一组寄存器,我们就叫这组寄存器属于一个“线程

    例如,计算两个数字的总和时:

    //假设我们有两个整数:a和b
    int c = a + b ;
    

    实际发生的情况如下所示(当然,它取决于的MCU类型,但总体思路是相同):

    # MIPS反汇编:
    
    
    LW V0, -32744(GP)   # "a" 的值从RAM加载到寄存器V0
    LW V1, -32740(GP)   # 值"b" 从RAM加载到寄存器V1
    ADDU V0, V1, V0     # a、b值相加,结果保存到寄存器V0中
    SW V0, -32496(GP)   # 寄存器V0的值存储在RAM中(变量c所在的位置)
    

    你会发现上面执行了4个动作,但是抢占式操作系统可以在任何时候抢占另一个线程,包括在这4个动作之间。

    假如在这过程中有其他线程抢占了,其他线程同样抢占了当前线程V0、 V1,如果不对V0、 V1进行保存,那么下次回来执行当前线程,结果就会出错。

    所以,针对当前这种问题,我们就需要在切换线程之前,对V0、 V1的数值进行保存,当下次切换到当前线程,再恢复V0、 V1的数值,大致流程如下:

    大概意思就是:当我们需要从一个线程切换到另一个线程时,内核获得控制权,执行必要的内务处理(至少要保存和恢复寄存器值),然后将控制权转移到下一个线程以运行。

    strongerHuang

    2

    线程的堆栈

    上面说的抢占位置,到底在哪里,每个线程保存在哪个寄存器值中?这就是线程的堆栈的内容。

    在有MMU的操作系统中,(用户的)线程堆栈可以按需动态增长:线程需要的堆栈空间越多,线程堆栈就越多(如果内核允许)

    但是,我们一般的MCU却没有MMU这个“高端”的东西,所有RAM都静态映射到地址空间。因此,每个线程都会有用于堆栈的RAM空间,如果线程使用的RAM超过堆栈的数量,则会导致内存溢出或细微的错误。(实际上,每个线程的堆栈空间只是一连续数组空间)。

    因此,当我们决定为每个线程分配多少堆栈时,我们只是估计可能需要多少堆栈,但是具体多少可能不是很清楚。

    比如,如果这是一个具有多层嵌套调用的GUI线程,则可能需要数个千字节,但如果它是一个流水灯的小线程,则可能几十字节就足够了。

    假设我们有三个线程,它们的堆栈消耗如下:

    如上面所述,每个线程的寄存器值都保存在线程的堆栈中。线程的寄存器值集称为线程的“上下文”。如下图所示(线程A为在正在执行的“活动线程”)

    请注意,在正在执行的线程A的上下文没有保存在堆栈中,堆栈指针指向线程A用户数据的顶部,并且当前处理器的寄存器专用于线程A。

    当内核决定将控制权切换到线程B时,它将执行以下操作:

    • 将所有寄存器值保存到堆栈中(保存到线程A堆栈的顶部);

    • 将堆栈指针切换到线程B的堆栈顶部;

    • 从堆栈(从线程B的堆栈顶部)恢复所有寄存器值;

    此时,你会看到:

    strongerHuang

    3

    中断(ISR)抢占

    上面在执行过程中,或进行上下文切换时,还可能会涉及到一个非常重要的内容:中断

    MCU通常具有外设:TIM、UART、 SPI、 CAN等,它们随时都能发生重要事件以触发中断。

    中断条件是当当前正在执行的线程暂停时,处理器在一段时间内执行其他操作(Handles Interrupt),然后返回。中断可能随时触发,我们应该做好处理的准备。

    中断处理程序称为ISR(中断服务程序):

    中断可能具有不同的优先级,例如,如果触发了一些低优先级的中断,则当前正在执行的线程将暂停,并且ISR会获得控制权。然后,如果触发了某个高优先级中断,则当前正在执行的ISR将再次暂停,并为该高优先级中断运行一个新的ISR。

    这样一来,完成后,控制权将返回到第一个ISR,并且在完成时,也会恢复被中断的线程。

    重要的关键代码:

    在线程活跃过程中,如果有重要的事情“关键的代码”,在这过程中如果中断发生,很容易导致意想不到的结果。

    这部分关键的代码,我们需要要保护起来,通常我们的做法就是:在之前“关键代码”之前禁用全局中断,执行完之后,开始全局中断。

    有点需要注意:

    关闭全局中断,此时就不会相应中断,所以,“关键代码”不能太长。

    strongerHuang

    3

    中断堆栈

    在上面说到一点,高优先级中断抢占低优先中断,就会出现一个问题:低优先级的代码需要和线程一样,用于保存数据的堆栈。

    一般有两种方法:

    • 使用被中断的线程堆栈;

    • 为中断使用单独的堆栈空间;

    1.使用被中断的线程堆栈

    如果使用被中断的线程堆栈,就类似如下图:

    这种情况存在你一个严重的问题,你知道是什么吗?

    频繁中断,或者中断较多,线程自身的堆栈空间就会很快被使用完。

    每个线程的堆栈都应该包含以下内容:

    • 线程自己的数据;

    • 线程的上下文;

    • 用于执行最坏情况的ISR的数据。

    因此,我们就需要换一种方法,为为所有ISR中断开辟单独的堆栈空间。

    2.为中断使用单独的堆栈空间

    为中断使用单独的堆栈空间大致如上图所示。

    好了,本文讲述了上面几种关于抢占,以及相关的内容,你学会了几点,又有几点没懂,欢迎留言讨论。

    ------------ END ------------

    展开全文
  • 操作系统【处理机调度算法作业(调度算法下的调度时间图:FCFS、抢占式\非抢占式SPF、抢占式\非抢占式HPF、HRRN和RR)】 简述死锁的定义、死锁产生的原因、以及处理死锁的方法。
  • 操作系统抢占式优先级调度In the priority scheduling, the processes are scheduled on the basis of their priority, and not on the basis of their burst time. If the preemptive mode of this scheduling is ...
  • 操作系统对于初学者来说是一个很神秘的东西,里面很多原理摸不清楚,导致还没入门就放弃了。本文就来从底层开始,详细讲述抢占式操作系统(大多数RTOS)的抢占原理。包含:线程基础原理线程之间抢...
  • 抢占式和非抢占式

    千次阅读 2019-08-29 14:42:45
    抢占式内核与半抢占式内核的不同 Linux2.4只实现了“有条件抢占式”的调度。它的缺点在于:当进程在内核态时,调度的时机有局限。就是只能在xxx的前夕。例如:当外部来一中断,中断程序过程完后,需要一个用户进程...
  • AtmegaMultitasking内核 arduino的多任务抢占式操作系统
  • 绝大多数嵌入式操作系统采用抢占式的调度方式。本文主要讲述采用抢占式方式进行任务调度的嵌入式操作系统的调度策略和原理。
  • 抢占式多任务系统

    2015-01-23 13:58:18
    在以前的操作系统中,如Windows 3.1,多任务方式是“协作式多任务”,意思是说一个任务得到了 ...而在现行使用的操作系统中,如Window 95及之后的Windows版本,使用的就是“抢占式多任务”了,它的总控制权在操作系统
  • c语言版本,使用数据结构简单实现抢占式动态优先级调度算法
  • 描述操作系统抢占式和非抢占式算法的可视化简单操作界面,主要利用java-swing构建窗口,利用数组完成算法,采用Graphics2D画图完成。
  • 嵌入式系统 嵌入式操作系统 事实性 抢占式
  • 操作系统抢占式x86_64 ISA内核
  • 抢占式和非抢占式内核

    千次阅读 2017-12-27 10:07:30
    抢占式内核非抢占式内核:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。进程一旦处于核心态(例如用户进程执行系统调用),则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或...
  • c语言版本,使用数据结构简单实现抢占式短进程优先调度算法
  • 抢占式调度 抢占式调度 非抢占式调度 当前进程主动放弃处理机控制权,可 能的情况有: 进程运行完毕退出; 运行受阻 运行出错,非正常终止 遇到不可挽回的故障 非抢占式调度运行实例 抢占式调度 也称作剥夺式...
  • UNIX采用抢占式内核,Linux采用非抢占式内核 内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。 ...
  • 摘要:绝大多数嵌入式操作系统采用抢占式的调度方式。本文主要讲述采用抢占式方式进行任务调度的嵌入式操作系统的调度策略和原理。 关键词:抢占式 多任务 中断引 言 通过逐行阅读顺序程序的源代码,不难说出程序会...
  • 抢占式内核和非抢占式内核的区别

    千次阅读 2020-01-02 17:55:59
    内核抢占(可抢占式内核):即当进程位于内核空间时,有一个更高优先级的任务出现时,如果当前内核允许抢占,则可以将当前任务挂起,执行优先级更高的进程。 非抢占式内核:高优先级的进程不能中止正在内核中运行...
  • 添加对中断与定时器的封装,使得在EDK系统中添加硬件支持即可,简化了底层驱动设置。 将任务的创建与调度形式由静态变为动态,增加任务调度灵活性 对任务添加优先级属性,使其与任务ID独立 缩减时钟日期,存储管理...
  • 抢占式调度算法的实现(非抢占式、不可剥夺式) 时间如冲冲流水,一转眼间都毕业快一年了。这一年里忙忙碌碌,却又碌碌无为。有时又总想,生亦何苦,死亦何哀。之前做了个STM8的脱机编程器,使用了EMWIN,学习到了...
  • 线程的抢占式和非抢占式调度

    千次阅读 2019-03-14 16:48:33
    在一个进程里,线程的调度有抢占式或者非抢占的模式。 在抢占模式下,操作系统负责分配CPU时间给各个进程,一旦当前的进程使用完分配给自己的CPU时间,操作系统将决定下一个占用CPU时间的是哪一个线程。因此...
  • 抢占式和非抢占式的进程调度

    千次阅读 2017-02-19 20:17:09
    抢占式(Nonpreemptive) 让进程运行直到结束或阻塞的调度方式 容易实现 适合专用系统,不适合通用系统 抢占式(Preemptive)  允许将逻辑上可继续运行的在运行过程暂停的调度方式 可防止单一进程长时间独占CPU...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,247
精华内容 898
关键字:

抢占式系统