- •1.Процессор
- •1.1. Арифметико-логическое устройство
- •1.2. Устройство управления
- •1.3. Основные принципы работы современных процессоров
- •1.4. Регистры процессора
- •1.4.1. Регистры общего назначения
- •1.4.2.Указатель команд
- •1.4.3. Сегментные регистры
- •1.4.4. Регистр состояния микропроцессора Intel 8086
- •1.4.5. Управляющие регистры
- •1.4.6. Прочие регистры
- •1.5. Представление команд в эвм
- •1.6. Основные стадии выполнения команд
- •2. СисТемная шина
- •2.1. Шины
- •2.2. Шина данных. Разрядность шины
- •2.3. Адресная шина. Разрядность шины
- •2.4. Шина управления
- •2.5. Цикл шины
- •2.6. Системные и локальные шины
- •2.7. Стандарты шин
- •3. Многоуровневая организация памяти
- •3.1. Регистровая память
- •3.2. Буферная память
- •3.2.1. Кэширование памяти
- •3.2.2. Принципы кэширования
- •3.2.3. Кэш прямого отображения
- •3.2.4. Наборно-ассоциативный кэш
- •3.2.5. Ассоциативный кэш
- •3.3. Оперативная память
- •3.3.1. Логическое распределение оперативной памяти
- •3.3.2. Стандартная оперативная память
- •3.4.Страничная и сегментная организация памяти. Виртуальная память
- •3.4.1. Режимы процессора
- •3.4.2. Организация памяти
- •3.4.3. Концепция виртуальной памяти
- •3.4.4. Страничная организация памяти
- •3.4.5. Сегментация памяти
- •3.4.6. Механизм замены (своппирования) страниц
- •3.5. Защита информации и памяти
- •3.6. Внешняя память
- •3.6.1. Классификация накопителей
- •3.6.2. Логическая структура дисков
- •3.6.3. Флоппи-диски
- •3.6.4. Сменные диски
- •3.6.5. Стриммер
- •3.6.6. Магнитооптические накопители
- •3.6.7.Накопители на гибких магнитных дисках Бернулли
- •3.6.8. Накопители на гибких магнитных дисках Zip
- •4. Система ввода-вывода
- •4.1.Принципы организации обменов данными
- •4.1.1. Структура с одним общим интерфейсом
- •4.1.2. Структура с каналами ввода-вывода
- •4.1.3. Основные параметры интерфейсов
- •4.1.4. Параллельная и последовательная передача данных
- •4.1.5. Методы передачи информации между устройствами эвм
- •4.2. Индивидуальные каналы
- •4.2.1. Основные типы каналов ввода-вывода
- •4.3. Ввод-вывод с отображением на память
- •4.4. Порты ввода-вывода
- •4.4.1. Параллельный порт
- •4.4.2. Последовательный порт
- •Адреса и прерывания последовательных портов
- •4.4.3. Развитие параллельного и последовательного интерфейсов
- •5. Организация прерываний
- •5.1 Механизм прерываний
- •5.1.1. Назначение системы прерываний
- •5.1.2. Порядок обработки прерывания
- •5.1.3. Характеристики системы прерывания
- •5.1.4. Приоритетное обслуживание запросов прерывания
- •5.1.5. Программное управление приоритетом
- •5.2. Организация системы прерываний микропроцессора х86
- •5.2.1. Аппаратные прерывания. Контроллер прерываний
- •5.2.2. Особенности обработки аппаратных прерываний
- •5.2.3. Внутренние прерывания
- •5.2.4. Таблица векторов прерываний
- •5.2.5. Процедуры прерываний
- •1. Пример выполнения упражнения тренинга на умение № 1
- •2. Пример выполнения упражнения тренинга на умение № 2
- •3.Пример выполнения упражнения тренинга на умение № 3
- •4. Пример выполнения упражнения тренинга на умение № 4
- •5. Пример выполнения упражнения тренинга на умение № 5
- •6. Пример выполнения упражнения тренинга на умение № 6
3.2.3. Кэш прямого отображения
В кэш-памяти прямого отображения адрес памяти, по которому происходит обращение, однозначно определяет строку кэша, в которой может находиться требуемый блок. Принцип работы такого кэша поясним на примере несекторированного кэша объемом 256 Кбайт с размером строки 32 байта и объемом кэшируемой основной памяти 64 Мбайт – типичный кэш системной платы для Pentium. Структуру памяти в такой системе иллюстрирует рис. 5.
Рис. 5. Кэш прямого отображения
Кэшируемая основная память условно разбивается на страницы (в данном случае по 256 Кбайт), размер которых совпадает с размером кэш-памяти (256 Кбайт). Кэш-память (и, условно, страницы основной памяти) делятся на строки (256 Кбайт/32= 8 Кбайт строк). Архитектура прямого отображения подразумевает, что каждая строка кэша может отображать из любой страницы кэшируемой памяти только соответствующую ей строку (на рис. 5 они находятся на одном горизонтальном уровне). Поскольку объем основной памяти много больше объема кэша, на каждую строку кэша может претендовать множество блоков памяти с одинаковой младшей частью адреса (смещением внутри страницы). Одна строка в определенный момент может, естественно, содержать копию только одного из этих блоков. Номер (адрес) строки в кэш-памяти называется индексом (index). Тег несет информацию о том, какой именно блок занимает данную строку (то есть старшая часть адреса или номер страницы). Память тегов должна иметь количество ячеек, равное количеству строк кэша, а ее разрядность должна быть достаточной, чтобы вместить старшие биты адреса кэшируемой памяти, не попавшие на шину адреса кэш-памяти. Кроме адресной части тега, с каждой строкой кэша связаны биты признаков действительности и модифицированности данных. В начале каждого обращения к кэшируемой памяти контроллер вначале считывает ячейку каталога с заданным индексом, сравнивает биты адреса тега со старшими битами адреса памяти и анализирует признак действительности. Этот анализ выполняется в специальном цикле слежения (snoop cycle), иногда его называют циклом запроса (inquire). Если в результате анализа выясняется, что требуемого блока нет в кэше, генерируется (или продолжается) цикл обращения к основной памяти (случай кэш-промаха). В случае попадания запрос обслуживается кэш-памятью. В случае промаха после считывания основной памяти приемником информации новые данные помещаются в строку кэша (если она чистая), а в ее тег помещаются старшие биты адреса и устанавливается признак действительности данных. Независимо от объема затребованных данных в кэш из основной памяти строка переписывается вся целиком (поскольку признак действительности относится ко всем ее байтам). Если контроллер кэша реализует упреждающее считывание (read ahead), то в последующие свободные циклы шины также обновится и следующая строка (если она была чистой). Чтение «про запас» позволяет при необходимости осуществлять пакетный цикл чтения из кэша через границу строки.
Такой кэш имеет самую простую аппаратную реализацию и применяется во вторичном кэше большинства системных плат. Однако ему присущ серьезный недостаток, вполне очевидный при рассмотрении рис. 5. Если в процессе выполнения программы процессору поочередно будут требоваться блоки памяти, смещенные относительно друг друга на величину, кратную размеру страницы (на рисунке эти блоки расположены на одной горизонтали в разных страницах), то кэш будет работать интенсивно, но вхолостую (cache trashing). Очередное обращение будет замещать данные, считанные в предыдущем и необходимые в следующем обращении, – т.е. будет сплошная череда кэш-промахов. Переключение страниц в многозадачных ОС также снижает количество кэш-попаданий, что отражается на производительности системы. Увеличение размера кэша при сохранении архитектуры прямого отображения даст не очень существенный эффект, поскольку разные задачи будут претендовать на одни и те же строки кэша. Не увеличивая объема, можно повысить эффективность кэширования изменением структуры кэша, о чем пойдет речь ниже.
Объем кэшируемой памяти (Мcached) при архитектуре прямого отображения определяется объемом кэш-памяти (Vcache) и разрядностью памяти тегов (N):
Мcached = Vcache · 2N, в нашем случае Мcached = 256 Кбайт · 28 = 64 Мбайт.
Иногда в описании кэша прямого отображения фигурирует понятие набор (set), что может ввести в заблуждение. Оно применяется вместо термина строка (line) в секторированном кэше прямого отображения, а сектор тогда называют строкой. С набором (как и строкой несекторированного кэша) связана информация о теге, относящаяся ко всем элементам набора (строкам или секторам). Кроме того, каждый элемент набора (строка или сектор) имеет собственный бит действительности в кэш-каталоге (рис. 6).
Рис. 6. Секторированный кэш прямого отображения