Скачиваний:
384
Добавлен:
22.01.2014
Размер:
3.77 Mб
Скачать

22.3. Тест начальной загрузки post.

POST (Power-On-Self-Test)- программа BIOS, исполняемая при включении питания или при нажатии клавиши Reset. Обычная последовательность шагов при выполнении программы приведена ниже:

- тестирование регистров процессора;

- проверка контрольной суммы ROM BIOS;

- проверка инициализации таймера 8253/8254, портов 8255 (после этого шага доступна звуковая диагностика);

- проверка и инициализация контроллеров DMA 8237;

- проверка регенерации памяти;

- тестирование 64 Кбайт нижней памяти;

- загрузка векторов прерывания и стека в нижнюю область памяти;

- инициализация видеоконтроллера

(после успешног выполнения последнего из перечисленных шагов диагностики, сообщения начинают выводиться на экран);

- тестирование полного объема ОЗУ;

- тестирование клавиатуры;

- тестирование CMOS-памяти и часов;

- инициализация COM и LPT портов;

- инициализация и тест контролера НГМД;

- инициализация и часть контроллера НЖМД;

- сканирование области дополнительной ROM BIOS.

В процессе POST используются ячейки CMOS 07h Shutdown Flag – идентификаторы состояния перед началом теста и BIOS DATA AREA (0:0472) – тип реестра (1234h = <Ctrl – Alt – Del> – “горячий” старт, 4321h – Reset с сохранением памяти). Это позволяет различать режимы рестарта (перезагрузка, выход из защитного режима 80286 и так далее) для обхода некоторых секций POST.

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

В компьютерах класса AT результаты прохождения тестов заносятся в СMOS 0Eh – Post Diagnostic Status Byte – диагностический регистр.

Кодировка ошибок специфична для каждого производителя BIOS.

Лекция № 23 кэш – память

План лекции

1. Предпосылки разработки кэш-памяти.

2. Принципы построения кэш-памяти.

3. Типы кэш-памяти.

4. Целостность данных в системах с кэш-памятью.

5. Повышение эффективности программ.

23.1. Принципы построения кэш-памяти.

Низкое быстродействие ОЗУ стало одним из основных факторов, сдерживающих производительность ПК. Даже при времени выборки из памяти, равном 70 нс, считать из нее информацию за один цикл работы шины не представляется возможным. Современные микропроцессоры синхронизируются, например, тактовой частотой 33 МГц, и тактовый период составляет приблизительно 30 нс. Поэтому центральный процессор вынужден простаивать 2-3 периода тактовой частоты (т.е. имеет 2-3 цикла ожидания), пока информация из соответствующих микросхем памяти установится на системной шине данных компьютера. Понятно, что в это время процессор не может выполнять никакую другую работу. Такая ситуация ведет обычно к тому, что общая производительность системы снижается, что, разумеется, крайне нежелательно.

Недостаточное быстродействие оперативной памяти подводит к достаточно простому, на первый взгляд выводу: использовать достаточно быструю статическую память. Однако если основную оперативную память (хотя бы пресловутые 640 Кбайт) выполнить на микросхемах статической памяти, то стоимость компьютера возрастет очень существенно. Проблема решается, если между медленной ОЗУ и быстрым процессором поставить буферную память относительно небольшой емкости, но с возможностью работать на тактовой частоте центрального процессора. Она получила название __кэш-памяти__ ("cache" означает не что иное, как убежище или тайник) и реализуется на микросхемах статического типа. Строго говоря, кэш - это специальное устройство, соединяющее между собой процессор и системную шину компьютера, состоящее из кэш-контроллера и собственно кэш-памяти, хотя на практике часто говорят просто о кэш - памяти или кэше. Соответствующий контроллер (например, i82385 фирмы Intel) заботится о том, чтобы команды и данные своевременно перемещались из медленной оперативной динамической памяти через системную шину в статическую кэш-память. Такая кэш-память называется обычно смешанной, поскольку она используется как для чтения команд, так и для переноса данных.

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

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

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

На размере блока следует остановиться подробнее, так как он является важным параметром. В целом существует зависимость, в соответствии с которой, чем больше размер блока, тем выше коэффициент удачных обращений (соотношение количества обращений, которые пришлись на кэш, и общего количества обращений процессора к памяти). С другой стороны, чем больше размер блока, тем меньше их помещается в буфере, при этом растет вероятность появления операций пересылки блоков из оперативной памяти. Кроме того, для увеличения скорости блочных пересылок между основной памятью и кэшем, желательно, чтобы с увеличением размера блока росла и разрядность шины данных между оперативной памятью и буфером. Наконец, D. Knuth установил, что линейные участки программ (т.е. участки, в которых отсутствуют команды переходов) обычно не превышают 3...5 команд, а значит, и нет особого смысла в использовании блоков, размер которых превышает эту величину.

Таким образом, информация из основной памяти загружается в кэш блоками по 2...4 слова и хранится в нем в течение некоторого времени. При обращении центрального процессора к оперативной памяти сначала проверяется наличие запрашиваемых данных в буфере, и, если их там не оказывается, осуществляется загрузка в кэш информационного блока из оперативной памяти. Следовательно, при правильной организации алгоритма работы буфера можно добиться того, что в подавляющем большинстве случаев процессор будет обращать к нему, а не к ОЗУ, что существенно повысит производительность системы.

Каждый раз, когда микропроцессору требуется информация, отсутствующая в кэше (cache-miss), он вынужден обращаться через системную шину к основной оперативной памяти. После этого обычно решается, должна ли происходить замена строки в кэш-памяти и какая конкретно строка кэша будет заменена. Об этом заботится так называемый RLU-алгоритм (Last Recently Used), который обновляет именно ту строку кэша, которая используется менее интенсивно. Здесь следует сказать и о производительности кэша, которая определяется временем доступа к кэш-памяти и вероятностью удачных обращений (cache hit). Понятно, что с увеличением длины строки вероятность того, что следующее обращение к кэшу будет удачным, повышается. Известно, например, что если при объеме кэш-памяти 4 Кбайт и длине строки 4 байт вероятность удачных обращений составляет 80 %, то при удвоении длины строки это значение может достигать уже 85 %. Однако при увеличении длины строки еще в два раза вероятность удачных обращений достигнет только 87%.

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

Внешняя кэш-память и память для тегов выполнены обычно в виде DIP-микросхем типа SRAM со временем выборки 20-25 нс. Размер кэш-памяти обычно составляет 64, 128 или 256 Кбайт, а размер памяти для тегов - 8 или 32 Кбайт. Например, если на системной плате установлено свыше 4 Мбайт оперативной памяти, то обычно используется 256 Кбайт кэш-памяти и 32 Кбайт памяти для тегов.