Кэш страниц для общей памяти

По следующей ссылке на 4-м изображении сверху:

http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files

  • Изображенный сценарий представляет собой сценарий двух процессов, «рендеринга» и «3drender», совместно использующих файл. Автор собирается описать, как механизм обмена работает вместе с кэшем страниц.
  • Первоначально при рендеринге виртуальные страницы отображались в кэше страниц.
  • На шаге 4 "рендеру" выделяется новая собственная анонимная страница, которая будет содержать определенные изменения, которые он хотел бы внести в "scene.dat #2".
  • Как только «рендеринг» вносит свои изменения, как это изменение отражается на «3drender», который продолжает указывать на фрейм страницы кэша страниц, содержащий «scene.dat # 2»?
  • Кроме того, не должно ли это изменение, сделанное «рендерингом», вернуться в кеш страницы, заменив старую копию кеша страницы «scene.dat # 2»?
  • Часть, которая остается для меня неясной, это то, что происходит «после того, как» один из процессов записывает на общую страницу, и как это «обновление» попадает в кеш страниц и на диск, чтобы другие процессы, которые совместно используют один и тот же файл, см. это изменение.

Было бы здорово, если бы кто-то мог пролить немного света.

Спасибо, Виджай


person TheLoneJoker    schedule 16.01.2011    source источник


Ответы (1)


В сценарии, описанном в статье по ссылке, render и render3d имеют частные копии одного файла, отображаемые в памяти. Насколько процессы могут судить, ОС выделила кучу страниц в адресном пространстве каждого процесса и просто скопировала туда содержимое файла. Если они изменяют эти страницы, ничего не происходит. Никакие изменения не возвращаются в файл. Никаких изменений между render и render3d не происходит. Вот что значит иметь частное сопоставление.

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

person Karmastan    schedule 16.01.2011