Symbian developer community

 
wiki

Symbian OS Internals/2. Hardware for Symbian OS/ru

From Symbian Developer Community

Jump to: navigation, search

Автор главы: Джейсон Паркер (Jason Parker)

Если что-то пускает кровь, то это - железо.
Неизвестный

Данная глава рассматривает аппаратное обеспечение, для работы на котором проектировалась Symbian OS, - т.е. мобильный телефон. Такое аппаратное обеспечение часто носит название платформы устройства (device platform). Мы изучим ключевые компоненты устройства, необходимые для работы Symbian OS, и попытаемся помочь вам понять дизайн, определяющий Symbian-телефон мирового класса. Мы так же надеемся, что с этими знаниями вы сильнее проникнитесь операционной средой Symbian OS.

Информация, касающаяся работы Symbian OS в эмуляторе EKA2, т.е. платформы, используемой во время разработок, находится в контексте всей этой книги. Целью данного материала является попытка продемонстрировать вам где именно вы можете положиться на идентичность эмулятора и аппаратного обеспечения настоящей платформы, а где вам следует знать о различиях между ними.

Contents

Внутри телефона с Symbian OS

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

Изучая устройство телефона с Symbian OS можно обнаружить две соседствующих вычислительных области: мобильный радио-интерфейс процессора узкополосной передачи данных (baseband processor, или BP), так же известный под именем "модем"; и процессор приложений (application processor, или AP), который отвечает в Symbian OS за выполнение пользовательского интерфейса и высокоуровневого кода. Остальное окружение этих двух главных областей состоит из набора периферии, составляющей конечный продукт: батареи, дисплея, громкоговорителей, SIM-карточки, и т.д.

На рис. 2.1 изображено обычное двухпроцессорное решение, в котором BP и AP являются самостоятельными системами, между которыми установлена высокоскоростная связь межпроцессорного взаимодействия (IPC). Такое устройство является предпочтительным для телефонов 3G, так как такое устройство позволяет заново использовать существующее програмное и аппаратное обеспечение подсистем.

File:Internals2-1.jpg

Рис. 2.1 Обычное двухпроцессорное решение

Двухсоставная система, состоящая из AP и BP, позволяет изолировать каждый из процессоров от другого. Так, например, блок BP использует программы, работающие в режиме реального времени, периодически управляет режимом питания, и обеспечивает безопасность сети. Блок AP, в свою очередь, может работать в двух режимах: в "активном" режиме, когда пользователь взаимодействует с телефоном, и в "спящем" режиме, когда телефоном никто не пользуется. Дополнительно блок AP содержит модули и библиотеки как для встроенных приложений, так и для приложений сторонних разработчиков.

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

Создание аппаратного обеспечения для телефонов Symbian OS требует четкого понимания нужд конечного пользователя, обеспечения уровня производительности, требуемого этими нуждами, и постоянного внимания к расходу энергии устройства.

Процессор узкополосной передачи данных, или BP

Процессор узкополосной передачи (baseband processor, или BP) является в телефоне как голосовым модемом, так и модемом для передачи данных. BP содержит всю электронику, необходимую для 2.5G и 3G телефонии; DSP (цифровую обработку сигналов) для реализации алгоритмов декодирования информации; а так же центральный процессор (CPU) для осуществления работы стека контроля звонков (call control stack), который координируется с базовыми станциями сети, и взаимодействует с AP.

Программное обеспечение BP носит название "стека телефонии" (telephony stack), и кратко называется "стеком". Стек является сложной системой, выросшей вместе с развивающимися стандартами телефонии, и их различными режимами работы. Обычный стек содержит от 2-х до 8-ми MB кода, и требует для своей жизнедеятельности до 2-х MB RAM-памяти. Звонки в сети GSM разделяются на периоды времени, равные 4.6 миллисекундам. Вся деятельность, касающаяся данного телефонного звонка, должна завершаться в течении одного периода времени, прежде чем в свои полномочия вступит следующий период. Такой характер работы требует среды операционной системы реального времени (RTOS). Такая среда создается в BP и тестируется, чтобы строгие границы времени обработки данных и голосовых звонков соблюдались даже при наихудших нагрузках.

Управление энергоресурсами в BP оптимизируется для достижения наиболее длительного времени звонков, а так же времени простоя, в течении которого телефон по-прежнему остается подключенным к сети. Когда телефон находится в режиме простоя (idle), BP может установить себя в режим наибольшей экономии энергии, при котором стек телефонии "просыпается" каждые 2 секунды, чтобы проверить "канал пейджинга" (paging channel), или как его еще называют, "канал вызова" на наличие входящих звонков или сообщений.

Интерфейс IPC, связанный с AP, развился в BP от простых серийных портов ранних телефонов Symbian до сложных связей, работающих со скоростью 10 Mb/s. В данный момент интерфейс IPC может использовать пять двунаправленных каналов для контроля телефонии, системы, пакетных и поточных данных, а так же отладки самого BP.

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

Блок BP контролирует SIM-карточку, содержащую секретные коды и алгоритмы, необходимые для идентификации в сети.

Двухсоставная система, состоящая из блоков AP и BP, предоставляет множество технических и инженерных выгод, включая возможность заново использовать уже имеющиеся дизайны, а так же стабильность и безопасность. Перечисленные свойства приобретаются благодаря дополнительным чипам, новым физическим размерам и общему потреблению энергии.

Для телефонов среднего уровня есть сильные финансовые ограничения, ведущие к более тесной интеграции блоков AP и BP. Примеры таких дизайнов разнятся от многоядерных решений на одной интегральной схеме (ASIC), имеющей совместно используемую память, до полной интеграции стека телефонии и Symbian OS. В последнем случае блоки BP и AP сосуществуют на одном процессоре, со всемы вытекающими отсюда проблемами интеграции.

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

Процессор приложений, или AP

Процессор приложений (application processor, или AP) находится в сердце телефона с Symbian OS. Размещенный на одном чипе, процессор AP представляет собой систему на одном чипе (System-on-Chip, или SoC). AP имеет процессор ARM, память, интерфейсы для аудио и видео, мультимедийные ускорители и множество дополнительной периферии. Однако мы не будем фокусироваться на этих компонентах, их интеграции и взаимодействии между собой.

Система на одном чипе, или SoC

Системы на одном чипе известны так же под двумя другими именами: специализированной интегральной схемы (Application-specific Integrated Circuit, или ASIC), используемой для специализированных решений, и специализированного полупроводникового блока (Application-specific Semiconductor Part, или ASSP), используемого для коммерческих решений. Данные три термина являются неточными и взаимозаменямыми. Системы на одном чипе проектируются и производятся всеми ключевыми производителями электроники. Так, например компания Texas Instruments имеет семейство продуктов под названием OMAP, а компания Intel - семейство процессоров под названием XScale. На рис. 2.2 представлено типичное устройство системы на одном чипе.

Каждый модуль внутри системы на одном чипе является блоком интеллектуальной собственности (intellectual property, или IP). Блоки подсоединены к шине взаимодействия через стандартные индустриальные интерфейсы. Блоки IP могут быть лицензированы из разных компаний. Наиболее известной компанией, лицензирующей блоки IP, является ARM Ltd, которая лицензирует ядра процессоров ARM.

Пример системы на одном чипе взят на основе процессора ARM 926 для Symbian OS, а так же модуля DSP для работы с мультимедийными кодеками. Оба этих модуля являются ведущими, и сами управляют передачей данных по системной шине. Системная шина, в свою очередь, является 32-битной высокоскоростной шиной с малым временем ожидания, которая подключается к контроллеру DRAM-памяти. Через системную шину и контроллер памяти осуществляются весь доступ к данным в главной памяти, поэтому и шина и контроллер должны создаваться высокопропускными и быстродействующими, чтобы центральный процессор не простаивал и не уменьшал свою эффективную производительность.

File:Internals2-2.jpg

Рис. 2.2 Система на одном чипе

Блок DMA (блок прямого доступа к памяти) и контроллер LCD (контроллер жидкокристаллического дисплея) так же являются ведущими, и сами управляют передачей данных по системной шине, и доступаются до данных в главной памяти. Остальные блоки периферии подключены к системной шине в качестве ведомых, т.е. они не могут получать прямой доступ к памяти, и должны просить ведущие блоки о снабжении их всеми необходимыми инструкциями и данными. В свою очередь ведомые блоки сгруппированы вдоль двух периферийных шин. Одна их этих периферийных шин является относительно быстрой, и предназначена для устройств DMA. Другая шина является медленной, и предназначена для простой низкоскоростной периферии.

Периферийные шины подсоединены к системной шине через мосты (bus bridges). Мосты конвертируют формат одной шины в формат другой шины, и компенсируют разницу в скоростях, возникающую из-за более медленной работы периферийных шин. Хороший дизайн системы на одном чипе уделяет достаточно внимания шинным мостам, чтобы центральный процессор всегда мог быстро получить доступ к высокоскоростной или строго ограниченной по времени периферии.

Более детальную информацию касательно одночипных систем на основе ARM вы можете найти в книге ARM System-on-Chip Architecture Стива Фэрбера (Steve Furber) от издательства Addison-Wesley Professional.

Карта физической памяти

Шины и их связи определяют физическую карту адресов чипа: 32-битные адресы позволяют отображать пространство размером до 4 GB. Symbian OS использует блок управления памятью (Memory Management Unit, или MMU) центрального процессора, чтобы преобразовывать физическое адресное пространство чипа в последовательное виртуальное адресное пространство программ.

К примеру, адресное пространство размером в 4 GB, используемое одночипной системой, может быть поделено контроллером системной шины на крупные области. При помощи всего лишь трех верхних битов адреса, из 4 GB адресного пространства мы получаем 8 блоков, каждый размером 512 MB:

Начальный адрес Конечный адрес Содержимое
0x00000000 0x1FFFFFFF ROM блок 0 (загрузочный ROM)
0x20000000 0x3FFFFFFF ROM блок 1
0x40000000 0x5FFFFFFF DSP
0x60000000 0x7FFFFFFF Быстрая периферийная шина
0x80000000 0x9FFFFFFF Медленная периферийная шина
0xA0000000 0xBFFFFFFF IRAM
0xC0000000 0xDFFFFFFF DRAM блок 0
0xE0000000 0xFFFFFFFF DRAM блок 1

В свою очередь крупные области памяти делятся на другие, более мелкие. DRAM блок 0 отводит под область RAM-памяти 32 MB, а оставшиеся 480 MB адресного пространства отводит под замещения (aliases) другого содержимого RAM-памяти, если оставшиеся 25-28 бит адреса не декодируются электроникой (как это обычно и происходит):

0xC0000000 0xC1FFFFFF 32 MB RAM-память
0xC2000000 0xC3FFFFFF 32 MB замещение 1
0xC4000000 0xC5FFFFFF 32 MB замещение 2
... ... ...
0xDE000000 0xDFFFFFFF 32 MB замещение F

Области памяти, отводимые периферийной шине, делятся ее периферией. В нашем примере каждый элемент быстрой периферии имеет 64 KB адресов для своих регистров:

0x60000000 0x6000FFFF NAND-интерфейс
0x60010000 0x6001FFFF IPC
0x60020000 0x6002FFFF Аудио
0x60030000 USB
... ... ...
0x600x0000 0x7FFFFFFF Пустое пространство

На практике каждый вариант ASSP-продукта будет иметь свое собственное физическое адресное пространство, и львиная доля этого пространства либо не будет использоваться, либо будет отведиться под замещения. Операции чтения и записи в неиспользуемые области приведут к ошибке шины (bus error).

Хороший дизайн будет иметь последовательную карту памяти для всех ведущих пользователей шины, тем самым избавив систему от необходимости транслировать физические адреса и уменьшив вероятность ошибок.

Обычно центральный процессор имеет доступ ко всем элементам периферии системы, в то время как ведущие пользователи шины (bus masters) имеют доступ только к соответствующим ведомым пользователям шины (bus slaves). LCD-контроллер должен забирать фреймы из памяти, и в этом случае контроллер DMA будет работать посредником между быстрой периферией и памятью.

Карта физических адресов используется загрузочным кодом при конфигурации блока MMU (блока управления памятью). Контроллер DMA и другие ведущие пользователи шины не имеют своих блоков управления памятью. Эти устройства способны "понимать" лишь физические адресы, и используемое в них программное обеспечение должно уметь транслировать виртуальные адреса в физические, прежде чем устройства смогут что-либо сделать полезного.

Центральные процессор, или CPU

Symbian OS требует наличия 32-битного микропроцессора, который мог бы совместить в себе высокую производительность и низкое потребление энергии. Процессор должен иметь прямой порядок байтов (little endian), а так же полноценный блок MMU; поддерживать пользовательский и привилегированный режимы, а так же прерывания (interrupts) и исключения (exceptions). Дизайн ARM-процессоров полностью соответствует этому списку требований, и на момент написания книги, все телефоны Symbian OS имели центральный процессор на основе ARM-ядра, как и 80% других телефонов во всем мире.

Рассмотрим более детально перечисленные требования:

Высокая производительность является относительным термином для устройства, работающего на батарее. Сегодняшние телефоны с Symbian OS имеют процессоры с частотами от 100 до 200 MHz, что на порядок медленнее среднего PC, работающего на частоте 3 GHz. Однако в то же самое время, энергия, потребляемая мобильным телефоном, на три порядка меньше той, что потребляет настольный компьютер. Будущие программы потребуют увеличения скоростей центрального процессора до 300-400 MHz для достижения наивысшей производительности.

Низкое энергопотребление является требованием для всех компонент, составляющих телефон с Symbian OS. Во время проектирования центрального процессора во внимание принимаются все инженерные компромиссы, и характеристики добавляются в процессор таким образом, чтобы создать наиболее эффективное ядро в плане энергопотребления. Экономия энергии получается из аскетичного дизайна электроники, установки выборочной частоты работы микросхем, и использование нескольких режимов работы устройства, при которых сокращается потребление энергии, как например: простой (idle), полусонное состояние (doze), спячка (sleep), глубокая спячка (deep sleep) и отключение (off). Связи между электроникой и программными решениями, которые Symbian OS предоставляет для управления потреблением энергии устройства, будут обсуждаться в 15-й главе, Управлении питанием устройства.

Блок MMU, совместно с пользовательским и привилегированным режимами, предоставляемыми центральным процессором, позволяет виртуализировать пользовательскую память. Ядро EKA2 создает для приложений устойчивую среду исполнения, в которой каждое приложение изолируется от других, и имеет в памяти свое собственное защищенное пространство. Код приложений выполняется с ограничениями пользовательского режима, в то время как код ядра работает в привилегированном режиме с меньшими ограничениями. Однако даже код ядра ограничивается в своей работе картой виртуальной памяти. Модели памяти, предоставляемые Symbian OS, описываются в 7-й главе, Модели памяти.

Исключениями являются события центрального процессора, изменяющими ход выполнения инструкций в ядре центрального процессора. Исключения прерываний генерируются периферией, нуждающейся во внимании со стороны процессора. Программные прерывания (software interrupts) используются в качестве контроллируемых переходов от пользовательского к привилегированному режиму. Блок MMU сгенерирует "отказ данных" (data abort), если код попытается воспользоваться памятью, не отображаемой картой, и - "отказ выборки" (prefetch abort), если процессор пытается совершить переход на адрес команды, не отображаемой картой памяти. За более детальной информацией касательно прерываний и исключений, обратитесь к 6-й главе, Прерывания и исключения.

ARM

Фирма ARM создает RISC-поцессоры вот уже более 20 лет, и успешно лицензирует ядра своих процессоров всем производителям электроники для включения в их собственные одночиповые системы (SoCs). Фирма Intel лицензировала ARM-архитектуру 5-й версии для создания программно-совместимого микропроцессора XScale.

По ходу создания успешных поколений процессоров, фирма ARM добавляла в них новые инструкции и технические свойства, и объявляла устаревшими некоторые редко используемые и старые. Номер версии архитектуры ARM, вместе с некоторыми дополнительными буквами, определяет набор технических характеристик ядра. В частности, он определяет набор инструкций, работу блока MMU, кэши и отладку работы.

Symbian OS требует наличия процессора, поддерживающего ARM v5TE, или выше. ARM v5TE является базовым набором инструкций для всего программного обеспечения от Symbian. Для гарантирования совместимости между множеством телефонов, код приложений должен использовать только инструкции из набора v5TE. (Предыдущее поколение телефонов с ядром EKA1 использовало архитектуру ARM v4T.)

Что же на самом деле означает ARM v5TE? ARM v5TE является 5-й версией архитектуры ARM, использующей набор инструкций под кодовым названием THUMB, а так же использующей инструкции расширенного DSP, носящие кодовое название Enhanced DSP. Определение термина ARM v5TE можно так же найти в справочнике ARM Architecture Reference Manual.

Ядра ARM и одночипные системы, совместимые в данный момент с Symbian OS, представлены следующим набором:

Ядро Архитектура Одночипная система
ARM926 v5TE Philips Nexperia PNX4008
ARM926 v5TE Texas Instruments OMAP 1623
Xscale v5TE Intel XScale PXA260
ARM1136 v6 Texas Instruments OMAP 2420

Набор инструкций THUMB был представлен в архитектуре v4T. THUMB представляет собой 16-битное подмножество набора инструкций архитектуры ARM, созданное для решения общей проблемы RISC-процессоров: слабой плотности кода, когда все инструкции имеют 32-битный вид. Используя 16-битную схему кодирования, скомпилированный код с инструкциями THUMB занимает примерно 70% от своего эквивалента с инструкциями ARM, однако при этом требует на 25% больше инструкций, чтобы выполнить ту же самую работу. Код с инструкциями из набора THUMB и ARM может взаимодействовать на одной и той же системе при помощи инструкции BLX, переключающей режимы работы.

Большинство кода Symbian OS скомпилированно в наборе инструкций THUMB, так как размер ROM-памяти прямо связан с ценой телефона с Symbian OS. Код ядра строится на инструкциях ARM, так как требует повышенной производительности, а так же специальных инструкций, отсутствующих в наборе THUMB, как например, инструкций для доступа к регистрам управления MMU и центрального процессора. Код приложений может быть скомпилирован в наборе инструкций ARM при помощи добавления ключевого выражения ALWAYS_BUILD_AS_ARM в MMP-файл приложений. Такое компилирование применяется для алгоритмического кода. Так, например, декодер изображений в формате JPEG работает на 30% быстрее, если скомпилирован в инструкциях ARM.

Инструкции расширенного DSP (enhanced DSP instructions) позволяют более эффективную реализацию 16-битных алгоритмов цифровой обработки сигналов при помощи процессора ARM. Эти инструкции не используются в обычном процедурном коде, и имеют небольшое влияние на работу кода Symbian OS.

Блок управления памятью, или MMU

Symbian OS требует наличия полноценного блока управления памятью (Memory Management Unit, или MMU) для координации и осуществления использования виртуальной памяти внутри открытой операционной системы. Использование блока MMU подробно описывается в 7-й главе, Модели памяти.

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

Блок MMU разбивает последовательную физическую память на страницы. Большинство таких страниц по своим размерам весьма невелики, и составляют 4 KB, однако в то же самое время существуют страницы размером 64 KB и 1 MB.

Карта виртуальной памяти Symbian OS переупорядочивает разрозненные физические страницы в связанное и упорядоченное пространство виртуальной памяти. Информация о переупорядочивании физических страниц хранится внутри блока MMU в виде таблиц страниц (page tables). Таблицы страниц являются иерархической структурой данных, кодирующей все виртуальное адресное пространство размером 4 GB в виде отдельных блоков. В системах с процессорами ARM таблица имеет два уровня: директорию страниц (Page Directory), и таблицы страниц (Page Tables).

Как физический адрес декодируется контроллером шины, так во многом схожим образом группы битов виртуального адреса декодируются блоком MMU в номер директории страниц (Page Directory), номер таблицы страниц (Page Table), и индекс внутри таблицы страниц, приводящий, в свою очередь, к соответствующей странице физической памяти. Алгоритм декодирования виртуального адреса подробно описывается в разделе 2.1 7-й главы, Модели памяти. Назначение битов виртуального адреса для нахождения соответствующей физической страницы памяти, представлено ниже:

Биты 31 - 20 19 - 12 11 - 0
Назначение Верхниче 12 бит указывают на соответствующую директорию страниц Средние 8 бит указывают на соответствующую таблицу страниц Нижние 12 бит являются смещением внутри физической страницы памяти

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

Для ускорения перевода адресов, блок MMU кэширует последние использованные преобразования внутри буфера ассоциативной трансляции (Translation Look-aside Buffer, или TLB). Если в TLB не будет найдено преобразование соответствующего виртуального адреса в физический, то блок MMU совершит "проход" таблиц страниц, а результаты этого "прохода" будут сохранены в TLB.

Если таблицы страниц были изменены, буферы TLB должны быть очищены. Изменение таблиц страниц может произойти при смене контекста, во время отладок, или выгрузки того или иного кода из памяти устройства.

Во время запуска устройства центральный процессор будет вначале пользоваться физическими адресами. Только когда начнет работу загрузочный код (bootstrap code), в системе появится первоначальный набор таблиц страниц. Когда блок MMU включится в работу, центральный процессор перейдет в режим работы с виртуальными адресами, и станет готовым к загрузке ядра системы.

Кэши

Центральные процессоры, используемые в каждом телефоне с Symbian OS, требуют наличия кэшей для достижения оптимальной производительности. Работа кэша заключается в изолировании быстрого процессора от его более медленной системы памяти при помощи хранения локальных копий недавно использованных данных или инструкций.

Процессоры фирмы ARM используют гарвардскую архитектуру, в которой данные изолируются от инструкций. Вследствии этого устройство имеет отдельный кэш для инструкций и отдельный кэш для данных (ICache и DCache соответственно).

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

Кэши образуются из "записей кэша" (cache lines), каждая из которых обычно содержит 32 байта данных, взятых по адресу, выровненного по 32-м байтам, и тэга, содержащего адрес источника. Таким образом, кэш размером 16 KB может содержать 512 строк.

Когда процессор запрашивает данные, кэш проверяет свое содержимое на наличие записи с требуемым адресом. Если такая запись находится, данные тут же передаются процессу. Такое совпадение называется "удачным обращением к кэшу" (cache hit). Если кэш не находит искомых данных, то тогда мы получаем "промах кэша" (cache miss). После "промаха кэша", система памяти запишет в кэш недостающие данные, и процессор продолжит свою работу. Для создания в кэше места под новую запись, из кэша будет удалена какая-нибудь старая запись.

Эффективность кэша измеряется "результативностью поиска" (hit ratio) - процентным соотношением между количеством удачных обращений к кэшу и общим количеством обращений. В Symbian OS примерное соотношение результативности для кэша инструкций (ICache) составляет 95%, а для кэша данных (DCache) - 90%.

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

Операции пополнения записей кэша данными оптимизируются системой памяти таким образом, чтобы извлекать выгоду от последовательных пакетных режимов работы чипов памяти. Как только блок MMU будет настроен и кэш начнет свою работу, все их операции станут автоматическими, и система станет работать быстрее. Ядру EKA2 нужно будет только отправлять кэшу команды управления в тех случаях, когда кэш необходимо очистить. Очистка кэша может быть вызвана следующими событиями:

  • Изменение карты памяти при смене контекста
  • Загрузка в память нового кода, или выгрузка имеющегося
  • Генерирование самомодифицируемого кода
  • Использование прямого доступа памяти (DMA) из кэшированной памяти

Виртуальные и физические кэши

Центральный процессор изолирован от системной шины блоком MMU и кэшами, поэтому порядок их работы влияет на всю Symbian OS (см. рис. 2.3).

Когда процессор напрямую связан с кэшем, кэш в своей работе использует виртуальные адресы, и в свою очередь сообщается с блоком MMU, чтобы тот генерировал физические адреса для системной шины (левая часть рис. 2.3).

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

File:Internals2-3.jpg

Рис. 2.3 Виртуальные и физические кэши

Виртуальный кэш ARM v5

В ARM v5 и более ранних системах, блок MMU размещался вне процессора и кэшей, что приводило к кэшам, работающим в области виртуальной памяти MMU.

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

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

К сожалению замещающая модель памяти (moving memory model) Symbian OS модифицирует виртуальное адресное пространство при смене межпроцессного контекста, что в действительности приводит к очистке кэша. В свою очередь, очистка кэша может занять множество миллисекунд, приводя к значительным потерям производительности системы. В разделе 2.1 7-й главы Модели памяти вы можете узнать, что Symbian OS использует специальную технику под названием "фиксированные процессы" (fixed processes) для минимизации очисток кэша.

Физический кэш ARM v6

Вместе с архитектурой ARM v6 появился и полностью обновленный блок MMU, с новым строением таблиц страниц, физическими кэшами, регистрами идентификации пространства приложения (application space identifier register, или ASID), поддержкой кэшей второго уровня и областью памяти для ввода-вывода (IO memory space).

Процессор архитектуры ARM v6, такой как например 1136, все время использует в кэше физические адреса. Данный способ работы требует от блока MMU дополнительных усилий, так как ему в данном случае приходится выполнять трансформацию физических адресов в виртуальные каждый раз, когда от процессора приходят запросы на данные. В обычной ситуации поиск последних преобразований виртуальных адресов в физические осуществляется буфером ассоциативной трансляции (Translation Look-aside Buffer, или TLB).

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

Для еще бóльшего повышения производительности, в блоке MMU архитектуры v6 появились регистры идентификации пространства приложений (application space identifier register, или ASID). Каждый регистр ASID имеет свои собственные 4 или 8 KB под запись описания параметров (parameter descriptor entry, или PDE), используемых для нижних 1 или 2 GB адресного пространства. Изменение регистра ASID мгновенно заменяет соответствующее адресное пространство.

Как мы увидим в разделе 4.2 7-й главы Модели памяти, ядро EKA2 присваивает регистр ASID каждому создаваемому процессу, что в конечном итоге приводит к очень быстрым сменам контекста.

Кэш инструкций, или ICache

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

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

Код, скомпилированный для набора инструкций THUMB, имеет преимущество над кодом, скомпилированным для набора инструкций ARM. Дело в том, что в ICache умещается в два раза больше кода в формате THUMB, чем в формате ARM. В свою очердь, это позволяет коду в формате THUMB скомпенсировать свою медлительность.

Кэш данных, или DCache

Когда процессор считывает данные, кэш данных DCache, работает точно таким же образом, как и кэш инструкций ICache. Удачные обращения к кэшу (cache hits) приводят к незамедлительной передаче данных процессору, в то время как отсутствующие данные будут извлекаться из главной памяти, и приведут к замене соответствующей записи внутри кэша данных.

Сложности возникают при записи данных в DCache, и комбинировании стратегий для передачи данных в память устройства. При "сквозном кэшировании" (write-through caching), каждая запись данных процессором приводит к незамедлительному обновлению главной памяти через буфер записи (write buffer). Дополнительно будет так же обновлен и кэш, если в нем присутствует соответствующяя запись.

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

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

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

Для полноценного использования кэша данных DCache как при операциях чтения, так и при операциях записи данных, Symbian OS применяет схему, называемую "кэшированием с обратной записью" (copy-back). Суть ее заключается в том, что удачные обращения к кэшу, возникающие при записи данных, так и остаются в кэше, где они могут изменяться подобным образом сколько угодно раз. При этом кэширование с обратной записью значительно уменьшает объемы данных, передаваемых на запись из кэша в память, так как в память, в конечном итоге, записываются лишь измененные записи, удаляемые из кэша.

Измененные записи кэша помечаются специальными "битами изменения" (dirty bits) - обычно по одному биту на каждую из половин записи (half line). Когда приходит время удалить запись, "биты изменения" стираются, а измененные половины записи записываются в главную память через буфер записи. Половины записи (half lines) используются для уменьшения объемов данных, возникающих при записи, т.к. неизмененные данные могут быть уничтожены без всякого обновления главной памяти. Если весь кэш будет занят измененными данными, то очистка такого кэша может занять несколько миллисекунд.

Оперативная память, или RAM

Оперативная память, или RAM-память являются хранилищем всех изменяемых данных внутри системы, а так же исполняемого кода. Объемы RAM-памяти определяют тип и количество приложений, которые вы можете одновременно запускать в системе; а скорость доступа к RAM-памяти определяет быстродействие запущенных программ.

Телефон с Symbian OS имеет в наличии от 8 до 64 MB RAM-памяти. Сама операционная система имеет к RAM-памяти скромные запросы, в то время как общие запросы определяются предполагаемым назначением телефона. Мультимедия использует львиную долю RAM-памяти для изображений с пиксельных камер и для записи видео. Если в качестве постоянной памяти (ROM-памяти) будут использоваться чипы с технологией NAND-Flash, то в RAM-память придется так же скопировать мегабайты исполняемого кода, в то время как чипы с технологией NOR-Flash позволят исполнить код "на месте".

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

Центральный процессор - далеко не единственное устройство, предъявляющее большие запросы к подсистеме памяти. Вся периферия ведущих пользователей шины (bus master peripherals) так же считывает и записывает данные в RAM-память. Запросы и конкурентный характер работы периферии должны приниматься во внимание во время разработки системы. Проработка реальных ситуаций использования телефона, с вычислениями пропускных способностей и временем задержек, является наиважнейшей для выяснения всех требований, предъявляемых к системе памяти.

Мобильная память SDRAM

В последние годы производители памяти стали производить RAM-память специально для рынка мобильных телефонов. Такая память носит название энергосберегающей, или мобильной памяти SDRAM.

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

Мобильная память так же имеет дополнительные особенности для продления жизни батареи устройства. Так, например, режим "выключения питания" (power down) позволяет контроллеру памяти отключить RAM-память без необходимости использования внешней схемы управления.

Данные внутри DRAM-чипа должны периодически обновляться для сохранения своего состояния. Во время простоя DRAM-память осуществляет свое поддержание при помощи схемы саморегенерации. Так же для уменьшения потребления энергии во время простоя в DRAM-чипе используются температурно-компенсированная саморегенерация (Temperature Compensated Self Refresh, или TCSR), и саморегенерация неполного ряда (Partial Array Self Refresh, или PASR). В время простоя комбинация саморегенераций TCSR и PASR позволяет уменьшить потребление тока с 150 до 115 µA.

Внутрення RAM-память, или IRAM

Память, встроенная в одночипную систему, известна под именем "внутренней RAM-памяти" (internal RAM, или IRAM), и ее объемы значительно меньше объемов главной памяти.

Во время загрузки системы из чипа NAND-Flash, код загрузчика ядра копируется из первого блока NAND-памяти в RAM-память. Память IRAM является идеальным местом для такого кода из-за его простой конфигурации. Как только загрузчик ядра начинает работу из памяти IRAM, он инициализирует RAM-память таким образом, чтобы в нее можно было скопировать образ ядра операционной системы.

Память IRAM может использоваться к качестве внутреннего буфера фреймов. Контроллеру LCD дисплея, показывающему пустой экран, необходимо целиком пересчитывать буфер фреймов 60 раз в секунду. Таким образом, 16-битный дисплей размера QVGA потребует 8.78 MB данных в секунду. Переместив буфер фреймов в IRAM-память, система может значительно сэкономить энергию устройства и пропускную способность главной памяти. Специализированный буфер фреймов на основе IRAM-памяти может быть еще более оптимизирован для доступа к LCD дисплею, и сокращению потребляемой им энергии.

IRAM-память может быть так же полезна в качестве сверхоперативной памяти или почтового ящика для нескольких процессов внутри одночипной системы.

Следует отметить, что помещение небольшого количества кода в память IRAM не ускоряет выполнение этого кода, так как кэш инструкций ICache выполняет эту работу быстрее и лучше.

Флеш-память

Телефоны с Symbian OS используют флеш-память (flash memory) в качестве главного хранилища кода системы и пользовательских данных. Флеш-память является кремниевым энергонезависимым носителем, данные в котором могут записываться и уничтожаться электронным способом.

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

Флеш-память имеет два ключевых типа: NOR и NAND. Имена типов берутся от фундаментального устройства их кремниевых затворов. Телефоны с Symbian OS наилучшим способом используют оба типа флеш-памяти при помощи отбора файловых систем, однако об этом мы детально поговорим в 9-й главе, Файловый сервер.

Встроенные приложения и системный код размещаются в телефоне с Symbian OS на одном большом накопителе, доступном только для чтения: в приводе Z:. Его композитная файловая система состоит из кода, выполняемого на месте (XIP code), и кода, загружаемого из файловой системы, доступной только для чтения (Read Only File System, или ROFS). Привод Z: иногда так же называется "ROM-образом" (ROM image).

Пользовательские данные и установленные приложения размещаются на внутреннем перезаписываемом приводе C:. Привод C: реализуется при помощи одной или двух различных файловых систем: файловой системы LFFS (Log Flash File System) для флеш-памяти типа NOR, или надстройки из стандартной файловой системы FAT поверх уровня трансляции флэш-памяти (Flash Translation Layer, или FTL) в случае флэш-памяти типа NAND.

Сегодняший типичный телефон с Symbian OS использует от 32 до 64 MB флеш-памяти для кода и пользовательских данных, что в целом представляет собой весь имеющийся объем ROM-памяти.

Symbian OS использует множество способов минимизации объемов кода и данных внутри телефона, таких, как например, набор инструкций THUMB, заранее скомпонованные образы XIP-кода, сжатые исполняемые файлы, сжатые форматы данных и стандарты кодирования, призванные минимизировать объемы получаемого кода.

NOR-флеш

NOR-флеш используется для хранения XIP-кода, исполняемого центральным процессором. Данный тип флеш-памяти подключается прямо к шине статической памяти одночипной системы, и может использоваться произвольным способом, как и RAM-память. Процессор ARM может загружаться прямо их NOR-флеша, если флеш-память размещается по нулевому физическому адресу (0x00000000). Для пользовательских данных Symbian OS использует файловую систему LFFS (Log Flash File System), установленную поверх NOR-флеша. Файловая система LFFS оптимизирована для извлечения максимальной выгоды из характеристик NOR-флеша. Более детальное описание файловой системы LFFS вы можете найти в 9-й главе Файловый сервер.

Память типа NOR-флеш позволяет неограниченное число записей в один и тот же блок данных с целью обнуления битов, установленных в "единицу". Обычно флеш-память имеет буфер записи (write buffer) размером от 32 до 64 байт, используемый для осуществления параллельной записи байтов и ускорения общей скорости записи данных. Запись с буферизацией занимает от 50 до 600 µs, и зависит от конфигурации битов, которую формируют в памяти уже имеющиеся данные, и данные, которые необходимо записать. Байты данных, в которых присутствуют все "нули" или "единицы", могут записаться быстрее, чем, скажем, байты с данными вроде "0xA5A5".

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

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

При помощи перезаписываемой памяти на основе NOR-флеша можно создать телефон с Symbian OS, внутри которого одна часть памяти NOR-флеш будет отводиться под XIP-код, а другая - под пользовательские данные внутри файловой системы LFFS.

NAND-флеш

NAND-флеш используется как поделенный на сегменты диск, а не как произвольно адресуемая память. В отличие от NOR-флеша, NAND-флеш не имеет никаких адресных линий (address lines), поэтому он не может отображаться картой памяти. В действительности это означает, что мы не можем исполнять код прямо из NAND-флеша, и что для запуска кода мы должны сначала скопировать его в RAM-память. В итоге, в сравнении с телефоном на основе NOR-флеша, в телефоне с NAND-флешем требуется дополнительный объем RAM-памяти. Однако запись в NAND-флеш осуществляется примерно в 10 раз быстрее, чем в NOR-флеш.

Так же телефон не может прямо загружаться из памяти на основе NAND-флеша. Процесс загрузки телефона из NAND-флеша намного сложнее, и требует целый ряд загрузчиков, надстроенных друг над другом, что в конечном итоге приводит к нескольким лишним мегабайтам внутри двоичного образа Symbian OS; а так же ROM-памяти, которую сначала необходимо загрузить в RAM-память, чтобы она смогла начать свою работу.

По своей сути, NAND-флеш является менее надежной памятью, чем NOR-флеш. Внутри NAND-флеша присутствуют дефектные сегменты, которые очень восприимчивы к битовым ошибкам во время осуществления операций чтения и записи. Чтобы облегчить вторую проблему, внутри NAND-флеша для каждой страницы данных, обычно имеющей размер 512 байт, вычисляется код корректировки ошибок (Error Correction Code, или ECC). При каждой операции считывания данных, код корректирови ошибок вычисляется заново, и разница между вычисленным и уже имеющимся кодом используется "на лету" для корректировки значений отдельных битов. При этом многобитные ошибки исправить уже невозможно, и страница памяти, внутри которой произошли такие ошибки, считается поврежденной.

По сравнению с NOR-памятью, NAND-память имеет более низкую цену, что делает ее более привлекательной для массового производства телефонов, даже учитывая необходимость дополнительного объема RAM-памяти.

Модули NAND-флеша присоединяются к одночипной системе при помощи спецального интерфейса, представляющего собой 8-ми или 16-битную шину. Модуль интерфейса будет использовать интерфейс DMA для передачи данных, а так же содержать в себе схемы для вычисления кода корректировки ошибок при операциях чтения и записи.

Интерфейс NAND-памяти считывает и сохраняет данные в NAND-флеш при помощи страниц данных. NAND-память с маленькими сегментами использует 512-байтные страницы, в то время как NAND-память с большими сегментами использует 2048-байтные страницы. Уничтожение данных происходит сегментно, и каждый сегмент содержит от 32 до 64 страниц.

Прерывания

Системная периферия запрашивает внимания со стороны центрального процессора при помощи генерации прерываний. Каждая часть периферии имеет одну или более линию прерываний (interrupt line), подключенную к программируемому контроллеру прерываний (Programmable Interrupt Controller, или PIC). Контроллер прерываний, в свою очередь, перенаправляет полученные прерывания центральному процессору. Ядра процессоров ARM имеют всего лишь два входа для прерываний: обычный запрос прерывания (Interrupt ReQuest, или IRQ), и быстрый запрос прерывания (Fast Interrupt reQuest, или FIQ). Прерывания FIQ имеют более высокий приоритет, чем IRQ, а так же обладают рядом дополнительных зарезервированных регистров.

Код ядра EKA2, отвечающий за диспетчеризацию прерываний, определяет источник прерывания при помощи считывания содержимого реситров контроллера PIC, а затем вызывает соответствующую функцию обслуживания (service function). Данный процесс подробно описывается в 6-й главе Прерывания и исключения.

На рис. 2.4 представлена система, поддерживающая 62 прерывания. Система имеет двухуровневую структуру, и заново использует один и тот же модуль контроллера PIC для объединения второго уровня прерываний с первым.

File:Internals2-4.jpg

Рис 2.4 Двухуровневый контроллер прерываний

Каждое прерывание внутри одного из уровней будет представлено одним из 32-х битов внутри ряда регистров управления. Регистры управления позволяют программам диспетчиризации прерываний конфигурировать, разрешать и обнаруживать прерывания:

Тип прерывания IRQ FIQ
Статус вывода Да Нет
Разрешаемость Да Нет
Фиксация ввода прерывания Да Нет
Тип обнаружения Фронт импульса Уровень импульса
Направленность Нарастающий фронт импульса/Высокий уровен импульса Спадающий фронт импульса/Низкий уровень импульса

Примеры различных типов прерываний, которые могли бы использоваться в системе:

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

Нарастающий фронт импульса мог бы использоваться для определения короткого пульса синхронизации VSync, геренируемого контроллером LCD-экрана при старте нового выходного фрейма.

Для определения текущего прерывания, диспетчерская программа должна считать статус и включить регистры контроллера PIC, а затем произвести общую побитовую операцию "И" (AND) над их значениями, и найти установленный бит для определения возникшего прерывания. Номер бита используется в качестве индекса таблицы, внутри которой хранятся указатели на функции соответствующих программ обслуживания прерываний (ISR). Помещая прерывание с наибольшим преимуществом в верхние биты первого уровня, установленный бит можно легко найти при помощи команды подсчета ведущих нулей (count leading zeros, или CLZ).

Задержкой при диспетчеризации прерывания является отрезок времени между появлением входного сигнала IRQ, и выполнением первой инструкции ISR, включая так же время, необходимое на работу описанной в предыдущем параграфе диспетчерской программы, и работу вступительного кода потока. В ядре с частотой 200 MHz задержка при диспетчеризации прерывания займет десятки инструкций, что примерно составит 50 циклов, или 250 ns. Вся длительность обработки прерывания, включая время работы завершающего кода и диспетчера ядра, приближается к 1 µs.

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

Векторный контроллер прерываний (vectored interrupt controller, или VIC) процессора ARM является еще более сложной системой, в которой центральному процессору выделяется отдельный VIC-порт. Векторный контроллер прерываний позволяет процессору тут же воспользоваться ISR-адресом, избегая накладок программ диспетчеризации, и сохраняя десятки рабочих циклов при каждом прерывании. Телефоны с Symbian OS не требуют наличия VIC-контроллера, и связанной с ним электроники, так как в таких телефонах нет прерываний, жестко ограниченных в рамках реального времени, и требующих наносекундных обработок прерываний.

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

Таймеры

В 5-й главе Сервисы ядра, мы подробно опишем использование миллисекундного таймера (millisecond timer) ядра EKA2. Ядро EKA2 использует таймер с разрешением в 1 ms для обеспечения течения системного времени, работы с очередями таймера и слежения за главными часами.

Минимальное электронное требование, предъявляемое для такой системы, является наличие высокоскоростного таймера, способного генерировать точные и постоянные 1-миллисекундные прерывания. Счетчик такого таймера должен позволять считывать и записывать в него различные значения, а его максимальный период должен составлять множество секунд.

Скорость работы источника частоты таймера не является чем-то важным для Symbian OS, однако значение этой частоты обычно варьируется между 32 kHz и 1 MHz. Более медленные источники частоты имеют более низкое потребление энергии, в то время как более быстрые источники позволяют более гибкое и точное использование таймеров, переходящее за грань миллисекундного импульса (см. рис. 2.5).

Желательной электронной реализацией таймера является 32-битный счетчик, к которому подсоединен ряд 32-битных отслеживающих регистров (match registers), с установленными в них битовыми масками для генерации прерываний. Наличие регистров с битовыми масками позволяет реализацию простых программных схем для подавления ненужных импульсов и профилирования сигналов. Альтернативной электронной реализацией таймеров являются самоперезарядные обратно-отсчитывающие таймеры, однако они обладают меньшими возможностями.

File:Internals2-5.jpg

Рис. 2.5 Высокоскоростной таймер с тремя отслеживающими регистрами

Деятельность миллисекундного таймера с отслеживающими регистрами весьма проста. Внешний источник частоты обновляет счетчик таймера, и при каждом увеличении значения счетчика его содержимое сравнивается с содержимым отслеживающих регистров. Если содержимое счетчика и какого-нибудь отслеживающего регистра совпадет, таймером будет активизирована соответствующая линия прерывания, и запустится ISR миллисекундного таймера. Затем ядром будет обработан очередной миллисекундный импульс, и ISR еще раз поместит в очередь возникшее прерывание при помощи добавления 1 ms к значению соответствующего отслеживающего регистра.

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

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

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

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

Прямой доступ к памяти, или DMA

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

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

Модуль DMA существует в виде периферийного ведущего пользователя шины (bus master), который можно запрограммировать для передачи больших объемов данных между периферией и памятью без всякого посредничества центрального процессора.

Многоканальные модули DMA способны одновременно обрабатывать более чем одну передачу данных. Одночипные системы для телефонов с Symbian OS должны обладать столькими каналами, сколько существует периферийных портов, требующих использования DMA. Так же мог бы оказаться весьма полезным дополнительный канал для копирования данных "из памяти - в память".

Передача данных по каналу DMA начинается с программирования управляющих регистров конфигурационными командами, заданием объема передаваемых данных, а так же физического адреса ячейки-назначения внутри RAM-памяти и периферийной FIFO-памяти. Затем модулю DMA выдается стартовая команда. Фактическое перемещение данных будет контроллироваться через электронику периферийного интерфейса, т.к. периферия всегда работает медленнее системной RAM-памяти.

При передаче данных из памяти в периферию, модуль DMA будет дожидаться сигнала от периферии о том, что она готова принять новую порцию данных. При этом модуль DMA сначала считывает 8, 16 или 32 байта данных в свой внутренний буфер, и только потом перемещает эти данные из буфера в FIFO-память периферии. Канал DMA будет автоматически увеличивать адрес считывания для следующих порций данных до тех пор, пока не закончится вся передача данных. Когда передача данных будет целиком завершена, канал DMA выдаст прерывание о завершении передачи данных.

Модуль DMA, генерирующий прерывание в конце каждого перемещения памяти, является однобуферным. Центральный процессор должен обслуживать прерывание и заново помещать в очередь следующее перемещение данных через DMA, прежде чем текущие данные будут куда-либо отправлены. У аудио-интерфейса имеются в наличии жесткие временные рамки отзыва, определяемые глубиной его FIFO-памяти и скоростью потока данных. Для избежания замедления скорости передачи данных, программа обслуживания прерывания (ISR) модуля DMA должна завершать свою работу в течении перечисленных временных рамок. Так, например, для 16-битного стереозвука длина такого отрезка времени составляет 160 µs.

Модули DMA с двойным буфером позволяют ставить в очередь следующую порцию данных, пока в памяти перемещается текущия. Осуществление двойной буферизации возможно благодаря двойному набору регистров канала, между которыми модуль DMA переключается при смене порций данных. Двойная буферизация позволяет сократить временные рамки отклика модуля DMA до длительности всей передачи данных. К примеру, для аудио-буфера размером 4 KB это время сокращается примерно до 20 ms.

Векторные (scatter-gather) модули DMA добавляют еще один уровень сложности и программируемости. Программируемость таких модулей DMA осуществляется при помощи списка команд, составляемых и хранимых в RAM-памяти. В какой-то момент канал загружает первую команду в модуль DMA, и запускает ее выполнение. После завершения каждой из передач данных, модуль DMA загружает следующую команду, пока они не закончатся. Новые команды могут добавляться или изменяться как раз в то самое время, пока модуль DMA перемещает данные. Таким образом нашей теоретической передаче аудио-данных и вовсе не нужно будет останавливаться.

Векторные модули DMA хороши для передачи данных внутрь систем виртуальной памяти, в которых RAM-память состоит из отдельных страниц. Они так же хороши для взаимодействий со сложной периферией, в которой считывания данных должны перемешиваться с чтением регистров. Так, например, NAND-контроллеры требуют 512 байт данных, за которыми следуют 16 байт метаданных, при этом для каждого вводимого блока данных контроллеру придется считать регистры с кодом корректировки ошибок.

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

Жидкокристаллический дисплей, или LCD

Главным дисплеем, используемым в телефонах с Symbian OS, является цветной жидкокристаллический дисплей (liquid crystal display, или LCD). Работа дисплея заключается в преобразовании пиксельных данных, хранимых в буфере кадров (frame buffer), в изображения, которые мы могли бы увидеть.

Размеры дисплеев телефонов с Symbian OS определяются программным обеспечением уровней пользовательского интерфейса, так как пользовательские интерфейсы адаптируются к размеру экрана. Наиболее широко используемыми разрешениями экранов являются 176 × 208 пикселей в телефонах Series 60, и 240 × 320 пикселей в телефонах UiQ.

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

Память для буфера кадров выделяется во время инициализации телефона. Так же гарантируется, что выделенная память будет отображаться блоком MMU со "сквозным кэшированием" (write-through caching). Для дисплея с QVGA-разрешением и с 16 битами на один пиксель (16-bpp), под буфер кадров будет выделено 150 KB (320 × 240 × 2 байт) RAM-памяти.

Пикселы имеют общие форматы, зависящие от способа их хранения. Большинство современных мобильных телефонов используют 16 бит на один пиксель (bpp) в формате "565", в котором 5 верхних битов отдаются под красный цвет, 6 средних - под зеленый, и 5 нижних - под синий, производя таким образом 65.535 (216) уникальных цветов:

15 ⇒ 11 10 ⇒ 5 4 ⇒ 0
Красный Зеленый Синий

Телефоны с дисплеями, в которых на один пиксел приходится уже 18 бит, и которые могут отобразить 262.144 цветов, так же становятся распространенными. Однако Symbian OS не подерживает 18-битные машинные слова, поэтому в ней используется другой пиксельный формат: 24 бита на один пиксель внутри 32-битного машинного слова. Такой пиксельный формат носит название "aRGB", или формат "8888". В нем буква "a" означает либо пустое место, либо значение прозрачности (alpha) пикселя. При этом LCD-контроллер игнорирует два нижних бита каждого байта компоненты с цветом:

31 ⇒ 24 23 ⇒ 16 15 ⇒ 8 7 ⇒ 0
Прозрачность Красный Зеленый Синий

Жидкокристаллические экраны для мобильных телефонов существуют в виде двух отдельных типов: "пустого" (dumb) и с "начинкой" (smart). "Пустой" экран не содержит никакой контроллирующей электроники. Напротив, его пикселы рисуются прямо из LCD-контроллера одночиповой системы. В свою очередь, экран с "начинкой" содержит свой собственный контроллер, память для буфера кадров, и интерфейс для приема данных из одночипной системы.

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

Данная 60-герцная частота обновления заставляет LCD-контроллер постоянно перемещать данные из памяти на жидкокристаллический экран через модуль DMA до тех пор, покуда экран включен. Используя IRAM-память в качестве буфера кадров, можно уменьшить поток данных и расходуемую энергию устройства. Ведь как мы уже говорили ранее, 16-битный QVGA-экран с частотой обновления 60 Hz потребует 8.78 MB данных в секунду. А в будущем, с 32-битными VGA-экранами, объем данных вырастет в 8 раз.

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

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

Аудио

Звуковая подсистема телефона с Symbian OS состоит из двух практически независимых потоков звуковых данных. Одним потоком являются звуковые данные телефонии, а другим - мультимедийные данные.

Двумя жизненно важными характеристиками телефона являются хорошее качество звуковых звонков и возможность длительных разговоров. Для осуществления этих ключевых характеристик в телефоне имеются шины цифровых звуковых данных (digital audio buses).

Фактическим электронным аудио-форматом, используемым в телефонах с Symbian OS, являются 16-битные данные в импульсно-кодовой модуляции (pulse code modulated, или PCM). Качество аудио-данных варьируется от моно-канального аудио частотой 8 kHz для телефонии до стерео-канального аудио частотой 48 kHz для воспроизведения музыки.

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

Телефонное аудио

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

Процессор узкополосной передачи данных (baseband processor, или BP) содержит DSP-процессор, обрабатывающий аудио-данные без участия Symbian OS. Во время звонка, Symbian OS будет работать в энергосберегающем режиме, пробуждающейся только при необходимости обновлять содержимое экрана.

Обработка обычного телефонного звонка заканчивается в аналоговых электронных схемах. Эти схемы содержат аналого-цифровые и цифро-аналоговые пребразователи, подключенные, в свою очередь, к микрофону и громкоговорителям. При использовании Bluetooth-гарнитуры (BT), PCM-данные передаются прямо в модуль BT через специальный интерфейс.

Symbian OS требует наличия дополнительного звукового канала, чтобы иметь возможность смешивать специальные системные звуки с текущими телефонными звонками. Специальные системные звуки используются для извещения о полученных сообщениях, низком уровне зарядки батареи и других входных звонках. Смешивание звуков может происходить при помощи передачи аудио-данных в модуль BP через IPC-связь, где DSP-процессор смешает их с аудио-потоком текущего телефонного звонка.

Мультимедийное аудио

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

Основными источниками мультимедийных звуков являются:

  • Мелодии звонка, существующие в разных аудио-форматах
  • Звуки о полученных сообщениях
  • Звуки будильника или календаря
  • Видео-телефония
  • Воспроизведение аудио в формате MP3
  • Игры
  • Запись голоса в диктофоне
  • Съемка видео и его воспроизведение

Высшие уровни обработки таких аудио-данных в медиа-проигрывателях, обработчиках файловых форматах и дополнительных программных модулях (plug-ins) контроллируются мультимедийной платформой Symbian OS (multimedia framework, или MMF).

Платформа мультимедийного устройства (Multimedia Device Framework, или MDF) содержит кодеки, а так же передает PCM-данные как на уровень драйвера устройства (device driver layer), так и из него. В случае с аудио-данными, уровень драйвера устройства носит название DevSound. Видео-телефония (Video telephony, или VT) является особенным случаем, в котором "живые" звуковые данные проходят через Symbian OS. В этом случае аудио-данные телефонного звонка смешиваются с видео, чтобы получить поток данных, работающий на скорости 64-kb/s. Система обработки видео-телефонных звонков должна разделить входной поток данных на аудио и видео-составляющие, а затем воспроизвести их с использованием синхронизации. Такая обработка обычно происходит в специальной электронной схеме или DSP-процессоре, т.к. ARM-процессору с тактовой частотой 200 MHz потребовались бы все усилия лишь для запуска необходимых кодеков.

Главная сложность в аудио-системах заключается в постоянно растущем количестве аудио-источников и выходных каналов, а так же возможных способов их взаимного подключения. К примеру, современные телефоны имеют несколько громкоговорителей, Bluetooth-гарнитур, а так же радио-систем, работающих в FM-диапазоне. Возможно проблема их взаимодействия так и останется проблемой, пока не появятся электронные схемы, способные соединять и перенаправлять каждый их аудио-источников во всех возможных направлениях. Так же некоторые сегодняшние способы использования аудио-данных являются несовместимыми с другими способами, что приводит к необходимости прерывать некоторые их них ради других.

Управление электропитанием

Все телефоны с Symbian OS работают на батареях, и как мы уже неоднократно заявляли в данной главе, эффективное управление электропитанием (power management, или PM) является ключевой характеристикой успешного телефона с Symbian OS.

Общие цели проектирования одночиповой системы должны фокусироваться на адекватной производительности при низком энергопотреблении. На каждом шаге проектирования системные инженеры должны спрашивать себя: "Как это отразится на потреблении энергии? Можем ли мы спроектировать это иным способом, при котором будет получена та же производительность, но с меньшим потреблением энергии?"

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

Процессоры ARM, используемые в телефонах с Symbian OS, созданы специально для решения упомянутых вопросов, т.к. именно они являются наилучшими периферийными блоками с низким потреблением энергии. Способы уменьшения потребления энергии внутри одночиповой системы включают в себя автосинхронизирующиеся электронные схемы, автоматически отключающиеся при простое последовательные порты, и контроллеры памяти, переключающие RAM-память в режимы низкого потребления энергии при каждой возможности.

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

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

Создателям центральных процессоров нравится изобретать названия различного рода режимов электропитания, как например "Турбо", "Работа", "Простой", "Дремота", "Спячка", "Глубокая спячка" и "Отключение". Однако чем ниже является энергопотребление режима, тем бóльше работы приходится выполнять для перехода из одного режима в другой. К примеру, переход в режим "Глубокой спячки" скорее всего потребует очистки всего содержимого кэшей и отключения ядра процессора, в то время как пробуждение из "Глубокой спячки" будет выглядеть как начальная загрузка центрального процессора.

Почти все из перечисленных режимов работы устройства будут относиться к режиму "Простоя" Symbian OS (idle mode), в котором система снабжена питанием, но ничего не делает. Symbian OS стремится проводить как можно больше времени в режиме "Простоя", даже переключаясь в него между нажатиями на телефонные клавиши. Как мы уже говорили ранее, наиболее важным отличием между режимами потребления энергии в центральном процессоре и Symbian OS является время, требуемое на переход из "Рабочего" режима в любой другой режим, и обратно. Решение о том, какой режим работы процессора будет использован в данный момент, логически принимается программным обеспечением режима "Простоя", которое основывается в своей работе на недавней истории использовании устройства и ожидаемых событиях синхронизации.

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

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

Заключение

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

  • Часы реального времени
  • Экран, чувствительный к касаниям
  • IPC-интерфейс к процессору BP
  • Интерфейсы для отладки устройства
  • Программирование флеш-памяти
  • Наличие и работа в устройстве нескольких экранов
  • IRDA
  • Старт и загрузка устройства
  • Съемные носители данных: SD, MMC
  • Двухмерная графика (2D)
  • Трехмерная графика (3D)
  • DSP
  • Мультимедийные ускорители
  • USB-интерфейсы
  • Более тонкое управление электропитанием
  • Bluetooth-модули
  • Сторожевые устройства (watchdogs) и перезагрузки
  • Электроника для обеспечения безопасности системы

Внутри Symbian OS мы ссылаемся на уровни программного обеспечения (software layers), контроллирующие электронику, а так же процессы загрузки устройства, переноса ядра и драйверов устройств в главную память. Такие уровни носят общее название "пакета поддержки платы устройства" (Board Support Package, или BSP).

Создание электронных схем для телефонов с Symbian OS требует системного взгляда на конечный продукт. Проектировщикам следует принимать во внимание реальную необходимость наличия той или иной производительности, и выбирать элетронику с достаточными (но не слишком высокими) возможностями. При этом проектировщикам следует на каждом шаге принятия того или иного решения анализировать потребление энергии устройства.

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


Translated Article
Translated: 26 April 2010
See changes since translation: 53049
Revisions since translation: _

Comments

Sign in to comment…