Когда вы пишете программу, это преобразуется в машиносчитываемый двоичный файл. Когда CPU выполняет инструкции, он извлекает этот двоичный код, декодирует, что он означает и затем выполняет. В основном этот двоичный файл указывает CPU, какие инструкции он должен выполнить. Если этот двоичный файл был сохранен только в основной памяти, то на каждом этапе выборки процессор должен получить доступ к основной памяти, что очень плохо. Вместо этого мы должны хранить, некоторые из них в кеше, ближе к процессору. Поскольку этот кеш содержит только двоичную информацию, связанную с выполняемыми инструкциями, мы называем ее кэшем команд. Теперь инструкции нужны для работы. В вашем высоком уровне кода вы могли бы иметь что-то вроде arrayA[i] = (arrayB[i] + arrayC[i])
, который будет переводить в инструкции машины что-то похожее на
ADD memLocationStoredInRegisterA, memLocationStoredInRegisterB, memLocationStoredInRegisterC
Эта инструкция хранится в кэше команд, но данные, т.е. Arraya, arrayB и arrayC будет сохраняются в другой части памяти. Опять же, бесполезно обращаться к основной памяти при каждом выполнении этой команды. Поэтому мы храним некоторые из них в другом кеше, который мы называем кешем данных.
Thanx для вашего ответа.Можете ли вы подробнее рассказать о кеше данных, что именно идет на это? – Gopinath
Когда инструкция пытается прочитать что-то из памяти, она сначала проверяет кеш данных. Если значение по заданному адресу уже находится в кеше и действительное, оно используется инструкцией. Когда команда пытается записать что-то в память, соответствующее значение в кеше обновляется или недействительно (помечено как недопустимое). Все вышеизложенное может зависеть от политики кеша *, определенной для области памяти, к которой осуществляется доступ. – Tsyvarev