Куда уходит память в Windows Mobile 5.0?

Первые шаги
Настройки
Программы
Проблемы и решения
Словарь пользователя
Обои

При покупке КПК или коммуникатора с новой операционной системой Windows Mobile 5.0 вам говорят, что все файлы, программы и документы теперь хранятся во Flash ROM, а RAM целиком отдана под выполнение программ. Но вы включаете компьютер и обнаруживаете, что вместо, скажем, 64 МБ RAM доступно около 45 МБ. Что это - брак, обман или что-то еще? Ситуацию проясняет один из разработчиков Windows Mobile - Майк Каллигаро.

Пояснение: в данном тексте под термином ROM понимается Flash ROM (перезаписываемая ROM).

Прежде чем объяснить странную пропажу оперативной памяти в Windows Mobile 5.0, необходимы некоторые пояснения относительно типов и технологий памяти, используемых в КПК.

RAM против ROM

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

RAM: очень быстрая память, но потребляет много энергии

ROM: гораздо медленнее RAM, зато требует очень мало энергии

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

Как это работает?

До появления Windows Mobile 5 этот вопрос был весьма запутанным. Сейчас же с появлением технологии постоянного хранения данных (Persistent Storage) все становится намного проще.

ROM - это место, где хранится информация. Все программы, операционная система хранятся в ROM. Ваши личные данных также хранятся в ROM. Те же самые SD и CF карты памяти тоже представляют собой ROM. Представьте себе ROM-память наладонника, как SD-карту, которую вы не можете вынуть. Это - самое точное сравнение.

RAM - это область памяти для запуска (выполнения) программ. Когда вы включаете КПК, программы из ROM загружаются в RAM, где они и будут выполняться. Например, при прослушивании музыки, небольшой фрагмент композиции сначала загружается из ROM в RAM - для воспроизведения. Затем этот фрагмент освобождает место для следующего. Когда вы читаете электронное письмо, его текст загружается из ROM в RAM и только после этого отображается на экране. Когда вы захотите прочитать следующее письмо, текст старого будет удален из RAM, а на его место будет загружен новый. Возврат к предыдущему письму потребует выгрузить текущий текст из памяти и снова обратиться к ROM за требуемыми данными.

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

Вы также можете представить себе принцип работы RAM и ROM в КПК с Windows Mobile на примере обычного настольного ПК. Если прибегнуть к такому сравнению, то RAM не меняет своего названия, а ROM предстает аналогом жесткого диска.

Сколько памяти нужно?

Аппаратные особенности накладывают свои, вполне естественные ограничения на объем встроенной памяти. Отклонения от этих величин происходят только в исключительных случаях. Начиная с 32 МБ возможные объемы можно получить простым удвоением: 32 МБ, 64 МБ, 128 МБ, 256 МБ и т.д.

Обычное устройство с Windows Mobile 5.0 обладает 64 МБ RAM. Но и 32 МБ можно считать вполне разумной величиной. Особенно, если в устройстве используется NOR ROM (подробнее о NOR - ниже). Можно поспорить с этим утверждением, говоря, что "памяти много не бывает". Однако повышенное потребление энергии, присущее RAM, указывает на обратное - слишком много памяти бывает. И это - причина того, почему крайне редки КПК со 128 МБ RAM. Такой объем просто неразумен, из-за высокого потребления энергии, хотя и может реализовываться в КПК для требовательных пользователей.

Обычное устройство с Windows Mobile 5.0 обладает 64 МБ ROM. И в данном случаев ограничение на объем лишь одно - цена. Больше ничто не является препятствием для увеличения объема ROM. Поэтому и при наличии средств, выбирайте модель с максимальным объемом ROM.

Существует множество версий Windows Mobile 5.0, как-то: Smartphone, Pocket PC, Pocket PC Phone Edition и некоторые их вариации. Локализация также вносит свою лепту ( (например восточные языки требуют больше памяти). Но жестким правилом стало то, что ПО, поставляемое вместе в КПК, занимает около 32 МБ. Таким образом, если вы покупаете устройство с 64 МБ ROM, то получите примерно 32 МБ ROM для собственной информации. Покупая КПК со 128 МБ ROM, вы получите около 96 МБ свободной памяти.

Не удивляйтесь, однако, что в свежекупленном наладоннике с 64 МБ ROM, вам останется 30 МБ или менее доступной памяти. Во-первых, приведенные цифры - приблизительны, а во-вторых, каждый производитель подходит к разработке устройства индивидуально, что и обуславливает расхождение в показателях.

Это, в общем-то и все, что относится к "подводным камням". При прочих равных, устройство с 32 МБ RAM и 128 МБ ROM для меня даже более привлекательно, чем устройство с 64 RAM и 64 ROM. А еще более интересный вариант - 64 МБ RAM и 256 МБ ROM. В последнем случае, разумеется, цена будет существенно выше.

Но обратите внимание на то, как продавцы и производители говорят об этом. Кто-нибудь заявит о том, что "у нашего устройства 64 МБ ROM", а другой скажет, что "в нашем устройстве 30 МБ памяти для хранения пользовательских данных". Учитывая природу маркетинга, можно не сомневаться, что в рекламе вы увидите самые большие цифры. Но обращать внимание нужно на самые маленькие.

Как насчет других аббревиатур?

Если считать, что с ROM и RAM мы разобрались, теперь можно перейти к тому, что такое NAND и NOR. Это два основных типа ROM. Они используются одинаково и все, что было сказано касательно ROM распространяется целиком и полностью верно в их отношении. На самом деле, для большинства пользователей не играет роли, какой тип ROM используется в их КПК. Но о различиях стоит знать.

NOR: большая скорость чтения, меньшая скорость записи

NAND: меньшая скорость чтения, но большая скорость записи

Впрочем скорость в данном случае понятие относительное. Оба типа памяти по быстродействию сильно проигрывают RAM. Есть только одно важно отличие между этими технологиями. NOR позволяет делать то, что называется "execute in place" (XIP) (дословный перевод: выполнять на месте). Теперь вспомните то, о чем мы говорили выше. Для запуска программы сначала необходимо сначала загрузить ее в RAM, и только после этого - запустить. NOR позволяет выполнять приложения напрямую из ROM, без необходимости загружать их в RAM. Это значит, что КПК с данным типом памяти потенциально требует меньше RAM. Но нужно отметить, что XIP применяется только для приложений и не действует в отношении изображений или музыки. NAND-технология не поддерживает XIP, но этот недостаток компенсируется ее более низкой ценой.

Сочетание этих типов памяти в одном устройстве привело бы к появлению идеального КПК. Так как NAND имеет большую скорость записи, а NOR большую скорость чтения, такой наладонник получил бы 64 МБ NAND и 64 МБ NOR ROM. При этом все программы хранились бы в NOR, а все пользовательские данные - в NAND. Использование XIP позволило бы "урезать" RAM с 64 МБ до 32 МБ, а вместе с этим - и потребление энергии. Кроме того, XIP ускорило бы запуск программ, которые в этом случае не нужно предварительно копировать в RAM. Отличный был бы КПК.

Кстати, все SD и CF карты памяти производятся с применением NAND-технологии. Именно поэтому они не позволяют запускать программы методом XIP.

Куда подевалась память?

Предположим, вы только что приобрели новенький КПК с Windows Mobile 5.0. На упаковке указано, что у него 64 МБ RAM. Вы включаете компьютер, открываете контрольную панель с информацией и выясняете, что на самом-то деле в <машинке> всего около 50 МБ RAM. Возможно, ошибка? Следует ли волноваться по этому поводу? На оба вопроса можно ответить коротко: нет. И вы скоро узнаете, почему.

Без фокусов

Основная причина, приводящая к непониманию, заключается в том, что панель управления берет в расчет лишь тот объем RAM, на который может влиять пользователь. То есть, она показывает лишь список запущенных владельцем компьютера программ. Но RAM используется и для других, скрытых от пользователя задач. Логика этого решения проста: если пользователь не может повлиять на данные процессы, зачем ему их видеть? Возможно, вам бы хотелось видеть список "скрытых" приложений и полную карту RAM, но в данном случае разработчики Windows Mobile 5.0 с вами не согласны.

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

Часть этих программ - дело рук Microsoft. И компании интересны мнения пользователей о том, какие из постоянно работающих приложений им не нужны. Но помните, что стоит отключить телефон - и вы не сможете принимать и совершать звонки, отключите органайзер - и вы не увидите уведомлений о предстоящих делах на главном экране.

Однако некоторые постоянно работающие приложения - наследство от оператора сотовой связи или производителя.

На что не может повлиять пользователь

Итак, куда же подевались 14 МБ? Ответ зависит от конкретной модели, поэтому точные цифры привести невозможно. Но есть ряд задач, помимо списка пользовательских приложений, требующих RAM. Из них можно выделить пять основных.

Page Pool (Буферная память)

Приложения используют RAM двумя способами. Есть код, который выполняется, и есть данные, которые создаются во время выполнения программы. На устройствах с NOR-памятью программы выполняются напрямую из ROM, минуя первоначальное копирование в RAM. Этот процесс называется XIP и о нем вы читали выше.

В случае с NAND-устройствами XIP не работает, поэтому программы сначала копируются в RAM, и лишь потом запускаются. Если Page Pool нет, то в RAM копируется все приложение. Page Pool - это механизм, ограничивающий размер кода, загружаемого в RAM. С его помощью из памяти можно выгружать фрагменты программы, которые не используются определенное время, и снова загружать их по мере необходимости. Без Page Pool такое управление RAM невозможно.

В типичном устройстве с Windows Mobile 5.0 под Page Pool отводится 4.5 МБ RAM.

Radio Stack (Протоколы радиосвязи)

Устройства с функциями мобильного телефона используют довольно сложный набор программных средств для работы в сотовых сетях. В некоторых устройствах радиоблок представляет собой отдельное устройство с собственными RAM и ROM. В других необходимый код хранится в обычной флэш-памяти. В последнем случае для его выполнения требуется XIP или же предварительное копирование в RAM. И, если они копируются в RAM, это значит, объем доступной памяти этого типа уменьшается.

Для протоколов сотовой связи обычно выделяется 4 МБ RAM.

DMA Buffers (Буфер DMA)

Некоторые компоненты составляющие устройства могут обмениваться данными с RAM минуя процессор. Эта технология называется Direct Memory Access (прямой доступ к памяти) или DMA. DMA очень эффективен, не загружает процессор и позволяет передавать гораздо большее количество данных в единицу времени, обычно экономя при этом энергию.

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

В свою очередь, производители наладонников, устанавливают размер DMA-буферов в зависимости от того, для чего предназначено то или иное устройство. Если главная цель - работа с фотографиями, то можно использовать небольшой объем буферной памяти. Для видео под DMA-буферы будет отведено больше памяти. А для видеоконференций - еще больше.

В результате, размеры DMA-буферов находятся в диапазоне от 300 КБ до 6 МБ. В типичном устройстве с функциями видеозаписи для этой цели будет отведено около 4 МБ RAM.

XIPKernel (Фрагменты кода ОС)

Некоторые фрагменты кода операционной системы выполняются только посредством XIP. В случае с NOR-памятью проблем не возникает. Но если в устройстве используется NAND, то код сначала будет скопирован в RAM - как и в случае с другими программами. Особенность заключается в том, что после загрузки ОС не позволяет определить, где именно выполняется данный фрагмент кода - в RAM или ROM. А поэтому по умолчанию предполагается, что он выполняется из ROM, и требуемый ему объем памяти не учитывается.

XIPKernel требует от 1.5 до 2 МБ RAM.

Frame Buffer (Буфер кадров)

Часть RAM хранит картинку, которую вы видите на экране. Для большинства устройств справедливо следующее: каждая точка на экране описывается двумя байтами. Обычный Pocket PC КПК имеет разрешение экрана в 320 х 240 точек. Это требует 150 КБ памяти. Соответственно, для экрана с разрешением в 640 х 480 точек требуется 600 КБ. Иногда для улучшения производительности применяется до двух буферов кадра. Это занимает около 1.2 МБ RAM.

А говорили, что 32 МБ будет достаточно!

Действительно, наладонник с 32 МБ RAM выглядит не слишком реалистично, если учесть, что 14 МБ отводится под системные нужды. Но важно понять, что то, о чем говорилось выше, тесно связано с аппаратными особенностями. Например, если в устройстве используется NOR ROM и XIP, то размер Page Pool может быть меньше. Кроме того, XIP освободит RAM при загрузке кода ядра операционной системы и протоколов сотовой связи. Если наладонник оптимизирован не для видео, а для фото, то ему потребуется и меньший DMA-буфер. А если разрешение дисплея 240 х 240 точек, а не 640 х 480, то и кадровый буфер будет пропорционально уменьшен.

Тонкая настройка этих параметров зависит от производителя, который проводит адаптацию к конкретному устройству. И производитель принимает вполне осознанные решения, балансируя между скоростью/производительностью и максимальным количеством выполняемых приложений.

Конечно, вы можете сказать, что вам не нужно, чтобы эти решения принимали за вас. Но, согласитесь, глупо предъявлять подобные претензии к тем, кто разрабатывает и выпускает КПК, а также создает для них драйверы. Это не в пример сложнее, чем просто задать размер DMA-буфера.

Источник: blogs.msdn.com
Перевод: Алексей Баранов