- •Устройство эвм
- •Процессорор
- •Микропрограммирование
- •Способы ускорения традиционных эвм
- •Нетрадиционные архитектуры эвм
- •//Архитектура бесперспективна, ибо запрограммировать задачу для такой машины по-видимому невозможно.
- •Матричные
- •Векторные
- •Конвейерные
- •Торовые (Grid)
- •История эвм
- •Традиционные архитектуры эвм на примере ibm/360
- •Risc, cisc – компьютеры
- •Основные принципы построения hll-машины «Самсон»
- •Организация памяти
- •Команды чтения-записи
- •Арифметические команды
- •Логические команды
- •Передача управления
- •Организация циклов
- •Работа с вырезками
- •Реализация виртуальной памяти
- •Реализация вызовов процедур
- •Сoroutine - сопрограмма
- •Парал. Процессы
- •Понятие технологии программирования
- •Жизненный цикл программы
- •Реализация
- •Постановка задачи, оценка осуществимости
- •Планирование
- •Управление
- •Проектирование, этапы проектирования
- •Вопрос 20(7). Технология Real. Статическая модель.
- •Конвертер из sdl в объектный программный код
- •Качество разработки по
- •Стандарт качества iso
- •Стандарт cmm
- •29. Организация коллектива разработчиков
- •30.Тестирование программ
- •31.Психология программирования
- •32.Документирование
- •33. Case-технологии
- •34.Сопровождение
- •35.Системы реального времени
- •36.Понятия сбоев и отказов
- •37.Инструментальная и целевая эвм
- •38.Комплекс вычислительных средств
- •39.Параллельные процессы, работа с временными интервалами
- •40.Организация вычислительных процессов
- •1.Процессы.
- •2. Данные.
- •41.Технология rtst
- •42.Технология real. Статическая модель
- •43.Технология real. Динамическая модель
Реализация вызовов процедур
1) BAL – Branch and Link
Записали в спец регист адр. Возврата, следить, чтобы его не попотили
2) Аппетит считаем во время трансляци. Память бывает динамической и статической. Статика – всё, что статической памяти, но без массивов. Запомнить всё, что нужно – 30 –40 тактов.
Вызов:
Отхватить data в стеке процедур (см.шапку А)
Пусть из А вызыв Б, нужно определ. Кол-во места для Б.Строим динамическую цепочку (в сегменте данных процесса есть стек процедур)
Запомнить все нужные регистрв
Передаем параметры (Z,R – через соотв.теки, остальное через адр. стек)
Передать управлен
Возврат
Переход обратно
Восстан. Регистры
На врехушку стека возвращ зн-ие
Передаем упр-е
Сoroutine - сопрограмма
Полный детерменизм во время написания, никакого стека, команда transfer
Парал. Процессы
У кажд.процесса свой сегмент данных.Никакого стека. Есть semaphore или жжужалка или мониторы, захваты ресурса, сообщения
Вызов в Самсоне
Обычно 50 тактов команда вызов, боремся как с вырезкой.
To 1000 do p(x,y) od “толкотня регистров”
Вирт кажд. Процедуру с чистого листа транслировал, а здесь закикл. стек , есть указат на дно и указат на верхушку, освобожд память от дна.(нессиметрич. выгрузка регистров)
Стек выгружает в память, когда близок к переполнению, загружает, когда к истощению. При вызове нумерации меняется, но дыхание стека статически просчитывается внутри процедуры
Работа с регистровым стеком
Сложение регистров – 1 такт, чтение-запись в память – 4-5 такта. Значит, надо работать с регистрами.
В САМСОНе ~ 40 регистров.
Стек регистров:
У К – указатель верхушки стека регистров.
П еренумеровываем регистры: 0-ой – УК, дальше влево – 1, 2 и т.д. Если нужен ещё один регистр, УК сдвигаем вправо. Тот регистр, на который он указывал, становится 0-ым, тот, который был 0-ым, становится первым и т.д. В разные моменты времени один и тот же регистр имеет разные номера.
for i:=1 to N do a[i]:=0
Ч 1 – загрузить 1
Ч N – загрузить N
ЦК М8 – проверка
ЧА а – загрузить адрес начала массива
инд1Р – регистровая индексация
Ч0 – загрузить 0
П@ - с верхушки стека целых записать в память, куда указывает адресный регистр
КЦ – конец цикла
Т ак плохо: на каждой итерации читаем адрес начала массива. Улучшение:
to 1000 do f(x)
Пусть для f(x) нужно 4 регистра. А если свободны только 2? Перед каждым вызовом нужно освобождать 2 регистра, а после вызова – их восстанавливать. Получаем "толкотню" регистров.
Решение: выгружаем регистры только когда стек близок к переполнению, загружаем обратно только когда стек близок к опустошению. Временем подкачки-откачки регистров можно пренебречь.
Пример.
Пусть процедуре А нужно 7 регистров, процедуре В – 8, процедуре С – 3. Пусть из процедуры А мы вызываем В, потом из В вызываем С. Сначала свободны все 16 регистров. При вызове А, потом В занимаем 15 из них. Процедура С "видит", что ей не хватит двух регистров. Выгружаем регистры не В, а А. При возвращении из С в В все регистры В будут с стеке.
Итог:
Регистры занимаются циклически. В каждом стеке есть указатели верхушки и дна. Освобождаем регистры от дна, заполняем от верхушки. При трансляции считается, сколько процедуре нужно будет регистров. При исполнении проверяется, хватит или не хватит регистров.