Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции!!!.doc
Скачиваний:
9
Добавлен:
27.09.2019
Размер:
1.76 Mб
Скачать
  1. Основные принципы построения hll-машины «Самсон»

Решение: ограничить класс входных языков.(только статические)

Задача  транслятор  аппаратура  результат

То, что сделано на этапе трансляции, перепроверять на аппаратуре не будем. И обратно, что не удобно делать транслятору, должна делать аппаратура. Ограничили класс входных языков статическими языками: Алгол-68, Паскаль, Модула-2, Ада. В таких языках транслятор знает всё о переменных и может сделать то, что потом на архитектуре делать не надо.

Обычно в машинах проверяется переполнение и опустошение стека. В этой машине транслятор гарантирует, что такого не будет(кроме рекурсии – только там проверка), также нет неправильн. Кода операции, непр.использ регистра и т.д. Есть только деление на 0.

От транслятора можно добиться большей надёжности, чем от аппаратуры.

Остаются ошибки типа «деление на 0». Их должна проверять аппаратура, ибо они динамические.

Итоги:

  • главная беда старых машин – при их создании не верили в трансляцию;

  • транслятор и архитектура должны создаваться в одном коллективе с общей целью.

Адресная шина 24 бита (16 Мб памяти). Позже вернулись к 32 битам (2 Гб памяти).

Реально в программе мы имеем доступ к сегментам. Можно организовать страничную или сегментную память.

Страничная – память выделяется стандартными кусками (проблема – внутренняя фрагментация, т.е. в кусках).

Сегментная – память выделяется произвольными кусками (проблема – внешняя фрагментация, т.е. между занятыми кусками остаются свободные).

В "Самсоне" – сегментная организация памяти, метод граничных маркеров (Copyright Л. Григорьева).

Сегментные регистры, адрес = база + смещение.

Есть как сегменты данных так и сегменты команд.

Память с кодом "read only" можно читать несколькими процессами.

Регистр команд (РК) – текущая исполняемая команда в текущем сегменте.

Ориентация на совершенную польскую запись.

Три стека:

  • стек целых;

  • стек адресов (каждый элемент указывает на произвольную ячейку памяти);

  • стек вещественных.

Р егистр G – адресует глобальные данные.

Регистр L – адресует статику текущей процедуры.

Основной адресуемый элемент – слово.

@ - адрес верхушки стека.

C8 (L/G) – 8-ибитовое смещение

C16 (L/G) – 16-и битовое смещение

Итого шесть типов адресации.

Младший бит смещения указывает относительно L оно или G.

Тогда остаётся только четыре принципиально разных типа адресации. В водопроводе сразу определяется, L или G.

Стек – аппаратный регистр, сидящий внутри процессора.

Главная часть транслятора – глобальная оптимизация регистров.

40% команд в программе – чтение, ещё 40% - переходы. На каждые 4 чтения – одна запись.

Чтение: Ч адр (ЧС8, ЧС16, Ч@, Ч@8)

Запись: П адр (ПС8, ПС16, П@, П@8)

ЧН – непосредственный операнд. Ч0, Ч1 – на верхушку стека целых 0, 1.

ЧУС4 – укороченное чтение.

Для часто используемых команд – короткий код команды. Для редко используемых добавляем несколько битов – не жалко.

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

Адресная шина 24 бита (16 Мб памяти). Позже вернулись к 32 битам (2 Гб памяти).

Реально в программе мы имеем доступ к сегментам. Можно организовать страничную или сегментную память.

У каждого процесса в Самсоне есть сегмент данных, так и сегмент кода.

|G -(шапка)-|---(сегмент данных)--------L-------------|

|IR-(шапка)-|---(сегмент кода)-----------PC------------|

//PC-указатель на текущую команду

//IR-указатель на начало сегмента кода данного процесса

//G – указатель на глобальные данные процесса

//L – указатель на локальные данные процедур процесса (статика процедур)

Страничная – память выделяется стандартными кусками (проблема – внутренняя фрагментация, т.е. в кусках).

Сегментная – память выделяется произвольными кусками (проблема – внешняя фрагментация, т.е. между занятыми кусками остаются свободные).

В "Самсоне" – сегментная организация памяти, метод граничных маркеров (Copyright Л. Григорьева).

Метод граничных маркеров – храним списки свободных/занятых сегментов с 2-мя словами по бокам (длина куска, + => свободен, - => занят), при выгрузке сливаем куски. При выделении памяти применяем стандартные методы поиска первого подходящего куска, либо минимально подходящего, либо откусываем от большого.

Есть как сегменты данных так и сегменты команд.

Память с кодом "read only" можно читать несколькими процессами.

Регистр команд (РК) – текущая исполняемая команда в текущем сегменте.

Есть три стека:

  • стек целых;

  • стек адресов (каждый элемент указывает на произвольную ячейку памяти);

  • стек вещественных.

Основной адресуемый элемент – слово (16 бит).

4 типа адрессации:

а) Статическая $8/$16 и L/G

б) Динамическая

@ - по адресу, взятому с верхушки адр. стека

@8 - по адресу, взятому с верхушки адр. Стека + сдвинулись по 8-бит смещ