
- •Мп и их роль в современных компьютерах, cisc, risc и epic мп:
- •Поэтому, для risc – процессоров характерно:
- •К преимуществам мп с risc – архитектурой можно отнести:
- •Краткая история развития мп семейства х86:
- •4. Перспективы развития микропроцессорной техники.
- •Основные причины и результаты усовершенствования мп семейства х86:
- •Системные регистры мп семейства х86:
- •Дескрипторные таблицы Дескрипторные таблицы
- •Назначение и структура дескрипторов кода и данных:
- •Назначение и структура системных дескрипторов:
- •Назначение и структура дескрипторов шлюзов:
- •Теневые регистры и их назначение:
- •Регистр флагов и назначение его отдельных битов:
- •Принцип формирования линейных адресов в реальном режиме работы мп семейства х86:
- •Принцип формирования линейных адресов в защищенном режиме работы мп в семействе х86:
- •Страничное преобразование адресов, ее назначение и принцип реализации:
- •Источники и разновидности запросов прерываний процессора:
- •Организация системы прерываний в реальном режиме работы процессоров семейства х86:
- •Организация системы прерываний в защищенном режиме работы процессоров семейства х86:
- •Организация общей (базовой) защиты в мп х86:
- •Защита по привилегиям сегментов и ее организация:
- •Защита по привилегиям команд:
- •Принципы организации многозадачного режима работы:
- •Сегмент состояния задачи, его структура и назначение:
- •Принципы, лежащие в основе использования кэш-памяти, и организация кэш-памяти прямого отображения:
- •Принципы организации полностью ассоциативной и множественно-ассоциативной кэш-памятей:
- •Принципы организации целостности данных в подсистеме памяти с кэшированием:
- •Описание блок-схем алгоритмов обслуживания запросов в подсистеме памяти с кэшированием:
- •4. Двухуровневое кэширование.
- •Принципы организации конвейерной обработки сигналов в мп х86:
- •Циклы шины и режимы работы мп х86:
- •2. Реальный режим (r86)
- •3. Защищенный режим (p – режим)
- •4. Виртуальный режим (v86)
- •5. Режим smm
- •Принципы организации пакетного режима обмена информацией:
- •Основные особенности микроархитектуры Intel Sandy Bridge и ее структурная схема:
- •Сущность принципа «динамического исполнения команд»:
- •Структурная схема ядер мп Sandy Bridge и их функционирование:
- •Необходимость и общие принципы функционирования блока предсказаний ветвлений:
- •Необходимость предварительного и основного декодирования инструкций х86 в мп микроархитектуры Sandy Bridge:
- •Функционирование системы обнаружения программных циклов и суть работы блока pcu в мп микроархитектуры Sandy Bridge:
- •Сущность технологий макро- и микрослияний инструкций и микрокоманд в мп микроархитектуры Sandy Bridge:
Назначение и структура дескрипторов кода и данных:
Общий вид этих дескрипторов приведен на рисунке III.2.
63 Байт 7 55 52 Байт 6 48 47 Байт 5 Байт 4 32
Базовый адрес сегмента (биты 31…24) |
G D 0 U |
Предел сегмента (биты 19…16) |
Байт прав доступа |
Базовый адрес сегмента (биты 23…16) |
|
Базовый адрес сегмента (биты 15…0)
|
Размер (предел) сегмента (биты 15…0) |
31 Байт 3 Байт 2 16 15 Байт 1 Байт 0 0
Рис III.2 Формат дескриптора кода и данных МП семейства х86
Здесь:
G (Granularity) - гранулярность размера сегмента (G = 0 в байтах, G = 1 в страницах по 4К).
D (Default size) – разрядность, по умолчанию, адресов, операндов и указателя стека (D = 0 16 бит, D = 1 32 бита). Благодаря этому биту процессоры i386+, без специальных дополнительных мер, могут переключаться с выполнения 16 битного кода на 32 битный код и обратно. Для сегментов данных и стека справедлива аналогичная интерпретация. Когда бит D = 0, стековые операции производятся с 16 битными элементами и в качестве указателя стека привлекается регистр SP. Кроме того, максимальный размер стека ограничен 64 Кбайт. Когда бит D = 1, стековые операции производятся с 32 битными элементами и в качестве указателя стека привлекается регистр ESP, при этом максимальный размер стека может быть увеличен до 4 Гбайт.
U (Users) – бит пользователя, используется по его усмотрению. Процессор этот бит игнорирует.
AR (Access rights byte) – байт прав доступа.
Байт прав доступа у дескрипторов кодового сегмента имеет структуру, приведенную на рисунке III.3, а у дескрипторов сегментов данных и стека структуру, приведенную на рисунке III.4.
7 6 5 4 3 2 1 0
-
P
DPL
S
E
C
R
A
Рис.IV.3 Байт прав доступа дескрипторов сегментов кода.
7 6 5 4 3 2 1 0
P |
DPL |
S |
E |
ED |
W |
A |
Рис.III.4 Байт прав доступа дескрипторов сегментов данных и
стека.
Здесь:
DPL (Descriptor Privilege Level) – уровень привилегий сегмента: (00, 01, 10, 11: при этом уровень 00 является высшим уровнем, а уровень 11- низшим).
S (System) – признак системного сегмента: (S=0 характеризует системный сегмент, а S=1 - сегмент кода, стека, или сегмент данных).
E (Executable) – признак исполняемости сегмента. (Для сегмента кода E=1, для сегментов данных или стека E = 0).
C (Conforming) – признак подчиненности сегмента: (При С=1 код запрашиваемого сегмента будет исполняться, если текущий уровень привилегий процессора (CPL) не выше уровня привилегий дескриптора запрашиваемого сегмента (DPL); При С=0 (неподчиненный сегмент), управление на данный сегмент может передаваться, только, если CPL=DPL).
R (Readable) – признак читаемости кодового сегмента. При R=1, можно считать, т.е. скопировать содержимое кодового сегмента. Если же R=0, то содержимое кодового сегмента считать нельзя, что является защитой от несанкционированного (случайного или умышленного) копирования программ.
A (Accessed) – признак обращения к данному сегменту. Если A=0, то это означает, что к моменту контрольного обращения к этому биту, обращения процессора к данному сегменту (кода, данных или стека) не было. Если же A=1, то это означает, что к данному моменту селектор этого сегмента уже загружался в сегментный регистр или для него выполнялась команда тестирования. Обычно, операционная система привлекает бит A для того, чтобы выбрать нечасто используемые сегменты, которые при необходимости можно передать на жесткий диск (при P = 0) в процессе свопинга (swapping). Биты A у дескрипторов всех сегментов первоначально должны находиться в состоянии 0. Через регулярные интервалы времени ОС сканирует все дескрипторы и сбрасывает их биты A в нуль. Если в некоторый момент времени у дескриптора определялся бит A=1, то это означает, что к нему после предыдущего сканирования были обращения. При этом ОС производит инкремент времени последнего использования таких сегментов. Когда появляется необходимость выбирать сегмент в оперативной памяти для передачи его на жесткий диск, то этим сегментом будет сегмент неиспользованный за интервал сканирования, т.е. тот у которого бит A=0. Если к этому моменту у всех сегментов A=1, то будет выбран сегмент, к которому дольше всего не было обращения, т.е. интервал времени от последнего обращения к нему до момента принятия решения о свопинге было максимальным. Описанный принцип, по которому из оперативной памяти выбирается сегмент, подлежащий передаче во внешнюю память, носит название алгоритма LRU (Least Recently Used – наименее используемый к настоящему моменту времени).
Очевидно, каждому сегменту должен соответствовать свой счетчик, подсчитывающий время от последнего обращения к сегменту. Тогда, при использовании, например, 16 сегментов, необходимо 16 счетчиков. Если же сегментов значительно больше, то и счетчиков соответственно должно быть больше. Поэтому иногда делают так, что биты A сбрасываются все после того, как они у всех дескрипторов стали равными 1 (при этом дескриптор, к которому было последнее обращение, остается с битом A=1) и все начинается сначала. Такой способ особенно широко применяется при свопинге страниц, при использовании страничной организации памяти.
ED (Expansion Direction или Expand Down) – признак направления изменения адресов при обращении к данному сегменту. Этот признак является признаком отличия сегмента стека (ED = 1) от сегмента собственно данных (ED = 0). Он управляет интерпретацией поля предела. В сегменте данных адресация в процессе изменения начинается с базового адреса сегмента (зафиксированного в сегментном регистре), и границей сегмента будет адрес равный сумме базового адреса и предела сегмента. Поэтому для сегмента данных допустимыми будут все смещения меньшие или равные указанному пределу.
В сегменте стека, адреса ячеек стека, при его использовании, изменяются в сторону уменьшения адресов. Поэтому начальным адресом стековой памяти будет являться сумма базового адреса и константы 0FFFFh (64К-1), в случае, когда бит D = 0, т.е. в случае 16 разрядной адресации, либо суммой базового адреса и константы 0FFFFFFFFh (4Г-1), в случае, когда бит D = 1, т.е. в случае 32 разрядной адресации. Минимальный же адрес стековой памяти определяется значением предела. Так как все смещения в сегменте должны быть больше предела, максимальный размер стека получается, когда предел равен 0. Минимальный же размер стека получается, когда предел равен либо 0FFFFh (при D=0), либо 0FFFFFFFFh (при D = 1), что соответствует пустому сегменту с нулевым размером.
Сегменты стека по существу являются разновидностью сегментов данных. Они отличаются от сегментов, собственно данных, с разрешенными операциями записи и считывания, только интерпретацией поля предела, которое определяет размер стека с учетом бита гранулярности G. Отметим сразу же, что термин «расширение вниз», т.е. к меньшим адресам, относится к той графической иллюстрации адресного пространства, в которой нулевой адрес находится внизу рисунка, а максимальный адрес вверху.
На рис III.5 иллюстрировано различие между интерпретацией поля предела для сегментов данных и сегментов стека в случае, когда они оба имеют предел 1FFFh (G = 0). Отметим, что в процессорах i386+ при бите D = 1, бит гранулярности G также должен находиться в состоянии 1. Если же бит D = 0, то и бит G должен находиться в состоянии 0. Следовательно, необходимо не только определить 32 битный сегмент стека с максимальным адресом 4Г-1, но и установить предел в единицах 4К байт (т.е. в страницах).
Рис III.5. Интерпретация поля предела для сегментов данных и
сегментов стека
W (Writable) – признак того, что в данный сегмент данных информация может быть записана и модифицирована (W = 1). Если же W =0, то этот сегмент является сегментом, для которого разрешено только считывание информации. Запись же информации в него или ее модифицирование – запрещена. Таким образом, память сегмента данных в этом случае работает в режиме ROM – памяти. Этот режим работы сегмента бывает очень важным в случае, если в сегменте размещены некоторые данные, таблицы, константы, которые широко используются многими программами и изменение, в которых может быть осуществлено только на системном уровне.
Кроме того, сегмент с запрещенной записью не нужно передавать на диск (если его все же нужно удалить из памяти), так как после передачи его с диска в оперативную память он не изменялся. Следовательно, ограничения на доступ по записи повышает эффективность системы виртуальной памяти, сокращая дисковые передачи.
P (Present) – бит присутствия сегмента в оперативной памяти: (P = 1 присутствует, P = 0 отсутствует).
В первом случае проверяются: условие нахождения задаваемого адреса в пределах выбираемого сегмента, т.е., что бы смещение в сегменте (эффективный адрес) было меньше значения предела сегмента, указанного в дескрипторе, а также соответствие выбранного сегмента (исполнительный, исполнительный считываемый, данных только считывания, данных считывания и записи, стека) запрашиваемому сегменту. Так, например, при загрузке селектора в сегментный регистр данных (т.е. в DS, ES, FS, и GS) тип дескриптора должен разрешать считывание из сегмента. Только исполняемые сегменты для этих регистров не допускаются, но сегменты с разрешенными операциями исполнения и считывания допустимы. В случае загрузки селектора в сегментный регистр SS в дескрипторе соответствующего сегмента должны быть разрешены операции считывания и записи. При загрузке регистра CS сегмент должен быть обязательно исполняемым. Кроме этого проверяются и некоторые другие условия. Если же хотя бы одна из этих проверок не удовлетворяется, то формируется запрос прерывания (особый случай) и загрузка селектора не производится.
После этого формируется линейный (физический) адрес путем сложения базового адреса выбранного сегмента со смещением в сегменте, формируемом в соответствии с типом адресной части команды.
Если же P = 0, в дескрипторе выделяется базовый адрес сегмента и вызывается внешняя память (винчестер). Затем, по этому базовому адресу выбирается требуемый сегмент, расположенный на винчестере, и перезаписывается на свободное место в оперативной памяти. После этого адрес, по которому этот сегмент записан в оперативную память, заносится в дескриптор на место, предназначенное для хранения базового адреса, атрибуту P присваивается значение 1 и этот дескриптор инициируется заново. Если же свободного места в оперативной памяти в данное время нет, то по атрибуту А определяется сегмент, к которому было меньше всего обращений, и он передается во внешнюю память (винчестер) на свободное место. После этой передачи, адрес, по которому данный сегмент записался на винчестер, заносится в дескриптор данного сегмента на место размещения базового адреса сегмента, а его атрибут P устанавливается в нулевое состояние. Затем на освободившееся место оперативной памяти считывается с диска требуемый сегмент по алгоритму, описанному выше.
При включенной страничной организации памяти, линейный адрес формируется аналогично, но свопинга (т.е. обмена информацией между ОЗУ и внешней памятью) на уровне сегментов не происходит. В элементе таблицы страниц также есть бит P, который определяет наличие страницы в оперативной физической памяти. При обращении к странице, в элементе которой P = 0, реализуется особый случай (исключение) страничного нарушения, при котором операционная система осуществляет:
Копирование в ОЗУ запрашиваемой страницы из внешней
памяти (винчестера);
Установку P = 1 и запись в элемент таблицы страниц нового адреса
страницы в ОЗУ;
- Стирание копии старого элемента в таблице страниц в буфере TLB;
- Рестарт команды, вызвавший особый случай.
Таким образом, байт прав доступа сегментов кодовых отличается от байта прав доступа сегментов данных и стека 1 и 2 битом, которые имеют для того и другого типов сегментов принципиально различное значение. Остальные же биты байта прав доступа сегментов этого типа выполняют одинаковые функции.