Input/Output |
A very simple aproach to handle the Input/Output system would be to use the "leftover" buses at the edges to connect directly I/O processors to them. On input events these I/O processors would directly create quants with the input data as parameters and inject them into the grid. For output it would suffice that they could receive messages with the respective data to send to the output device. It would also be possible to configure the edge CPU's of the array in a way that makes them aware that they are dealing with dedicated hardware. In this case they would privilegedly absorb quants concernd with programmed output. In any case, the grid should have a notion of "inside" and "periferical", so that at least routing paths of outbound messages are shortened and no unnecesary omnidireccional quant-waves be produced on the grid for them.
To illustrate the point, we bring an example for an input devce. Suppose we re-programm a conventional Keyboard driver chip (which is a complete CPU by itself) in a way that, when pressing a key, it generates a quant, which contains as a parameter the keycode, and as code a pointer to a routine in virtual memory, which in turn deposits the parameter savely in a keyboard input buffer. Instead of transmitting one or two bytes, it would send a block of data to the node/cluster it is conected to. The Keyboard driver does not need to have any notions of the code it transmits, they are hardcoded paquets of data interpreted by the machine code of the array CPU's.
It seems plausible, that input/output routines will migrate towards the edges of the grid, while mere computing tasks will rather migrate to the center. This seems desireable, because load spreading amongst several CPU's should be more efficient at the center nodes of a grid, then at the lesser populated edge nodes.
Bootstrapping and periodic maintainance tasks will also occure from the edge, the first in form of a Boot ROM injector which could inject code and data to place the basic routines of the meta-operating system into the virtual memory, and in form of a Timer/Interrupt processor which could inject periodically quants with maintainance tasks, like flushing the dirty blocks of the virtual memory caches to disk.
Input/Output |