23.03.2013 Views

Performance and Evaluation of Lisp Systems - Dreamsongs

Performance and Evaluation of Lisp Systems - Dreamsongs

Performance and Evaluation of Lisp Systems - Dreamsongs

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

76<br />

2.12 Data General Common <strong>Lisp</strong><br />

Data General Common <strong>Lisp</strong> is an implementation <strong>of</strong> Common <strong>Lisp</strong> that runs<br />

on the entire line <strong>of</strong> Data General MV-architecture computers. It runs under both<br />

the AOS/VS <strong>and</strong> MV/UX (hosted UNIX) operating systems. Future releases will<br />

also run under the DG/UX (native UNIX) operating system.<br />

2.12.1 Implementation Strategy<br />

In order to bring up a Common <strong>Lisp</strong> system quickly, a small, internal <strong>Lisp</strong><br />

system was used to import much <strong>of</strong> the code from the Spice project at CMU.<br />

While a good deal <strong>of</strong> the code was used as it was, some important sections were<br />

changed significantly. For example:<br />

1. a third pass was added to the compiler, <strong>and</strong> all code gen-<br />

eration is delayed until then,<br />

2. a LAP (<strong>Lisp</strong> Assembly Program) language was designed<br />

that was more appropriate for the MV machines than the<br />

Spice byte-codes originally emitted by the compiler,<br />

3. the source-to-source transformation capabilities <strong>of</strong> the<br />

compiler were enhanced,<br />

4. arrays, numbers, <strong>and</strong> I/O, among other things, were re-<br />

implemented.<br />

2.12.2 MV Memory Structure<br />

MV Memory Structure Memory on an MV is partitioned into 8 segments,<br />

or rings; these rings are used to implement a protection scheme. Code <strong>and</strong> data<br />

become more secure as they move to lower numbered rings; for example, the<br />

operating system kernel runs in ring 0, whereas typical user code runs in ring 7.<br />

Words on the MV are 32 bits long; half-words are 16 bits, <strong>and</strong> bytes are 8 bits.<br />

Pointers to memory are one word long, <strong>and</strong> may access memory in one <strong>of</strong> two<br />

granularities: half-words or bytes. In any word, bit 0 is the most significant<br />

bit <strong>and</strong> bit 31 is the least significant. Pointers to half-words are constructed as<br />

follows:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!