Есть ли какой-нибудь стандарт для многопроцессорной обработки 8086? - PullRequest
3 голосов
/ 06 мая 2010

Когда я делал эмулятор 8086, я заметил, что существует префикс LOCK, предназначенный для синхронизации в многопроцессорной среде. Все же единственная многозадачность, которую я знаю для арки x86. включает в себя использование APIC, который не приходил до Pentiums или 486-х.

Существовал ли какой-либо стандарт для многозадачности 8086 или он был сделан некоторыми специфическими расширениями производителя для набора команд и / или специальных портов?

По стандарту я имею в виду такие вещи: как разделить 2 процессора, если они оба используют одну и ту же память? Это невозможно без какого-либо способа заставить каждый процессор выполнять разные части кода. (или вызвать прерывание только на одном процессоре)

Ответы [ 3 ]

3 голосов
/ 06 мая 2010

Как вы разделяете 2 процессора если они оба используют одну и ту же память?

Если они обращались к одной и той же памяти через Intel MULTIBUS, то префикс LOCK вызывал именно такую ​​сериализацию.

Если память была установлена ​​локально на плате одного процессора, то префикс LOCK не будет препятствовать тому, чтобы другие процессоры входили через MULTIBUS и одновременно обращались к памяти этой платы. В этой конфигурации программисту придется играть в другие игры, чтобы заблокировать шину (и разблокировать шину после завершения операции с памятью).

1 голос
/ 06 мая 2010

Доступ к памяти на современных процессорах Intel: Процессор настраивается через FSB (передняя сторона шины) на NorthBridge (концентратор контроллера памяти). Северный мост совместно использует доступ к шине памяти, AGP и PCI (графический) и внутренней шине для связи с южным мостом. Диаграмма проверки:

alt text

И CPU управляют доступом к FSB через несколько аппаратных выводов:

  • PBRI # pin используется для арбитража Право собственности ФСБ.
  • BRO # pin используется процессором для заказать автобус.
  • LOCK # выводит заблокированную последовательность транзакция данных.

РЕДАКТИРОВАТЬ I:

Для системного процессора 8086: Когда ЦП должен совместно использовать шину данных и адресную шину с другим периферийным устройством, это решается с помощью контроллера DMA 8237

В системах с несколькими ЦП 8086 используется стандарт шины Intel Multibus IEEE 796 . Проверьте описание Multibus .

РЕДАКТИРОВАТЬ II:

8086 Многопроцессорные системы имеют глобальную (системную) память, и эта память распределяется по мультибусам. Таким образом, любой процессор в системе имеет собственный код и память для данных, а также доступ к глобальной памяти через мультибус. При этом процессор осуществляет арбитраж и передачу управления шиной, чем здесь последовательная и параллельная схема приоритетов. Однако имеется много аппаратных выводов для контроля доступа к шине. Блокировка шины производится выводом #LOCK, и все остальные процессоры будут иметь вывод #BUSY для этого времени на высоком уровне.

1 голос
/ 06 мая 2010

Ну, я здесь не эксперт, но попробую.

Что следует иметь в виду: не думайте «ПК» или «архитектура ПК». Раньше, до появления IBM PC (не говоря уже о стандартной конструкции персонального компьютера), Intel не производила процессоры для ПК; это делало микропроцессоры. Не было никаких точных ожиданий относительно того, какие аппаратные компоненты вы могли бы комбинировать с 8086. Вы могли использовать его для создания аппаратных микроконтроллеров, электронных калькуляторов, авионики и, о, конечно же, домашних компьютеров.

То, что делает префикс LOCK (насколько я помню, прошло почти 15 лет с тех пор, как я в последний раз просматривал руководства для программистов Intel), сигнализирует линию «блокировки шины» микропроцессора на время выполнения инструкции. Оказал ли это какое-либо влияние, зависело от того, что вы подключили к этой линии! Обычно, да, линия была подключена к схеме, которая помешала бы другим компонентам использовать любую из линий данных; это то, что делает автобус "автобусом" (но я не очень знаком с деталями).

Источником путаницы является то, что многозадачность - это не то же самое, что мультипроцессор (или мы должны называть это многокомпонентным?). Я не знаю, чтобы кто-нибудь пытался собрать компьютер с двумя 8086-ю, подключенными к одной шине, но процессоры не единственные, подключенные к шине, даже в архитектуре ПК. Например, программное обеспечение, работающее в 8086, может нуждаться в блокировке шины при доступе к части памяти, используемой совместно с внешним устройством ввода, поэтому внешнее устройство ввода не может записывать в него в то время, когда 8086 считывает его. Я полагаю, что даже в старомодном BIOS для ПК эта доля довольно велика.

Современные многопроцессорные архитектуры все еще полагаются на префикс LOCK для координации между различными процессорами; но это не было основной причиной его существования, и это не единственное его применение.

...