Table of Contents
Palm NVFS часть 2
Введение
После написания первой статьи Специфика файловой системы TT5 и Treo 650 прошло около трех месяцев. Появились новые устройства с NVFS, нашлись новые баги, исправились старые ошибки. Вторая часть статьи просто объединяет мелкие заметки “по поводу”.
Старые грабли о главном
В инженерных дисциплинах есть концепция “черного ящика”. Эта концепция применяется и в программировании: разработчики взаимодействующих программных модулей стараются минимизировать знания друг о друге и свести их к умеренному интерфейсу с минимальным числом функций и понятий. Знание и тем более использование реализации чужого модуля считается делом постыдным.
В то же время существует “закон одной реализации”: если некоторый программный интерфейс существует длительное время в одной реализации, то особенности реализации становятся частью интерфейса.
Что это означает применительно к NVFS? Существует Data Manager - программный интерфейс (API), который разработчики используют для работы с базами (немного поподробнее можно почитать здесь). В теории этот интерфейс позволяет выносить базы во внешнюю память, как это делает VFS.
НО! За 9 лет существования PalmOS разработчики настолько привыкли к существующей реализации, что стали воспринимать детали реализации как собственно интерфейс.
Пример. После использования ресурса его нужно освободить. Для этого используется функция DmReleaseResource. Вот ее исходный код:
Err DmReleaseResource(MemHandle resourceH) { return 0; }
Функция просто ничего не делает. А это значит, что программы, которые “забывают” освобождать ресурс будут прекрасно работать на старых устройствах.
Теперь представим, что реализация Data Manager на базе NVFS освобождает в этой функции память в кэше. Понятно, что подобные программы попросту забъют кэш данными и модуль NVFS не сможет выделить там место для новых баз.
Другой пример. Мало кто всерьез обрабатывает код ошибки функции DmCloseDatabase. В то же время в версии от NVFS функция может вернуть ошибку если не хватает памяти для сохранения кэша. Если ошибка не обрабатывается, то есть вероятность получить битую базу.
Проблемы с локализацией
Можно заметить, что включение полной локализации Piloc приводит к постоянным проблемам. Становится понятным, почему: русский текст в формах делается подменой ресурсов. Подмена ресурсов была написана давно и сильно привязана к классической реализации Data Manager. В версии от NVFS механизм получения указателя на ресурс изменился. То есть Piloc/Treo650 - это существенная переделка старых алгоритмов. Неудивительно что вылезло так много багов.
Признание
Следующее признание Бена Комби поучительно.
It wasn't so much that the engineers didn't understand Palm OS; they were originally trying to get NVFS into the system while modifying as little code as possible, and originally it looked like hooking into Data Manager would be less intrusive. Remember, this wasn't done as a new release of Palm OS 5, but instead as a licensee project for palmOne. By the time we discovered that this was going to be complicated and problematic, the Treo 650 and T5 were close to ship, and the follow on versions were mainly to get that code stabilized and debugged. -- Ben Combee, Senior Software Engineer, palmOne, Inc.
Вольный перевод:
Дело не в том, что наши инженеры не понимают сути PalmOS (речь шла о том, что NVFS делали разгильдяи из команды BeOS), они просто пытались внедрить NVFS с минимальными модификациями кода. Сначала казалось, что латание Data Manager будет менее разрушительным. Не забудьте, что это делалось не для нового релиза PalmOS 5, а проходило как проект по лицензии для palmOne. Ко времени, когда мы обнаружили, что проект становится сложным и проблемным, подошло время выхода TT5 и Treo 650, так что дальше мы только отлаживались и делали код стабильным.
Как-то сразу вспоминается коронная фраза посла России на Украине В.С. Черномырдина.
О RAM-expanders
Стоит напомнить, что во времена PalmOS 4 были попытки модифицировать Data Manager. Несколько компаний выпустили похожие продукты PiDirect, AutoCard, MsMount. Эти программы пытались добавить базы из каталога с VFS-диска в Data Manager. Это позволяло перенести крупные базы на карточку и освободить место в основной памяти. При обращении программ к этим базам происходило копирование только нужных записей.
Несмотря на то, что эти программы предоставляли базы только на чтение, их стабильность оставляла желать лучшего. Реализация подобных RAM-expanderов требовала модификации 25 системных вызовов.
Подозреваю, что “разгильдяи из BeInc” действоительно никогда не видели программы PiDirect. А жаль.
LifeDrive
С другой стороны разработка NVFS подготовила почву для замены flash-памяти на жесткий диск. По сути дела для этого не нужно менять код NVFS, достаточно заменить обращения к VFS-диску на flash на обращения к VFS-диску на микродрайве. Технологически очень дешево.
Ссылки
На сорсах в топике http://forum.sources.ru/index.php?showtopic=87300 собираются ссылки на полезные материалы по NVFS.