- •6 Запоминающие устройства компьютера Запоминающие устройства компьютера
- •Кэш процесора. Структура кеш
- •Обоснование
- •Принципы работы кэша
- •Внутреннее устройство кеша
- •Операции ввода вывода
- •Программируемый ввод-вывод
- •Ввод-вывод с использованием прерываний
- •Реализация стека
- •Вызов процедуры и возврат из нее
Кэш процесора. Структура кеш
Хотя кэш и невидим для операционной системы, он взаимодействует с аппаратным обеспечением, связанным с памятью. Более того, многие из принципов, используемых в схемах виртуальной памяти, применимы также к кеш-памяти.
Обоснование
При выполнении каждого цикла команды процессор по крайней мере один раз обращается к памяти, чтобы произвести выборку команды. Часто это происходит повторно, причем возможны случаи нескольких повторных обращений, при которых извлекаются операнды и/или сохраняются результаты.
Частота, с которой процессор исполняет команды, ограничена временем обращения к памяти.
Годами это ограничение было существенной проблемой из-за постоянного несоответствия между скоростью процессора и скоростью доступа к основной памяти — скорость процессора возрастала быстрее, чем скорость доступа к памяти. Постоянно нужно было искать компромисс между скоростью, стоимостью и емкостью.
В идеале основная память должна была бы производиться по той же технологии, что и регистры процессора, чтобы время цикла памяти было сравнимо со временем цикла процессора. Однако эта стратегия приводит к слишком большим затратам.
Решением проблемы стало использование принципа локализации, при котором между процессором и основной памятью помещается память с небольшой емкостью и быстрым временем доступа, а именно — кэш.
Принципы работы кэша
Кэш предназначен для того, чтобы приблизить скорость доступа к памяти к максимально возможной, и в то же время обеспечить большой объем памяти по цене более дешевых типов полупроводниковой памяти.
Итак, наряду с относительно большой и более медленной основной памятью у нас есть кэш, обладающий меньшей емкостью, но и меньшим временем доступа.
В КЭШе хранится копия фрагмента основной памяти.
Когда процессор пытается прочесть слово из памяти, выполняется проверка на наличие этого слова в КЭШе. Если оно там есть, слово передается процессору. Если же его там нет, в кэш считывается блок основной памяти, состоящий из слов с определенными адресами.
Вследствие локализации обращений при считывании в кеш блока данных, содержащего одно из требуемых слов, последующие обращения к данным с высокой вероятностью тоже будут выполняться к словам из этого блока.
На рис. 1.17 показана структура основной памяти и КЭШа.
Основная память состоит из 2" адресуемых слов, каждое из которых характеризуется своим уникальным n-битовым адресом.
Предполагается, что вся память состоит из определенного количества блоков фиксированной длины, в каждый из которых входит К слов.
Таким образом, всего имеется М =2n/К блоков.
Кеш состоит из С слотов, по К слов в каждом.
При этом количество слотов намного меньше количества блоков (С<<M)4.
Некоторое подмножество блоков основной памяти хранится в слотах кэша. Если нужно прочесть из памяти слово из какого-то блока, которого нет в кэше, то этот блок передается в один из слотов Кэша.
Из-за того, что блоков больше, чем слотов, нельзя закрепить за каждым блоком свой слот. Поэтому каждый слот должен содержать дескриптор, идентифицирующий хранящийся в нем блок. В роли дескриптора обычно выступает число, состоящее из старших битов адреса, и по нему происходит обращение ко всем адресам, которые начинаются этой последовательностью битов.
Рассмотрим простой пример, в котором адреса состоят из шести битов, а дескрипторы — из двух. Дескриптор 01 указывает на то, что в слоте находится блок, в который входят следующие адреса: 010000, 010001, 010010, 010011, 010100, 010101, 010110, 010111, 011000, 011001, 011010, 011011, 011100, 011101, 011110, 011111.
На рис. 1.18 показана блок-схема операции чтения слова из памяти. Процессор генерирует адрес слова, которое нужно прочесть. Если это слово хранится в КЭШе, оно передается процессору. В противном случае блок, содержащий это слово, загружается в кэш, и слово передается процессору после загрузки блока в кэш.
