Вместо букв квадратики что делать. Если вместо букв - иероглифы, квадратики и цифры. (Решение проблем с отображением шрифтов в Windows XP). Для решения проблемы с отображением шрифтов

Ч то является самым грязным местом на компьютере? Думаете, корзина? Папки пользователя? Система охлаждения? Не угадали! Самое грязное место – это кэш! Ведь его постоянно приходится чистить!

На самом деле кэшей на компьютере много, и служат они не свалкой отходов, а ускорителями оборудования и приложений. Откуда же у них репутация «системного мусоропровода»? Давайте разберемся, что такое кэш, каким он бывает, как работает и почему время от времени .

Понятие и виды кэш-памяти

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

Собственная кэш-память есть у приложений (веб-браузеров, аудио- и видеоплееров, редакторов баз данных и т. д.), компонентов операционных систем (кэш эскизов, DNS-кэш) и оборудования (cache L1-L3 центрального процессора, фреймбуфер графического чипа, буферы накопителей). Реализована она по-разному – программно и аппаратно.

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

  • В накопителях (в частности, жестких дисках) кэш представляет собой отдельный чип RAM емкостью 1-256 Mb, расположенный на плате электроники. В него поступает информация, считанная с магнитного слоя и пока не загруженная в оперативную память, а также данные, которые чаще всего запрашивает операционная система.

  • Современный центральный процессор содержит 2-3 основных уровня кеш-памяти (ее также называют сверхоперативной памятью), размещенных в виде аппаратных модулей на одном с ним кристалле. Самым быстрым и наименьшим по объему (32-64 Kb) является cache Level 1 (L1) – он работает на той же частоте, что и процессор. L2 занимает среднее положение по скорости и емкости (от 128 Kb до 12 Mb). А L3 – самый медленный и объемный (до 40 Mb), на некоторых моделях отсутствует. Скорость L3 является низкой лишь относительно его более быстрых собратьев, но и он в сотни раз шустрее самой производительной оперативки.

Сверхоперативная память процессора применяется для хранения постоянно используемых данных, перекачанных из ОЗУ, и инструкций машинного кода. Чем ее больше, тем процессор быстрее.

Сегодня три уровня кеширования – уже не предел. С появлением архитектуры Sandy Bridge корпорация Intel реализовала в своей продукции дополнительный cache L0 (предназначенный для хранения расшифрованных микрокоманд). А наиболее высокопроизводительные ЦП имеют и кэш четвертого уровня, выполненный в виде отдельной микросхемы.

Схематично взаимодействие уровней cache L0-L3 выглядит так (на примере Intel Xeon):

Человеческим языком о том, как всё это работает

Ч тобы было понятно, как функционирует кэш-память, представим человека, работающего за письменным столом. Папки и документы, которые он использует постоянно, лежат на столе (в кэш-памяти ). Для доступа к ним достаточно протянуть руку.

Бумаги, которые нужны ему реже, хранятся недалеко на полках (в оперативной памяти ). Чтобы их достать, нужно встать и пройти несколько метров. А то, с чем человек в настоящее время не работает, сдано в архив (записано на жесткий диск ).

Чем шире стол, тем больше документов на нем поместится, а значит, работник сможет получить быстрый доступ к большему объему информации (чем емкость кэша больше, тем в теории быстрее работает программа или устройство ).

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

Стол имеет ограниченную площадь (кэш-память имеет ограниченный объем ). Иногда ее можно расширить, например, придвинув второй стол, а иногда нельзя (объем кэша можно увеличить, если такая возможность предусмотрена программой; кэш оборудования изменить нельзя, так как он реализован аппаратно ).

Другой способ ускорить доступ к большему объему документов, чем вмещает стол – найти помощника, который будет подавать работнику бумаги с полки (операционная система может выделить часть неиспользуемой оперативной памяти для кэширования данных устройств ). Но это всё равно медленнее, чем брать их со стола.

Документы, лежащие под рукой, должны быть актуальны для текущих задач. За этим обязан следить сам работник. Наводить порядок в бумагах нужно регулярно (вытеснение неактуальных данных из кэш-памяти ложится «на плечи» приложений, которые ее используют; некоторые программы имеют функцию автоматической очистки кэша ).

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

С «функциями кэширования» мы на самом деле сталкиваемся повсеместно. Это и покупка продуктов впрок, и различные действия, которые мы совершаем мимоходом, заодно и т. д. По сути, это всё то, что избавляет нас от лишней суеты и ненужных телодвижений, упорядочивает быт и облегчает труд. То же самое делает и компьютер. Словом, если бы не было кэша, он бы работал в сотни и тысячи раз медленнее. И нам бы вряд ли это понравилось.

Ещё на сайте:

Что такое кэш, зачем он нужен и как работает обновлено: Февраль 25, 2017 автором: Johnny Mnemonic

Всем пользователям хорошо известны такие элементы компьютера, как процессор, отвечающий за обработку данных, а также оперативная память (ОЗУ или RAM), отвечающая за их хранение. Но далеко не все, наверное, знают, что существует и кэш-память процессора(Cache CPU), то есть оперативная память самого процессора (так называемая сверхоперативная память).

В чем же состоит причина, которая побудила разработчиков компьютеров использовать специальную память для процессора? Разве возможностей ОЗУ для компьютера недостаточно?

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

Вообще говоря, существуют две основные технологии микросхем памяти – статическая память и динамическая память. Не углубляясь в подробности их устройства, скажем лишь, что статическая память, в отличие от динамической, не требует регенерации; кроме того, в статической памяти для одного бита информации используется 4-8 транзисторов, в то время как в динамической – 1-2 транзистора. Соответственно динамическая память гораздо дешевле статической, но в то же время и намного медленнее. В настоящее время микросхемы ОЗУ изготавливаются на основе динамической памяти.

Примерная эволюция соотношения скорости работы процессоров и ОЗУ:

Таким образом, если бы процессор брал все время информацию из оперативной памяти, то ему пришлось бы ждать медлительную динамическую память, и он все время бы простаивал. В том же случае, если бы в качестве ОЗУ использовалась статическая память, то стоимость компьютера возросла бы в несколько раз.

Именно поэтому был разработан разумный компромисс. Основная часть ОЗУ так и осталась динамической, в то время как у процессора появилась своя быстрая кэш-память, основанная на микросхемах статической памяти. Ее объем сравнительно невелик – например, объем кэш-памяти второго уровня составляет всего несколько мегабайт. Впрочем, тут стоить вспомнить о том, что вся оперативная память первых компьютеров IBM PC составляла меньше 1 МБ.

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

История кэш-памяти

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

Впервые кэш-память объемом всего в 16 КБ появилась в ПК на базе процессора i80386. На сегодняшний день современные процессоры используют различные уровни кэша, от первого (самый быстрый кэш самого маленького объема – как правило, 128 КБ) до третьего (самый медленный кэш самого большого объема – до десятков МБ).

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

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

Архитектуры и принципы работы кэша

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

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

Порядок поиска процессором информации в памяти:

Именно таким образом Процессор осуществляет поиск инфоромации

Для управления работой кэш-памяти и ее взаимодействия с вычислительными блоками процессора, а также ОЗУ существует специальный контроллер.

Схема организации взаимодействия ядра процессора, кэша и ОЗУ:

Кэш-контроллер является ключевым элементом связи процессора, ОЗУ и Кэш-памяти

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

Методы записи кэша

Существует два основных метода записи информации в кэш-память:

  1. Метод write-back (обратная запись) – запись данных производится сначала в кэш, а затем, при наступлении определенных условий, и в ОЗУ.
  2. Метод write-through (сквозная запись) – запись данных производится одновременно в ОЗУ и в кэш.

Архитектура ассоциативности кэш-памяти

Архитектура ассоциативности кэша определяет способ, при помощи которого данные из ОЗУ отображаются в кэше. Существуют следующие основные варианты архитектуры ассоциативности кэширования:

  1. Кэш с прямым отображением – определенный участок кэша отвечает за определенный участок ОЗУ
  2. Полностью ассоциативный кэш – любой участок кэша может ассоциироваться с любым участком ОЗУ
  3. Смешанный кэш (наборно-ассоциативный)

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

Заключение

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

Что такое кэш?

Кэш (cache) браузера - это папка с копиями некоторых данных со страниц, которые вы посещали. Обычно в кэше сохраняются те элементы страницы, которые вряд ли успели измениться за промежуток времени между двумя запросами, - музыка, видео, изображения, стили, скрипты. При повторном просмотре страниц Яндекс.Браузер уже не будет запрашивать эти данные из интернета, а извлечет их из кэша. Использование кэша снижает нагрузку на сеть и повышает скорость загрузки страниц.

Пример использования кэша

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

","hasTopCallout":true,"hasBottomCallout":true,"areas":[{"shape":"circle","direction":["bottom","right"],"alt":"Доля просмотренного видео","coords":,"isNumeric":false,"hasTopCallout":false,"hasBottomCallout":true},{"shape":"circle","direction":["top","right"],"alt":"Доля загруженного в кэш видео","coords":,"isNumeric":false,"hasTopCallout":true,"hasBottomCallout":false}]}}">

Приватность и кэш

Сохранение данных в кэше несет следующие риски для вашей приватности:

  • Если доступ к компьютеру имеют несколько пользователей, любой из них может увидеть в папке с кэшем изображения, которые вы ранее просматривали. Рекомендуем использовать на таких компьютерах режим Инкогнито .
  • Если на компьютере присутствует вредоносное ПО, то оно может получить доступ к кэшу браузера.

Очистка кэша

Внимание. Удалять данные в браузере после посещения сайта неэффективно, так как они могут попасть к злоумышленникам во время визита. Чтобы сохранить личные данные в тайне, открывайте сомнительные сайты в режиме Инкогнито .

Чтобы очистить кэш:

Совет. Открыть окно Очистить историю можно, нажав сочетание клавиш Ctrl + Shift + Del (в Windows) или Shift + ⌘ + Backspace (в macOS).


Расположение кэша

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

Операционная система Адрес кэша
Windows 7, Windows 8, Windows 10 C:\Пользователи\Имя вашей учетной записи\AppData\Local\Yandex\YandexBrowser\User Data\Default\Cache

Примечание. Папка AppData является скрытой. Чтобы ее увидеть, включите отображение скрытых папок.

macOS ~/Library/Application Support/Yandex/YandexBrowser/Default/GPUCache

Диаграмма кэша памяти ЦПУ

Кэш - это память с большей скоростью доступа, предназначенная для ускорения обращения к данным, содержащимся постоянно в памяти с меньшей скоростью доступа (далее «основная память»). Кэширование применяется ЦПУ , жёсткими дисками , браузерами и веб-серверами .

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

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

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

Если кэш ограничен в объёме, то при промахе может быть принято решение отбросить некоторую запись для освобождения пространства. Для выбора отбрасываемой записи используются разные алгоритмы вытеснения .

При модификации элементов данных в кэше выполняется их обновление в основной памяти. Задержка во времени между модификацией данных в кэше и обновлением основной памяти управляется так называемой политикой записи .

В кэше с немедленной записью каждое изменение вызывает синхронное обновление данных в основной памяти.

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

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

Кэш центрального процессора

Ряд моделей центральных процессоров (ЦП) обладают собственным кэшем, для того чтобы минимизировать доступ к оперативной памяти (ОЗУ), которая медленнее, чем регистры . Кэш-память может давать значительный выигрыш в производительности, в случае когда тактовая частота ОЗУ значительно меньше тактовой частоты ЦП. Тактовая частота для кэш-памяти обычно ненамного меньше частоты ЦП.

Уровни кэша

Кэш центрального процессора разделён на несколько уровней. Для универсальных процессоров - до 3. Кэш-память уровня N+1 как правило больше по размеру и медленнее по скорости обращения и передаче данных, чем кэш-память уровня N.

Самой быстрой памятью является кэш первого уровня - L1-cache. По сути, она является неотъемлемой частью процессора, поскольку расположена на одном с ним кристалле и входит в состав функциональных блоков. Состоит из кэша команд и кэша данных. Некоторые процессоры без L1 кэша не могут функционировать. На других его можно отключить, но тогда значительно падает производительность процессора. L1 кэш работает на частоте процессора, и, в общем случае, обращение к нему может производиться каждый такт (зачастую является возможным выполнять даже несколько чтений/записей одновременно). Латентность доступа обычно равна 2−4 тактам ядра. Объём обычно невелик - не более 128 Кбайт.

Вторым по быстродействию является L2-cache - кэш второго уровня. Обычно он расположен либо на кристалле, как и L1, либо в непосредственной близости от ядра, например, в процессорном картридже (только в слотовых процессорах). В старых процессорах - набор микросхем на системной плате. Объём L2 кэша от 128 Кбайт до 1−12 Мбайт. В современных многоядерных процессорах кэш второго уровня, находясь на том же кристалле, является памятью раздельного пользования - при общем объёме кэша в 8 Мбайт на каждое ядро приходится по 2 Мбайта. Обычно латентность L2 кэша, расположенного на кристалле ядра, составляет от 8 до 20 тактов ядра. В отличие от L1 кэша, его отключение может не повлиять на производительность системы. Однако, в задачах, связанных с многочисленными обращениями к ограниченной области памяти, например, СУБД , производительность может упасть в десятки раз.

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

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

Ассоциативность кэша

Одна из фундаментальных характеристик кэш-памяти - уровень ассоциативности - отображает её логическую сегментацию. Дело в том, что последовательный перебор всех строк кэша в поисках необходимых данных потребовал бы десятков тактов и свёл бы на нет весь выигрыш от использования встроенной в ЦП памяти. Поэтому ячейки ОЗУ жёстко привязываются к строкам кэш-памяти (в каждой строке могут быть данные из фиксированного набора адресов), что значительно сокращает время поиска. С каждой ячейкой ОЗУ может быть связано более одной строки кэш-памяти: например, n -канальная ассоциативность (англ. n -way set associative ) обозначает, что информация по некоторому адресу оперативной памяти может храниться в n местах кэш-памяти.

При одинаковом объеме кэша схема с большей ассоциативностью будет наименее быстрой, но наиболее эффективной.

Кэширование внешних накопителей

Многие периферийные устройства хранения данных используют кэш для ускорения работы, в частности, жёсткие диски используют кэш-память от 1 до 32 Мбайт (модели с поддержкой одновременно и имеет смысл прочитать блок один раз, затем хранить одну копию блока в оперативной памяти для всех процессов;

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

    Кэш оперативной памяти состоит из следующих элементов:

    1. набор страниц оперативной памяти, разделённых на буферы, равные по длине блоку данных соответствующего устройства внешней памяти;
    2. набор заголовков буферов, описывающих состояние соответствующего буфера;
    3. хеш-таблицы , содержащей соответствие номера блока заголовку;
    4. списки свободных буферов.

    Алгоритм работы кэша с отложенной записью

    Изначально все заголовки буферов помещаются в список свободных буферов. Если процесс намеревается прочитать или модифицировать блок, то он выполняет следующий алгоритм:

    1. пытается найти в хеш-таблице заголовок буфера с заданным номером;
    2. в случае, если полученный буфер занят, ждёт его освобождения;
    3. в случае, если буфер не найден в хеш-таблице, берёт первый буфер из хвоста списка свободных;
    4. в случае, если список свободных буферов пуст, то выполняется алгоритм вытеснения (см. ниже);
    5. в случае, если полученный буфер помечен как «грязный», выполняет асинхронную запись содержимого буфера во внешнюю память.
    6. удаляет буфер из хеш-таблицы, если он был помещён в неё;
    7. помещает буфер в хеш-таблицу с новым номером.

    Процесс читает данные в полученный буфер и освобождает его. В случае модификации процесс перед освобождением помечает буфер как «грязный». При освобождении буфер помещается в голову списка свободных буферов.

    Таким образом:

    1. если процесс прочитал некоторый блок в буфер, то велика вероятность, что другой процесс при чтении этого блока найдёт буфер в оперативной памяти;
    2. запись данных во внешнюю память выполняется только тогда, когда не хватает «чистых» буферов, либо по запросу.

    Алгоритм вытеснения

    Если список свободных буферов пуст, то выполняется алгоритм вытеснения буфера. Алгоритм вытеснения существенно влияет на производительность кэша. Существуют следующие алгоритмы:

    1. LRU (Least Recently Used) - вытесняется буфер, неиспользованный дольше всех;
    2. MRU (Most Recently Used) - вытесняется последний использованный буфер;
    3. LFU (Least Frequently Used) - вытесняется буфер, использованный реже всех;
    4. ARC (англ.) (Adaptive Replacement Cache) - алгоритм вытеснения, комбинирующий LRU и LFU, запатентованный

      Программное кэширование

      Политика записи при кэшировании

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

      Существуют две основные политики записи кэш-памяти - сквозная запись (write-through) и отложенная запись (write-back).

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

      Кэширование интернет-страниц

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

    Кэш-память (КП), или кэш , представляет собой организованную в виде ассоциативного запоминающего устройства (АЗУ) быстродействующую буферную память ограниченного объема, которая располагается между регистрами процессора и относительно медленной основной памятью и хранит наиболее часто используемую информацию совместно с ее признаками (тегами), в качестве которых выступает часть адресного кода.

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

    Зададимся вопросом: «А как определить наиболее часто используемую информацию? Неужели сначала кто-то анализирует ход выполнения программы, определяет, какие команды и данные чаще используются, а потом, при следующем запуске программы, эти данные переписываются в кэш-память и уже тогда программа выполняется эффективно?» Конечно нет. Хотя в современных микропроцессорах имеется определенный механизм, который позволяет в некоторой степени реализовать этот принцип. Но в основном, конечно, кэш-память сама отбирает информацию, которая чаще всего используется. Рассмотрим, как это происходит.

    Механизм сохранения информации в кэш-памяти

    При включении микропроцессора в работу вся информация в его кэш-памяти недостоверна.

    При обращении к памяти микропроцессор, как уже отмечалось, сна чала проверяет, не содержится ли искомая информация в кэш-памяти.

    Для этого сформированный им физический адрес сравнивается с адресами ячеек памяти, которые были ранее кэшированы из ОЗУ в КП.

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

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

    Рис. 4.1. Организация обмена между оперативной и кэш-памятью

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

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

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

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

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

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

    Если каждая строка ОЗУ имеет только одно фиксированное место, на котором она может находиться в кэш-памяти, то такая кэш-память называется памятью с прямым отображением .

    Предположим, что ОЗУ состоит из 1000 строк с номерами от 0 до 999, а кэш-память имеет емкость только 100 строк. В кэш-памяти с прямым отображением строки ОЗУ с номерами 0, 100, 200, …, 900 могут сохраняться только в строке 0 КП и нигде иначе, строки 1, 101, 201, …, 901

    ОЗУ — в строке 1 КП, строки ОЗУ с номерами 99, 199, …, 999 сохраняются в строке 99 кэш-памяти (рис. 4.2). Такая организация кэш-памяти обеспечивает быстрый поиск в ней нужной информации: необходимо проверить ее наличие только в одном месте. Однако емкость КП при этом используется не в полной мере: несмотря на то, что часть кэш-памяти может быть не заполнена, будет происходить вытеснение из нее полезной информации при последовательных обращениях, например, к строкам 101, 301, 101 ОЗУ.

    Рис. 4.2. Принцип организации кэш-памяти с прямым отображением

    Кэш-память называется полностью ассоциативной , если каждая строка ОЗУ может располагаться в любом месте кэш-памяти.

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

    Компромиссом между этими двумя способами организации кэш-памяти служит множественно-ассоциативная КП, в которой каждая строка ОЗУ может находиться по ограниченному множеству мест в кэш-памяти.

    При необходимости замещения информации в кэш-памяти на новую используется несколько стратегий замещения . Наиболее известными среди них являются:

    • LRU — замещается строка, к которой дольше всего не было обращений;
    • FIFO — замещается самая давняя по пребыванию в кэш-памяти строка;
    • Random — замещение проходит случайным образом.

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

    Некоторые эвристические оценки вероятности кэш-промаха при разных стратегиях замещения (в процентах) представлены в табл. 4.1.

    Таблица 4.1. Вероятность кэш-промаха для различной кэш-памяти
    Размер кэша,Кбайт Организация кэш-памяти
    2-канальная ассоциативная 4-канальная ассоциативная 8-канальная ассоциативная
    LRU Random LRU Random LRU Random
    16 5.2 5.7 4.7 5.3 4.4 5.0
    64 1.9 2.0 1.5 1.7 1.4 1.5
    256 1.15 1.17 1.13 1.13 1.12 1.12

    Анализ таблицы показывает, что:

    • увеличением емкости кэша, естественно, уменьшается вероятность кэш-промаха , но даже при незначительной на сегодняшний день емкости кэш-памяти в 16 Кбайт около 95 % обращений происходят к КП, минуя оперативную память;
    • чем больше степень ассоциативности кэш-памяти, тем больше вероятность кэш-попадания за счет более полного заполнения КП (время поиска информации в КП в данном анализе не учитывается);
    • механизм LRU обеспечивает более высокую вероятность кэш-попадания по сравнению с механизмом случайного замещения Random, однако этот выигрыш не очень значителен.

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

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

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

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

    Организация внутренней кэш-памяти микропроцессора

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

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

    Внутренняя кэш-память в микропроцессоре i486 реализует сквозную запись . Начиная с МП Pentium используется сквозная или обратная запись .

    Во внешней КП применяется любой способ записи или их комбинация.

    Внутренняя кэш-память МП i486 имеет емкость 8 Кбайт и организована в виде 4-канальной ассоциативной памяти. Это означает, что данные из какой-либо строки ОЗУ могут храниться в любой из 4 строк кэш-памяти.

    КП состоит из следующих блоков (рис. 4.3):

    • блока данных,
    • блока тегов,
    • блока достоверности и LRU.

    Рис. 4.3. Структура внутренней кэш-памяти МП i486

    Блок данных содержит 8 Кбайт данных и команд. Он разделен на 4 массива (направления), каждый из которых состоит из 128 строк. Строка содержит данные из 16 последовательных адресов памяти начиная с адреса, кратного 16. Индекс массивов блока данных, состоящий из 7 бит, соответствует 4 строкам КП, по одной из каждого массива. Четыре строки КП с одним и тем же индексом называются множеством.

    В блоке тегов имеется один тег длиной 21 бит для каждой строки данных в КП. Блок тегов также разделен на 4 массива по 128 тегов. Тег содержит старшие 21 бит физического адреса данных, находящихся в соответствующей строке КП.

    В блоке достоверности и LRU содержится по одному 7-разрядному значению для каждого из 128 множеств строк КП: 4 бита достоверности (V) по одному на каждую строку множества и 3 бита (B0 … B2), управляющие механизмом LRU. Биты достоверности показывают, содержит ли строка достоверные (V = 1) или недостоверные (V = 0) данные. При программной очистке КП и аппаратном сбросе процессора все биты достоверности сбрасываются в 0.

    Адресация кэш-памяти осуществляется путем разделения старших 28 бит физического адреса на 2 части. Младшие 7 бит из этих разрядов (разряды 10…4 физического адреса) образуют поле индекса и определяют множество, в котором могут храниться данные. Старшие 21 бит (разряды 31…11 физического адреса) служат полем тега и применяются для определения того, находится ли информация с данным физическим адресом в какой-либо строке выбранного множества.

    Поиск в кэш-памяти информации с заданным физическим адресом выполняется следующим образом:

    Физический адрес, по которому происходит обращение, разбивается на 3 поля: Тег, Индекс, № байта. 7 разрядов А10…А4 поля индекса определяют одно из 128 множеств.

    В выбранном множестве содержатся 4 строки с информацией.

    Чтобы определить, присутствует ли нужная информация в одной из строк этого множества, проводится сравнение старших 21 бита физического адреса (поле Тег) с тегами строк выбранного множества. Сравнение проводится только для достоверных строк, то есть тех, у которых в блоке достоверности установлен бит достоверности V = 1.

    Если для одной из строк ее тег и разряды А31…А11 физического адреса совпали, то это означает, что произошло кэш-попадание и необходимая информация есть в кэш-памяти.

    Считывается найденная строка из 16 байт. Искомый байт в ней определяется 4 младшими разрядами физического адреса (А3…А0).

    Если на этапе 3 совпадения не произошло или все строки множества недостоверны, эта ситуация определяется как кэш-промах . В этом случае по сформированному микропроцессором физическому адресу выполняется обращение к оперативной памяти. Из ОЗУ извлекается нужная информация, и содержащая ее строка записывается в свободную строку выбранного множества. Старшие 21бит физического адреса записываются в поле тега этой строки. Если все строки в выбранном множестве достоверны, то замещается строка, к которой дольше всего не было обращений согласно механизму LRU. Этот механизм действует точно так же, как и при вытеснении строк из буфера ассоциативной трансляции TLB.

    Режим работы кэш-памяти определяется программно установкой разрядов CD (запрет кэширования) и NW (запрет сквозной записи) в управляющем регистре CR0. Кэширование можно разрешить (это состояние после инициализации при сбросе), можно запретить при наличии достоверных строк (в этом режиме КП действует как быстрое внутреннее ОЗУ) или, наконец, кэширование может быть полностью запрещено.

    Управление работой кэш-памяти на уровне страниц

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

    Бит PCD запрещает (PCD = 1) или разрешает (PCD = 0) кэширование страницы. Запрещение кэширования необходимо для страниц, которые содержат порты ввода/вывода с отображением на память. Оно также полезно для страниц, кэширование которых не дает выигрыша в быстродействии, например, страниц, содержащих программу инициализации.

    Бит PWT определяет метод обновления ОЗУ и внешней кэш-памяти (кэш 2-го уровня). Если PWT = 1, то для данных в соответствующей странице определяется кэширование со сквозной записью, при PWT = 0 применяется способ обратной записи. Используется в микропроцессорах начиная с Pentium. Так как внутренняя кэш-память в МП i486 работает со сквозной записью, состояние бита PWT на нее не влияет. Бит PWT в этом случае действует только на внешнюю КП.

    Обеспечение согласованности кэш-памяти микропроцессоров в мультипроцессорных системах

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

    Рис. 4.4. Структура мультимикропроцессорной системы с общей оперативной памятью

    Предположим, что МП А считал некоторую строку данных из ОЗУ в свою внутреннюю КП и изменил данные в этой строке в процессе работы.

    Мы отмечали, что существует два основных механизма обновления оперативной памяти:

    сквозная запись , которая подразумевает, что как только изменилась информация во внутренней кэш-памяти, эта же информация копируется в то же место оперативной памяти, и

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

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

    Существует два класса протоколов когерентности:

    • протоколы на основе справочника (directory based): информация о состоянии блока физической памяти содержится только в одном месте, называемом справочником (физически справочник может быть распределен по узлам системы);
    • протоколы наблюдения (snooping): каждый кэш, который содержит копию данных некоторого блока физической памяти, имеет также соответствующую копию служебной информации о его состоянии; централизованная система записей отсутствует; обычно кэши расположены на общей шине, и контроллеры всех кэшей наблюдают за шиной (просматривают ее), чтобы определять, какие обращения по адресам в пределах этого блока происходят со стороны других микропроцессоров.

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

    Для поддержания когерентности применяется два основных метода.

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

    Альтернативой протоколу записи с аннулированием является обновление всех копий элемента данных в случае записи в этот элемент данных.

    Этот тип протокола называется протоколом записи с обновлением (write update protocol), или протоколомзаписи с трансляцией (write broadcast protocol).

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

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

    Рассмотрим один из наиболее распространенных протоколов, обеспечивающих согласованную работу кэш-памяти нескольких микропроцессоров и основной памяти в мультимикропроцессорных системах, протокол MESI , который относится к группе протоколов наблюдения с аннулированием . Будем знакомиться с ним на примере двухпроцессорной системы, состоящей из микропроцессоров A и B.

    Этот протокол использует 4 признака состояния строки кэш-памяти микропроцессора, по первым буквам которых и называется протокол:

    • измененное состояние (Modified): информация, хранимая в кэшпамяти микропроцессора А, достоверна только в этом кэше; она отсутствует в оперативной памяти и в кэш-памяти других микропроцессоров;
    • исключительная копия (Exclusive): информация, содержащаяся в кэше А, содержится еще только в оперативной памяти;
    • разделяемая информация (Shared): информация, содержащаяся в кэше А, содержится в кэш-памяти по крайней мере еще одного МП, а также в оперативной памяти;
    • недостоверная информация (Invalid): в строке кэш-памяти находится недостоверная информация.

    Таким образом, состояние признаков потокола MESI отражает следующие состояния (по отношению к МПА) строки кэш-памяти (табл. 4.2):

    Таблица 4.2. Формирование признаков состояния протокола MESI
    Cостояние признака протокола Состояние строки памяти
    Кэш А Кэш В ОЗУ
    Modified Д НД НД
    Shared Д Д Д
    Exclusive Д НД Д
    Invalid НД Х Х

    При работе микропроцессора А с точки зрения обеспечения когерентности памяти возможны следующие ситуации:

    • RH (Read Hit) — кэш-попадание при чтении;
    • WH (Write Hit) — кэш-попадание при записи;
    • RME (Read Miss Exclusive) — кэш-промах при чтении;
    • RMS (Read Miss Shared) — кэш-промах при чтении, но соответствующий блок есть в кэш-памяти другого микропроцессора;
    • WM (Write Miss) — кэш-промах при записи;
    • SHR (Snoop Hit Read) — обнаружение копии блока при прослушивании операции чтения другого кэша;
    • SHW (Snoop Hit Write) — обнаружение копии блока при прослушивании операции записи другого кэша.

    Наибольший интерес здесь представляют две последние позиции.

    Современные микропроцессоры имеют двунаправленную шину адреса.

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

    Изменения признака состояния блока кэш-памяти МП в зависимости от различных ситуаций в его работе и работе мультимикропроцессорной системы в целом представлены на рис. 4.5.

    Рис. 4.5. MESI-диаграмма обеспечения когерентности кэш-памяти

    Проиллюстрируем некоторые из представленных переходов.

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

    При этом состояние строки в кэш-памяти рассматриваемого микропроцессора изменится с модифицированного на разделяемое (Shared).

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

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



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: