1

Так что я немного понимаю, как все это связано. Инструкции хранятся в регистрах, а EIP/RIP указывает на код операции, который управляет этими регистрами (программный код).

Однако я не могу понять связь Большого кэша с доступными регистрами конечного размера.

2 ответа2

3

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

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

Это представление высокого уровня. Может быть, не достаточно низко, судя по остальной части вашего вопроса.

2

Так что я немного понимаю, как все это связано. Инструкции хранятся в регистрах

Нет, инструкции хранятся в памяти.

и EIP/RIP указывает на код операции, который управляет этими регистрами (программный код)

EIP/RIP указывает на область памяти, где ЦП будет получать следующую инструкцию. Он увеличивается на 1 или более при получении инструкции и может полностью измениться при переходе, переходе или прерывании.

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

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

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

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

В x86 есть несколько инструкций, которые очищают кеш, а некоторые процессоры позволяют вам настроить кеш как «кеш-память», где ЦП использует только кеш и вообще не обращается к ОЗУ. Это полезно, если необходимо выполнить код до инициализации ОЗУ, например, при запуске системной прошивки или ОС, или без нарушения работы ОЗУ, например, при обработке сбоя ОС.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .