Операционная система PalmOS для программиста. Часть 1.
Шилоносов Александр shilo@dekart.com
Введение
За последние 9 лет (c 1993) в мире персональных компьютеров появился новый
участник - карманный персональный компьютер (КПК). Большую роль в распространении
этого вида компьютерной техники сыграли устройства на базе операционной системы
PalmOS, которая появилась в 1996 году. За последующие 6 лет в свет вышло более
5 версий PalmOS (1.0 - 4.1). Большим изменениям PalmOS никогда не подвергалась,
причины это кроются в том, что для PalmOS создавалось очень много программ (это
продолжается и по сей день), и вторая причина это то, что аппаратная часть КПК
на базе PalmOS всегда оставалась неизменной (см. таблицу).
Пятая версия PalmOS, которая появилась несколько месяцев назад, полностью переработана
для работы на новой аппаратуре. КПК на базе PalmOS 5 еще не успели распространиться,
и показать себя в работе.
В этом обзоре рассматривается структура операционной системы PalmOS версий
3.0-4.1. Предполагается, что читатель знаком с операционной системой PalmOS
как пользователь.
Таблица характеристик обычного КПК (PalmOS версии 3.0 - 4.1):
Характеристика |
Описание |
Габариты |
Приблизительно 7*11*1.5 см. |
Вес |
от 100 до 250 гр. |
Процессор |
Motorolla DragonBall от 16 до 33 Мгц |
Объем памяти (RAM) |
От 1 до 8 Мб |
Экран |
160*160, Сенсорный, Ч/Б / 4 / 16 градаций серого или цветной |
Функциональные клавиши |
От 6 до 9 |
Ввод текста |
Графити (существуют подключаемые клавиатуры) |
Дополнительная аппаратура |
Инфракрасный порт, динамик, микрофон, USB, COM |
1. Общие сведения
- PalmOS однозадачная операционная система.
- Поддерживает графический интерфейс (диалоги, кнопки, списки, шрифты, :
)
- Приложения PalmOS одно-потоковые, событийно ориентированные.
- В PalmOS есть своя файловая система.
- Пользователь в PalmOS не работает ни с папками, ни с файлами. Пользователь
видит только приложения и документы с которыми работает данное приложение.
- В PalmOS нет таких понятий: "загрузка операционной системы" и
"завершение работы". Вместо этого PalmOS "умеет делать"
легкий рестарт (Reset) и полный рестарт (Hard Reset).
- PalmOS Состоит из модулей (Manager) и библиотек (Library), например Memory
Manager - модуль управления памятью, Data Manager - модуль управления файловой
системой, Библиотека TCP/IP. (см. рис 1). Модуль это неотъемлемая часть PalmOS,
а библиотеки можно добавлять и удалять.
- Каждый модуль и библиотека предоставляет документированное API для приложений.
Автоматически управляет питанием. Например, PalmOS может полностью остановить
процессор, при этом приложение ничего не заметит.
- PalmOS является ОС с микро ядром (Micro Kernel OS), основное качество такого
типа ОС это гарантировано малое время реакции на любое внешние событие. (микро
ядро AMX, разработано фирмой Kadak)
- PalmOS поддерживает только один процессор - Motorolla DragonBall 68К.
Рисунок с PalmOS SDK - горизонтальный срез
2. Память
Система управления памятью одна из важнейших частей PalmOS которая во многом
определяет архитектуру операционной системы и ее особенности.
Физически
память расположена на картах (Card) памяти, которые нумеруются - 0, 1, : . Каждая
карта памяти может иметь RAM и ROM сегменты (RAM - random access memory, ROM
- read only memory).
PalmOS делит все пространство RAM сегмента на Dynamic Heap и Storage
Heap. Storage Heap это эквивалент диска (HDD), там находятся только
файлы. Dynamic Heap это эквивалент обычной памяти (Heap). В Dynamic Heap
находятся все динамические объекты приложения, операционной системы, библиотек,
модулей, а также стек (в момент выполнения, код приложения не находится в Dynamic
Heap).
В PalmOS код приложения не загружается в Dynamic
Heap для выполнения. Зачем, если приложение и так в памяти ? выполнение
происходит по месту (inplace), т.е. все программы, как и сама PalmOS,
всегда выполняются прямо из Storage Heap. Это прозрачно для приложений.
|
|
Т.к. ROM это сегмент памяти "только для чтения", то соответственно
там находится только файлы. Например, большинство моделей КПК имеет карту памяти
- Card0, и в ROM сегменте этой карты находятся файлы операционной системы со
встроенными приложениями. Приложение может получить список всех карт, и указать
с какой картой оно будет работать (например, файловый менэджер "Filez"
позволяет выбрать номер карты с которой нужно получить список всех файлов).
Размеры Dynamic Heap и Storage Heap определяются операционной системой при
инициализации и зависят от общего размера памяти в КПК. Обычно размер Dynamic
Heap 32-256Кб. Работать с Памятью можно через API модуля Memory Manager.
Этот модуль поддерживает всю внутреннюю структуру памяти, его используют все
остальные модули.
Основные API функции модуля Memory Manager:
MemPtr MemPtrNew (UInt32 size)
|
выделить блок памяти и получить указатель на него |
MemHandle MemHandleNew (UInt32 )
|
выделить блок памяти и получить его дескриптор (handle) |
MemPtr MemHandleLock (MemHandle)
|
получить указатель на блок памяти от его дескриптора т.е.
"заблокировать" дескриптор. |
Err MemHandleUnLock (MemHandle)
|
"разблокировать" дескриптор, указатель от дескриптора
уже недействующий. |
Err MemHandleFree (MemHandle)
|
Освободить память |
Err MemPtrFree (MemPtr)
|
Освободить память |
Если приложение запросит слишком большой блок памяти, а доступны будут только
маленькие блоки, то PalmOS произведет фоновую дефрагментацию памяти, при этом
из-за перемещения существующих блоков, изменятся их базовые указатели. Чтобы
изменение указателей не повлияло на приложение - существуют дескрипторы (handle)
это указатель на указатель блока. Дескриптор это такой же указатель на память,
но для того чтобы начать работать с этим блоком необходимо его "заблокировать"
т.е. получить указатель который будет оставаться действительным, даже если произойдет
фоновая дефрагментация памяти.
Если приложение выделяет память, не используя дескриптор (MemPtrNew),
либо получает указатель от дескриптора, т.е. "блокирует" его (MemHandleLock),
то PalmOS не будет перемещать такой блок при дефрагментации.
Не смотря на то что механизм дескрипторов сложнее чем просто работа с указателями
, избежать его нельзя т.к. многие функции API Системных Модулей работают с дескрипторами.
т.е. следует заранее позаботится о том чтобы большие блоки данных в программе
были представлены в виде дескрипторов. Для блока памяти также есть такое понятие
как LocalID - специальный номер, по которому можно узнать в какой памяти
и на какой карте памяти находится блок памяти.
Основные типы данных с которыми оперирует модуль управления памятью (Memory
Manager): MemHandle - дескриптор блока памяти, MemPtr - указатель на блок
памяти (можно явно привести к указателю на строку, число, void), LocalID - номер
блока памяти, Uint32 - целое, беззнаковое число (4 байта), Err - номер ошибки.
Вся Dynamic Heap память доступна для любого приложения на чтение\запись и PalmOS
не следит к каким адресам обращается приложение. Когда приложение завершает
свою работу вся память, выделенная для приложения, автоматически очищается для
нового приложения.
Ранее упоминалось, что в Динамической памяти
(Dynamic Heap) находятся объекты операционной системы, модулей и системных
библиотек. Любые ошибки приложения в работе с динамической памятью
могут сразу нарушить работоспособность всей ОС. |
|
Если в КПК вставить дополнительное устройство (такие как дополнительные устройства
для слотов springboard для моделей Visor, или флеш карточки), например модем
, то оно возможно будет содержать в себе карту памяти со своими программами,
это карта будет видна в системе как Card1, или Card2 если Card1 уже есть. 1
карта может содержать максимум 512 Мб.
продолжение следует ...