Fudging the Foundations

Patching the Fundaments

The Virtues of the Virtual

In these pages, “virtual” is an adjective applied to the name of some relative primitive construct. The virtual construct behaves like some corresponding real construct in relation to its users. Virtual memory was an early virtual construct. As a program runs it produces addresses to specify which memory to access. If memory mapping is turned on then these addresses are virtual and are changed to real addresses in a way that is invisible to the program. Other software, the kernel, intervenes invisibly when the virtual addresses has no corresponding real address. This provides the opportunity to provide an accurate illusion of more RAM, called “virtual memory”, than exists in the real system. IBM’’s software system, VM/370, virtualizes not only memory but the whole machine. The software product, vmware, does as much for Wintel systems and MacOS X includes a virtual machine sufficient for running most of OS 9 and its legacy applications.

A virtue of most message passing systems is that they can virtualize nearly anything, access to which is via messages.

There are a number of tricks that the casual Keykos programmer can do and the Unix kernel programmer can do as well, but not the casual Unix programmer. Recently I felt a need to install some code on a web server machine that would know what parts of served web pages had changed, to support remote site comparison. The date functions of the Unix directory do not serve for they are often not at an appropriate grain and also because there are too many concepts of “changed”. The tar program does not consider that it has changed a file that it has imported from another machine for instance and it lies about having changed the file.

In Keykos (or EROS) it is possible to install the world so that segments, (the Keykos construct that would serve to hold an html file), emit change notification to a change custodian. A Unix kernel programmer can design such features but only at the expense of threatening the stability of machine users that do not need or want the service.

Just because I have software that is designed to read and write files doesn’t mean that I need it to read “real” files to do the job I need done. In the case at hand I want it to read interface to something that acts sufficiently like files that it cannot tell the difference.

Virtualizing things seems reprehensible to some as an indication that things were done wrong in the first place and the correct repair is to change those programs that would otherwise be fooled by the virtual elements of the platform. Despite plummeting RAM prices the virtues of virtual memory persist. Keykos uses virtual memory in many ways that have not been seen since Multics and more.
Here is some excellent perspectives and history on the virtual.