Go to the first, previous, next, last section, table of contents.

Jobs Overview

Facilitating human communication is a central design goal of Muq: Muq is intended to support the creation of systems in which many people interact in complex, unpredictable way facilitated by power tools -- software, both system libraries and personal customizations that adapt the system to particular needs and interests.

A single Muq must thus be able to appear to be providing uninterrupted computation resources to dozens or even hundreds of users "at the same time": It must appear to support some computational paradigm in which different computational activities are going on in parallel.

There are many conceptual models for parallel computation, but as yet the only one to achieve widespread practical success is the time-sharing approach in which each user is in essence given an individual "virtual machine", and the many virtual machines thus created are animated by having the single underlying physical machine run each virtual machine in sequence for a brief time (perhaps a hundredth of a second) and then switch to the next, producing the illusion to slow-witted humans that all of them are running smoothly in parallel much as movies produce the illusion of continuously moving images by rapidly flashing still images on a screen for a few hundredths of a second each. In computerese, this is called "timesharing by pre-emptive multitasking".

A Muq job represents such a virtual machine. Each Muq job constitutes a software simulation of a simple little computer, complete with input and output channels leading to a user (usually), stacks holding data values and return addresses, compiled functions containing program instructions in a virtual instruction set, and a virtual "program counter" recording where just where in the program this virtual machine is at the moment.

The Muq server may contain hundreds or thousands of these "jobs" at any given instant, some waiting for their user to type a command for them, some waiting for their user's terminal to accept output text, some sleeping, some paused waiting to be told to resume computation, and some number ready to proceed with computation. The Muq server keeps all existing jobs neatly pigeonholed in different queues according to such state information, and busily cycles between all jobs marked as ready to run, running them one after another for a short period of time, trying hard to maintain the illusion that they are all running continuously.

In essence, Muq is a tiny operating system all by itself: because of this, network servers of this sort of design are often called "virtual operating systems".

In this section we will examine the functions which Muq provides to create and destroy jobs, to allow communication and synchronization between them, and for monitoring and modifying their execution.

As of Muq version -1.5.0, these facilities are still under active development: Neither they nor this discussion are particularly complete.

Go to the first, previous, next, last section, table of contents.