Почему регион памяти был бы отмечен некэшируемый?

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

db.person.find().snapshot().forEach( function (hombre) {
    hombre.name = hombre.firstName + ' ' + hombre.lastName; 
    db.person.save(hombre); 
});

http: // docs .mongodb.org / ручной / ссылки / метод / cursor.snapshot /

11
задан Benoit 18 September 2008 в 05:10
поделиться

5 ответов

Если к региону памяти получают доступ оба аппаратных и программных обеспечения одновременно (EX: регистр аппаратной конфигурации или рассеяние - собирают список для DMA), этот регион должен быть определен, как не кэшируется. Для фактического DMA буфер памяти может быть определен, как кэшируется, и в большинстве случаев, желательно для буфера кэшироваться, чтобы предоставить прикладному уровню быстрый доступ к тому буферу. Это - обязанность драйвера сбрасывать/делать недействительным кэш прежде, чем передать буфер DMA или приложению.

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

5
ответ дан 3 December 2019 в 03:37
поделиться

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

5
ответ дан 3 December 2019 в 03:37
поделиться

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

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

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

16
ответ дан 3 December 2019 в 03:37
поделиться

Возможно, это используется для ввода-вывода с отображенной памятью?

1
ответ дан 3 December 2019 в 03:37
поделиться

Некоторые области как Flash могут быть считаны в одном цикле, не должны кэшироваться.

0
ответ дан 3 December 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: