Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2- 5_Операционные системы.rtf
Скачиваний:
30
Добавлен:
23.06.2014
Размер:
192.7 Кб
Скачать

1. Как строится адресация ячеек памяти в реальном режиме?

В «наследство» от процессоров 8086/88 достался своеобразный способ задания адреса ячейки памяти в виде указателя «seg:offset», состоящего из двух слов: сегмента (seg – segment) и смещения (offset). Такая запись предполагает вычисление полного адреса по формуле:

Addr = 16 seg + offset.

Такое представление 20-битного адреса двумя 16-битными числами в процессорах 8086/88 поддержива­ется и в реальном режиме всех последующих процессоров х86. Здесь сегмент указывает адрес параграфа16-байтной области памяти. Выравнивание адреса по границе параграфа означает, что он кратен 16 (4 младших бита нулевые). Нетрудно видеть, что один и тот же адрес можно задавать разными сочетаниями этих двух компонентов. Так напри­мер, адрес начала области данных BIOS (BIOS Data Area) 00400h представляют как 0000:0400, так и 0040:0000 (шестнадцатеричное представление подразумева­ется). Возможны и другие варианты, но их не используют.

Обозначение и порядок бит и байт шин адреса и данных, принятые в аппара­туре PC, пришли от процессоров Intel 8086/88 (и даже от 8080). Самый млад­ший бит LSB (Least Significant Bit) имеет номер 0, старший (MSB – Most Significant Bit) бит байта – 7, слова – 15, двойного слова –31. На рисунках принято старший бит изображать слева, а младший – справа.

2. Расскажите о механизме кэширования памяти.

Архитектура современных 32-разрядных процессоров включает ряд средств кэширования памяти: два уровня кэша инструкций и данных (L1 Cache и L2 Cache), буферы ассоциативной трансляции (TLB) блока страничной переадресации и буферы записи. Эти средства в разных вариациях (на кристалле, картридже процессора или на системной плате) представлены в системах с процессорами 486, Pentium и Р6. В процессоре 80386 (Intel) имелся только TLB, а кэш-память, устанавливаемая на системной плате, не имела поддержки со стороны процессора.

Все механизмы кэширования в основном прозрачны для прикладных программ и после разрешения кэширования пропускают через себя потоки инструкций и данных без требования явного программного управления. Однако знание особенностей механизмов кэширования помогает в оптимизации кода. Так например, можно определить оптимальные размеры одновременно обрабатываемых структур данных, при которых кэш не «буксует» (cache thrashing). Процессоры разных моделей имеют различные характеристики отдельных элементов кэша. Определить характеристики элементов кэша процессоров Р6 позволяет вызов инструкции CPUID(2). Заметим, что не все модели процессоров способны кэшировать весь объем физически адресуемой памяти.

Кэш-память процессоров строится с учетом возможности обращений к памяти со стороны внешних абонентов – других процессоров или иных контроллеров шины. Процессоры имеют механизмы внешнего слежения за состоянием собственного кэша с соответствующими аппаратными интерфейсами. Для поддержания согласованности данных кэша и основной памяти процессор отрабатывает циклы слежения (Snoop Cycle или Inquire Cycle), инициированные внешней (для него) системой. В этих циклах, происходящих при обращении к памяти со стороны внешнего абонента, процессор определяет присутствие затребованной области в своем собственном кэше. Если область отображается в кэше, то действия процессора зависят от состояния соответствующей строки кэша и типа внешнего обращения. Обращение по записи вызовет аннулирование данной строки. Обращение по чтению к области, соответствующей модифицированной («грязной») строке, вызовет выгрузку ее содержимого в основную память, прежде чем внешний абонент выполнит реальное считывание. В процессорах Р6 обращение к «грязной» строке со стороны другого процессора может вызывать выгрузку ее содержимого непосредственно в обращающийся процессор, что экономит время. Выгрузка этой строки в основную память будет произведена позже, согласно алгоритму обратной записи.

Кэш процессоров, начиная с Pentium, поддерживает протокол MESI, названный по определяемым им состояниям М (Modified), E (Exclusive), 5 (Shared), I (Invalid). Первичный кэш инструкций реализует протокол лишь в части «SI», поскольку он не допускает записи. Состояния строк для каждого процессора определяются следующим образом:

  • М-состояние – строка присутствует в кэше только этого процессора и мо­дифицирована, то есть отличается от содержимого основной памяти; запись в эту строку не приведет к генерации внешнего (по отношению к локальной шине) цикла обращения;

  • Е-состояние – строка присутствует в кэше только этого процессора, но не модифицирована (ее копия в основной памяти действительна); запись пе­реведет ее в М-состояние, не вызывая внешнего цикла обращения;

  • S-состояние – строка присутствует в кэше этого процессора и потенци­ально может присутствовать в кэшах других процессоров, копия в памяти действительна; запись в нее должна сопровождаться сквозной записью в основную память, что повлечет аннулирование соответствующих строк в других кэшах;

  • I-состояние – строка отсутствует в кэше, ее чтение может привести к ге­нерации цикла заполнения строки; запись в нее будет сквозной и выйдет на внешнюю шину.

Процессор контролирует операции записи в память на попадание в область, представленную в кэше инструкций. Контроль выполняется на уровне физичес­ких адресов, в случае попадания строка аннулируется.

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

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

  • Некэшируемая память (Uncacheable). Все обращения процессора по чтению и записи выполняются строго в порядке, предписанном программ­ным кодом, и выходят на системную шину. Никакие спекулятивные чте­ния и предварительные выборки не используются. Такой тип требуется для ввода-вывода, отображенного на память. Работа процессора в этом ре­жиме с обычным ОЗУ приведет к значительному снижению производительности.

  • память с комбинируемой записью WC (Write Combining). Некэшируемая память, когерентность памяти не поддерживается протоколом шины. Спекулятивное чтение допустимо, записи могут комбинироваться и откладываться до любого события, вызывающего сериализацию (инструкция CPUID обращение к некэшируемой памяти, прерывание...). Такой тип применим например, для видеопамяти графического адаптера (порядок записей неважен).

  • память со сквозной записью WT (Write-through). Кэшируемая память, все операции записи и отражаются в кэше, и выходят на системную шину. Чтения по возможности выполняются из кэша, кэш-промахи вызывают заполнение строк кэша. Спекулятивное чтение и комбинирование записей разрешены. Данный тип применим, например, для буферов кадров, а также для памяти, к которой могут обращаться устройства, подключенные к шине и не поддерживающие протоколы обеспечения когерентности.

  • память с обратной записью WB (Write-back). Кэшируемая память, все операции чтения и записи по возможности выполняются только с кэш-памятью. Запись на системную шину выходит только при необходимости освобождения строк или по требованию от других абонентов шины, что уменьшает необязательный трафик шины. Спекулятивное чтение и комбинирование записи разрешены. Этот тип самый производительный, но требует поддержки протокола обеспечения когерентности от всех абонентов шины, обращающихся к данной области памяти.

  • память с защищенной записью WP (Write protected). Кэшируемая па­мять, операции чтения по возможности выполняются из кэша, промахи вызывают заполнение строк. Записи выходят на системную шину и вы­зывают аннулирование строк в кэшах всех остальных абонентов шины (процессоров).

Доступные методы кэширования зависят от возможностей процессора.