The iAPX 432 instructions have variable length, between 6 and 321 bits. Unusually, they are not byte-aligned, that is, they may contain odd numbers of bits and directly follow each other without regard to byte boundaries. The system uses
segmented memory, with up to 224 segments of up to 64
KB each, providing a total virtual address space of 240 bytes. The physical address space is 224 bytes (16
MB). Programs are not able to reference data or instructions by address; instead they must specify a segment and an offset within the segment. Segments are referenced by
access descriptors (ADs), which provide an index into the system object table and a set of rights (
capabilities) governing accesses to that segment. Segments may be "access segments", which can only contain Access Descriptors, or "data segments" which cannot contain ADs. The hardware and microcode rigidly enforce the distinction between data and access segments, and will not allow software to treat data as access descriptors, or vice versa. System-defined objects consist of either a single access segment, or an access segment and a data segment. System-defined segments contain data or access descriptors for system-defined data at designated offsets, though the operating system or user software may extend these with additional data. Each system object has a type field which is checked by microcode, such that a Port Object cannot be used where a Carrier Object is needed. User programs can define new object types which will get the full benefit of the hardware type checking, through the use of
type control objects (TCOs). In Release 1 of the iAPX 432 architecture, a system-defined object typically consisted of an access segment, and optionally (depending on the object type) a data segment specified by an access descriptor at a fixed offset within the access segment. By Release 3 of the architecture, in order to improve performance, access segments and data segments were combined into single segments of up to 128 kB, split into an access part and a data part of 0–64 KB each. This reduced the number of object table lookups dramatically, and doubled the maximum virtual address space. The iAPX432 recognizes fourteen types of predefined
system objects: •
instruction object contains executable instructions •
domain object represents a program module and contains references to subroutines and data •
context object represents the context of a process in execution •
type-definition object represents a software-defined object type •
type-control object represents type-specific privilege •
object table identifies the system's collection of active object descriptors •
storage resource object represents a free storage pool •
physical storage object identifies free storage blocks in memory •
storage claim object limits storage that may be allocated by all associated storage resource objects •
process object identifies a running process •
port object represents a port and message queue for interprocess communication •
carrier Carriers carry messages to and from ports •
processor contains state information for one processor in the system •
processor communication object is used for interprocessor communication
Garbage collection Software running on the 432 does not need to explicitly deallocate objects that are no longer needed. Instead, the microcode implements part of the marking portion of
Edsger Dijkstra's on-the-fly parallel
garbage collection algorithm (a
mark-and-sweep style collector). The entries in the system object table contain the bits used to mark each object as being white, black, or grey as needed by the collector. The
iMAX 432 operating system includes the software portion of the garbage collector.
Instruction format Executable instructions are contained within a system "instruction object". Due to instructions being bit-aligned, a 16-bit
bit displacement into the instruction object allows the object to contain up to 65,536 bits (8,192 bytes) of instructions. Instructions consist of an
operator, consisting of a
class and an
opcode, and zero to three
operand references. "The fields are organized to present information to the processor in the sequence required for decoding". More frequently used operators are encoded using fewer bits. The instruction begins with the 4 or 6 bit class field which indicates the number of operands, called the
order of the instruction, and the length of each operand. This is optionally followed by a 0 to 4 bit
format field which describes the operands (if there are no operands the format is not present). Then come zero to three operands, as described by the format. The instruction is terminated by the 0 to 5 bit opcode, if any (some classes contain only one instruction and therefore have no opcode). "The Format field permits the GDP to appear to the programmer as a zero-, one-, two-, or three-address architecture." The format field indicates that an operand is a data reference, or the top or next-to-top element of the operand stack. ==See also==