Liste des Groupes | Revenir à ca embedded |
Don Y <blockedofcourse@foo.invalid> wrote:Sorry, I interpreted that as *WHICH* OS.On 11/23/2024 7:14 PM, Waldek Hebisch wrote:I asked: what is "the OS"? In particular where you put theDon Y <blockedofcourse@foo.invalid> wrote:>>That is confusing formulation of the problem. First, what is>
"the OS"?
Doesn't matter. The question is about how one should EXPECT an OS
to handle such things.
It matters. OS kernel should implement something simple, but enough
to support higher layers. At higher layers you may have something
more fancy.
You asked: "What OS?" The OS doesn't matter. Rather, how
the mechanism is modeled.
line between OS and applications.
Yes. But the *implementation* cares. Everything that residesYou provide an interface. In modern times that is usually>>If by "the OS" you mean operating system kernel, then you want>
it as simple as possible and move various functions to upper
layers. In particular, in general purpose OS you may have
timers which activate a task some time after scheduled time
(hopefully close to scheduled time, but there is no warranty).
Maybe you are thinking of such a timer.
I am thinking one layer above that, in terms of abstraction.
Imagine some concurrent agency "watching the clock" and
taking action on your request to make something happen at a
particular time. *YOU* may be busy with something else.
I take this and what you write later that you think about
library interface for "applications".
A library function or a *service*.
in form of a function call. "Applications" need not care
if the actual implementation is library code or in kernel
or as a separate task.
Only if you can make those guarantees. Hence the originalYou should only solve those that are commonplace -- and, onlyAs I wrote, IMO correct place for such a functionality is inside OS,
as a convenience for your clients.
>
If nothing is common (unlike windows where applications may want
to know if the host is running on batteries, just came out of
hibernation, etc), then anything additional that you do in
the kernel just adds to the kernel's complexity without any
real reward.
but outside the kernel.
The "nothing is common" part looks strange: it is pretty common
to want triggering on edges and also time windows.
But that "information" pertains to some quantity, quality, other event.Instead, it should only have to know what is ESSENTIAL for it to performIn extendible scheduler that would be just abstract bit of information
its action.
>
"Schedule this at 1:00AM but only if it did not rain, today"
>
Why should the scheduler have to know about local precipitation?
Instead, the task that thought that was a significant criteria
likely already knows about it; why not let *it* condition the
scheduler's actions?
and _application_ would tell its value to the scheduler. If there
are dependencies something have to know about them. In particular,But you (I) have to address that possibility. Or, take the Apple
if you have dependence between independently developed application
it is natural to have scheduling as a third party.
I did not write "malicious".>Consider, however, that the service may be displaced by some higher>
priority tasks executing on its hardware. So, it can't guarantee
that it ever *sees* the specific time you've specified; other
tasks may have preempted it. So, expecting to hit a specific
time is wishful thinking.
Again, this is question of design of your OS and your requirements.
If you have badly behaving third party code, then it may be hard to
give any warranty.
The code doesn't even have to be malicious. I'm sure everyone
has had their workstation grind to a halt because something is
working as designed, but the set of applications aren't working
as EXPECTED.
Rather, something like polling inThere's no practical difference between that and running
a busy loop instead of using blocking system call. Or Windows
graphic drivers which did not check that hardware is ready toI move the drivers to separate user-land tasks. Driver misbehaves
accept the data. Microsoft wrote that this was common becauseNo. You are still making progress -- just not on the
it slightly improved average throughput of the driver. But
it could stall PCI bus, effectively freezing the whole computer
for say some miliseconds (IIUC now such access fails rather
quickly, but it used to be a problem).
"Do not care", "do not care enough" or "care more about otherBut if you have need and apropriate resurces>
then there are ways to get real-time behaviour (that is hitting
specified time window). Even if you do not have real-time
motivation, I think that time windows (as opposed to discrete
events) appear frequently. For example, you want to turn on
a device during night tariff.
Yes. Or, the developer may have "noticed" (or expected)
certain behaviors that it can exploit. E.g., at this time,
the system load is low so it would be a good use of resources
(without incurring conflicts) for me to perform this resource
intensive task.
>Anyway, if you can not give reasonable warranties for time>
when your scheduler runs, then it means that you do not care.
No. It means you care MORE about other things.
things" mean essentially the same here.
That;s just an easy.extreme example. What if some otherE.g., if power fails, I start shedding computationalI wrote about "reasonable warranties". There is notion of
loads so I can power down processors.
"force majeste" and clearly power failure counts as such.
You provide mechanism, not policy. You let the USER -- byThe first toPLC-s have vendor provided I/O, so vendor knows how much time
go are those that are "unessential" or that can easily
be restarted to resume their state.
>
As I don't know how long a power outage will last
(but I *do* know how long my backup supply will support
a particular load set), I can't guarantee that "your"
task will be running anywhere when its deadline or
event times come to pass.
>
Similarly, if some high priority task manages to continually
preempt you, then you can't predict when you will next
"run" on the processor.
I/O will take. They also have "logic", which is stright-line
code so vendor knows maximal execution time. Consequently,
if PLC task is given sufficiently high priority it will run
with predicable frequency. You may consider it unneeded,
you may think that other features are more important.
But in the end, either you care enough to provide something
like this or you do not care enough. In later case there
is no much point in thinking a lot about missing deadlines.
That's an opportunity for a supplier to offer an "assistant"I should have been clearer. The "home automation system" consistedBy extention, you do not care when scheduled tasks run.>
Which may be fine for some purposes and in such case simplistic
handling which you propose may be good enough.
>
When you wrote your original post, I had someting different in
mind. Not so long ago I looked at one of home automation
system. I searched for some specific info and one of first
things that I found was a discussion about scheduling interface
in the system. A user wanted simply looking thing "if washing
machine is idle for some specified time, then turn its power off".
System allowed specifying conditions which caused some actions.
But there were limitations on what could be put as a condition,
and in effect correctly specifingt needed thing was rather
awkward.
Exactly. Baking that into the OS is wrong. It should
implement MECHANISMS (i.e., the ability to load an application
into memory and ensure it's required resources are available)
and not POLICY (the criteria that an application may deem important)
of devices (which ATM are of no interest) and user interface/scheduler
working as a normal application on standard OS. User interface
was supposed to be easy but allows users to define various
actions. The point is that in making it "easy" (and probably
simple to implement) user interface got crippled so that resonable
thing was hard to do.
Les messages affichés proviennent d'usenet.