10

У меня вопрос, как процессор записывает данные в оперативную память?

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

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

Заранее спасибо,

-Faken

Изменить: я до сих пор не получил ответ, который я могу полностью принять. Я хочу знать особенно о части синхронизации записи в ОЗУ. Я знаю, что мы записываем данные в кэш L1 непосредственно из ЦП и что данные сбрасываются на уровни кеша, когда мы синхронизируем различные уровни кеша, и в конечном итоге основная ОЗУ синхронизируется с кешем самого высокого уровня. Однако я хотел бы знать, КОГДА кэши синхронизируются и синхронизируются с основной оперативной памятью, и какова их скорость по отношению к командам чтения.

2 ответа2

11

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

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

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

Конечно, вышесказанное ориентировано на процессоры Pentium. Другие процессоры могут делать что-то другим. Взять, к примеру, процессор Cell для PS3. Базовая архитектура ЦП ячейки - это одно ядро PowerPC с несколькими ядрами ячейки (на PS3 имеется восемь ячеек, одна из которых всегда отключена для повышения производительности). Каждая ячейка имеет свою собственную локальную память, вроде кеша L1, который никогда не записывается в системную RAM. Данные могут передаваться между этим локальным ОЗУ и системным ОЗУ с использованием передач DMA (Direct Memory Access). Ячейка может получить доступ к системной ОЗУ и ОЗУ других ячеек, используя обычные операции чтения и записи, но это только запускает передачу DMA (поэтому это происходит медленно и действительно следует избегать). Идея этой системы заключается в том, что игра - это не просто одна программа, а множество небольших программ, которые объединяются для выполнения одной и той же задачи (если вы знаете * nix, то это похоже на передачу программ командной строки для решения более сложных задач).

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

Skizz

2

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

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