Технология обмена сообщениями делает взаимодействие расширяемым и независимым от дислокации его участников.
Менеджер памяти не обязательно должен выполняться на одной машине. Он может работать на любом удаленном узле сети и представляться на локальной машине через порты-заместители объектов памяти. Такой подход позволяет расширить управление памятью Mach на многопроцессорные системы, в которых машины разделяют между собой некоторую часть памяти на основе обмена сообщениями. В следующем подразделе вы увидите пример, описывающий такое взаимодействие.
Менеджеры памяти, реализованные в виде задач прикладного уровня, называются внешними. Система Mach также поддерживает менеджер по умолчанию (default pager), являющийся внутренним, то есть работающим в качестве задачи ядра1. Этот менеджер управляет всеми временными объектами памяти, для которых не требуется постоянное резервное хранение. Такие объекты можно разделить на два типа:
+ теневые объекты, содержат измененные страницы областей памяти, разделяемых в режиме копирования при записи;
+ области, заполняемые нулями, такие как стеки, кучи или неинициализированные данные. Они выделяются вызовом
vm_allocate (target_task, address, size, flag):
Ядро создает менеджер по умолчанию при инициализации системы при вызове memory_object_create(). Управляемые объекты изначально не обладают памятью. При первом обращении к таким объектам ядро вызывает memory_object_ data_request(), а менеджер возвращает memory_object_data_unavailable(), что указывает на необходимость заполнения запрашиваемых страниц памяти нулями.
Сетевой сервер разделяемой памяти часто используется в качестве примера гибкости интерфейса внешних менеджеров памяти. Сервер представляет собой задачу прикладного уровня, позволяющую разделять набор страниц в своем адресном пространстве клиентскими задачами, физически «расположенными» в любой точке сети. Сервер передает данные клиентам при возникновении страничной ошибки и синхронизирует доступ к разделяемым данным так, чтобы изменения, внесенные одним клиентом, незамедлительно становились видны остальным. При этом для клиентов обращение к совместно используемой памяти выглядит абсолютно одинаковым, независимо от того, разделяется ли область между задачами на одной машине или на нескольких сразу.
Разделение памяти в пределах одной машины является несложным делом. В памяти физически присутсвует лишь одна копия данных, поэтому все изменения, внесенные одним клиентом, незамедлительно попадают в поле зрения остальных. Разделение данных между задачами, выполняемыми на разных компьютерах, намного сложнее, так как на каждой машине могут оказаться собственные копии страниц, что усложняет задачу синхронизации изменений.
Давайте представим, какие взаимодействия могут происходить между двумя задачами, выполняемыми на двух разных машинах, и разделяющими между собой страницу памяти. Сервер разделяемой памяти вправе находиться как на одном из этих узлов, так и на совершенно другом, третьем компьютере. На рис. 15.9 показана схема первоначального отображения объекта в адресных пространствах клиентов. Для каждой клиентской задачи выполняется последовательность операций, представленная ниже.
Опубликовал katy
June 20 2015 18:40:04 ·
0 Комментариев ·
1655 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.