Формирование физического адреса
Для ускорения выполнения машинных команд в составе процессора предусмотрен отдельный, самый быстродействующий в компьютере регистровый уровень памяти.
Регистр – устройство в составе процессора, служащий для кратковременного, промежуточного хранения кодов в процессе их обработки. Запись какого-либо кода в регистр процессора принято называть загрузкой. Обычно в состав процессора входит от нескольких десятков до нескольких сотен регистров. Различие между ОП и регистрами ЦП:
· ОП – самостоятельное устройство компьютера, а регистры – составная часть других устройств;
· ОП хранит большое количество данных, необходимых находящимся в ней программам в течение всего времени их выполнения, а отдельно взятый регистр содержит код данного, код команды, адрес поля и т.д.;
· Скорость передачи данных у регистров в десятки раз выше скорости работы ОП;
· Объем ОП достигает миллиардов байт, а суммарная емкость регистров - нескольких тысяч байт.
Регистры обычно группируются по выполняемым ими функциям. Например, отдельную группу образуют регистры, предназначенные для хранения начальных адресов сегментов ОП.
Регистры процессора i8086 шестнадцатибитные, а адрес сегмента, являющийся физическим адресом ОП, - двадцатибитный. Для разрешения этого противоречия в процессоры i8086 принята следующая схема сегментной адресации. Известно, что сегмент должен быть выровнен на границу параграфа, а его адрес всегда заканчивается нулем. Следовательно, при загрузке адреса сегмента в сегментный регистр достаточно задать только первые четыре шестнадцатеричные цифры адреса, подразумевая, что его последняя пятая цифра – нуль. Пусть, например, сегмент размещается по физическому адресу , тогда в сегментный регистр следует загрузить код . Загрузка в шестнадцатеричные регистра ЦП внутри сегментного смещения не вызывает осложнений.
Итак, для хранения адресов сегментов используется сегментные регистры cs, ds, ss, es, а для хранения смещений – указательные sp, bp, индексные si, di регистры, а также регистр указателя команд ip. Существуют стандартные комбинации регистров, образующих содержащую адрес пару. В частности:
1. пара регистров cs:ip, содержимое которых рассматривается как адрес указателя очередной команды программы;
2. пара регистров ds:si, служит для задания полного указателя в сегменте данных;
3. пара регистров es:di, служит для задания полного указателя в дополнительном сегменте;
4. пары регистров ss:sp и ss:bp, используется для формирования структуры стека и задания адресов в его сегменте;
Кэш-память
Процессоры всегда работали быстрее, чем память. Процессоры и память совершенствовались параллельно, поэтому это несоответствие сохранялось. Поскольку на микросхему можно помещать все больше и больше транзисторов, разработчики процессоров использовали эти преимущества для создания конвейеров и суперскалярной архитектуры, что еще больше повышало скорость работы процессоров.
Разработчики памяти обычно использовали новые технологии для увеличения емкости, а не скорости, что еще больше усугубляло проблему. На практике такое несоответствие в скорости работы приводит к следующему: после того как процессор дает запрос памяти, должно пройти много циклов, прежде чем он получит слово, которое ему нужно. Чем медленнее работает память, тем дольше процессору приходится ждать, тем больше циклов должно пройти.
Есть два пути решения этой проблемы. Самый простой из них – начать считывать информацию из памяти, когда это необходимо, и при этом продолжать выполнение команд, но если какая-либо команда попытается использовать слово до того, как оно считалось из памяти, процессор должен приостанавливать работу.
Другое решение проблемы – сконструировать машину, которая не приостанавливает работу, но следит, чтобы программы-компиляторы не использовали слова до того, как они считаются из памяти. Однако это не так просто осуществить на практике. Часто при выполнении команды загрузки машина не может выполнять другие действия, поэтому компилятор вынужден вставлять пустые команды, которые не производят никаких операций, но при этом занимают место в памяти. В действительности при таком подходе простаивает не аппаратное, а программное обеспечение, но снижение производительности при этом такое же.
Существуют технологии сочетания маленькой и быстрой памяти с большой и медленной, что позволяет получить и высокую скорость работы, и большую емкость по разумной цене. Маленькая память с высокой скоростью работы называется кэш-памятью (от англ. слова cache «запас»; читается «кэш»).
Основная идея кэш-памяти проста: в ней находятся слова, которые чаще всего используются. Если процессору нужно какое-нибудь слово, сначала он обращается к кэш-памяти. Только в том случае, если слова там нет, он обращается к основной памяти. Если значительная часть слов находится в кэш-памяти, среднее время доступа значительно сокращается.
Объем кэша значительно меньше, чем объем ОП, а скорость примерно такая же, как у процессора. В общем случае кэш помещается между ОП и ЦП.
Экспериментально установлено, что после обработки некоторых данных ЦП с большой вероятностью обращается к тем же самым данным или находящимся в непосредственной близости от них. В этом наблюдении заключается принцип пространственной локализации. Принцип временной локализации утверждает, что программе в ближайшее время вероятнее всего потребуются данные, которые недавно были использованы. С учетом этих принципов затребованные процессором данные, а также некоторая группа находящихся рабом кодов не только передается в ЦП, но и автоматически заносится в кэш. Если при попытке записи новых данных в кэш он оказывается до конца заполненным, необходимое для записи место освобождается за счет удаления из кэша некоторой группы уже находящихся в нем данных. Применение этого подхода приводит к тому, что в кэше постепенно скапливаются наиболее часто используемые данные, что принятии называть кэшированием.