Читая о моделях согласованности (а именно о TSO x86), авторы обычно прибегают к моделям, в которых есть несколько процессоров, связанные с ними буферы хранения и их частные кэши.
Если мое понимание верно, буферы хранилища могут быть описаны как очереди, в которые ЦП могут помещать любые инструкции хранилища, которые они хотят зафиксировать, в память. Итак, как следует из названия, они являются store
буферами.
Но когда я читаю эти бумаги, они склонны говорить о взаимодействии нагрузок и хранилищ, с такими утверждениями, как «более поздняя загрузка может пройти более раннюю хранилище», что немного сбивает с толку, поскольку они почти кажутся говорящими, как будто в буфере хранения будет как загрузка, так и хранилище, если нет - верно?
Таким образом, должно быть также хранилище загрузки, о котором они (по крайней мере, явно) не говорят. Плюс, эти два должны быть как-то синхронизированы, чтобы оба знали, когда допустимо загрузить из памяти и зафиксировать в памяти - или я что-то упустил?
Кто-нибудь может пролить немного света на это?
EDIT:
Давайте рассмотрим абзац из раздела «Учебник по согласованности памяти и согласованности кэша»:
Чтобы понять реализацию атомных RMW в TSO, мы рассмотрим
RMW в качестве груза сразу же следует за магазином. Нагрузочная часть
RMW не может пропускать более ранние грузы из-за правил заказа TSO. Это
на первый взгляд может показаться, что нагрузочная часть RMW может пройти раньше
сохраняет в буфере записи, но это не разрешено законом. Если часть нагрузки
RMW передает более ранний магазин, тогда часть магазина RMW будет
Также необходимо передать более раннее хранилище, потому что RMW является атомной парой.
Но поскольку магазины не могут передавать друг другу в TSO, нагрузка
часть RMW также не может передать более раннее хранилище
точнее,
Загрузочная часть RMW не может выдерживать более ранние нагрузки из-за правил заказа TSO. На первый взгляд может показаться, что загружаемая часть RMW может передать ранее сохраненные данные в буфер записи
поэтому они ссылаются на нагрузки / хранилища, пересекающие друг друга в буфере записи (что, как я полагаю, совпадает с буфером хранилища?)
Спасибо