
- •Память с адресной организацией (с произвольным доступом).
- •Непосредственная адресация
- •Когда может произойти стековый доступ к памяти
- •Как происходит стековый доступ к памяти
- •Регистровый файл
- •Счетчик команд
- •Идея базовой адресации – достижение позиционной независимости. (к 50-51)
- •Непосредственная адресация
- •3. Проверки и передача управления.
- •3.4. Команда организации цикла
- •Переполнение при действиях над целыми числами.
- •Целые со знаком: дополнительный код
- •Сложение и вычитание
- •Поддержка действий с повышенной разрядностью
- •Как перейти от представления с однарной точностью к представлению с двойной ?
- •Особые случаи при действиях над числами пт
- •Неточный результат - округление и его виды
- •Численное антипереполнение, денормализованные и ненормализованные числа, псевдонуль.
- •Действия с бесконечностями
- •Регистр состояния программы (Program status register)
- •Счетчик команд
- •Способы синхронизации: программный опрос состояния versus прерывания
- •Таймерная подсистема
- •Основной счетчик
- •Техника измерения времени (чтение счетчика)
- •Ассоциативная память
Способы синхронизации: программный опрос состояния versus прерывания
Простейший способ - программный опрос готовности (polling).
Опрос готовности состоит чаще всего в анализе состояния определенных битов в регистре статуса (состояния) периферийного устройства – при достижении состояния готовности к обмену ПУ устанавливает этот(эти) бит(ы) в определенное состояние. Обмен с ПУ состоит в чтении или записи в регистр данных.
Вот так может выглядеть фрагмент программы на языке Си, который читает байт из регистра данных, используя опрос готовности (состояния). Если готовность отсутствует, то чтения не происходит, и выполняются последующие инструкции.
if (SR & mask) read (DR);
Как изображено на рис. выше, если ПУ «не готово к обмену», то можно просто повторять опрос SR до тех пор, пока ПУ не перейдет в состояние «готово к обмену», вот так:
while (!(SR & mask)); read (DR);
Однако в этом случае нерационально используется процессорное время, пока ПУ «не готово», программа могла бы выполнять полезную работу. Если же ПУ «испортилось» так, что готовности не возникнет никогда, то программа просто зависнет в цикле опроса while.
В чем состоят преимущества использования механизма прерывания для синхронизации программы с внешним событием?
Можно опрашивать готовность не постоянно, а периодически, выполняя в промежутках между опросами полезные действия. при этом появляется задержка реакции на сигнал готовности.
Поэтому разработан был механизм прерываний.
Примечание: Термин прерывание в русскоязычной компьютерной литературе многозначен и употребляется для обозначения трех различных вещей. В англоязычной литературе используются три разных термина:
hardware interrupt - аппаратное прерывание exсeption - исключение, прерывание по исключительной (экстраординарной) внутренней ситуации software interrupt - программное прерывание.
Прерывание аналогично обращению к подпрограмме, только это обращение происходит не по команде вызова подпрограммы, а как следствие наступления некоторого события. Основная особенность (в отличие от использования вызова call) рассматриваемой ситуации состоит в том, что момент наступления этого события может быть никак не связан с текущим состоянием программы.
Укажите правильную последовательность событий, происходящих при входе в прерывание.
При возникновении события, на которое надо отреагировать (запроса прерывания), процессор автоматически (без участия программиста) выполняет следующие действия:
1. Заканчивается выполнение текущей команды (иногда команда прерывается, если она «долгая», но иногда выполняется еще одна или несколько команд).
2. Анализируется, разрешено ли прерывание процессору. Если нет, то выполнение команд продолжается, как если бы запроса не было.
3. Если несколько запросов активны, то принимается решение, который из них обслуживать в первую очередь (разрешение приоритета priority resolving). Если система запросов радиальная или источник запроса - внутреннее событие процессора (exception), то переход к .п.6.
4. При магистральной схеме запросов: Процессор передает источникам запросов подтверждение приема запроса (этот сигнал должен достигнуть только того источника запроса, который имеет наивысший приоритет).
5. Источник запроса передает процессору идентифицирующую его информацию (каждому запросу может соответствовать отдельная подпрограмма обработки, и процессор должен узнать, какую из них следует вызвать).
6. Процессор сохраняет информацию о текущем контексте (текущий вектор состояния, почти всегда не полностью) и затем вызывает подпрограмму обработки прерывания (обработчик). Адрес перехода на обработчик хранится в определенной, индивидуальной для каждого источника запроса прерывания, области памяти, называемой вектором прерывания. Процессор загружает этот адрес из вектора прерывания в счетчик команд. Одновременно автоматически запрещается реакция на другие активные запросы.
7. Для возврата из прерывания в системе команд обычно есть специальная команда "возврат из прерывания" (мнемоника чаще всего образована от слов interrupt return: iret или reti или rti). По этой команде восстанавливается контекст прерванной программы в том объеме, в котором он был сохранен при входе в перывание (п.6). Эта команда должна быть последней исполняемой командой обработчика.
Приведенное описание соответствует обработке внешнего аппаратного прерывания. В случае, если причина прерывания - внутреннее событие процессора (исключительная ситуация - exception), то этапы 4 и 5 отсутствуют, как в случае радиальных прерываний
Запрос прерывания приходит во время выполнения какой-либо команды. Когда (по отношению к процессу выполнения этой команды) может начаться вход в прерывание?
Внешний запрос прерывания приходит асинхронно (без какой-либо привязки во времени) по отношению к выполняемому потоку команд. Произвести вызов обработчика в большинстве процессоров можно только в промежутке между выполнением соседних команд, поэтому обычно выполнение текущей команды заканчивается. В некоторых процессорах, если время выполнения текущей команды велико, ее выполнение прерывается, а после выхода из прерывания команда начинает выполняться сначала (это, например, типично для команд плавающей точки в процессорах, где они реализованы микропрограммно). В процессорах х86 прерываются команды строковых операций, но после выхода из прерывания они не начинаются сначала а продолжают работу с того места, где были прерваны. В процессорах ARM дольше других выполняются команды множественной загрузки или сохранения.
Некоторые комбинации команд используются совместно, и прерывание между ними может привести к фатальным результатам. Такова в х86 пара команд, переустанавливающих положение стека: для этого надо поменять содержимое регистра сегмента стека и затем содержимое указателя стека. Поскольку в х86 для сохранения контекста используется стек, то прерывание между указанными двумя командами вызовет сохранение контекста (якобы в стеке) в неверном месте памяти. Для исключения такой ситуации команда загрузки в регистр сегмента стека автоматически запрещает прерывание до окончания следующей команды, которая обязательно должна перезагружать указатель стека.
Пусть процессор находится в процедуре обработки некоего прерывания, и в этот период приходит запрос от источника с более высоким приоритетом. Произойдет ли немедленно прерывание по второму запросу?
В случае, если разрешены вложенные прерывания.
Что такое приоритеты источников прерываний?
Иногда случается, что несколько запросов требуют обработки одновременно. Обычно некоторые из запросов более важны и должны быть обработаны в первую очередь. Для этого система управления прерываниями должна давать программисту возможность определять приоритеты, т.е. порядок реакции на запросы. Отметим особо: «более высокий приоритет запроса» для программиста означает, что обработчик для этого запроса должен быть вызван (и завершиться) раньше, нежели для запросов, имеющих более низкие приоритеты.
Как процессор «узнает», где находится обработчик, соответствующий пришедшему запросу прерывания?
Адрес перехода на обработчик хранится в определенной, индивидуальной для каждого источника запроса прерывания, области памяти, называемой вектором прерывания. Процессор загружает этот адрес из вектора прерывания в счетчик команд. Одновременно автоматически запрещается реакция на другие активные запросы.
При каких условиях допустимы вложенные прерывания ?
Интенсивность потока запросов ‑ при значительном количестве источников и при интенсивном потоке запросов часто оказывается, что следующий запрос приходит еще до того, как обслужен предыдущий. В этом случае среднее время реакции на следующий запрос ‑ время от момента возникновения следующего запроса до начала выполнения «критической» команды «следующего» обработчика увеличится, и может оказаться значительным.
Вот что произойдет, если внутри обработчиков разрешены (вложенные) прерывания.
Наличие запросов #2 и #3 существенно увеличивает время реакции t1 на запрос #1.
Вложенные прерывания допустимы при значительном количестве источников и при интенсивном потоке запросов на прерывания.
К каким неприятным последствиям может привести необдуманное разрешение вложенных прерываний ? Чем отличается "быстрое" аппаратное прерывание в процессорах ARM от обычного ?
Наличие запросов #2 и #3 существенно увеличивает время реакции t1 на запрос #1.
Изменяются ли в процессорах ARM значения признаков (флагов) при выполнении команд пересылки данных?
хз
Какую функцию, относящуюся к системе прерываний, выполняют биты I и F регистра состояния процессоров ARM7 ?
У процессора имеются два входа запроса прерывания: IRQ (от Interrupt ReQest) и FIQ (от Fast Interrupt reQuest). При входе в обработчик а) в регистре состояний запрещается вложенное прерывание (биты I и F – маски прерываний).
Что называют вектором прерывания в цифровом процессоре?
Выполнение программы обработки исключения начинается с чётко определённого адреса, называемого вектором исключения или просто вектором. В векторе должна содержаться 4-байтовая команда перехода на точку входа в обработчик
Какую информацию содержит вектор прерывания в процессорах ARM7?
Должен содержать 4-байтовую команду перехода на точку входа в обработчик, т.е. чётко определённый адрес.
Сколько векторов прерываний имеется в процессорах ARM7?
Для каждого исключения предусмотрено два вектора: обычный и «верхний» Выбор того или иного вектора зависит от того, как сконфигурирован процессор: на использование обычных или верхних векторов. сего архитектурой ARM предусмотрено семь типов исключений: Внешние прерывания (IRQ и FIQ) в версии ARMv6 и некоторых реализациях более ранних версий могут иметь либо фиксированные векторы, указанные в таблице, либо использовать векторы, определяемые реализацией. Выбор того или иного варианта осуществляется с помощью бита VE сопроцессора управления системой (CP15). На практике почти всегда используются фиксированные векторы, однако сам процессор оснащается внешним по отношению к нему контроллером прерываний (может носить разные названия в зависимости от фирмы-производителя — например, AIC или VIC). В регистрах такого контроллера хранятся адреса обработчиков прерываний для различных устройств. При возникновении прерывания контроллер выдаёт процессору сигнал IRQ или FIQ, что приводит ко входу в обработчик прерывания, размещённый по фиксированному вектору (0000_0018 или 0000_001C). Первой и единственной командой такого обработчика является загрузка в PC значения, считываемого из определённого регистра контроллера прерываний, что приводит к переходу на начало настоящего обработчика прерываний от конкретного устройства. Таким образом, хотя формально у процессора имеется всего два вектора внешних прерываний (IRQ и FIQ), реально их столько, сколько поддерживает контроллер прерываний.
Возможны ли «вложенные» прерывания в процессорах ARM7 (если да, то как можно влиять на то, произойдет ли вложенное прерывание)?
Да возможно. Изменяя значения в битах I и F регистра состояния процессора, которые как раз таки и отвечают за запрет вложенных прерываний.
Опишите типовую организацию подсистемы параллельного ввода-вывода в вычислительной системе.
Каково основное назначение подсистемы параллельного ввода-вывода в вычислительной системе ? Приведите простые примеры устройств (элементов), которые обычно (чаще всего) приходится подключать к ВС, используя подсистему параллельного ввода-вывода ?
Подсистема предназначена для ввода или вывода логических сигналов того же стандарта, что и в МК, т.е. для связи МК с устройствами, которые воспринимают или формируют такие сигналы.
Такие выводы (входы или выходы) весьма универсальны, поэтому в МК их делают много (десятки).
Сколько понадобится выходов и сколько входов, заранее сказать трудно, для разных задач бывает по-разному. Поэтому делают универсальные выводы, которые можно переключать в режим входа или в режим выхода.
Это открывает возможность делать «двунаправленную» линию, которая может соединять два или более устройств. Для этого достаточно соединить между собой два вывода, каждый из которых обладает свойством двунаправленности.
В двунаправленной линии нельзя допускать, чтобы больше одного устройства находилось в режиме «выход», поскольку в этом случае состояние сигнала на линии может быть неопределенным.
Опишите типовую структуру таймерного канала. Для чего может использоваться таймерный канал ?