A
Anthony Paul
Hello,
There's been something that I've always been curious about but have
not been able to find an answer on. From what I've read, the OS's
thread scheduler determines how much time a particular thread should
execute and inserts a software interrupt into the execution stack at a
particular location. My question is two-fold : 1) how does it know
where to insert the interrupt (ie. does it enter a loop at the first
instruction and sum up the actual number of execution cycles each
instruction would take? Sounds expensive! Also, isn't this expensive
if, by inserting an instruction into the middle of a set of
instructions, all address references would have to be incremented by
one in order to compensate?) and 2) how does it know that the
interrupt will be reached?
For example, if I have the following pseudo-code :
10 goto 20
20 do something here
and compile this into an exe and run it, isn't it conceivable that the
scheduler could put a soft-interrupt between the machine-code
corresponding to lines 10 and 20, such that it would never be reached?
Or even simpler still, if I just have one line of code that loops to
itself (an infinite loop) and the scheduler inserts the soft-interrupt
right after the infinite loop, doesn't that mean the thread containing
the infinite-loop will never EVER reach the soft-interrupt, thereby
never give up cpu time to any other thread, locking up the machine for
good?
Basically, I'm confused as to what good pre-emptive multi-tasking is
for since it seems to be non-premptive in the sense that it still
seems dependent on the thread to give control back to the OS. Why not
just base it completely on a timer interrupt? Seems a lot more fool-
proof to me unless I'm missing something here... I can't seem to find
any material explaining how this works in any detail, not even the
Windows Internals book I just ordered. Anyone?
Regards,
Anthony
There's been something that I've always been curious about but have
not been able to find an answer on. From what I've read, the OS's
thread scheduler determines how much time a particular thread should
execute and inserts a software interrupt into the execution stack at a
particular location. My question is two-fold : 1) how does it know
where to insert the interrupt (ie. does it enter a loop at the first
instruction and sum up the actual number of execution cycles each
instruction would take? Sounds expensive! Also, isn't this expensive
if, by inserting an instruction into the middle of a set of
instructions, all address references would have to be incremented by
one in order to compensate?) and 2) how does it know that the
interrupt will be reached?
For example, if I have the following pseudo-code :
10 goto 20
20 do something here
and compile this into an exe and run it, isn't it conceivable that the
scheduler could put a soft-interrupt between the machine-code
corresponding to lines 10 and 20, such that it would never be reached?
Or even simpler still, if I just have one line of code that loops to
itself (an infinite loop) and the scheduler inserts the soft-interrupt
right after the infinite loop, doesn't that mean the thread containing
the infinite-loop will never EVER reach the soft-interrupt, thereby
never give up cpu time to any other thread, locking up the machine for
good?
Basically, I'm confused as to what good pre-emptive multi-tasking is
for since it seems to be non-premptive in the sense that it still
seems dependent on the thread to give control back to the OS. Why not
just base it completely on a timer interrupt? Seems a lot more fool-
proof to me unless I'm missing something here... I can't seem to find
any material explaining how this works in any detail, not even the
Windows Internals book I just ordered. Anyone?
Regards,
Anthony