0

Периодические тормоза ОС WM 5-почему?


Поделиться ссылкой с друзьями на Я.ру Поделиться ссылкой с друзьями на Facebook Поделиться ссылкой с друзьями в Моем Мире@Mail.Ru Поделиться ссылкой с друзьями
Началось все с того, что мне прислали несколько сообщений от пользователей, говоривших о том, что их КПК c Windows Mobile 5.0 безо всякой на то очевидной причины то "притормаживают", то снова начинают работать нормально. Сказать по чести, таких претензий была всего пара, и относились они к модернизации ОС. От владельцев КПК, изначально созданных для WM 5.0 жалоб не было.

altНекоторые, особо настойчивые владельцы наладонников, попробовали сами разобраться в ситуации и выяснили, что дело в файле filesys.exe, который значительно загружает процессор и выполняет задачу под названием "Compaction Thread". Также были вопросы по поводу ключа реестра CompactionPrio256.

Я не смогу ответить на вопросы о более крупных проблемах, но, по крайней мере, постараюсь подробнее рассказать о вышеописанных.

Эта статья подразумевает, что вы знаете различия между RAM и ROM, а также терминами «NOR» и «NAND». Если нет, то для начала вам следует ознакомиться с предыдущими статьями с разъяснениями по этим вопросам. Вы также должны представлять себе, что такое технология постоянного хранения данных (Persistent Storage).

 


Проще переместить, чем стереть
Флэш-память КПК (Flash ROM) разделена на блоки. Каждый из блоков делится на секторы. Размер каждого сектора составляет 512 байт. Размеры блоков варьируются, но обычно это – 128 КБ. В случае с флэш-памятью самая сложная операция, какую можно придумать – это стирание информации. В большинстве систем хранения данных (жесткие диски, RAM и даже бумага с карандашом) вы можете удалить ровно столько данных, сколько требуется – ни больше, ни меньше. Но только не в случае с ROM. Если вы хотите удалить один бит информации из ROM, то для этого потребуется удалить целый блок, в котором он находится. А если речь идет о NOR ROM, на удаление сектора может уйти до двух секунд. NAND ROM позволяет удалять данные гораздо быстрее.

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

Вот наш способ справиться с этими проблемами. Если требуется произвести изменения в блоке флэш-памяти, мы переносим его в RAM, вносим изменения и затем записываем его в новый блок флэш-памяти. Старый блок при этом помечается как недоступный для записи и чтения (ошибочный).

Это позволяет достичь сразу нескольких результатов. Во-первых, процесс записи происходит гораздо быстрее, так как нет необходимости ждать около двух секунд, пока произойдет удаление старых данных блока перед записью новых. Во-вторых, это приводит к тому, что данные записываются нелинейно, а за этим следует нелинейное стирание блоков. При таком подходе, вместо того, чтобы десять раз стирать один блок, мы один раз стираем десять блоков. Этот принцип, позволяющий уменьшить число циклов стирания-записи блоков, называется выравниванием износа Flash-памяти (wear leveling).

Удаление ненужных данных
Итак, жизнь прекрасна. Мы пометили старые сектора как ошибочные и записали данные в неиспользованные сектора. К несчастью, эта щедрость, в конце концов, оборачивается против нас. В какой-то момент во флэш-памяти заканчиваются неиспользованные, свободные блоки памяти. И что дальше? Если бы мы были государством, то просто «напечатали» бы еще блоков. Увы, мы так не можем. Дефицитное бюджетирование в данном случае неприемлемо.

Зато мы можем написать программный код, который будет следить за количеством доступной памяти и состоянием системы. И тогда, если количество "ошибочных" секторов во флэш-памяти становится недопустимо большим, а система находится в пассивном режиме, он вступает в действие, дефрагментируя память. Если большая часть секторов блока не годна к записи, тогда свободные секторы переносятся в другую часть памяти, а блок стирается целиком. Блоки, целиком заполненные "ошибочными" секторами стираются без дополнительных процедур.

Код, который выполняет эти операции и называется Compaction Thread. Он является неотъемлемой частью файла filesys.exe. А последний, в свою очередь, неотъемлемая часть операционной системы Windows CE (проще говоря – является частью файловой системы).

Задача этого механизма – постоянное поддержание необходимого количество свободных блоков для проведения всех операций записи таким образом, чтобы пользователь даже не замечал этого. Именно поэтому Compaction Thread запускается в моменты, когда нагрузка на систему минимальна, то есть владелец КПК не использует программы, требующие значительных ресурсов процессора. Но если что-то идет не так…

Тревога!
Что случится, если мы постоянно активно записываем данные во флэш-память и заполняем все свободные блоки, а система при этом никогда не переходит в состояние, требуемое для запуска Compaction Thread? В конце концов, при очередной операции записи система перейдет в критическое состояние. При этом файловая система перейдет на "военное положение" и монопольно захватит ресурсы процессора, запустив Compaction Thread на время, достаточное чтобы освободить секторы для записи данных. Это называется "критическая дефрагментация" (Critical Compaction).

Из-за аппаратных особенностей, во время стирания блока, данные из флэш-памяти нельзя ни считывать, ни записывать. Поэтому, вне зависимости от причины, по которой запускается Compaction Thread, производительность системы значительно падает во время стирания блоков. И помните, что NOR RAM требует до двух секунд на эту операцию.

Можно ли на это влиять?
Дефрагментация – суть результат записи данных. Операции считывания не приводят к запуску Compaction Thread. Поэтому, если какая-либо из ваших программ часто записывает данные и в особенности – небольшими блоками, шансы на частую дефрагментацию существенно повышаются. Кроме того, чем меньше у вас свободной флэш-памяти, тем более "усердно" будет работать

+1
12 сентября 2006 Buc Статьи 4045 печать

Обсуждения

Публикацию «Периодические тормоза ОС WM 5-почему?» пока никто не комментировал, оставьте свой комментарий и будьте первым!

Упссс!

Для добавления комментария вам нужно зарегистрироваться на сайте. Это займет пару минут!

Пройти регистрацию
Или войти через соц. сети
Это очень просто и безопасно!
МультиВход

Информация

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



Популярные смартфоны


Быстрый поиск по сайту
Найдётся всё. Прямо сейчас. Попробуй!