Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯЗЫК СИ_РУКОВОДСТВО ПРОГРАММИСТА.doc
Скачиваний:
12
Добавлен:
18.08.2019
Размер:
438.27 Кб
Скачать

5.2. Проблемы промежуточных файлов

Данный программный комплекс использует промежуточные файлы для Pередачи информации между стадиями и между проходами стадии компилятора. Для более рационального использования дискового пространства предприняты следующие меры:

- компилятор одновременно открывает для вывода только один файл (промежуточный или выходной);

- может быть указано устройство для размещения промежуточных файлов путем назначения логических имен "WF:" или "TMP:"

(в таблице '-' означает, что имя неопределено, '+' - определено,

'X' - безразлично).

логические имена

устройство

для врем.

файлов

TMP:

WF:

DK:

WF:

X

TMP:

Два логических имени, выполняющих одинаковые функции, введены для соответствия соглашениям на имя устройства для временных файлов как ОС UNIX (лог. имя "TMP:"), так и ОС RT11 (лог. имя "WF:"). Возможно явное указание длины пространства, которое будет резервироваться при открытии всех промежуточных и выходного файлов: длина пространства, резервируемого при открытии промежуточных файлов, может определяться явным указанием длины в спецификации входного файла и при помощи ключа '-Е'; длина пространства, резервируемого для выходного файла, может дополнительно регулироваться явным указанием длины выходного файла. Если нет ни явного указания длины в спецификации входного файла, ни ключа '-Е', то все промежуточные файлы открываются без указания длины. Если есть явное указание длины входного файла, то эта длина используется при открытии всех промежуточных файлов. Если явного указания длины в спецификации входного файла нет и присутствует ключ '-Е', то для открытия всех промежуточных файлов используется длина [-1] (т.е. резервируется максимальное возможное пространство). При наличии явного указания длины в спецификации входного файла ключ -Е игнорируется. Если спецификация выходного файла отсутствует или в спецификации выходного файла отсутствует длина, то при открытии выходного файла используется та же длина, что и при открытии промежуточных файлов, в противном случае используется указанная длина. Обычно промежуточные файлы стираются как при успешном завершении, так и при обнаружении ошибок. Исключение составляет ассемблер, который при обнаружении ошибок оставляет свои входной и выходной файлы. Ключом 'Н' можно запретить стирание промежуточных файлов. Их типы следующие:

.TMP - выход стадии препроцессора (CPP).

.ТМ1 - выход первого прохода стадии компилятора (C0).

.S - выход второго прохода стадии компилятора и стадии оптимизатора (C1 и C2).

5.3. Эмуляция eis

Данный компилятор генерирует прямой (INLINE) код с инструкциями EIS. для выполнения программ, полученных при помощи этого компилятора на ЭВМ, не имеющего аппаратного EIS (например, на ЭВМ "Электроника НЦ80-01Д"), необходима программная эмуляция инструкций ЕИС. Эмулятор EIS может быть включен при компоновке (при использовании головного модуля SPNHD, а не SPEIS).

Эмулятор EIS эмулирует команды "MUL", "DIV", "ASH", "ASHC". Размер эмулятора около 3-х блоков (1,5 Кб). Эмулятор выполняет (на ЭВМ "Электроника НЦ-80") команду "MUL" примерно 1.2 мс против примерно 30 мкс для СМ-4, т.е. примерно в 40 раз медленнее, и команду "DIV" примерно 4,2 мс против 30 мкс, т.е примерно в 140 раз медленнее. Компилятор поставляется с включенным эмулятором EIS.

5.4. ВЫЧИСЛЕНИЯ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ

Компилятор генерирует прямой (INLINE) код с инструкциями FPU ("Floating Point Unit"), что позволяет получить высокую скорость выполнения программ на ЭВМ, имеющих соответствующее аппаратное обеспечение. Для выполнения программ, полученных при помощи этого компилятора и использующих вычисления с ПЗ на ЭВМ, не имеющих аппаратного FPU, необходима програмная эмуляция инструкций FPU.

Будет ли включен эмулятор FPU, определяется наличием операций с ПЗ в транслируемой программе и ключами командной строки:

Если присутствует ключ '-F', то эмулятор FPU безусловно включается. Если присутствует ключ '-J', то эмулятор FPU безусловно не включается. При отсутствии ключей 'F' и 'J' эмулятор включается только при наличии в компилируемой программе операций с ПЗ.

Размер эмулятора около 6 блоков (3 Кбайт). Скорость вычислений на СМ-4 (с эмулятором, в РАФОС/TS (TSX-PLUS)) - примерно 100 делений с двойной точностью в секунду, причем на системную обработку (прерываний) тратится примерно 10% времени, и примерно 90% собственно на работу эмулятора. Вычисления с эмулятором выполняются примерно в 8 раз быстрее, чем в UNIX V7 (из-за малой эффективности системной обработки ОС UNIX), и примерно в 3 раза медленнее, чем выполняет подобные вычисления FORTRAN-IV с FIS на СМ-4 в ОС РАФОС/TS. Эмулятор не использует и не эмулирует команд FIS и EIS. Включение эмулятора происходит при компоновке и управляется наличием глобальной ссылки "$$fpem", которая вставляется в программу на стадии компиляции (C1). Компилятор использует вычисления с ПЗ и поставляется с включенным FPU.