
www.Usenet.com
| <-- __Chronological__ --> | <-- __Thread__ --> |
In article <[EMAIL PROTECTED]>, Rob Warnock <[EMAIL PROTECTED]> wrote: >Nick Maclaren <[EMAIL PROTECTED]> wrote: >+--------------- >| My solution to that was an architectural requirement for a 'yield' >| instruction to be called every (say) M instructions or N memory >| references, whichever comes first, and to abort the process if it >| failed to do so. Dead easy to implement. >+--------------- > >Ahhh... Sutherland's "Wheel of Reincarnation" strikes again... ;-} ;-} And again, and again. Yes, it is a very old, and well tried, idea. >In 1972, at Digital Communications Associates, I designed the kernel >for a realtime embedded operating system for a networking node which was >based on *precisely* that notion: The system ran with interrupts *OFF*, >and the programmers were required to insert "@YIELD" macros[1] every >so often[2] in the code. The "@YIELD" macro was logically a no-op[3] >unless some I/O event had occurred that needed to run a task of higher >priority than the current task. Worked like a charm!! Interesting. It was quite popular with the networking people at about that time, probably on the grounds that similar problems lead to similar solutions. >Despite the fact that the @YIELDs were inserted manually, since the rules >were very simple[2] and compliance was easy to verify by inspection, we >had almost no bugs due to misplaced @YIELDs. [Lots of *other* bugs, but >not those.] I would make a small bet that it was precisely because the rules were so simple .... Regards, Nick Maclaren.
| <-- __Chronological__ --> | <-- __Thread__ --> |