[an error occurred while processing this directive]

.сс

7 Организация памяти

_______________________________________________________________

Как упоминалось в первой главе, резидентная версия СП "Паскаль" состит из двух модулей по 16Кбайт. Один из них содержит компилятор, а другой - отладчик, редактор и командный интерпретатор.

7.1 Карта памяти

При запуске СП "Паскаль" управление передается модулю интерпретатора. Ниже приводится диаграмма распределения памяти в системе:

.ми0

.сс

АдресПамять содержит:

&FFFF+----------------------------------------------+
|Операционная система|
&D000+----------------------------------------------+
|Интерфейсная область|
&C000+-----------------------+----------------------+
|Модуль интерпретатора | (Модуль компилятора)|
&8000+-----------------------+----------------------+
|Экранная память|
HIMEM+----------------------------------------------+&7800
||для
|Рабочая область СП "Паскаль"|MODE7
||
OSHWM+----------------------------------------------+обычно
|Рабочая область операционной системы|&E00
&0000+----------------------------------------------+

.нф

Слова 'Модуль компилятора' стоят в скобках потому, что во время выполнения объектной программы, редактирования или работы в командном режиме модуль компилятора отключен. Под рабочее пространство Паскаля при выбранном седьмом экранном режиме отводится &7800-&E00 или 27136 байт. Подробно, рабочая область Паскаля рассматривается в разделе 7.3.

Когда выполняется команда 'COMPILE' карта памяти машины имеет вид:

.ми0

.сс

АдресПамять содержит:

&FFFF+----------------------------------------------+
|Операционная система|
&D000+----------------------------------------------+
|Интерфейсная область|
&C000+----------------------------------------------+
|Модуль компилятора|
&8000+----------------------------------------------+
|Экранная память|
HIMEM+----------------------------------------------+&7800
||для
|Часть кода интерпретатора|MODE7
||
HIMEM'+----------------------------------------------+
||
|Рабочая область СП "Паскаль"|
||
OSHWM+----------------------------------------------+обычно
|Рабочая область операционной системы|&E00
&0000+----------------------------------------------+

.нф

Отличие от предыдущей диаграммы заключается в появлении нового маркера HIMEM', который показывает верхнюю границу рабочей области компилятора, и включении модуля компилятора в адресное пространство микропроцессора. Между HIMEM' и HIMEM помещается фрагмент модуля интерпретатора, необходимый для работы компилятора. Его размер - около восьми Кбайт.

7.2 Карта памяти дисковой версии

Карта памяти для системы со вторым процессором немного отличается. Это вызвано другими значениями OSHWM и HIMEM и меньшим размером операционной системы сопроцессора. Карта памяти сопроцессора 6502 для резидентной версии СП "Паскаль" выглядит следующим образом:

.ми0

АдресПамять содержит:

&FFFF+----------------------------------------------+
|Операционная система сопроцессора|
&F800+----------------------------------------------+
|Рабочая область СП "Паскаль"|
&C000+----------------------------------------------+
|Модуль интерпретатора|
HIMEM+----------------------------------------------+всегда
||&8000
|Рабочая область СП "Паскаль"|
||
OSHWM+----------------------------------------------+всегда
|Рабочая область ОС сопроцессора|&0800
&0000+----------------------------------------------+

.нф

Легко подсчитать, что суммарный объем свободной памяти при использовании сопроцессора 6502 составляет целых 44 Кбайта. Кроме того, различные экранные режимы не влияют на объем свободной памяти.

Карта памяти сопроцессора изменяется при запуске компилятора следующим образом:

.ми0

АдресПамять содержит:

&FFFF+----------------------------------------------+
|Операционная система сопроцессора|
&F800+----------------------------------------------+
|Рабочая область СП "Паскаль"|
&C000+----------------------------------------------+
|Модуль компилятора|
HIMEM+----------------------------------------------+всегда
||&8000
|Часть кода интерпретатора|
||
HIMEM'+----------------------------------------------+
||
|Рабочая область СП "Паскаль"|
||
OSHWM+----------------------------------------------+всегда
|Рабочая область ОС сопроцессора|&0800
&0000+----------------------------------------------+

.нф

При запуске компиляции компилятор пересылается в память сопроцессора. Во время компиляции также требуется наличие в памяти фрагмента интерпретатора.

.сс

7.3 Использование свободных областей памяти

Области памяти неиспользуемые операционной системой и СП "Паскаль" свободны для использования пользователем. Конфигурация свободной памяти такова:

.ми0

HIMEM+----------------------------------------------+(или
||&F800
||для
||сопро-
|Рабочая область СП "Паскаль"|процес-
||сора)
|(растет вниз)|
||
TOH+----------------------------------------------+Конец
||рабочей
|неиспользуемая память|области
||
TOS+----------------------------------------------+верх
|(растет вверх)|стека
|Стек Паскаля|
BOS+----------------------------------------------+низ
|Объектный код программы|стека
||
ETX+----------------------------------------------+Конец
|Исходный текст программы|текста
||
OSHWM+----------------------------------------------+обычно
&E00

.нф

Как видно из рисунка, две области (рабочая и стек) динамически растут по направлению друг к другу во время выполнения программы. Если исходный текст отсутствует, объектный код может располагаться прямо с OSHWM.

Рабочая область растет вниз за счет неиспользуемой памяти. Она содержит динамические переменные, создаваемые 'новыми' процедурами. При образовании новых (локальных) переменных рабочая область увеличивается, а по окончании их использования уменьшается. В СП "Паскаль" имеются мощные средства для доступа к рабочей области: 'free', 'claim' и 'release' (см. раздел 5.7).

.ст pascal.8

[an error occurred while processing this directive]