
- •Память с адресной организацией (с произвольным доступом).
- •Непосредственная адресация
- •Когда может произойти стековый доступ к памяти
- •Как происходит стековый доступ к памяти
- •Регистровый файл
- •Счетчик команд
- •Идея базовой адресации – достижение позиционной независимости. (к 50-51)
- •Непосредственная адресация
- •3. Проверки и передача управления.
- •3.4. Команда организации цикла
- •Переполнение при действиях над целыми числами.
- •Целые со знаком: дополнительный код
- •Сложение и вычитание
- •Поддержка действий с повышенной разрядностью
- •Как перейти от представления с однарной точностью к представлению с двойной ?
- •Особые случаи при действиях над числами пт
- •Неточный результат - округление и его виды
- •Численное антипереполнение, денормализованные и ненормализованные числа, псевдонуль.
- •Действия с бесконечностями
- •Регистр состояния программы (Program status register)
- •Счетчик команд
- •Способы синхронизации: программный опрос состояния versus прерывания
- •Таймерная подсистема
- •Основной счетчик
- •Техника измерения времени (чтение счетчика)
- •Ассоциативная память
Ассоциативная память
Элементы выбираются не по адресу2, а по содержимому. Поясним последнее понятие более подробно:
Для памяти с адресной организацией было введено понятие минимальной адресуемой единицы (МАЕ), как порции данных, имеющей индивидуальный адрес. Введем аналогичное понятие для ассоциативной памяти, и будем эту минимальную единицу хранения в ассоциативной памяти называть записью или строкой ассоциативной памяти (СтрАП).
Каждая СтрАП содержит два поля: поле тега (англ. tag – ярлык, этикетка, признак) и поле данных. Запрос на чтение к ассоциативной памяти словами можно выразить следующим образом: выбрать строку (строки), у которой (у которых) тег равен заданному значению.
Особо отметим, что при таком запросе возможен один из трех результатов:
имеется в точности одна строка с заданным тегом
имеется несколько строк с заданным тегом
нет ни одной строки с заданным тегом
Отметим, что поиск записи по признаку – это действие, типичное для обращений к базам данных, и поиск в базе это очень часто ассоциативный поиск. Для выполнения такого поиска следует просмотреть все записи и сравнить заданный тег с тегом каждой записи. Это можно сделать и при использовании для хранения записей обычной адресуемой памяти (и понятно, что это потребует достаточно много времени – пропорционально количеству хранимых записей !). Об ассоциативной памяти говорят тогда, когда ассоциативная выборка данных из памяти поддержана аппаратно.
При записи в ассоциативную память элемент данных помещается в СтрАП вместе с присущим этому элементу тегом. Для этого можно использовать любую свободную СтрАП.
Каков типовой размер КЭШ строки и чем он определяется.
Типовой объем кэш-памяти в современной системе – 8…1024 кбайт, а длина кэш-строки 4…32 байт. Дальнейшая оценка делается для значений объема кэша 256 кбайт и длины строки 32 байт, что характерно для систем с процессорами Pentium и PentiumPro. Длина тега при этом равна 27 бит, а количество строк в кэше составит 256К/32=8192. Именно столько цифровых компараторов 27 битных кодов потребуется для реализации вышеописанной структуры. Приблизительная оценка затрат оборудования для построения цифрового компаратора дает значение 10 транз/бит, а общее количество транзисторов только в блоке компараторов будет равно 10278192= 2 211 840, что приблизительно в полтора раза меньше общего количества тарнзисторов на кристалле Pentium. Таким образом ясно, что описанная структура полностью ассоциативной кэш-памяти реализуема только при малом количестве строк в кэше, т.е. при малом объеме кэша (практически не более 32…64 строк). Кэш большего объема строят по другой структуре.
Каковы основные недостатки программ с оверлейной структурой по сравнению с программами, работающими в системе с виртуальной памятью ?
Вначале стали использовать оверлейную структуру программ, когда большая программа разбивается на отдельные модули перекрытия (оверлеи overlays). Первый модуль загружается в память и работает. Если ему нужен код или данные, содержащиеся в других модулях, то работающий модуль вызывает функции, загружающие другие модули. При этом программист сам должен отследить: 1) вызов функций загрузки, 2) передачу управления вновь загруженным модулям, 3) контроль суммарного объема загруженных модулей (объем не должен превышать имеющегося объема памяти), 4) размещение модулей в памяти, и другие подобные вопросы. Эта работа оказывается весьма трудоемкой.
При этом отметим, что поскольку вновь загружаемые модули "ложатся" в память на место находившихся там ранее, то 1) разные объекты программы, находящиеся в разных модулях, но попадающие в одно и то же место физической памяти получают одни и те же физические адреса, 2) расходуется время на перезагрузку модулей 3) фрагментируется память, поскольку модули имеют разные размеры, 4) для работы в другой конфигурации памяти требуется перекомпоновка программы.
Как альтернатива оверлейной структуре, возникла концепция виртуальной памяти (1961 г, Манчестер). Фактически используется та же идеология перезагрузки модулей (свопинг swapping), однако замена осуществляется аппаратурой и операционной системой автоматически, без какого-либо участия программиста и незаметно для него.
При этом программист оперирует адресами в (линейном) виртуальном адресном пространстве задачи, размер которого не меньше размера программы (включающей как исполняемый код так и данные). Каждый объект программы в пространстве виртуальных адресов имеет уникальный адрес.
Как в архитектуре x86 в защищенном режиме формируется физический адрес?
Физический адрес — адрес, передаваемый на внешнюю шину для обращения к ячейкам памяти
Работа механизма формирования линейного адреса в защищенном режиме основана на двух специальных таблицах, размещаемых в памяти. Это глобальная таблица дескрипторов(GDT) и локальная таблица дескрипторов (LDT) (есть еще таблица дескрипторов прерываний, но она используется только при генерации прерываний и особых ситуаций ситуаций). Эти таблицы создаются и заполняются до переключения в защищенный режим, они содержат описания используемых программой сегментов памяти (базовый адрес, размер, тип, привилегии доступа и т.п.). Селектор сегмента, являющийся частью сформированного логического адреса в защищенном режиме содержит не базу физического адреса сегмента, а указатель на описание сегмента (дескриптор сегмента) в какой-либо таблице дескрипторов (LDT или GDT). Из выбранного таким образом дескриптора и смещения (вторая часть логического адреса) процессор автоматически вычисляет требуемый линейный адрес .
Что такое дескриптор сегмента (страницы) ?
Сегментные дескрипторы - дескрипторы, описывающие сегменты. Существует три основных типа сегмента:
Сегмент кода.
Сегмент данных.
Сегмент задачи.
Все дескрипторы имеют размер 8 байт и представляются следующим рисунком:
Файл:X86.seg.descriptors.png
Base |
G |
D/B |
L |
AVL |
Limit |
P |
DPL |
S |
Type |
Base |
|
Base |
Limit |
Какую информацию может содержать дескриптор сегмента (страницы) ?
Где находится дескриптор сегмента (страницы) ? ?
Откуда берется дескриптор сегмента (страницы) ? ?
Почему, несмотря на то, что дескрипторы располагаются в дескрипторных таблицах (в ОЗУ), трансляция адреса, требующая использования дескриптора, происходит быстро?
1 Периферийным устройством будем называть любое устройство, внешнее, по отношению к «вычислительному ядру» (т.е. к совокупности «процессор – основная память).
*)*) Единица в старшем разряде HEX-представления изображена условно, чтобы показать значение знакового бита. Реально, например в 16-разрядной сетке старшаяHEX-цифра отрицательных чисел может быть от 8 до F.
2