Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.arch.embedded > #29091

Re: From cooperative to preemptive scheduler: a real example

From pozz <pozzugno@gmail.com>
Newsgroups comp.arch.embedded
Subject Re: From cooperative to preemptive scheduler: a real example
Date 2020-01-10 00:32 +0100
Organization A noiseless patient Spider
Message-ID <qv8d6f$h4o$1@dont-email.me> (permalink)
References (1 earlier) <h7iqr4F6k9uU1@mid.individual.net> <qv32lj$ko6$1@dont-email.me> <h7n4tfF3sqmU1@mid.individual.net> <qv7286$8cb$1@dont-email.me> <h7oj3sFcrvnU1@mid.individual.net>

Show all headers | View raw


Il 09/01/2020 13:03, Niklas Holsti ha scritto:
> On 2020-01-09 13:19, pozz wrote:
>> Il 08/01/2020 23:54, Niklas Holsti ha scritto:
>>> On 2020-01-08 1:02, pozz wrote:
>>>> Il 07/01/2020 08:38, Niklas Holsti ha scritto:
> 
>     [snip]
> 
>>>>> Let's assume these requirements and properties of the environment:
>>>>>
>>>>> A. The function "serial_rx" polls the one-character reception 
>>>>> buffer of the serial line once, and returns the received character, 
>>>>> if any, and EOF otherwise. It must be called at least as often as 
>>>>> characters arrive (that is, depending on baud rate) to avoid 
>>>>> overrun and loss of some characters.
>>>
>>> You asked about possible advantages of pre-emption; I made my 
>>> assumptions, above, such that the (incomplete) example you gave shows 
>>> this advantage, under these assumptions (which could be true for 
>>> other, otherwise similar example applications).
>>>
>>>> No, serial driver works in interrupt mode and already use a FIFO 
>>>> buffer, sufficiently big. serial_rx() pop a single element from the 
>>>> FIFO, if any.
>>>
>>> Ah, then your *system* is intrinsically pre-emptive (the interrupts 
>>> pre-empt the tasks), even if the *code you showed* does not show this 
>>> pre-emption.
>>
>> Ah yes, interrupts are preemptive and I use them a lot, but they are 
>> confined in their works, they are very lightweight and fast.
> 
> That's a design decision. Some systems do most of their work in 
> interrupt handlers, and use "background" processing only for some 
> non-critical housekeeping tasks.
> 

Yes, I imagine there are a pletora of possibilites. Anyway I thought 
there was two typical approaches: superloop that continuously calls 
non-blocking functions (an example of cooperative scheduler) and a full 
preemptive scheduler (most of the time a full RTOS).

Interrupts are always present, even in superloop.


>> The discussion here regards medium to high complexity tasks.
> 
> I don't recall you saying so, and your example (perhaps naturally, for 
> an example) did not have such tasks. Many interrupt handlers are more 
> complex than the tasks in your example.

Of course the example was simple. Its goal was to discuss the 
complexities (clutters) that a preemption scheduler add to the code of 
tasks (not to the code of interrupts that are almost the same).


> In a pre-emptive system there is no logical difference between 
> interrupts and tasks. The only practical difference is that interrupts 
> are "tasks" that are scheduled by the processor HW (moderated by SW 
> control of interrupt masking and disabling) while the tasks are 
> scheduled by the RTOS.
> 
> The advantages (and complications) of pre-emptive scheduling are mostly 
> the same for tasks as for interrupts.

Maybe I am wrong, but I implement ISRs with great care and attention, 
but they are very small and limited. Most of the time they are already 
implemented in drivers released by the silicon vendor. Anyway they are 
so limited that the preemption issues (synchronization) are very well 
defined and confined.

Normally the biggest part of the firmware is related to the 
application/tasks, not interrupts.

Back to comp.arch.embedded | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-07 02:08 +0100
  Re: From cooperative to preemptive scheduler: a real example Don Y <blockedofcourse@foo.invalid> - 2020-01-06 19:37 -0700
    Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-07 10:11 +0100
      Re: From cooperative to preemptive scheduler: a real example Don Y <blockedofcourse@foo.invalid> - 2020-01-07 07:51 -0700
        Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-07 23:51 +0100
          Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-09 01:39 +0200
            Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-10 00:42 +0100
              Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-15 18:39 +0200
          Re: From cooperative to preemptive scheduler: a real example Don Y <blockedofcourse@foo.invalid> - 2020-01-08 23:12 -0700
            Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-10 00:49 +0100
          Re: From cooperative to preemptive scheduler: a real example Don Y <blockedofcourse@foo.invalid> - 2020-01-08 23:12 -0700
          Re: From cooperative to preemptive scheduler: a real example Don Y <blockedofcourse@foo.invalid> - 2020-01-09 01:33 -0700
  Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-07 09:38 +0200
    Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-08 00:02 +0100
      Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-09 00:54 +0200
        Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-09 12:19 +0100
          Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-09 14:03 +0200
            Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-10 00:32 +0100
              Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-15 18:53 +0200
                Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-16 14:48 +0100
                Re: From cooperative to preemptive scheduler: a real example upsidedown@downunder.com - 2020-01-16 21:04 +0200
                Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-16 22:24 +0200
                Re: From cooperative to preemptive scheduler: a real example pozz <pozzugno@gmail.com> - 2020-01-17 02:05 +0100
                Re: From cooperative to preemptive scheduler: a real example Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-18 23:03 +0200
  Re: From cooperative to preemptive scheduler [Stack] pozz <pozzugno@gmail.com> - 2020-01-14 13:27 +0100
    Re: From cooperative to preemptive scheduler [Stack] Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2020-01-14 20:10 +0100
      Re: From cooperative to preemptive scheduler [Stack] pozz <pozzugno@gmail.com> - 2020-01-15 09:36 +0100
        Re: From cooperative to preemptive scheduler [Stack] Stef <stef33d@yahooI-N-V-A-L-I-D.com.invalid> - 2020-01-15 11:30 +0100
          Re: From cooperative to preemptive scheduler [Stack] pozz <pozzugno@gmail.com> - 2020-01-15 11:51 +0100
        Re: From cooperative to preemptive scheduler [Stack] Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2020-01-15 21:51 +0100
    Re: From cooperative to preemptive scheduler [Stack] Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-15 21:26 +0200
      Re: From cooperative to preemptive scheduler [Stack] Hans-Bernhard Bröker <HBBroeker@t-online.de> - 2020-01-15 22:12 +0100
        Re: From cooperative to preemptive scheduler [Stack] Niklas Holsti <niklas.holsti@tidorum.invalid> - 2020-01-15 23:30 +0200

csiph-web