0

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

1) Кэш инструкций -> ускорить выполнение исполняемых инструкций.

2) Кэш данных -> для ускорения сбора и хранения данных.

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

Нет ли преимуществ кеширования для памяти, выделенной из кучи? является ли доступ к памяти кучи в кеше данных?

ответ

0

Кэш инструкций работает на сегменте кода программы, а кеш данных работает на сегменте данных программы. Это правильно?

Нет, CPU не знает о сегментах.

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

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

+0

Thanx для вашего ответа.Можете ли вы подробнее рассказать о кеше данных, что именно идет на это? – Gopinath

+0

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

0

Согласно моему пониманию, кэш инструкций работает на сегменте кода программы, а кеш данных работает на сегменте данных программы. это правильно?

Нет ли преимуществ кеширования для памяти, выделенной из кучи? является ли доступ к памяти кучи в кеше данных?

Память - память. ЦП не может определить разницу между кучей и данными.

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

0

Когда вы пишете программу, это преобразуется в машиносчитываемый двоичный файл. Когда CPU выполняет инструкции, он извлекает этот двоичный код, декодирует, что он означает и затем выполняет. В основном этот двоичный файл указывает CPU, какие инструкции он должен выполнить. Если этот двоичный файл был сохранен только в основной памяти, то на каждом этапе выборки процессор должен получить доступ к основной памяти, что очень плохо. Вместо этого мы должны хранить, некоторые из них в кеше, ближе к процессору. Поскольку этот кеш содержит только двоичную информацию, связанную с выполняемыми инструкциями, мы называем ее кэшем команд. Теперь инструкции нужны для работы. В вашем высоком уровне кода вы могли бы иметь что-то вроде arrayA[i] = (arrayB[i] + arrayC[i]), который будет переводить в инструкции машины что-то похожее на

ADD memLocationStoredInRegisterA, memLocationStoredInRegisterB, memLocationStoredInRegisterC

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

Смежные вопросы