Слайд 1
Подпрограммы
ВводВвод/Ввод/вывод
Организация шин
Слайд 2
Обычно ПП хранятся во внешней, медленной памяти и извлекаются оттуда
по мере надобности.
В каталоге каждой ПП поставлена в соответствие некоторая
запись. В записи содержится имя ПП, её адрес хранения, длина и некоторая другая информация.
Слайд 3Схема взаимодействия ПП с главной подпрограммой
Пусть надо
Z=f(x)sinx+g(x)
В некоторых sinx реализована
еае элементарная, выполняемая одной командой.
Если нет, то можно воспользоваться:
Слайд 4
Далее надо привести к интервалу(0,2Pi)…>30 команд.
Целесообразно составить 2 программы.
В нужном
месте главной программы должна стоять команда безусловного перехода к подпрограмме,
а в конце-команда безусловного перехода к главной.
Слайд 5Схема взаимодействия главной программы и подпрограммы
Слайд 6
Точка входа чаще всего не последняя ячейка подпрограммы-как и у
всякой программы в её конце обычнонаходятся нужные ей константы из
тех, что нецелесообразно записывать в качестве непосредственных адресов.
В ячейке Е находится команда возврата.
Слайд 7Z=f(x)sinax+g(x)sinbx
Используем одну подпрограмму для sinax, sinbx
Слайд 8Создайте схему взаимодействия вложенных программ
Слайд 9В связи с использованием ПП возникает ряд проблем:
Вызов ПП и
возврат
Передача параметров
Сохранение регистров
Настройка по параметрам
Настройка по месту
Слайд 10Вызов ПП и возврат
В ячейках A и D должны быть
команды перехода по адресу D, а команда возврата в ячейке
Е- переменная. Когда главная ПП будет выполняться после вызова из ячейки А, в ячейке Е должна стоять команда перехода по адресу А+1. Если этот участок стоит в цикле, то в Е должен постоянно меняться адрес возврата. Разработано несколько приёмов организации возврата.
Слайд 11Схема с засылкой команды возврата
Засылка в ПП команды возврата
Слайд 12Сохранение адреса возврата в регистре
Слайд 13
Использование стека:
1. Переход к подпрограмме – ПП D
2. Возврат –
БП sp
Слайд 14Передача параметров
Стандартные ячейки или регистры
Слайд 15Передача параметров через косвенный адрес
Аргументов может быть больше, чем регистров.
Аргументы
должны располагаться в памяти в последовательных ячейках в определённом порядке.
Результаты также в памяти в последовательных ячейках.
В этом случае главная программа должна сообщить адреса входной и выходной последовательности.
Слайд 18Сохранение регистров
Сохранение регистров в теле подпрограммы
Сохранение в стеке
Слайд 19Настройка по месту
Адреса команд и констант, принадлежащие телу подпрограммы, называются
внутренними
Настройка по месту - надо ко всем внутренним адресам подпрограммы
прибавить адрес начала подпрограммы.
Слайд 21Выполните следующие 3 программы и составьте отчёт
(В отчёте должны быть
составлены схемы вызова программ и написаны комментарии к командам
Загрузка в
стек- push
Выгрузка-pop)
Слайд 22Обозначение текущего диска и вывод его на экран с поясняющей
надписью
Слайд 23Вызов подпрограммы без параметров
Слайд 24delay proc ;Процедура- подпрограмма
push CX ;Сохраним СХ основной программы
mov CX,SI
;Счетчик внешнего цикла
del1: push CX ;Сохраним его
mov CX,0 ;Счетчик внутреннего
цикла
del2: loop del2 ;Внутренний цикл (64К шагов)
pop CX ;Восстановим внешний счетчик
loop del1 ;Внешний цикл (2000 шагов)
pop CX ;Восстановим СХ программы
ret ;Возврат в программу
Подпрограмма задержки с одним параметром, передаваемом в регистре SI
Слайд 27Операции ввода/вывода
Программно управляемый ввод/вывод
Ввод/вывод по прерываниям
Прямой доступ к памяти
Слайд 28Программно управляемый ввод/вывод
Взаимодействие происходит так:
Команды программы выдают адрес устройства и
вид работ (out)
Следующая команда запрашивает готовность устройства(читает содержимое регистра состояния)
Команда
программы требует записать слово, сообщая из какой ячейки памяти требуется читать и в какое место внешнего устройства направить
Контроллер принимает слово из памяти в свой регистр данных, устанавливает в 0 признак готовности («занято»), а затем передаёт слово в указанное место внешнего устройства; по окончании работы контроллер заносит в свой регистр состояния единицу.
Во время работы контроллера программа выполняет цикл «ожидания», затем продолжает работу.
Слайд 29Взаимодействие центрального процессора с устройством вывода на печать
Слайд 30На отрезках t1÷t2 и t3 ÷t4 центральный процессор выполняет циклы
ожидания. На t2 ÷ t3 – передаёт символ контроллеру.
Аналогично при
вводе.
Слайд 31Ввод/вывод по прерываниям
Основным недостатком программно управляемого В/ВЫВ являются простои
процессора в ожидании, пока модуль ввода/вывода выполнит очередную операцию. Альтернативой
может быть вариант, когда ЦП выдает команду В/ВЫВ, а затем продолжает делать другую полезную работу
Слайд 32Прерывания
Определение. Прерывание программы – это свойство ВС при возникновении особых
событий временно прекратить выполнение текущей программы и передать управление программе,
специально предусмотренной для обработки данного события.
Слайд 33В системе с прерыванием каждое программно-независимое событие (источник прерывания) должно,
если оно может повлиять на ход обработки, сопровождаться сигналом, говорящим
о его возникновении. Назовем эти сигналы запросами прерывания. Программы, затребованные запросами прерывания, назовем прерывающими программами, в отличие от прерванных программ, выполнявшихся компьютером до появления запросов прерывания. Временную диаграмму процесса прерывания можно упрощенно
Слайд 35Так как функции по сохранению и восстановлению состояния прерванной программы
возлагаются на саму прерывающую программу, то последняя должна состоять из
трех частей: подготовительной и восстановительной, обеспечивающих переход к нужной программе, и собственно прерывающей программы.
По окончании работы прерывающей программы переход может быть осуществлен либо к прерванной программе, либо к другой прерывающей программе.
Так как всевозможные запросы на прерывание вырабатываются независимо и асинхронно, то возможны такие ситуации:
∙ приход запросов последовательный;
∙ одновременный приход нескольких запросов;
∙ приход запроса во время выполнения прерывающей программы.
Следовательно, должен быть организован порядок, в котором поступившие запросы удовлетворяются. Если в ВС имеются средства для обслуживания запросов в порядке присвоенного им приоритета, то такие системы прерывания называются приоритетными.
СПП, как правило, выполняют следующие основные функции:
∙ организуют вход в прерывающую программу;
∙ осуществляют приоритетный выбор между запросами прерывания;
∙ обеспечивают возврат к прерванной программе и программное изменение приоритетов программ.
Слайд 36
Процедура ввода блока данных по прерываниям реализуется следующим образом. ЦП
выдает команду чтения, а затем продолжает выполнение других заданий, например
другой программы. Получив команду, МВВ приступает к вводу элемента данных с ВУ. Когда считанное слово оказывается в регистре данных модуля, MBB формирует на управляющей линии сигнал прерывания ЦП. Выставив запрос, МВВ помещает введенную информацию на шину данных, после чего он готов к следующей операции В/ВЫВ. ЦП в конце каждого цикла команды проверяет наличие запросов прерывания. Когда от МВВ приходит такой сигнал, ЦП сохраняет контекст текущей программы и обрабатывает прерывание. В рассматриваемом случае ЦП читает слово из модуля, записывает его в память и выдает модулю команду на считывание очередного слова. Далее ЦП восстанавливает контекст прерванной программы и возобновляет ее выполнение.
Слайд 37Этот метод эффективнее программно управляемого В/ВЫВ, поскольку устраняет ненужные ожидания,
однако обработка прерывания занимает достаточно много времени ЦП. Кроме того,
каждое слово, пересылаемое из памяти в модуль В/ВЫВ или в противоположном направлении, как и при программно управляемом В/ВЫВ, проходит через ЦП.
Слайд 38Реализация ввода/вывода по прерываниям
При реализации ввода/вывода по прерываниям необходимо дать
ответы на два вопроса. Во-первых, определить, каким образом ЦП может
выяснить, какой из МВВ и какое из подключенных к этому модулю внешних устройств выставили запрос. Во-вторых, при множественных прерываниях требуется решить, какое из них должно быть обслужено в первую очередь.
Сначала рассмотрим вопрос идентификации устройства. Здесь возможны три основных метода:
множественные линии прерывания;
программная идентификация;
векторное прерывание.
Наиболее простой подход к решению проблемы определения источника запроса — применение множественных линий прерывания между ЦП и модулями ввода/вывода, хотя выделение слишком большого количества управляющих линий для этих целей нерационально. Более того, даже если присутствует несколько линий прерывания, желательно, чтобы каждая линия использовалась всеми МВВ. при этом для каждой линии действует один из двух остальных методов идентификации устройства.
При программной идентификации, обнаружив запрос прерывания, ЦП переходит к общей программе обработки прерывания, задачей которой является опрос всех МВВ с целью определения источника запроса. Для этого может быть выделена специальная командная линия опроса. ЦП помещает на адресную шину адрес опрашиваемого МВВ и формирует на этой линии сигнал опроса. Реакция модуля зависит от того, выставлял он запрос или нет. Возможен и иной вариант, когда каждый МВВ включает в себя адресуемый регистр состояния. Тогда ЦП считывает содержимое PC каждого модуля, после чего выясняет источник прерывания. Когда источник прерывания установлен, ЦП переходит к программе обработки прерывания, соответствующей этому источнику. Недостаток метода программной идентификации заключается в больших временных потерях.
Наиболее эффективную процедуру идентификации источника прерывания обеспечивают аппаратурные методы, в основе которых лежит идея векторного прерывания. В этом случае, получив подтверждение прерывания от процессора, выставившее запрос устройство выдает на шину данных специальное слово, называемое вектором прерывания. Слово содержит либо адрес МВВ, либо какой-нибудь другой уникальный идентификатор, который ЦП интерпретирует как указатель на соответствующую программу обработки прерывания. Такой подход устраняет необходимость в предварительных действиях с целью определения источника запроса прерывания. Реализуется он с помощью хранящейся в ОП таблицы векторов прерывания, где содержатся адреса программ обработки прерываний. Входом в таблицу служит вектор прерывания. Начальный адрес таблицы (база) обычно задается неявно, то есть под таблицу отводится вполне определенная область памяти.
Наиболее распространены два варианта векторной идентификации источника запроса прерывания: цепочечный опрос и арбитраж шины.
Слайд 39Идентификация запроса с помощью вектора прерывания
Слайд 40Обработчики прерываний можно считать разновидностью подпрограмм
Главная программа вызывает прерывание
Центральный процессор
сохраняет указатель команд и регистр признаков, устанавливает новое значение указателя
команд
Обработчик прерывания сохраняет все регистры, выполняет обработку прерывания, восстанавливает старые значения регистров, вызывает выход из прерывания
Центральный процессор восстанавливает старое значение указателя команд и регистра признаков
Главная программа продолжает работу
Слайд 41Обработчик прерывания и контроллер
Контроллер прерываний — устройство, которое получает запросы на
аппаратные прерывания от всех внешних устройств. Он определяет, какие запросы
следует обслужить, какие должны ждать своей очереди, а какие не будут обслуживаться вообще. Контроллеров прерываний два. Первый контроллер, обслуживающий запросы управляется через порты 20h и 21h, а второй— через порты A0h и A1h.
Слайд 42Прямой доступ к памяти
Хотя ввод/вывод по прерываниям эффективнее программно управляемого,
оба этих метода страдают двумя недостатками:
темп передачи при вводе/выводе
ограничен скоростью, с которой ЦП в состоянии опросить и обслужить устройство;
ЦП вовлечен в управление передачей, для каждой пересылки он должен выполнить определенное количество команд.