Архитектура памяти Windows CE 6

Архитектура памяти Windows CE 6 

Henrik Viklund 

Перевод с английского языка Белялетдиновым Т.Р. 

Вкратце, новая модель памяти дает возможность для запуска практически неограниченного числа процессов и под каждый процесс выделяется 2Гб виртуальной памяти. Чтобы учесть это, старая архитектура была заменена на новую, в которой только один процесс отображается в пространстве пользователя в любой момент времени.

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

Наследство (Legacy)

Прежде чем вдаваться в детали новой архитектуры, давайте напомним, что модель памяти СЕ5  выглядит следующим образом. Я не буду вдаваться в подробности, поскольку есть много информации об архитектуре памяти CE 5 :



Модель виртуальной памяти Windows CE 5 

Пространство пользователя CE 5 разделено на 32 слота процесса, каждый занимает  32 МБ виртуальной памяти, и область разделяемой памяти, в которой любые процессы могут распределить виртуальную память. У этой архитектуры фактически есть свои корни в самых первых версиях Windows CE, разработанной уже более 10 лет назад. Ограничивая размер и максимальное число процессов, все процессы могут быть отображены в пространстве пользователя все время, очень уменьшая сложность ядра.

В то время  32 МБ считали большим количеством виртуальной памяти для процесса, и способность управлять 32 процессами одновременно на вложенном устройстве была более чем достаточно для большинства изготовителей устройства. Короче говоря, это был справедливый компромисс между работой и гибкостью. 

Детальная модель памяти СЕ6 

Таким образом, что можно сказать о новой модели памяти? Она все еще разделена  :  2Гб пространство ядра и 2Гб пространство пользователя , это единственное , что является общим между моделяим памяти СЕ5 и СЕ6 . 

В СЕ 6 каждому процессу выделяется 1 Гб виртуальной памяти. Это возможно благодаря тому, что этот 1Гб памяти  включается когда идет переключение процессов (в отличие от CE 5 и выше, где все процессы являются доступными в пользовательском пространстве все время ) .Поскольку процессы не разделяют друг с другом пространство пользователя , максимальное число запущенных процессов уже не ограничивается.  Хотя говорят о возможности запуска более 32000 процессов, реальное ограничение устанавливается доступной физической памятью. Объем физической памяти, который должен быть выделен для каждого процесса, приведет к исчерпанию памяти задолго до того, как число процессов достигнет 32k. Но, давайте просто скажем, что модель нового ядра и памяти более не являются ограничивающим фактором, когда речь заходит о запущенных процессах.. 

Пространство Пользователя

Теперь, давайте более детально рассмотрим  как разделена виртуальная память в CE 6:



Пространство пользователя Windows CE 6

Начиная c основании, достигая  метки в1 Гбайт, расположено  пространство, о котором упоминалось выше . В метке 1 Гбайт находятся  512 МБ для использования dll, выше которого, у нас есть 256 МБ для поддержки подключаемых файлов. Наверху, у нас есть 255 МБ общедоступной системной динамической памяти, остается защитное неотображаемое пространство в 1 МБ между пространством ядра и пространством пользователя.

Теперь, пространство процесса в 1 Гбайт отображает код выполняемой программы процесса и данные, его распределения VM и любые файлы с отображенной памятью. В области dll будет то же самое отображение через процессы по причинам оптимизации. В то время как кодовые страницы разделены через процессы, страницы данных в этой области будут уникальными физическими страницами для каждого процесса. dll теперь загружены и растут от основания , противоположно стилю стека, нисходящая загрузка, используемая в CE 5 и раньше.

Область файла с отображенной памятью находится  в установленном местоположении в пространстве пользователя. Это сделано по причинам обратной совместимости. Наконец, общедоступная системная динамическая память - область, где компоненты OS и процессы могут бзопасно обменяться информацией . В то время как компоненты OS могут осущестлять чтение/запись в этой области только с разрешения,  процессам, работающим в пространстве пользователя, могут быть даны права только на чтения  или чтение/запись. 

Пространство ядра

Модель памяти для пространства ядра также изменилась



Хотя она выглядит довольно знакомо, две области по 512Мб  не изменились, и ловушка пространства до сих пор там на вершине кучи,  но есть некоторые важные изменения, которые следует отметить .  Прежде всего область128Mb  kernel XIP DLL непосредственно над 1GB , 128Mb зарезервированы для использования объекта Store. Сразу же после этого, имеются два слота по 256Mb виртуальной памяти ядра.