Автор Henrik Viklund
Источник: http://www.addlogic.se/articles/articles/windows-ce-6-memory-architecture.html
Перевод с английского языка Белялетдиновым Т.Р.
Вкратце, новая модель памяти дает возможность для запуска практически неограниченного числа процессов и под каждый процесс выделяется 2Гб виртуальной памяти. Чтобы учесть это, старая архитектура была заменена на новую, в которой только один процесс отображается в пространстве пользователя в любой момент времени.
Положительной стороной данного подхода является то, что с тех пор, как пространство пользователя больше не упаковано бездеятельными процессками, выполняемые процессы могут использовать гораздо больше виртуальной памяти чем раньше. Отрицательной строной является прежде всего взаимодействие процессов, где отображение памяти через процессы становится намного более сложным и с этим связан штраф производительности .
Наследство (Legacy)
Прежде чем вдаваться в детали новой архитектуры, давайте напомним, что модель памяти СЕ5 выглядит следующим образом. Я не буду вдаваться в подробности, поскольку есть много информации об архитектуре памяти CE 5 :
Модель виртуальной памяти Windows CE 5
Пространство пользователя CE 5 разделено на 32 слота процесса, каждый занимает 32 МБ виртуальной памяти, и область разделяемой памяти, в которой любые процессы могут распределить виртуальную память. У этой архитектуры фактически есть свои корни в самых первых версиях Windows CE, разработанной уже более 10 лет назад. Ограничивая размер и максимальное число процессов, все процессы могут быть отображены в пространстве пользователя все время, очень уменьшая сложность ядра.
Детальная модель памяти СЕ6
Таким образом, что можно сказать о новой модели памяти? Она все еще разделена : 2Гб пространство ядра и 2Гб пространство пользователя , это единственное , что является общим между моделяим памяти СЕ5 и СЕ6 .
Пространство Пользователя
Теперь, давайте более детально рассмотрим как разделена виртуальная память в CE 6:
Пространство пользователя Windows CE 6
Начиная c основании, достигая метки в1 Гбайт, расположено пространство, о котором упоминалось выше . В метке 1 Гбайт находятся 512 МБ для использования dll, выше которого, у нас есть 256 МБ для поддержки подключаемых файлов. Наверху, у нас есть 255 МБ общедоступной системной динамической памяти, остается защитное неотображаемое пространство в 1 МБ между пространством ядра и пространством пользователя.
Теперь, пространство процесса в 1 Гбайт отображает код выполняемой программы процесса и данные, его распределения VM и любые файлы с отображенной памятью. В области dll будет то же самое отображение через процессы по причинам оптимизации. В то время как кодовые страницы разделены через процессы, страницы данных в этой области будут уникальными физическими страницами для каждого процесса. dll теперь загружены и растут от основания , противоположно стилю стека, нисходящая загрузка, используемая в CE 5 и раньше.
Пространство ядра
Модель памяти для пространства ядра также изменилась
Хотя она выглядит довольно знакомо, две области по 512Мб не изменились, и ловушка пространства до сих пор там на вершине кучи, но есть некоторые важные изменения, которые следует отметить . Прежде всего область128Mb kernel XIP DLL непосредственно над 1GB , 128Mb зарезервированы для использования объекта Store. Сразу же после этого, имеются два слота по 256Mb виртуальной памяти ядра.