Система команд и режимы адресации процессоров Pentium

Система команд процессоров Pentium поддерживает типы команд, рассмотренные ранее. С эволюцией системы команд для различных моделей процессоров Pentium можно ознакомиться в /1, 2/. Набор команд обеспечивает выполнение операций над 8-, 16- и 32-разрядными операндами; содержит безадресные, 1-адресные и 2-адресные команды. Система команд процессоров Pentium обеспечивает поддержку 11 режимов адресации /1/: 9 рассмотренных ранее и 2 дополнительных: базовый индексный с масштабированием и относительный базовый индексный с масштабированием. Вычисление эффективного адреса (32-разрядного внутрисегментного смещения) выполняется по формулам 6.1 и 6.2, соответственно.

  (6.1)
  (6.2)

Двухбитное поле Масштаб (Scale) кодирует значение масштабного множителя (1, 2, 4, 8), который указывает размер элементов массива при использовании индексной адресации.

6.3 Аппаратная организация защиты в процессорах Pentium

Современные ВМ поддерживают многопрограммный (мультипрограммный) и многозадачный (мультизадачный) режимы работы /1/.

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

Многозадачностью называется способ организации работы компьютера, при котором в его оперативной памяти содержатся программы и данные для одновременного выполнения нескольких процессов обработки информации (задач). Один из способов реализации многозадачности, называемый разделением времени, заключается в предоставлении каждой задаче некоторого интервала времени (кванта обслуживания), в течение которого процессор выполняет команды соответствующей программы. Если по истечении выделенного кванта времени обработка программы не заканчивается, она прерывается и становится в очередь программ, ожидающих обработки. При реализации многозадачности необходимо обеспечить взаимную защиту программ и данных, относящихся к различным задачам.

Для обнаружения и идентификации ошибок современные процессоры, в т.ч., и процессоры Intel, сконструированы со встроенным механизмом защиты. Этой цели способствует организация памяти, которая предусматривает взаимное разделение адресных пространств различных задач с помощью сегментов. Система привилегий жёстко регламентирует взаимоотношения задач с памятью, операционной системой (ОС) и друг с другом. Для эффективного управления всей системой ОС разрешён доступ к памяти всех программ, а пользовательским программам обеспечивается доступ к программам ОС только в разрешённых точках входа. Для поддержки указанных функций в систему команд процессоров Intel введены некоторые привилегированные команды, которые могут выполняться только ОС. Кроме того, в структуре процессора имеется ряд регистров, к которым закрыт доступ со стороны пользовательских программ.

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

Специальное поле предел определяет границы сегмента. С его помощью процессор обнаруживает такие распространённые ошибки, как переполнение стека, неверные указатели и индексы массивов, неправильные адреса вызовов и переходов. Ошибки нарушения границы обнаруживаются в момент их возникновения, что существенно облегчает поиск их причины. Остальные параметры защиты хранятся в байте доступа (Access Rights) дескриптора, структура которого представлена на рисунке 6.1.

Рисунок 6.1 – Формат байта доступа дескриптора

Специальный бит присутствия Р указывает, где размещён искомый сегмент – в основной памяти ВМ (Р=1) или на диске (Р=0).

Бит доступа А фиксирует каждое обращение к сегменту.

Бит S кодирует назначение и способ использования дескриптора. При S=0 дескрипторы являются системными. Они используются для обращения к системным сегментам TSS, LDT или являются шлюзами для задания разрешённых точек входа в защищённые программы ОС. Дескрипторы несистемных сегментов кода, данных и стека имеют бит S=1.

Поле TYPE доопределяет тип дескриптора. Проверка типа обнаруживать ошибки при использовании сегмента не по назначении. Например, в сегмент кода нельзя записывать, а с сегментом таблицы LDT нельзя явно производить операции считывания, записи и выполнения.

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

Поле привилегий DPL (Descriptor Privilege Level) задаёт разрешённый уровень привилегий для доступа к сегменту. Привилегии – это свойство, которое определяет, какие программы можно выполнять и к каким данным возможен доступ в каждый конкретный момент времени. В целом уровень привилегий программы определяет конкретное подмножество сегментов адресного пространства, к которому программа может обращаться. Привилегии устанавливаются программами ОС в байте доступа дескриптора сегмента при заполнении дескрипторных таблиц. Попытка задачи использовать сегмент с более высоким уровнем привилегий приводит к особому случаю защиты.

Уровни привилегий (PL) удобно представить в виде колец защиты: уровень привилегий PL=0 отводится для ядра ОС, PL=1 – утилитам ОС, PL=2 – служебным программам ОС, системам управления базами данных и др., PL=3 – пользовательским программам.

При любом межсегментном взаимодействии всегда участвуют два сегмента – текущий сегмент кода и сегмент, к которому происходит обращение (сегмент назначения). Обратиться к данным сегмента назначения можно в том случае, если уровень его привилегий равен или меньше уровня привилегий текущего сегмента кода. При межсегментных передачах управления (доступе к другому сегменту кода) переход возможен, если уровень привилегий сегмента назначения равен уровню привилегий текущего сегмента кода (т.е., сегменты кода находятся в пределах одного кольца защиты). Варианты возможных межсегментных взаимодействий наглядно демонстрирует рисунок 6.2 /1/.

Рисунок 6.2 – Обращения в пределах колец защиты и между ними

Последовательность проверок при всех межсегментных обращениях следующая. Перед тем как обратиться к операнду в памяти, программа загружает селектор в один из сегментных регистров, и аппаратным путём выполняется проверка возможности к адресуемому операнду. Сначала процессор сравнивает формируемое внутрисегментное смещение со значением поля предела сегмента и определяет правильность адреса (в случае выхода за границы сегмента процессор формирует прерывание общей защиты). Затем процессор выполняет проверку привилегий сегмента, к которому происходит обращение (такая проверка зависит от типа сегмента назначения). Непосредственно перед каждым обращением к операндам, в т.ч. и внутрисегментном, дополнительно аппаратным путём проверяется ещё ряд параметров защиты. Нарушение любого из них приводит к обработке особого случая и предотвращает обращение к операнду.

Передача управления в защищённом режиме осуществляется командами CALL, JMP, INT, RET, IRET, а также механизмами исключений и прерываний. При выполнении внутрисегментного перехода осуществляется только проверка границы перехода. При исполнении команд межсегментного перехода выполняется проверка привилегированности кодового сегмента назначения. Если межсегментный переход осуществляется в пределах одного кольца защиты, то доступ к вызываемому сегменту разрешён.

Реализуя защиту, процессор запрещает пользовательским программам выполнять те операции, которые выполняются программами ОС. Однако в любой системе есть некоторые стандартные процедуры, которые желательно выполнять на любом уровне привилегий, например, доступ пользовательских программ к утилитам ОС (они имеют PL=1). Это приводит к наличию исключений в общих правилах защиты. Процессоры Pentium обеспечивают 2 способа реализации межсегментных передач управления из менее привилегированного сегмента в более привилегированный: обращение к согласованному сегменту и использование шлюзов вызова.

Согласованный сегмент – это сегмент, у которого отсутствует защита по привилегиям. Выделение согласованного сегмента осуществляется с помощью специального бита подчинения С в поле TYPE байта доступа сегмента кода. Процедуры, размещённые в согласованном сегменте кода, можно вызывать из программ с любым уровнем привилегий. Наличие согласованных сегментов удобно для организации системных библиотек, программы которых должны быть доступны всем задачам.

Шлюзы вызова – это специальные дескрипторы, которые определяют разрешённые точки входа в защищённые процедуры более высокого уровня. Благодаря шлюзам вызова, пользовательские программы получают от ОС только те обслуживания, которые ОС разрешает оказывать пользовательским программам. По существу, шлюзы вызова не являются дескрипторами, но их удобно размещать в дескрипторных таблицах. При использовании шлюзов вызова передача управления всегда осуществляется косвенно. Вызывающая программа обращается к шлюзу вызова, а он определяет точку входа в вызываемой процедуре. 32-разрядный дескриптор шлюза вызова имеет следующий формат: байт доступа, счётчик слов (1 байт), селектор сегмента назначения (1 байт) и смещение (1 байт).

Селектор сегмента назначения содержит адрес дескриптора кодового сегмента назначения, который (дескриптор) также хранится в дескрипторной таблице. Селектор и смещение задают полный адрес перехода, который определяет вход в защищённую процедуру только в разрешённой точке.

При передаче управления более защищённой программе может потребоваться копирование параметров из стека вызывающей программы в стек вызываемой. Для этого в шлюзе вызова предусмотрено поле – счётчик слов, в котором указывается число копируемых параметров.

Доступ к шлюзу вызова контролируется механизмом защиты. Селекторы шлюзов вызова можно загружать только в сегментный регистр кода CS. При доступе к шлюзу действуют такие же ограничения, как и при обращении к данным (см. рисунок 6.2).

6.4 Аппаратные средства поддержки многозадачности

В структуре процессоров Pentium имеются средства поддержки многозадачного режима, с помощью которых реализуется защита и быстрое переключение задач /1/: специальная структура данных, организованная в виде сегмента состояния задачи TSS, дескриптор сегмента TSS, дескриптор шлюза задачи, 16-разрядный регистр TR (Task Register) и связанный с ним программно недоступный теневой 64-разрядный регистр TRт.

Переключение задачи сходно с вызовом процедуры, но требует сохранения большего количества информации о состоянии процессора. Содержимое регистров процессора, участвующих в выполнении задачи, называется средой задачи. Для каждой задачи создаётся собственный сегмент TSS, который фактически характеризует состояние виртуального процессора задачи в многозадачной системе. Выполнение задач процессора осуществляется в соответствии с планом и в порядке, определяемым ОС. При переключении задач среда выполняемой задачи переписывается в сегмент TSS этой задачи (на этот сегмент указывает регистр текущей задачи TRт) – (стрелка 1 на рисунке 6.3). После этого в регистр TR помещается селектор нового сегмента TSS (стрелки 2), и в регистры процессора из сегмента TSS вызываемой задачи загружается содержимое её среды (стрелка 3). Выполнение программы новой задачи продолжается с команды, адрес которой указан в регистре EIP новой задачи, а не с самого начала. Указанные операции реализуются автоматически с помощью аппаратных средств процессора. При этом в стеке, в отличие от вызова подпрограмм, никакой информации не сохраняется, управление передаётся полностью в среду выполняемой задачи. Схема переключения задач представлена на рисунке 6.3 /19/.

Длительность процедуры переключения задач составляет 200 тактов.

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

Основным назначением механизма переключения задач является организация очередных переходов между выполняемыми программами. Переключение программ может производиться командами JMP и CALL типа FAR (межсегментные переходы), командами вызова прерываний (INT n) или командой IRET, а также аппаратными прерываниями и ловушками.

Рисунок 6.3 – Схема переключения задач

При выполнении межсегментных переходов в защищённом режиме в регистре EIP содержится смещение (адрес команды внутри сегмента), а в регистре CS может находиться адрес или дескриптора сегмента, или шлюза дескриптора сегмента, или дескриптора TSS, или дескриптора шлюза TSS.

Сегмент TSS определяется одноимённым сегментным дескриптором, который может находиться только в глобальной дескрипторной таблице GDT. Этот дескриптор помимо адреса содержит ещё указание размера и уровня привилегий сегмента TSS. Выбор дескриптора TSS текущей задачи в таблице GDT осуществляется с помощью селектора, загружаемого в программно доступный регистр TR. Для уменьшения времени обращения к операндам сегмента TSS дескриптор TSS текущей задачи после выборки из таблицы GDT запоминается в программно недоступном регистре TRт. Содержимое этого регистра автоматически обновляется процессором при смене задачи. При инициализации системы с помощью специальной команды LTR в регистр TR загружается селектор исходной задачи, а в процессе работы его содержимое может изменяться.

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


6.5 Перспективы развития процессоров

Согласно /1/, самым существенным фактором, влияющим на архитектурные решения современных процессоров, является постоянное совершенствование технологии производства ИС. Как следствие,- рост уровня интеграции, уменьшение задержек в вентилях и связях, снижение энергопотребления при переключении вентиля. В целом с ростом уровня интеграции увеличиваются ресурсы на кристалле и повышается тактовая частота работы микросхем, что позволяет повышать производительность процессоров. Первое направление связано с увеличением объёма внутренней кэш-памяти и совершенствованием способов её организации. Второе направление связано с реализацией в процессорах принципов конвейеризации и параллельной обработки в нескольких конвейерах на разных стадиях выборки и выполнения команд.

Практически все накопленные в процессе конкуренции различных фирм архитектурные решения находят своё воплощение в новых архитектурах. По этой причине в архитектуре современных процессоров различных производителей много общего, и ставится вопрос об унификации архитектур. На сегодняшний день можно выделить следующие основные тенденции развития архитектур современных процессоров:

1) Применение суперскалярной обработки с динамическим параллелизмом в процессорах с чисто аппаратным механизмом выборки несвязанных команд программы из памяти и параллельном запуске их на исполнение (например, процессоры Pentium, PowerPC, Alpha, SPARC и др.).

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

3) Использование аппаратных средств, обеспечивающих векторную обработку данных.

Современный процессор – это 64-разрядный суперконвейерный, суперскалярный процессор с RISC-операционным ядром и большим числом дополнительных блоков, реализующий динамическое исполнение команд. Для эффективной обработки данных мультимедиа и графики система команд современных процессоров расширяется за счёт специализированных команд мультимедийной обработки: например, команд расширений MMX, SSE, SSE2 в процессорах компании Intel; ActiVec – IBM, Motorola; VIS – SPARC; 3DNow! – AMD.

Для унификации структур обработки данных в структуры некоторых современных процессоров включают специальные преобразователи исходных кодов команд во внутренние машинные команды «исполнительного процессора» (например, сложных CISC-команд в RISC-команды в процессорах Pentium, AMD или VLIW-команды в процессоре Crusoe).

Как уже упоминалось ранее, масштабные исследования ведутся по созданию процессорных элементов и компьютеров в целом с использованием принципиально иной элементной базы: биполярных молекул, молекул ДНК, квантовых кубитов и света.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: