Содержание
Введение
1. Структура памяти…
1.1. Иерархическаяорганизация памяти…
1.2. Динамическая память
2. Кэширование памяти…
2.1. Принципы кэширования…
2.2. Кэш прямогоотображения…
2.3. Наборно-ассоциативныйкэш…
2.4. Ассоциативный кэш…
2.5. Алгоритмы замещенияданных…
2.6. Алгоритм псевдо-LRU…
3. Пакетный режим передачи данных…
4. Архитектура процессора Intel Pentium – технический обзор…
4.1. Раздельноекэширование программного кода и данных…
4.2. Блок предсказанияправильного адреса перехода…
4.3. Расширенная64-битовая шина данных…
4.4. Средства разделенияпамяти на страницы…
5. Описание функциональной схемы…
Заключение…
Списокиспользованной литературы…
Приложения…
Приложение 1. Схемафункциональная…
Приложение 2. Схемапринципиальная…
Приложение 3.Перечень элементов…
ВВЕДЕНИЕ
В основе реализации иерархии памятисовременных компьютеров лежат два принципа: принцип локальности обращений исоотношение стоимость / производительность. Принцип локальности обращенийговорит о том, что большинство программ к счастью не выполняют обращений ковсем своим командам и данным равновероятно, а оказывают предпочтение некоторойчасти своего адресного пространства.
Иерархия памяти современных компьютеровстроится на нескольких уровнях, причем более высокий уровень меньше по объему,быстрее и имеет большую стоимость в пересчете на байт, чем более низкийуровень. Уровни иерархии взаимосвязаны: все данные на одном уровне могут бытьтакже найдены на более низком уровне, и все данные на этом более низком уровнемогут быть найдены на следующем нижележащем уровне и так далее, пока мы недостигнем основания иерархии.
Иерархия памяти обычно состоит измногих уровней, но в каждый момент времени мы имеем дело только с двумяблизлежащими уровнями. Минимальная единица информации, которая может либоприсутствовать, либо отсутствовать в двухуровневой иерархии, называется блоком.Размер блока может быть либо фиксированным, либо переменным. Если этот размерзафиксирован, то объем памяти является кратным размеру блока.
Успешное или неуспешное обращение кболее высокому уровню называются соответственно попаданием (hit) или промахом(miss). Попадание — есть обращение к объекту в памяти, который найден на болеевысоком уровне, в то время как промах означает, что он не найден на этомуровне. Доля попаданий (hit rate) или коэффициент попаданий (hit ratio) естьдоля обращений, найденных на более высоком уровне. Иногда она представляетсяпроцентами. Доля промахов (miss rate) есть доля обращений, которые не найденына более высоком уровне.
Поскольку повышение производительностиявляется главной причиной появления иерархии памяти, частота попаданий ипромахов является важной характеристикой. Время обращения при попадании (hittime) есть время обращения к более высокому уровню иерархии, которое включает всебя, в частности, и время, необходимое для определения того, является ли обращениепопаданием или промахом. Потери на промах (miss penalty) есть время длязамещения блока в более высоком уровне на блок из более низкого уровня плюсвремя для пересылки этого блока в требуемое устройство (обычно в процессор).Потери на промах далее включают в себя две компоненты: время доступа (accesstime) — время обращения к первому слову блока при промахе, и время пересылки(transfer time) — дополнительное время для пересылки оставшихся слов блока. Времядоступа связано с задержкой памяти более низкого уровня, в то время как времяпересылки связано с полосой пропускания канала между устройствами памяти двухсмежных уровней.
Раздел 1
СТРУКТУРАПАМЯТИ
1.1. Иерархическая организация памяти
Память компьютера имеет иерархическую структуру,центральным слоем которой является оперативная память — ОЗУ или RAM (Random Access Memory — памятьс произвольным доступом). Оперативная память непосредственно доступнапроцессору: в ней хранится исполняемая в данный момент часть программного кодаи данные, к которым процессор может обращаться с помощью одной из многихкоманд. Произвольность доступа подразумевает, что процессор в любой моментможет считать или записать любой байт (слово, двойное слово и т.д.) из этой памяти.32-разрядные процессоры x86 способны адресовать до 4 Гбайт физической памяти(кроме 386SX, урезанных до 16 Мбайт), а процессоры P6 (Pentium Pro, Pentium IIи старше) в режиме расширения адреса — до 64 Гбайт. Из этого потенциальнодоступного пространства именно для оперативной памяти используется толькочасть: большинство системных плат пока ограничивают объем устанавливаемого ОЗУна уровне 256 Мбайт–1 Гбайт. В этом же пространстве располагается и постояннаяпамять — ПЗУ, или ROM (ReadOnly Memory), которая доступна только для чтения. В ПЗУ располагаетсяBIOS (базовая система ввода-вывода) компьютера и некоторые другие элементы.
Следующий уровень в иерархии — дисковаяпамять. В отличие от ОЗУ и ПЗУ, для обращения к любому элементу, хранящемуся вдисковой памяти, процессор должен выполнить некоторую процедуру илиподпрограмму, код которой находится в оперативной или постоянной памяти. Дисковаяпамять является блочной, — процедура доступа к этой памяти оперирует блокамификсированной длины (обычно это сектор с размером 512 байт). Процедура доступаспособна лишь скопировать целое количество образов блоков из оперативной (илипостоянной) памяти на диск или обратно. Программный код непосредственно с дискапроцессор исполнить не может — сначала нужно загрузить его с диска воперативную память. Дисковая память является основным хранилищем файлов спрограммами и данными. Кроме того, она используется и для организации виртуальнойоперативной памяти: не используемый в данный момент блок информации (страница)из оперативной памяти выгружается на диск, а на его место с диска подкачиваетсястраница, требуемая процессору для работы. Таким образом, создаетсяпространство виртуальной памяти, размер которой ограничивается процессором науровне 64 Гбайт для каждой задачи, но более реально — размером дисковой памяти,исчисляемой единицами или десятками Гбайт.
Последняя ступень иерархии — память навнешних носителях, или просто внешняя память. Она, так же, как и дисковая,является хранилищем файлов, и доступ к ней осуществляется поблочно. Внешняяпамять может быть как на дисковых носителях, так и на ленточных. Для ленточныхустройств характерен последовательный метод доступа: по пути к определенномублоку может потребоваться перемотать носитель. Внешняя память тоже используетсякак средство переноса информации с компьютера на компьютер, резервногокопирования и расширения объема дисковой памяти. Для последнего применениявнешняя память по степени готовности к доступу может быть классифицирована наустройства On-Line, Near-Line и Off-Line. On-Line — устройства с носителями,постоянно доступными для доступа. Near-Line — для доступа устройство должноавтоматически найти и установить в привод требуемый носитель (пример —CD-Changer или JukeBox). Off-Line — для доступа к данным оператор долженвручную установить внешний носитель. С помощью внешней памяти On-Line иNear-Line возможна организация “виртуальной дисковой памяти” сверхбольшогообъема.
Мы перечислили толькопрограммно-видимую часть “айсберга” памяти — доступную произвольно илипоблочно, прямо или последовательно. Есть еще и “подводная” часть — кэш-память.Оперативная память по меркам современных процессоров обладает слишком низкимбыстродействием, и, обратившись за данными, процессор вынужден простаиватьнесколько тактов до готовности данных. Начиная с процессоров 80386, оперативнуюпамять стали кэшировать. Идея кэширования ОЗУ заключается в применениинебольшого (по сравнению с ОЗУ) запоминающего устройства — кэш-памяти с болеевысоким быстродействием. Небольшого — потому, что по технико-экономическимпричинам большой объем памяти такого типа обходится очень дорого. В этой памятихранится копия содержимого части ОЗУ, к которой в данный момент процессорнаиболее интенсивно обращается. Определять, какую часть содержимого ОЗУ копироватьв данный момент времени, должен контроллер кэша. Он это может делать, исходя изпредположения о локальности обращений к данным и последовательности выбороккоманд. Кэш-память не дает дополнительного адресуемого пространства, ееприсутствие для программы незаметно, хотя процессом кэширования можноуправлять. Кэш имеет построчную организацию — каждая строка может содержатькопию блока данных ОЗУ, длина которого для процессоров 5–6 поколения составляет32 байта (в 486 — 16 байт). Кэш-контроллер определяет, откуда можноудовлетворить запрос процессора к памяти: из ОЗУ (медленнее) или из кэш-памяти(быстрее). Существуют разные подходы к организации кэш-памяти (кэш прямогоотображения, ассоциативный или наборно-ассоциативный кэш), разные алгоритмызамещения строк и политики записи модифицированных строк (сквозная WT – write through или обратная WB – write back). Кэш-память размещаетсянепосредственно на процессоре, причем на большинстве процессорах 6-го поколениявозможно присутствие даже двух уровней кэш-памяти. Таким образом, с оперативнойпамятью общается уже не просто процессор, а тесная связка процессор-кэш. У этойсвязки имеется “привычка” оперировать целыми строками: если процессорзатребовал на чтение даже один байт из кэшируемой области памяти, а копии этойобласти в кэше нет, кэш-контроллер запросит из ОЗУ сначала сам этот байт, апотом и все его окружение до заполнения строки. А если есть возможность,контроллер заполнит в кэше и следующую строку. В случае выборки из памятилинейного (без ветвлений) программного кода упреждающее чтение оченьэффективно, поскольку последующие строки со временем понадобятся. В случаеобращения к данным эффективность кэширования зависит от многих факторов и в некоторыхреализациях упреждающее чтение может оказаться даже отрицательным.
Именно для повышения производительностиобращений к памяти в протокол системной шины процессоров, вооруженныхвнутренним КЭШем (начиная с 486), ввели пакетный цикл (burst cycle). Полныйпакетный цикл чтения за 4 шинных операции считывания заполняет целую строкукэша (4*4=16 байт для 486 и 4*8=32 байт для P5–P6). От обычных одиночных цикловпакетный отличается тем, что адрес памяти (для первой передачи) на шинеуказывается только в начале пакета, а адреса для остальных передач пакета “знает”и процессор, и контроллер памяти. При этом экономится время (передача адресазанимает такт шины) и открываются возможности повышения производительностипамяти. Адрес каждой последующей передачи однозначно вычисляется по адресупервого элемента пакета, причем у процессоров x86 по специфическим правилам.Так, если первый адрес будет xx0, то следующие три — xx4, xx8, xxC (вшестнадцатеричной записи), а пакет начатый с адреса xx4 будет продолжаться поадресам xxC, xx0, xx8. Такой порядок называется чередованием(interleaving), для процессоров “не-x86” характерен более простой линейныйпорядок (здесь приведены примеры для процессора 486, для P5–P6 значенияудваиваются). Производительность памяти характеризуют длительностью пакетногоцикла, измеряемой в тактах системной шины, требуемых для каждой передачипакета. Идеальным был бы цикл 2-1-1-1, но реально, по крайней мере, на первуюпередачу требуется больше времени, и цикл будет, например, 5-1-1-1. Этоозначает, что, принимая первый элемент пакета, шина будет простаивать 5–2=3такта, а последующие будут приниматься без ожидания.
Вполне понятно, что производительностькомпьютера непосредственно зависит от производительности процессора ипроизводительности оперативной памяти. Теоретическая производительность (пропускнаяспособность) памяти пропорциональна разрядности и тактовой частоте шины иобратно пропорциональна суммарной длительности пакетного цикла. Для повышенияэтой производительности увеличивают разрядность шины (так, начиная с P5,32-разрядные процессоры имеют 64-разрядную системную шину), тактовую частоту (с66 МГц подняли до 100-133 МГц). При этом, естественно, стремятся и к уменьшениючисла тактов в пакетном цикле. Кроме того, шина P6 позволяет процессорувыставить до 16 запросов конкурирующих транзакций, так что у подсистемы памятиесть теоретическая возможность “многостаночной” работы.
1.2. Динамическая память
Теперь посмотрим на оперативную памятьизнутри. На протяжении уже трех десятилетий в качестве основной памятииспользуют массивы ячеек динамической памяти. Каждая ячейка содержит всего лишьодин КМОП-транзистор, благодаря чему достигается высокая плотность упаковкиячеек при низкой цене. Запоминающим элементом у них является конденсатор(емкость затвора), и ячейка может помнить свое состояние недолго — всегодесятки миллисекунд. Для длительного хранения требуется регенерация —регулярное “освежение” (refresh) памяти, за что эта память и получила название“динамическая” — DRAM (Dynamic RAM). Ячейки организуются в двумерные матрицы, идля обращения к ячейке требуется последовательно подать два выбирающих сигнала— RAS# (Row Access Strobe, строб строки) и CAS# (Column Access Strobe, стробстолбца). Временная диаграмма циклов чтения традиционной динамической памятиприведена на рисунке (циклы записи для простоты здесь не показаны). Микросхемыдинамической памяти традиционно имеют мультиплексированную шину адреса (MA). Вовремя действия RAS# на ней должен быть адрес строки, во время действия CAS# —адрес столбца. Информация на выходе шины данных относительно начала цикла(сигнала RAS#) появится не раньше, чем через интервал TRAC, который называется временемдоступа.
PRIVATEPRIVATE «TYPE=PICT;ALT=»Рис.1.Временная диаграмма чтения динамической памяти.
Есть также минимальная задержка данныхотносительно импульса CAS# (TCAC), и минимально необходимые интервалыпассивности сигналов RAS# и CAS# (времена предзаряда). Все эти параметры иопределяют предел производительности памяти. Ключевой параметр микросхем —время доступа — за всю историю удалось улучшить всего на порядок — с сотен донескольких десятков наносекунд. За меньший исторический период только тактоваячастота процессоров x86 выросла на 2 порядка, так что разрыв междупотребностями процессоров и возможностями ячеек памяти увеличивается. Дляпреодоления этого разрыва, например, увеличивают разрядность данных памяти,ускоряющую процесс доступа к данным. Отметим, что все, даже самые современные,типы памяти — SDRAM, DDR SDRAM и Rambus DRAM имеют запоминающее ядро, котороеобслуживается описанным выше способом.
Раздел 2
КЭШИРОВАНИЕ ПАМЯТИ
Архитектура современных 32-разрядныхпроцессоров включает ряд средств кэширования памяти: два уровня кэша инструкцийи данных (L1 Cache и L2 Cache), буферы ассоциативной трансляции (TLB) блокастраничной переадресации и буферы записи. Эти средства в разных вариациях (накристалле, картридже процессора или на системной плате) представлены в системахс процессорами 486, Pentium и Р6. В процессоре 80386 (Intel) имелся только TLB,a кэш-память, устанавливаемая на системной плате, не имела поддержки со стороныпроцессора.
2.1. Принципы кэширования
Основная память компьютеров реализуется наотносительно медленной динамической памяти (DRAM), обращение к ней приводит кпростою процессора — появляются такты ожидания (wait states). Статическаяпамять (SRAM), построенная, как и процессор, на триггерных ячейках, по своейприроде способна догнать современные процессоры по быстродействию и сделатьненужными такты ожидания (или хотя бы сократить их количество). Разумнымкомпромиссом для построения экономичных и производительных систем явилсяиерархический способ организации оперативной памяти. Идея заключается всочетании основной памяти большого объема на DRAM с относительно небольшойкэш-памятью на быстродействующих микросхемах SRAM.
В переводе слово кэш (cache) означает «тайный склад», «тайник» («заначка»). Тайнаэтого склада заключается в его «прозрачности» — для программы он не представляетсобой дополнительной адресуемой области памяти. Кэш является дополнительнымбыстродействующим хранилищем копий блоков информации из основной памяти,вероятность обращения к которым в ближайшее время велика. Кэш не может хранитькопию всей основной памяти, поскольку его объем во много раз меньше основнойпамяти. Он хранит лишь ограниченное количество блоков данных и каталог (cache directory) — список ихтекущего соответствия областям основной памяти. Кроме того, кэшироваться можетне вся память, доступная процессору.
При каждом обращении к памятиконтроллер кэш-памяти по каталогу проверяет, есть ли действительная копиязатребованных данных в кэше. Если она там есть, то это случай кэш-попадания (cache hit), и данныеберутся из кэш-памяти. Если действительной копии там нет, это случай кэш-промаха (cache miss), и данныеберутся из основной памяти. В соответствии с алгоритмом кэширования блок данных,считанный из основной памяти, при определенных условиях заместит один из блоковкэша. От интеллектуальности алгоритма замещения зависит процент попаданий и,следовательно, эффективность кэширования. Поиск блока в списке должен производитьсядостаточно быстро, чтобы «задумчивостью» в принятии решения не свести на нетвыигрыш от применения быстродействующей памяти. Обращение к основной памятиможет начинаться одновременно с поиском в каталоге, а в случае попадания —прерываться (архитектура Look aside). Это экономит время, но лишние обращения косновной памяти ведут к увеличению энергопотребления. Другой вариант: обращениек внешней памяти начинается только после фиксации промаха (архитектура LookThrough), при этом теряется по крайней мере один такт процессора, затоэкономится энергия.
В современных компьютерах кэш обычностроится по двухуровневой схеме. Первичныйкэш (L1 Cache) встроен во все процессоры класса 486 и старше; это внутренний кэш. Объем этого кэша невелик(8-32 Кбайт). Для повышения производительности для данных и команд часто используетсяраздельный кэш (так называемая Гарвардская архитектура — противоположность Принстонской,использующей общую память для команд и данных). Вторичный кэш (L2 Cache) для процессоров 486 и Pentium является внешним (устанавливается на системнойплате), а у Р6 располагается в одной упаковке с ядром и подключается к специальнойвнутренней шине процессора.
Кэш-контроллер должен обеспечивать когерентность (coherency) — согласованностьданных кэш-памяти обоих уровней с данными в основной памяти, при том условии,что обращение к этим данным может производиться не только процессором, но идругими активными (busmaster) адаптерами, подключенными к шинам (PCI, VLB, ISAи т. д.). Следует также учесть, что процессоров может быть несколько, и укаждого может быть свой внутренний кэш.
Контроллер кэша оперирует строками (cache line) фиксированнойдлины. Строка может хранить копию блока основной памяти, размер которого,естественно, совпадает с длиной строки. С каждой строкой кэша связанаинформация об адресе скопированного в нее блока основной памяти и об еесостоянии. Строка может быть действительной(valid) — это означает, что в текущий момент времени она достоверно отражаетсоответствующий блок основной памяти, или недействительной.Информация о том, какой именно блок занимает данную строку (то есть старшаячасть адреса или номер страницы), и о ее состоянии называется тегом (tag) и хранится в связанной сданной строкой ячейке специальной памятитегов (tag RAM). В операциях обмена с основной памятью обычно строкаучаствует целиком (несекторированный кэш), для процессоров 486 и старше длинастроки совпадает с объемом данных, передаваемых за один пакетный цикл (для 486это 4х4=16 байт, для Pentium 4x8=32 байт). Возможен и вариант секторированного(sectored) кэша, при котором одна строка содержит несколько смежных ячеек — секторов, размер которых соответствуетминимальной порции обмена данных кэша с основной памятью. При этом в записи каталога,соответствующей каждой строке, должны храниться биты действительности длякаждого сектора данной строки. Секторирование позволяет экономить память, необходимуюдля хранения каталога при увеличении объема кэша, поскольку большее количествобит каталога отводится под тег и выгоднее использовать дополнительные битыдействительности, чем увеличивать глубину индекса (количество элементов)каталога.
Строки кэша под отображение блокапамяти выделяются при промахах операций чтения, в Р6 строки заполняются и призаписи. Запись блока, не имеющего копии в кэше, производится в основную память(для повышения быстродействия запись может производиться через буфер отложеннойзаписи). Поведение кэш-контроллера при операции записи в память, когда копия затребованнойобласти находится в некоторой строке кэша, определяется его алгоритмом, или политикой записи (Write Policy).Существуют две основные политики записи данных из кэша в основную память: сквозная запись WT (Write Through) и обратная запись WB (Write Back).
ПолитикаWTпредусматривает выполнение каждой операции записи (даже однобайтной),попадающей в кэшированный блок, одновременно и в строку кэша, и в основную память.При этом процессору при каждой операции записи придется выполнять относительнодлительную запись в основную память. Алгоритм достаточно прост в реализации илегко обеспечивает целостность данных за счет постоянного совпадения копийданных в кэше и основной памяти. Для него не нужно хранить признаки присутствияи модифицированности — вполне достаточно только информации тега (при этомсчитается, что любая строка всегда отражает какой-либо блок, а какой именно —указывает тег). Но эта простота оборачивается низкой эффективностью записи. Существуютварианты этого алгоритма с применением отложенной буферированной записи, прикоторой данные в основную память переписываются через FIFO-буфер во времясвободных тактов шины.
ПолитикаWBпозволяет уменьшить количество операций записи на шине основной памяти. Еслиблок памяти, в который должна производиться запись, отображен в кэше, тофизическая запись сначала будет произведена в эту действительную строку кэша, иона будет отмечена как грязная(dirty), или модифицированная, то есть требующая выгрузки в основную память.Только после этой выгрузки (записи в основную память) строка станет чистой (clean), и ее можно будет использоватьдля кэширования других блоков без потери целостности данных. В основную памятьданные переписываются только целой строкой. Эта выгрузка контроллером можетоткладываться до наступления крайней необходимости (обращение к кэшированнойпамяти другим абонентом, замещение в кэше новыми данными) или выполняться всвободное время после модификации всей строки. Данный алгоритм сложнее вреализации, но существенно эффективнее, чем WT. Поддержка системной платойкэширования с обратной записью требует обработки дополнительных интерфейсныхсигналов для выгрузки модифицированных строк в основную память, если к этойобласти производится обращение со стороны таких контроллеров шины, как другиепроцессоры, графические адаптеры, контроллеры дисков, сетевые адаптеры и т. п.
В зависимости от способа определениявзаимного соответствия строки кэша и области основной памяти различают триархитектуры кэш-памяти: кэш прямогоотображения (direct-mapped cache), полностьюассоциативный кэш (fully associative cache) и их комбинация — частично- илинаборно-ассоциативный кэш(set-associative cache).
2.2. Кэш прямого отображения
Рис.2.Кэш прямогоотображения.
В кэш-памяти прямого отображения адрес памяти, покоторому происходит обращение, однозначно определяет строку кэша, в которойможет находиться требуемый блок. Принцип работы такого кэша поясним на примеренесекторированного кэша объемом 256 Кбайт с размером строки 32 байта и объемомкэшируемой основной памяти 64 Мбайт — типичный кэш системной платы для Pentium.Структуру памяти в такой системе иллюстрирует рис. 2.
Кэшируемая основная память условноразбивается на страницы (в данном случае 256), размер которых совпадает сразмером кэш-памяти (256 Кбайт). Кэш-память (и условно страницы основнойпамяти) делится на строки (256К / 32 = 8К строк). Архитектура прямогоотображения подразумевает, что каждая строка кэша может отображать из любойстраницы кэшируемой памяти только соответствующую ей строку (на рисунке онинаходятся на одном горизонтальном уровне). Поскольку объем основной памятимного больше объема кэша, на каждую строку кэша может претендовать множествоблоков памяти с одинаковой младшей частью адреса (смещением внутри страницы).Одна строка в определенный момент может, естественно, содержать копию только одногоиз этих блоков. Номер (адрес) строки в кэш-памяти называется индексом (index). Тег несет информацию о том, какой именно блок занимает даннуюстроку (то есть старшая часть адреса или номер страницы). Память тегов должнаиметь количество ячеек, равное количеству строк кэша, а ее разрядность должнабыть достаточной, чтобы вместить старшие биты адреса кэшируемой памяти, непопавшие на шину адреса кэш-памяти. Кроме адресной части тега с каждой строкойкэша связаны биты признаков действительности и модифицированности данных.
В начале каждого обращения к кэшируемойпамяти контроллер первым делом считывает ячейку каталога с заданным индексом,сравнивает биты адреса тега со старшими битами адреса памяти и анализируетпризнак действительности. Этот анализ выполняется в специальном цикле слежения (snoop cycle), иногда егоназывают циклом запроса (inquire).Если в результате анализа выясняется, что требуемый блок не находится в кэше,то генерируется (или продолжается) цикл обращения к основной памяти (случайкэш-промаха). В случае попадания запрос обслуживается кэш-памятью. В случаепромаха после считывания основной памяти приемником информации новые данныепомещаются в строку кэша (если она чистая),а в ее тег помещаются старшие биты адреса и устанавливается признак действительностиданных. Независимо от объема затребованных данных из основной памяти строкапереписывается в кэш вся целиком (поскольку признак действительности относитсяко всем ее байтам). Если контроллер кэша реализует упреждающее считывание (read ahead), то в последующие свободные циклышины обновится и следующая строка (если она была чистой). Чтение «про запас» позволяет при необходимостиосуществлять пакетный цикл чтения из кэша через границу строки.
Такой кэш имеет самую простуюаппаратную реализацию и применяется во вторичном кэше большинства системныхплат. Однако ему присущ серьезный недостаток, вполне очевидный при рассмотрениирис. 2. Если в процессе выполнения программы процессору поочередно будут требоватьсяблоки памяти, смещенные относительно друг друга на величину, кратную размерустраницы (на рисунке это будут блоки, расположенные на одной горизонтали вразных страницах), то кэш будет работать интенсивно, но вхолостую (cachetrashing). Очередное обращение будет замещать данные, считанные в предыдущем ипотребующиеся в последующем обращении, — то есть будет сплошная чередакэш-промахов. Переключение страниц в многозадачных ОС также снижает количествокэш-попаданий, что отражается на производительн