Как устроена операционная система Android?

Что внутри Android

Разбираем зеленого робота

Более 70% выпускающихся в настоящее время смартфонов работают под управлением операционной системы Android. «Зеленый робот» стал настолько привычен, что никто и не задумывается – а как он вообще устроен? Да и пока смартфон работает адекватно, нет особенного смысла копаться в его «внутренностях».

Но как только дело доходит до перепрошивки устройства, на ничего не подозревающего пользователя сваливается огромное количество терминов – «ядро», «рекавери», «загрузчик», «радиомодуль» и прочий «системный раздел». Однако, если понимать, как функционирует операционная система Android и как она устроена, все эти «умные английские слова» перестанут пугать и постепенно войдут в обиход. А ещё есть риск успешно перепрошить свой смартфон, тем самым добавив в него ещё больше бесполезных функций.

Что происходит сразу после нажатия кнопки включения

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

Именно для этих целей – включение смартфона или планшета – и предназначен загрузчик, или же bootloader (системный раздел /bootloader). В нем хранятся инструкции о том, какие области внутренней памяти активировать загрузки операционной системы. Его можно сравнить с дорожным указателем со стрелочками.

Старт ОС Android

Без загрузчика никак не обойтись. Это небольшая микропрограмма, которая показывает, в каком сегменте постоянной памяти находится boot, а где хранится recovery. Именно благодаря загрузчику можно зайти в режим восстановления или пропустить его.

Кстати, у многих смартфонов на базе процессоров Qualcomm загрузчик совмещен с радиомодулем (baseband). Дело в том, что GSM-модули этих чипов также управляются микропрограммами.

Восстановление системы Android

Загрузчик – не единственная микропрограмма, которая запускается отдельно от среды выполнения операционной системы Android (то есть когда «зеленый робот» ещё не загрузился). Есть ещё режим восстановления, он же recovery или «рекавери».

TWRP рековери recovery

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

Стоит учесть, что recovery в своей работе часто использует scatter-подобную разметку внутреннего накопителя. Поэтому установка неправильного режима восстановления способна и вовсе окончательно превратить смартфон в кирпич. Однако на моей памяти подобного не было, хотя я дважды ошибался в установке рекавери (на планшет от Samsung, перепутав 3G-версию с Wi-Fi-only, и на свой смартфон, перепутав AOSP и CAF).

Recovery загружается не одновременно с Android, а параллельно. Поэтому при обычном использовании есть риск никогда его не увидеть. Особенно если учесть, что компании редко выпускают OTA-обновления, а такие апдейты ставятся именно через рекавери.

Ядро системы

После того, как загрузчик дал команду запускать операционную систему, стартует запись ядра (boot или kernel) в кэш-память (cache). Именно это происходит, пока пользователь наблюдает за симпатичной анимацией.

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

Ядро системы Android

А сейчас я расскажу немного о программировании. Это скучно, поэтому несколько абзацев можно смело пропустить. Языки программирования подразделяются на высокоуровневые и низкоуровневые. Первые разрабатываются специально для того, чтобы на них было удобно программировать. Они понятны человеку и просты в использовании.
Например, даже незнакомый с программированием зритель сможет увидеть миленькую шутку вот на этом кадре из «Футурамы»:

Футурама

Вот только высокоуровневые языки программирования совершенно не подходят для управления компьютером! Потому что они понятны человеку, но не машине. Компьютер (ну, или смартфон) способен анализировать исключительно бинарные и иногда машинные коды. Программам, которые написаны на высокоуровневом языке, остается только лишь каким-то образом искать пути взаимодействия с аппаратурой.

Если вы пропустили предыдущие три абзаца, то теперь можно вернуться к чтению. Ядро операционной системы является этаким «переводчиком-дипломатом», анализируя поступающие от программ команды и транслируя их в машинные коды, заодно отправляя их к соответствующему аппаратному блоку. Например, программа хочет вывести звук. Она отправляет команду об этом в ядро, оно переводит на машинный код и «говорит» динамику: «Воспроизведи звук!». Из колонки раздается музыка или противный мерзкий писк в зависимости от того, что собиралась вывести программа.

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

блок-схема работы ядра Android

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

Системный раздел Android

Системный раздел (или system) – место хранения операционной системы Android со всеми её «заводскими» приложениями, драйверами, полезностями и украшательствами. По замыслу производителей – незыблем, как скала. То есть при нормальном использовании смартфона ничто не способно внести изменения в системный раздел, кроме совсем уж проработанных вирусов.

Но только в опытных и натруженных руках продвинутых пользователей! Получив root-доступ, эти самые пользователи творят с системным разделом всё, что захотят – удаляют приложения, добавляют новые, меняют драйвера, архитектуру и т.д. К слову, интерфейс системы – это тоже приложения. И потому, получив root-доступ, можно в корне изменить привычный облик Android.

Обновление системы Android

Системный раздел по умолчанию работает только на чтение. То есть никакие изменения в него внести не получается. Все приложения работают только в своей «песочнице» под названием data и хранят свои данные исключительно там. Именно поэтому сброс до заводских настроек подразумевает просто стирание данных (форматирование того самого раздела data).

Получить доступ к системному разделу можно из режима восстановления (recovery) или с правами суперпользователя (root). Поэтому при обновлении Android по воздуху (OTA) смартфон сначала скачивает апдейт, потом перезагружается в recovery и устанавливает его.

Пользовательский раздел

Для хранения установленных приложений и пользовательских данных используется раздел data. В нем можно отыскать APK-файлы загруженных из Маркета программ, базы с сообщениями и контактами, информацию об аккаунтах, сведения о настройках и всё остальное барахло, которым обрастает Android в процессе эксплуатации.

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

Backup и восстановление

В Android 5.1 и ниже эти разрешения даются сразу при загрузке или установке приложения. В 6.0 и выше появились так называемые run-time permissions. То есть используешь себе приложение, и вдруг ему захотелось почитать твои СМС-ки. Система Android тут же выбрасывает окно с вопросом: «Разрешить доступ к сообщениям?». Если разрешить – приложение прочтет СМС. Если не разрешать – никакого доступа к сообщениям не будет.

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

Другие разделы Android

Bootloader, boot, recovery, system и data – основные, но не единственные разделы операционной системы Android. Ещё есть, например, cache, куда скидываются копии информации из системных разделов. Или misc, где хранятся скрипты и другая ерунда. В EFS можно отыскать сведения о GSM-модуле, включая номер IMEI. Sdcard и sd-ext – монтированные внутренний накопитель и карта памяти. В устройствах на процессоре MediaTek можно найти ещё кучу разделов, например, отдельный для хранения загрузочной анимации bootanimation или специальный загрузочный uboot.

Android

Таким образом, Android – очень сложная, но при этом крайне гармоничная операционная система. Здесь нет ничего лишнего, и всё сделано для того, чтобы защитить устройство или пользовательские данные. Хотя, конечно, невозможность модификации и system, и data приводит к значительному росту ресурсоемкости и потребления как оперативной, так и постоянной памяти. Но это не самая высокая цена за возможность однажды сбросить все данные и начать всё сначала.

comments powered by HyperComments

Поделиться:

Комментарии:



^ НАВЕРХ ^