[ih] Intel 4004 vs the IMP
Jack Haverty
jack at 3kitty.org
Tue Nov 16 12:26:58 PST 2021
Not right, the IMP did all I/O using DMA, including normal packet
traffic as well as the code image download. The code image was of
course much larger than the usual packet I/O. I don't recall all the
exact behavior now, but basically the IMP needing code reload would
abort all I/O, issue a write instruction to send out the reload request
to a neighbor, and execute a read instruction to put whatever
subsequently arrived on that interface from the neighbor to replace the
contents of its program space in memory. Then it waited in a single
instruction loop for the interrupt on completion of the read or
expiration of the watchdog timer.
The IMP being reloaded would stop handling traffic. In the typical
case where something was "seriously wrong", it probably had already
stopped handling regular traffic. All other IMPs kept running
normally, so the ARPANET kept moving user traffic for everyone else.
Essentially the IMP was a multiprocessor, with the main CPU as well as
I/O using DMA. It was a bit challenging to mentally trace the program
path over time since some of the "state" of the machine was maintained
by modifying instructions in the active program. So when looking for
example at how the IMP handled some interrupt, I couldn't assume that
the instructions shown in the listing were actually what was in memory
at the time when the interrupt handler ran. The instructions might
have been changed earlier, so when the handler ran it did something
different from what you'd expect by simply looking at the code
listing. Some instructions in the program were essentially "state
variables" of the overall IMP program design.
Jack Haverty
On 11/16/21 4:58 AM, Lukasz Bromirski wrote:
> Jack,
>
>> On 16 Nov 2021, at 06:43, Jack Haverty via Internet-history <internet-history at elists.isoc.org> wrote:
>>
>> Once the IMP was executing the reload code, it would block all interrupts. There might still be I/O in progress, but when it completed nothing would happen. […]
>> The IMP would hang forever executing that instruction -- but the DMA and watchdog are still active. And the neighbor IMP is hopefully receiving the "reload me" request and then issuing an I/O write to send its entire code space of its memory out the wire to the other IMP which has an I/O read active to receive it and overwite its own whole code memory.
>> Effectively the machine is now locked in a tight loop, with all interrupts disabled except for the one associated with that read operation ... and the watchdog timer. And the I/O is still happening.
> So given the description, IMP would stop forwarding traffic during such
> remote reload — or not? The I/O and DMA statements relate to ONLY
> serving code download, right?
>
More information about the Internet-history
mailing list