VM is designed to fit well with the larger UNIX heterogeneous environment. This environment makes extensive use of networking to access file systems--file systems that are now part of the system's virtual memory. Networks are not constrained to consist of similar hardware or to be based upon a common operating system; in fact, the opposite is encouraged, for such constraints create serious barriers to accommodating heterogeneity. While a given set of processes may apply a set of mechanisms to establish and maintain the properties of various system objects--properties such as page sizes and the ability of objects to synchronize their own use--a given operating system should not impose such mechanisms on the rest of the network.
As it stands, the access method view of a virtual memory maintains the
potential for a given object (say a text file) to be mapped by systems
running the UNIX memory management system and also to be accessed by systems
for which virtual memory and storage management techniques such as paging
are totally foreign, such as PC-DOS.
Such systems can continue to share
access to the object, each using and providing its programs with the
access method appropriate to that
system. The unacceptable alternative would be to prohibit access to the object by less capable systems.
Another consideration arises when applications use an object as a communications channel, or otherwise try to access it simultaneously. In both cases, the object is shared; thus, applications must use some synchronization mechanism to maintain the integrity of their actions on it. The scope and nature of the synchronization mechanism is best left to the application. For example, file access on systems which do not support virtual memory access methods must be indirect, by way of read and write. Applications sharing files on such systems must coordinate their access using semaphores, file locking, or some application-specific protocols. What is required in an environment where mapping replaces read and write as the access method is an operation, such as fsync, that supports atomic update operations.
The nature and scope of synchronization over shared objects is application-defined from the outset. If the system tried to impose automatic semantics for sharing, it might prohibit other useful forms of mapped access that have nothing to do with communication or sharing. By providing the mechanism to support integrity, and leaving it to cooperating applications to apply the mechanism, the needs of applications are met without eliminating diversity. Note that this design does not prohibit the creation of libraries that provide abstractions for common application needs. Not all abstractions on which an application builds need be supplied by the ``operating system.''