7.4.5.1.4. Блокированные циклы и захват магистрали

 

Блокированные циклы должны использоваться в тех ситуациях, когда настоятельно требуется, чтобы два и более циклов магистрали неразрывно следовали один за другим, особенно в системе, в которой локальной магистралью могут управлять более одного устройства. Если блокирование не применяется, то эти циклы могут быть разделены циклом от другого задатчика магистрали.

В качестве непреложного правила нужно принять, что любые магистральные циклы, которые должны выполняться один за другим (без вмешательства циклов от другого задатчика магистрали), следует блокировать. Сигнал LOCK# процессора оповещает других задатчиков магистрали о том, что они не могут получить управление магистралью. Точно так же МП 80386 с активным сигналом LOCK # не будет опознавать запрос по входу HOLD на захват магистрали от другого задатчика.

Префикс LOCK в определенных командах активирует сигнал LOCK#. Команда XCHG, обновление дескриптора, циклы подтверждения прерывания и обновление таблицы страниц автоматически активизируют сигнал LOCK#.

Максимальное время сигнала LOCK# зависит от исполняемой команды и количества состояний ожидания в цикле. Наиболее длительный период в реальном режиме имеет длительность в два цикла магистрали плюс около двух тактов. Это случается при выполнении команды XCHG и блокированных операций «чтение-модификация-запись». Наиболее длительный период в защищенном режиме имеет длительность в пять циклов магистрали и еще около 15 тактов. Он используется при возникновении аппаратного или программного прерывания, когда МП 80386 выполняет следующие блокированные операции: чтение вентиля в таблицу дескрипторов прерываний IDT, чтение нужного дескриптора и запись бита доступа в нужный дескриптор.

Запрашивающий управление локальной магистралью задатчик активизирует вход HOLD процессора. Процессор завершает выполнение своей задачи, а затем устанавливает все свои выходы (кроме HLDA) в третье (отключенное) состояние для того, чтобы освободить магистраль. Затем МП 80386 активизирует выход HLDA для оповещения запрашивающего задатчика магистрали о том, что тот может взять управление на себя. Этот задатчик должен поддерживать сигнал HOLD активным все то время, пока он нуждается в магистрали. Процессор ожидает переход сигнала HOLD на низкий уровень, после чего МП 80386 выставляет низкий уровень на выходе HLDA и возобновляет цикл магистрали (если таковой был прерван).

Процессор не простаивает во время активности сигнала HOLD - он продолжает выполнять команды из своей очереди предвыборки. Программа останавливается, если нужен цикл чтения в то время, когда МП 80386 не может получить доступа к локальной магистрали. Ожидая доступа к магистали, МП 80386 ставит во внутреннюю очередь один цикл записи. Если же нужно более одного цикла записи, то МП 80386 должен задержать дальнейшее выполнение, пока все записи не будут сделаны.

Хотя сигнал HOLD и имеет приоритет над большинством циклов магистрали, существуют три случая, когда он не опознается: во-первых, между двумя циклами подтверждения прерывания, во-вторых, во время блокированных циклов и, в-третьих, между двумя повторяющимися циклами BS16#.

Процессор игнорирует все входы в то время, когда он находится в состоянии захвата HOLD, за исключением следующих трех случаев: во-первых, один запрос по входу NMI опознается и запоминается. Он будет обслужен после снятия сигнала HOLD. Во-вторых, сигнал RESET имеет приоритет над сигналом HOLD. Активный вход RESET повторно инициализирует МП 80386. В-третьих, вход HOLD опрашивается для определения того момента, когда МП 80386 может получить управление магистралью.

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий