Patent GB-1492067-A (GB)
Title: Computer with segmented memory
IPC: G06F12/06
Filed: 1974-12-17
Abstract: 1492067 Computer with segmented memory HONEYWELL INFORMATION SYSTEMS Inc 17 Dec 1974 [17 Dec 1973] 54421/74 Heading G4A The main memory of a digital computer is notionally divided into variable length segments, each segment having a corresponding segment descriptor stored in a segment descriptor memory (which is preferably incorporated in the main memory), each segment descriptor including the base address of the corresponding segment, the absolute (i.e. physical) address of an operand stored in main memory being identified by its segment and its offset within that segment by locating the corresponding segment descriptor, extracting therefrom the base address of the segment, and adding the base address to the offset. Each segment descriptor is a 32-bit word (Figs. 2A, 2B, not shown) and respectively refers either to a segment (direct addressing) or to another segment descriptor (indirect addressing). The segment descriptors are grouped and stored in segment tables, e.g. 304, 305 and 306, Fig. 3, according to whether they are accessible to the whole system (here represented by processes A, B, C), to multiprogram use (processes B, C only), or to single program use (process C only). A segment is then identified by a segment table number and a segment table entry, obtained from a data descriptor or an address descriptor (the latter providing the offset). A check is made whether each generated absolute address falls below the maximum address value of main memory. Each process, e.g. A (401, Fig. 4) has associated therewith one or both of two segment tables, e.g. 416, 417, containing two different types of segment descriptors, table 416 containing 4 segment descriptors each referring to relatively large segments of main memory (4 megabytes) whereas table 417 contains 256 segment descriptors each referring to relatively small segments (64 kilobytes). In Fig. 7, an address descriptor 700 has its bit zero position set to "0" indicating indirect addressing, the base register field (BR) of address descriptor 700 indicating a base register 701, the index field (IDX) of address descriptor 700 being set to "0" so that there is no indexing of the final address (if IDX were set to "1", the contents of an index register 706 as indicated by an index register field IXR of address descriptor 700 would be employed), the displacement field of address descriptor 700 indicating a particular byte of a word whose base address (i.e. the address of the first byte) is given by the offset field of base register 701. The fields STN, STE of base register 701 respectively indicate a segment table number and a segment table entry, thereby identifying a segment descriptor 703 stored in a segment table 702; the base field of segment descriptor 703 points to the base address of the corresponding segment which is added to the offset in a block 707 to give the segment relative address SRA. The absolute address 709 of a data descriptor 710 is then generated in a block 708 from the segment relative address SRA as described in relation to Figs. 9 and 10 (not shown). The BR field of data descriptor 710 points to a data base register 704 whose fields SEG, STN access a further segment descriptor 705.1 stored in a segment table 705, a segment relative address being formed in a block 711 from the offset field of base register 704, and from the displacement field of data descriptor 710 (and, if used, from the index register 706), the segment relative address from block 711 being converted in a block 712 to the absolute address 713 of an operand in main memory. In Fig. 6 (not shown) direct addressing is illustrated, wherein only one stage of referring to a segment descriptor is employed. In Fig. 8 (not shown) a data descriptor (810), which corresponds to the data descriptor 710 of Fig. 7, points directly to a segment descriptor instead of indirectly to a segment descriptor via a data base register. In Fig. 12A (not shown), the sixteen most-frequently used segment descriptors are stored in a separate associative memory (1226).