ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.


У нас со скидками рулонные шторы всем и каждому. За небольшую оплату трубы для всех и каждого. В нашей компании ремонт квартир недорого, со скидками.

 

Часть 14

Глава 13  Мультипроцессорная обработка
-----------------------------------------------------------------
Процессор i486 поддерживает мультипроцессорную работу по
системной шине. Процессоры, работающие на системную шину, должны
иметь различные полосы пропускания шины.
Мультипроцессорная обработка позволяет улучшить некоторые
аспекты быстродействия системы. Например, система компьютерной
графики может использовать центральный процессор i860(ТМ)
специально для быстрой обработки растровых образов, в то время
как процессор i486 будет поддерживать стандартную операционную
систему, например UNIX или OS/2. Мультипроцессорные системы
чувствительны к двум аспектам конструкции:
- Организация непротиворечивого кеширования - Когда один
  процессор выполняет доступ к данным, кешируемым в другом
  процессоре, он не должен получить неверные данные. Если
  процессор модифицирует данные, то все прочие обращающиеся к
  этим данным процессоры должны получать модифицированные
  данные.
- Надежная связь - Процессоры должны иметь между собой связь,
  исключающую недопустимые взаимные помехи при доступе более чем
  одного процессора к одной и той же области памяти.
Непротиворечивость кеширования рассматривалась выше, в Главе 12.
Надежность связи обсуждается в следующем разделе, описывающем
механизм "захвата" шины.
13.1  Циклы шины с захватом и псевдо-захватом шины
-----------------------------------------------------------------
Хотя архитектура мультипроцессорных систем может сильно
отличаться, в целом все они нуждаются в надежной связи с
памятью. Процессор в процессе, например, обновления бита Доступа
в дескрипторе сегмента должен исключить аналогичные попытки всех
прочих процессоров, до тех пор, пока операция не завершится.
Также требуется надежная связь с прочими процессорами. Хозяева
шины должны иметь возможность надежного обмена данными.
Например, бит в памяти может разделяться несколькими хозяевами
шины и использоваться как сигнал того, что некоторые ресурсы,
такие как переферийное устройство, находятся в состоянии
ожидания. Хозяин шины может проверить этот бит, увидеть, что
ресурс свободен, и изменить состояние бита. Это состояние будет
указывать другим потенциальным хозяевам шины, что ресурс
используется. Проблема может возникнуть в том случае, когда
другой хозяин шины прочитывает этот бит в промежутке времени
между тем, как первый хозяин шины прочитал бит, и моментом
изменения состояния этого бита. В этом случае оба потенциальных
хозяина шины будут считать, что ресурс свободен. При
одновременной попытке использовать ресурс они могут повлиять
друг на друга недопустимым образом. Процессор предотвращает
такие ситуации, поддерживая циклы шины с захватом; во время
таких циклов запросы на управление шиной игнорируются.
Процессор i486 защищает целостность некоторых критических
операций с памятью, воздействуя на выходной сигнал LOCK#. Чтения
и записи 64-разрядных операндов и (128-разрядные)
предварительные выборки команд защищаются выходом, который
называется PLOCK#. За использование этих сигналов для управления
доступом к памяти среди процессоров отвечает разработчик
аппаратного обеспечения.
Процессор автоматически устанавливает один из этих сигналов во
время некоторых критических операций с памятью. Программное
обеспечение может задавать дополнительные операции с памятью,
для которых требуется сигнал LOCK#.
В число средств интерфейса мультипроцессорной обработки общего
назначения входят:
     - Сигнал LOCK#, появляющийся на штырьке процессора.
     - Сигнал PLOCK#, появляющийся на штырьке процессора.
     - Префикс команд LOCK,  позволяющий установку сигнала  LOCK#
       программным обеспечением.
     - Автоматическая установка сигнала LOCK# для некоторых видов
       операций с памятью.
     - Автоматическая  установка  сигнала  PLOCK#  для  некоторых
       других видов операций с памятью.
13.1.1  Префикс LOCK и сигнал LOCK#
-----------------------------------------------------------------
Префикс LOCK и соответствующий ему сигнал следует использовать
только для исключения прерывания прочими хозяевами шины операции
пересылки данных. Префикс LOCK может использоваться со
следующими командами процессора i486, когда они модифицируют
оперативную память. При использовании префикса LOCK с любыми
другими командами, либо с этими же командами, но когда они не
выполняют записи в память (т.е. когда операнд назначения это
регистр) генерируется исключение неверного кода операции.
     - Проверка и изменение бита: команды BTS, BTR и BTC.
     - Обмен данными:  команды XCHG, XADD и CMPXCHG (команде XCHG
       префикс LOCK не требуется).
     - Арифметические и логические операции  с  одним  операндом:
       команды INC, DEC, NOT, NEG.
     - Арифметические  и  логические операции с двумя операндами:
       команды ADD, ADC, SUB, SBB, AND, OR или XOR.
Команда с захватом гарантированно захватывает только область
памяти, определяемую операндом назначения, но может захватить и
большую область памяти. Например, типовые конфигурации 8086 и
80286 захватывают все физическое адресное пространство.
Доступ к семафорам (разделяемой памяти, используемой для
сигнализации между несколькими процессорами) должен выполняться
с использованием идентичного адреса и длины. Например, если один
процессор обращается к семафору в формате доступа слова, прочие
процессоры не должны при доступе использовать байтовый формат.
Целостность захвата не зависит от выравнивания поля памяти.
Сигнал LOCK# устанавливается для стольких циклов шины, сколько
нужно для обновления всего операнда целиком.
13.1.2  Автоматический захват
-----------------------------------------------------------------
Существует несколько критических операций с памятью, для которых
процессор устанавливает сигнал LOCK# автоматически. Эти
операции:
     - Квитирующие прерывания.
После запроса на прерывание внутренний контроллер использует
шину данных для посылки процессору вектора прерывания для
источника прерывания. Процессор устанавливает сигнал LOCK#,
чтобы исключить появление в это время на шине любых других
данных.
- Установка бита Занят в дескрипторе TSS.
  При переключении на задачу процессор проверяет и устанавливает
  бит Занят поля Типа в дескрипторе TSS. Для исключения
  одновременного переключения двух процессоров на одну и ту же
  задачу процессор устанавливает во время проверки и установки
  этого бита сигнал LOCK#.
- Обновление дескрипторов сегментов.
   При загрузке сегментного дескриптора процессор устанавливает
   бит Доступа, если этот бит очищен. Во время данной операции
   процессор также устанавливает сигнал LOCK#, чтобы дескриптор
   не мог быть модифицирован другим процессором в процессе его
   обновления данным процессором. Для эффективности этих
   действий процедуры операционной системы, выполняющие
   обновление дескрипторов, должны использовать следующие шаги:
        Использовать при обновлении байта прав доступа для
        маркировки дескриптора как не-Присутствующего операцию с
        захватом, и задать значение поля Типа, указывающее на
        то, что происходит обновление дескриптора.
        Обновить поля дескриптора. (Это может потребовать
        несколько операций доступа к памяти; следовательно,
        префикс LOCK неприменим).
        Использовать при обновлении байта прав доступа для
        маркировки дескриптора как Достоверного и
        Присутствующего операцию с захватом.
Отметим, что процессор 386 DX всегда обновляет бит Доступа,
независимо от того, очищен он или установлен. Процессор i496
обновляет бит Доступа только если он еще не установлен.
- Обновление элементов каталога страниц и страничных таблиц.
  При обновлении элементов каталога страниц и страничных таблиц
  процессор использует циклы с захватом при установке битов
  Доступа и "Грязный".
- Выполнение команды XCHG.
  Процессор i486 всегда устанавливает сигнал LOCK# во время
  команды XCHG, обращающейся к памяти (даже при отсутствии
  префикса LOCK).
13.1.3 Псевдо-захват
-----------------------------------------------------------------
Штырек PLOCK# указывает, что текущий цикл шины и последующий
должны рассматриваться как элементарная пересылка. Реализуя
механизм псевдо-захвата, системное аппаратное обеспечение может
гарантировать запись и чтение 64-разрядных операндов как
элементарные операции. Операнд для этого должен быть выравнен по
границе двойного слова, чтобы для завершения чтения или записи
требовалось не более двух циклов шины.
Мехпнизм псевдо-захвата также может служить для защиты
предварительной выборки команд и прочих операций пересылки,
работающих более чем с 32 битами. Подробное описание сигнала
PLOCK#, его временные характеристики и различные способы
использования см. в Справочном Руководстве по аппаратному
обеспечению процессора i486(TM).


Яндекс цитирования