Тема 2.4 Обслуживание ввода вывода
Технология ввода – вывода.
Возможны 3 метода выполнения операций ввода – вывода:
- программируемый ввод – вывод;
- ввод – вывод с использованием прерывания;
- прямой доступ к памяти (direct memory access – DMA).
Программируемый ввод – вывод.
Когда процессору при выполнении программы встречается команда, связанная с вводом – выводом, он выполняет ее, передавая соответствующие команды контроллеру ввода – вывода. При программируемом вводе – выводе это устройство выполняет требуемое действие, а затем устанавливает соответствующие биты в регистрах состояния ввода – вывода. Контроллер ввода – вывода больше не посылает процессору никаких сигналов, в том числе и сигналов прерываний. Т. о. ответственность за периодическую проверку состояния модуля ввода – вывода несет процессор: он должен производить проверку до тех пор, пока операция ввода – вывода не завершится.
При использовании такого метода процессор отвечает за извлечение из основной памяти данных, предназначенных для вывода, и размещение в ней данных, поступивших с устройства ввода. Программное обеспечение для ввода – вывода разрабатывается таким образом, что процессор непосредственно управляет операциями ввода – вывода, включая опознания устройства, пересылку команд чтения - записи и передача данных. Т. о. в набор используемых команд входят команды ввода – вывода, принадлежащие следующим категориям:
- Управление.
Команды этой категории для того, чтобы привести внешнее устройство в действии и сообщить ему, что нужно делать. Например, блоку с магнитной лентой можно отдать команду перемотки или перемещение вперед на одну запись.
- Состояние.
Используются для проверки состояния контроллера ввода – вывода и соответствующих периферийных устройств.
- Передача
Используется для чтения и /или запаси данных в регистры процессора и внешние устройства и из регистров процессора и внешних устройств.
Ввод-вывод с использованием прерываний.
Проблема программируемого ввода-вывода состоит в том, что процессор должен долго ждать, пока контроллер ввода-вывода будет готов читать или принимать новые донные. Во время ожидания процессор должен постоянно производить опрос, чтобы узнать состояние модуля ввода-вывода. В результате значительно падает производительность всей системы.
При вводе-выводе с использованием прерываний процессор может передать контроллеру команду ввода-вывода, а затем, перейти к выполнению другой полезной работы. Затем, когда контроллер ввода-вывода снова будет готов обмениваться данными с процессором, он прервет процессор и потребует, чтобы его обслужили. Процессор передает ему новые данные, а затем возобновляет прерванную работу. Ввод-вывод с прерываниями на много эффективнее, чем программируемый ввод-вывод, т.к. при нем исключается ненужное ожидание.
Прямой доступ к памяти.
Хотя ввод-вывод, управляемый прерываниями, более эффективен, чем простой программируемый ввод-вывод, он все еще занимает много процессорного времени для передачи данных между памятью и контроллером ввода-вывода ( при этом через процессор должен пройти все пересылочные данные). Таким образом, обе описанные формы ввода-вывода обладают двумя недостатками:
1) Скорость передачи данных при вводе-выводе ограничена скорость, с которой процессор может проверять и обслуживать устройства.
2) Процессор занят организацией передачи данных; при вводе-выводе для каждой передачи данных должна быть выполнена определенная последовательность команд.
Для перемещения больших объемов данных может использоваться более эффективный метод – прямой доступ к памяти (direct memory access – DMA). Функции DMA выполняются отдельным контроллером системной шины или могут быть встроены в контроллер ввода-вывода. В любом случае метод работает следующим образом, когда процессору нужно прочитать или записать блок данных, он генерирует команду для модуля DMA, посылая ему следующую информацию:
- указание, требуется ли выполнить чтение или запись;
- адрес устройства ввода-вывода;
- начальный адрес блока памяти, используется для чтения или записи;
- количество слов, которые должны быть прочитаны или записаны.
Передав полномочия по выполнению этих операций контроллеру DMA, процессор продолжает работу. Контроллер DMA слово за словом передает весь блок данных в память или из нее, не задействуя при этом процессор. После окончания передачи контроллер DMA посылает процессору сигнал прерывания. Таким образом, процессор участвует только в начале и в конце передачи.
Для передачи данных в память или из нее контроллеру DMA нужен контроль над шиной. Если в это время процессору также нужна шина, может возникнуть конфликтная ситуация и процессор должен ждать окончания работы между DMA.
Заметим, что в этом случае нельзя говорить о прерывании, т.к. процессор не сохраняет информацию о состоянии задачи и не переходит к выполнению других операций. Вместо этого он вынужден сделать паузу на время выполнения одного цикла шины. В результате это приведет к тому, что во время передачи данных с использованием прямого доступа к памяти замедляется выполнение процессором тех команд, для которых ему требуется шина. Тем не менее при передаче большого количества информации прямой доступ к памяти намного более эффективен, чем программируемый ввод-вывод или ввод-вывод управляемый прерыванием.
Реализация стека.
Общепринятым методом осуществления управления выводами процедур и возвратами из них является использование стека.
Стек – это упорядоченный набор элементов, причем при обращении к нему можно получить доступ лишь к одному из элементов. Этот элемент называется вершиной стека. Число элементов стека (его длина) является переменным. Добавления или удаления можно делать только на вершине стека, поэтому его называют магазинным списком или списком, организованным по принципу “последним вошел – первым вышел”.
Для реализации стека необходим набор ячеек памяти, в которые будут заноситься его элементы. В основной (или виртуальной) памяти для стека резервируется блок смежных ячеек. Большую часть времени он частично заполнен элементами стека. Для обеспечения нормальной работы нужно помнить следующие адреса, которые хранятся в регистрах процессора.
- Указатель стека. Содержит адрес вершины стека. Если в стек добавляется новый элемент или из него удаляется элемент, указатель соответственно увеличивается или уменьшается на единицу. После этого он вновь содержит адрес вершины стека.
- База стека. Содержит адрес нижней ячейки зарезервированного блока. При добавлении элемента в пустой стек эта ячейка используется первой. При попытке извлечь новый элемент в заполненный стек генерируется сигнал ошибки.
- предел стека. Содержит адрес второго конца, т.е. вершины зарезервированного блока.
Основная память |
Предел стека |
Свободно Используется |
Блок памяти, зарезервированный пол стек. |
Указатель стека |
База стека |
Рисунок 5. Реализация стека
Традиционно сложилось так, что у большинства современных машин основой стека является ячейка с максимальным адресом, а его пределом ячейка с минимальным адресом. Таким образом, стек является обращенным, и при его возрастании заполняются ячейки с убывающими адресами.