comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Tue, 12 Jul 2016 10:37:42 +0200
Date: 2016-07-12T10:37:42+02:00	[thread overview]
Message-ID: <nm2a9s$pkr$1@gioia.aioe.org> (raw)
In-Reply-To: nm0sn0$ji$1@franka.jacob-sparre.dk

On 2016-07-11 21:40, Randy Brukardt wrote:
> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message
> news:nlnl0b$93q$1@gioia.aioe.org...

>>> I don't think it is possible to create implementation-independent code for
>>> those sorts of deadlines, and as such it doesn't really matter from a
>>> language perspective how that's done (it won't be portable in any case).
>>
>> I don't see why. Any reasonable implementation would do. An implementation
>> that does not preempt lower priority tasks is not reasonable. If you
>> wanted to push the argument you would end up with disabling hardware
>> interrupts.
>
> Your definition of reasonable and mine are obviously incompatible. Hardware
> interrupts are evil; possibly a necessary evil but still evil and one wants
> to minimize them as much as possible. Obviously you disagree.

What is evil in hardware interrupts? It is a piece of hardware serving 
certain purpose. There is no moral component there from the software 
developing POV, especially because no alternative solution ever existed.

>>> I'm unconvinced that the way to ensure that "urgent activies" are done is
>>> some sort of magic (and priorities are essentially magic). I'd rather make
>>> sure that no task is hogging the system, and avoid overcommitting. That
>>> usually happens naturally, and in the unusual case where it doesn't, there's
>>> almost always someplace where adding a synchronization point (usually a
>>> "Yield" aka delay 0.0) fixes the problem.
>>
>> No it does not and it is a *very* bad design, because it distributes
>> making the decision to switch to the parts of the software which must know
>> nothing about the reason when switching is necessary. E.g. that a task
>> solving some differential equation decides whether to switch to the
>> keyboard interrupt handler. That belongs to the keyboard driver, not to
>> the equation solver.
>
> Wrong. In this scheme *all* software switches, all the time. Only the task
> supervisor is making any decisions, but it is getting the opportunity to do
> so at reasonable intervals. Neither the keyboard nor the diffy-Q solver has
> anything to do with it.

The keyboard driver is at the receiving end, as a subscriber to the 
interrupt, or keyboard event. Solver and other tasks sharing the 
processor have nothing to do with that. Whether all events must be 
routed through the supervisor is an implementation detail. In any case 
the supervisor is not a part of the software, it is an OS/RTS component, 
thus non-existent from the SW design POV.

> I agree that having to put in such choices manually isn't a good idea, but I
> wasn't suggesting that (outside of user-written I/O that doesn't use
> language-defined or implementation-defined libraries). The compiler would do
> it at appropriate points.

How is that different then? If the compiler inserts re-scheduling code 
after each few instructions, that logically is *exactly* same as 
re-scheduling at timer interrupts, except than incredibly inefficient. 
This would be nothing but poor-man's preemptive scheduling.

My point was that we need non-preemptive user-controlled (explicit, 
cooperative) scheduling of certain tasks on top of the standard schema. 
And this looks much simpler to implement than code insertions you suggested.

>> It is just like arguing for return codes over exceptions.
>
> Given that almost none of this is visible to the Ada user, I don't see the
> analogy. (And certainly, return codes are much more efficient than
> exceptions; the problem is the distribution of concerns. That's not
> happening here.)

The analogy is that instead of signaling an event (exception, scheduling 
event) at its source with the advantage of hardware acceleration, you 
poll for the event state all over the code. Doing that you lose hardware 
support and you have a huge problem with third party libraries that does 
succumb to your schema.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de

  reply	other threads:[~2016-07-12  8:37 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-17  9:44 RFC: Prototype for a user threading library in Ada Hadrien Grasland
2016-06-17 16:18 ` Niklas Holsti
2016-06-17 16:46   ` Dmitry A. Kazakov
2016-06-18  8:16     ` Hadrien Grasland
2016-06-18  8:47       ` Dmitry A. Kazakov
2016-06-18  9:17         ` Hadrien Grasland
2016-06-18 11:53           ` Dmitry A. Kazakov
2016-06-20  8:23             ` Hadrien Grasland
2016-06-20  9:22               ` Dmitry A. Kazakov
2016-06-23  1:42       ` Randy Brukardt
2016-06-23  8:39         ` Dmitry A. Kazakov
2016-06-23 22:12           ` Randy Brukardt
2016-06-24  7:34             ` Dmitry A. Kazakov
2016-06-24 23:00               ` Randy Brukardt
2016-06-25  7:11                 ` Dmitry A. Kazakov
2016-06-26  2:02                   ` rieachus
2016-06-26  6:26                     ` Dmitry A. Kazakov
2016-06-24  0:38           ` rieachus
2016-06-25  6:28             ` Dmitry A. Kazakov
2016-06-26  1:34               ` rieachus
2016-06-26  3:21               ` Randy Brukardt
2016-06-26  6:15                 ` Dmitry A. Kazakov
2016-06-28 20:44                   ` Anh Vo
2016-07-02  4:13                   ` Randy Brukardt
2016-07-02 10:25                     ` Dmitry A. Kazakov
2016-07-05 21:53                       ` Randy Brukardt
2016-07-06  9:25                         ` Dmitry A. Kazakov
2016-07-07  0:32                           ` Randy Brukardt
2016-07-07  6:08                             ` Niklas Holsti
2016-07-08  0:03                               ` Randy Brukardt
2016-07-08  7:32                                 ` Dmitry A. Kazakov
2016-07-11 19:40                                   ` Randy Brukardt
2016-07-12  8:37                                     ` Dmitry A. Kazakov [this message]
2016-07-12 21:31                                       ` Randy Brukardt
2016-07-08 20:17                                 ` Niklas Holsti
2016-06-24 21:06         ` Hadrien Grasland
2016-06-26  3:09           ` Randy Brukardt
2016-06-26  6:41             ` Dmitry A. Kazakov
2016-07-02  4:21               ` Randy Brukardt
2016-07-02 10:33                 ` Dmitry A. Kazakov
2016-07-05 21:24                   ` Randy Brukardt
2016-07-06 13:46                     ` Dmitry A. Kazakov
2016-07-07  1:00                       ` Randy Brukardt
2016-07-07 14:23                         ` Dmitry A. Kazakov
2016-07-07 23:43                           ` Randy Brukardt
2016-07-08  8:23                             ` Dmitry A. Kazakov
2016-07-11 19:44                               ` Randy Brukardt
2016-06-26  9:09             ` Hadrien Grasland
2016-07-02  4:36               ` Randy Brukardt
2016-07-02  5:30                 ` Simon Wright
2016-07-05 21:29                   ` Randy Brukardt
2016-07-02 11:13                 ` Hadrien Grasland
2016-07-02 13:18                   ` Dmitry A. Kazakov
2016-07-02 16:49                     ` Hadrien Grasland
2016-07-02 21:33                       ` Niklas Holsti
2016-07-03 20:56                         ` Hadrien Grasland
2016-07-02 17:26                   ` Niklas Holsti
2016-07-02 21:14                   ` Niklas Holsti
2016-07-03  7:42                     ` Hadrien Grasland
2016-07-03  8:39                       ` Dmitry A. Kazakov
2016-07-03 21:15                         ` Hadrien Grasland
2016-07-04  7:44                           ` Dmitry A. Kazakov
2016-07-05 21:38                   ` Randy Brukardt
2016-06-21  2:40     ` rieachus
2016-06-21  7:34       ` Dmitry A. Kazakov
2016-06-18  7:56   ` Hadrien Grasland
2016-06-18  8:33 ` Hadrien Grasland
2016-06-18 11:38 ` Hadrien Grasland
2016-06-18 13:17   ` Niklas Holsti
2016-06-18 16:27   ` Jeffrey R. Carter
2016-06-20  8:42 ` Hadrien Grasland
2016-07-10  0:45 ` rieachus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox