Читайте также:
|
|
Суть механизма в следующем. На каждом процессоре могут выполнятся операции доступа к внешней шине, которые инициируются следующими способами: доступ к внешней шине в нашей программе, доступ к внешней шине через DMA-контроллер.
Доступ к шине из программы связан с обработкой прерывания как правило. Мы на момент создания программы знаем, сколько будет обрабатываться прерывание и как правило это не занимает много процессорного времени. В то время как при DMA-пересылке задержки не столь критичны, так как шина разделяема между 10 DMA-каналами, и контроллер будет ожидать возможности переслать значение.
Существует схема приоритетного доступа ядра (Core Priority Access, CPA), которая позволяет ядру slave-процессора получить доступ к внешней шине путем прерывания выполняемой bus-master-процессором DMA-пересылки. Это значит, что если процессор является bus-master и он запрашивает доступ из ядра, то он работает в приоритете и не обращает внимания на другие процессоры. Однако, если он осуществляет DMA-пересылку и какой-либо процессор запрашивает доступ к шине из процессорного ядра, то bus-master передаст управление шиной этому процессору.
32. Операции вещательной записи. Блокировка шины. Использование "зеркальных" семафоров. Межпроцессорные сообщения и вектор прерывания VIRPT.
Каждому процессору отведен слот адресов в соответствии с его ID. Но есть некоторый интервал адресов, в котором поле M, выставляемое на адресную шину забивается всеми единицами. Т.е. процессора с 7 номером нет, но в поле адреса может присутствовать значение 7 - это означает операцию широковещательной прямой записи. При выполнении такой операции процессор может записывать слово одновременно по одному и тому же адресу во все процессоры многопроцессорной системы.
Используется при необходимости одновременного синхронного изменения значения во всех процессорах (например, при работе с семафорами). Для вещательной записи используется диапазон адресов 0x00380000 – 0x003FFFFF. Операция чтения из этого диапазона приводит к чтению из внутренней памяти самого процессора.
Особенность выполнения операции заключается в том, как bus-master определяет завершен ли цикл выполнения это операции. bus-master заряжает линию ACK в четном такте и если какой-нибудь slave в нечетном такте не выставляет подтверждение на линию ACK (это вроде как подтверждение приема что ли), то bus-master понимает, что цикл операции доступа к внешней шине не завершен, какой-то из slave не успел прочитать свое значение. И тогда он выставляет еще один такт ACK, иначе операция завршена успешно.
Семафоры
Семафор используется в многопроцессорной (многозадачной) системе как правило для контроля доступа различными процессорами (задачами) к единому разделяемому ресурсу, а также для синхронизации задач.
Семафор представляет собой флаг, который может быть прочитан или записан любым процессором, разделяющим ресурс. Значение семафора сигнализирует о возможности доступа к ресурсу (свободен/занят).
При работе с семафором необходимо обеспечить возможность выполнения неделимой операции "чтение-анализ/модификация-запись".
Блокировка шины
Поскольку мы должны работать с семафором в исключительном режиме, то мы должны получить в монопольное пользование внешнюю шину. Запрос на блокировку шины выставляется путем установки бита BUSLK (регистра MODE2). После этого процессор выставляет свой сигнал BR, ожидает получения управления над шиной и не отдает ее до снятия BUSLK (независимо от выполнения операций доступа по шине).
Использование “зеркальных семафоров”
Работать с семафором, расположенным во внутренней памяти другого процессора, значит выолнять очень медленную операцию чтения slave, поэтому испольлзуется механизм “зеркальных” семафоров. Мы задаем семафор, который представляет собой кучу ячеек, которые располагаются по одному и тому же адресу во внутренней памяти каждого из процессоров. При проверке семафоров процессор читает свою внутреннюю память, а при записи семафора используется операция широковещательной записи.
Вектор прерывания VIRPT
Запись в IOP-регистр VIRPT slave-процессора адреса процедуры обработки приводит к генерации в slave-процессоре прерывания VIRPTI. При его обработке адрес передается не в таблицу векторов прерываний, а на адрес, указанный в младших 24 битах регистра VIRPT.
Минимальная задержка при вызове обработчика VIRPTI – 6 тактов.
Попытка процессора записать значение в свой регистр VIRTP не приводит к генерации прерывания.
Алгоритм работы с VIRPT:
1) Опрашивать VIRPT slave-процессора до обнаружения маркера (напр.=0)
2) Дождаться DWPD=0 в регистре SYSTAT slave-процессора
3) Записать адрес обработчика в VIRPT
4) По завершении обработчика slave должен записать в VIRPT маркер.
Межпроцессорные сообщения
Процессор может взаимодействовать со slave-процессорами путем записи/чтения значений в их IOP-регистры MSGR0-MSGR7.
Варианты протоколов обмена сообщениями
1) Vector-interrupt-driven. BM-процессор записывает MSGRx регистры slave-процессора и инициирует прерывание VIRPTI. Обработчик прерывания по завершении работы записывает в VIRPT значение "0".
2) Register handshake. Используются 4 регистра MSGRx slave-процессора, среди которых выбираются регистр приема (R), подтверждения приема (RH), передачи (T), подтверждения передачи (TH). Для передачи данных BM-процессора записывает слово данных в T-регистр и флаг "1" в TH-регистр. Slave-процессор при обнаружении "1" в TH, читает T и записывает в TH "0". Когда BM-процессор обнаруживает "0" в TH – это признак того, что slave принял слово.
3) Register write-back. Используются только регистры T и R. Признак завершения (подтверждения) операции – неиспользуемое значение (например, "0" или 0xFFFF..FF).
33. Отличительные особенности компилятора cc21k. Поддерживаемые типы данных и их реализация.
Дата добавления: 2015-11-16; просмотров: 60 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Механизм арбитража общей внешней шины | | | Общие сведения |