Вычислительные and системы android

Операционная система Android

Feb 4 · 6 min read

Android — это операционная система с открытым исходным кодом, созданная для мобильных устройств на основе модифицированного ядра Linux. Эта ОС разработана консорциумом Open Handset Alliance, состоящим из крупных технологических компаний при организующей роли Google. Исходный код ОС представлен как часть проекта Android Open Source Project (AOSP) с лицензией Apache. Выпущенный на рынок в 2007 году Android вскоре стал самой продаваемой операционной системой в истории, благодаря своей открытой модели разработки и удобному интерфейсу. Последняя версия Android 11 вышла в 2020 году.

История развития

Проект Android появи л ся в 2003 году с целью разработки интеллектуальных мобильных устройств. Начинался он с разработки ОС для цифровых фотокамер, но вскоре акцент сместился на мобильные телефоны из-за их большой распространенности на рынке. В 2005 году проект приобрел Google и в качестве основы для этой ОС было выбрано ядро Linux за счет его гибкости и возможности обновления.

С целью разработки платформы с открытым исходным кодом для мобильных устройств в 2007 году Google сформировала Open Handset Alliance с несколькими производителями оборудования и операторами беспроводной связи. В то время каждый производитель выпускал мобильные телефоны на базе собственной платформы, с ограниченными возможностями для сторонних приложений. Альянс заявил, что открытая платформа обеспечит тесное сотрудничество между производителями и разработчиками, чтобы ускорить производство недорогих инновационных продуктов и приложений.

Платформа Android была представлена в 2007 году и вышла на рынок на следующий год. Поначалу ей мешал ограниченный набор функций и небольшая база пользователей по сравнению с конкурентами Symbian и Windows. Однако возможность обновления стала самым большим преимуществом этой ОС, поскольку каждое обновление давало новые функции и улучшенную производительность. Из-за «сладости, которую они приносят в нашу жизнь», первые версии были названы в честь десертов, в алфавитном порядке, например Cupcake, Jellybean и KitKat. Однако вскоре у Google закончились десерты, и с 2019 года новые версии ОС получают номера, начинающиеся с Android 10. Лицензия с открытым исходным кодом также помогла увеличить популярность этой ОС среди производителей мобильных устройств, поскольку они могут теперь модифицировать ОС под свои требования, не влияя при этом на разработку приложений.

Но самая главная особенность в том, что Android — это больше, чем просто операционная система. Он во многом уравнял мобильные устройства с персональными компьютерами, позволив разработчикам писать приложения независимо от аппаратной платформы устройства. Это привело к созданию глобальной платформы для приложений и укрепило позиции Android, как передовой мобильной платформы, и в 2011 году он стал самой продаваемой операционной системой для смартфонов и для планшетов в 2013 году. Сегодня на Android работает множество электронных устройств, включая смарт-камеры, часы, медиаплееры и многое другое.

Архитектура

Первоначально Android разрабатывался для архитектуры ARM, а затем был расширен для поддержки архитектур x86 и x86–64. Однако в целом Android не заботится об аппаратном обеспечении устройства из-за разнообразия и множества типов среди компонентов в мобильных устройствах.

Основой ОС Android является модифицированная версия ядра Linux LTS, которая непосредственно взаимодействует с оборудованием. Драйверы, необходимые для работы устройства, реализуются производителями оборудования и добавляются в ядро. Это позволяет производителям оборудования разрабатывать драйверы для хорошо известного ядра, а разработчикам ОС игнорировать разнообразие оборудования. Android 11 поддерживает версии ядра 4.14, 4.19 и 5.4.

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

Android Runtime (ART) — это виртуальная машина, которая выполняет код приложения, содержащийся в файлах Dalvik Executable (DEX). Она управляет компиляцией кода, отладкой и очисткой памяти. Каждое приложение работает со своим собственным экземпляром ART, то есть в своей собственной виртуальной машине, чтобы обеспечить изоляцию кода. ART заменил Dalvik в качестве виртуальной машины Java для Android в 2013 году, поскольку его компиляция Ahead-of-Time обеспечила лучшую производительность по сравнению с компиляцией Just-in-Time у последней.

Собственные библиотеки C/C ++ являются важной частью операционной системы, поскольку большинство основных компонентов Android написаны на собственном коде. Инфраструктура Java API — это шлюз в ОС для всех пользовательских приложений. Он предоставляет множество сервисов для приложений в виде вызовов Java API, включая менеджеры действий, ресурсов и уведомлений, поставщиков контента и систему просмотра. Именно поэтому приложения для Android в основном разрабатываются на Java, хотя собственные библиотеки обеспечивают некоторую поддержку C/C++. Совсем недавно также поддерживался и Kotlin, он даже предпочитался Google для разработки приложений Android. Код компилируется Android Software Development Kit (SDK) и архивируется в виде пакета Android (APK).

Android против Linux

Хотя некоторые считают Android дистрибутивом Linux, он имеет мало общего с обычной ОС Linux.

В традиционном стеке Linux ядро выполняет большую часть системных функций, включая управление памятью и файлами, аппаратное взаимодействие и планирование процессов. Системные функции предоставляются приложениям через библиотеки и вызовы API на языке Си. Именно поэтому GNU C является более важной библиотекой в Linux. Пользователи взаимодействуют с системой через оболочки, которые транслируют пользовательские команды в системные вызовы.

С другой стороны, Android можно рассматривать как пользовательское приложение, работающее в Linux. ОС использует ядро для взаимодействия с оборудованием и управления системой, а затем предлагает свои функции другим приложениям через интерфейс API. Этот интерфейс написан полностью на Java, и даже функции библиотек C/C ++ предложены в оболочках Java. В Android нет оболочки, хотя некоторые утилиты командной строки поддерживаются через приложение Toybox.

Читайте также:  Папка backup что это андроид

Кроме того, Android оптимизирован для мобильных устройств, которые обычно обладают малой вычислительной мощностью, имеют небольшой объем памяти и работают от батарей. По умолчанию, в качестве библиотеки C, вместо GNU, он использует Bionic из-за пониженных требований к памяти и процессору. При нехватке памяти, Android может уничтожить наименее используемые процессы и сбросить блоки разделяемой памяти. Кроме того, здесь реализуется уникальная система управления питанием, в которой устройство остается в спящем режиме, потребляя минимальную мощность до тех пор, пока процесс не запросит ресурс.

Ядро Android

Перед установкой на устройство само ядро Linux подвергается модификации несколькими участниками проекта. Во-первых, разработчики Android оптимизируют ядро LTS для мобильных устройств, вносят коррективы в функции Android и оставляют код как общее ядро AOSP. Разработчики AOSP реализуют большинство изменений в виде драйверов устройств, чтобы гарантировать внесение минимальных изменений в основной код ядра. Это позволяет с минимальными изменениями объединять обновления базового ядра в ACK. Поставщики оборудования добавляют драйверы и уровни абстракции для создания ядра поставщика. Затем, производители устройств обновляют ядро в соответствии со своими требованиями, реализуя новые драйверы или даже улучшая систему. Это ядро, в конечном счете, устанавливается на выпускаемые производителем устройства.

Разработка приложения

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

Android предоставляет приложениям большую часть своих функций через службы (services). Служба — это приложение, которое выполняет длительные операции в фоновом режиме. Она не предоставляет пользовательского интерфейса и доступна только через платформу API. Службы также могут выполнять операции в приоритетном порядке и сообщениями уведомлять пользователя. Служба также может быть привязана к приложению и обеспечивать интерфейс клиент-сервер.

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

Заключение

При первых анонсах Open Handset Alliance их планы по взаимодействию при разработке открытой и многоцелевой платформы представлялись не более чем громким заявлением. Однако через десять лет платформа Android произвела революцию, и не только в мобильной индустрии. Фактически, она породила совершенно новые отрасли промышленности и коренным образом изменила наш образ жизни, работы и общения.

Источник

Android – это Linux? Сравнение Android и Linux

Обновл. 14 Июл 2021 |

В этой статье мы рассмотрим взаимосвязь между операционной системой Android и Linux, сравним их сходства и различия, а также ответим на главный вопрос: «Android — это Linux?».

Что такое Linux?

Когда кто-то произносит слово «Linux», он может иметь в виду:

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

Дистрибутив Linux. Это операционная система, которая содержит ядро Linux и дополнительное программное обеспечение: различные утилиты, библиотеки, окружение рабочего стола, браузеры, текстовые редакторы, музыкальные проигрыватели и пр. Даже если это дополнительное программное обеспечение было разработано специально для работы вместе с ядром Linux, оно не является частью ядра Linux. При обсуждении операционных систем, использующих ядро Linux, термины «дистрибутив» и «операционная система» являются взаимозаменяемыми. Любой может взять ядро Linux, добавить свое собственное программное обеспечение и создать полноценную операционную систему. В настоящее время доступно огромное количество различных дистрибутивов Linux.

GNU/Linux. Большинство дистрибутивов Linux представляют собой сочетание ядра Linux и программного обеспечения GNU, что заставило некоторых людей утверждать, что мы все должны называть дистрибутивы Linux термином «GNU/Linux».

Что такое Android?

Android — это проект, созданный для удовлетворения потребности в мобильной операционной системе с открытым исходным кодом. Изначально разработка велась компанией Android, Inc. Впоследствии проект перекупила корпорация Google. Поскольку Android является операционной системой, то в её состав входит ядро, драйверы и программное обеспечение пользовательского пространства.

Хотя вокруг термина «Android» и близко нет такой путаницы, как в случае с «Linux», все же существуют две различные разновидности операционной системы Android:

Проект Android с открытым исходным кодом (сокр. «AOSP» от англ. «Android Open Source Project»), в котором Google предоставляет пользователям исходный код Android. Хотя данный исходный код действительно можно использовать для создания функционирующей операционной системы, установив её на смартфон или планшет, мы не получим того функционала, которое большинство пользователей имеют от своего текущего Android-устройства; в первую очередь это касается мобильных сервисов Google (сокр. «GMS» от англ. «Google Mobile Services»).

AOSP с добавлением значительного количества проприетарного кода от производителя смартфона или планшета (например, GMS от Google или TouchWiz от Samsung). Операционная система Android, которая присутствует на вашем смартфоне или планшете, по своей сути является данной разновидностью Android.

Читайте также:  Как сделать проценты батареи андроид

Большинство аргументов «за» или «против» классификации Android как Linux применимы к обеим версиям Android, но есть несколько случаев, когда ответ зависит от того, определяете ли вы Android как AOSP или как операционную систему, которая поставляется с вашим смартфоном или планшетом Android.

Android и ядро Linux

На самом деле есть только один аргумент в пользу классификации Android как Linux: каждый смартфон или планшет с ОС Android содержит ядро Linux. Вы даже можете увидеть, какая версия ядра установлена на вашем устройстве, открыв «Настройки» и перейдя в раздел «Система» > «О телефоне» > «Сведения о ПО»:

Однако Android — это не просто ядро Linux; это полностью функционирующая операционная система, которая содержит дополнительные библиотеки, графический интерфейс, приложения и многое другое. Следовательно, стоит уточнить наш вопрос: «Является ли Android дистрибутивом Linux?».

Почему Android не является Linux?

Android не использует стандартное ядро Linux

Чтобы создать операционную систему, отвечающую уникальным потребностям мобильных устройств, команда Android внесла ряд изменений в ядро Linux, включая добавление специализированных библиотек, API и утилит, которые по большей части являются производными от операционных систем семейства BSD или написаны с нуля, специально для Android.

Ядро Linux выпущено под лицензией GNU GPL v2.0, поэтому любой может свободно изменять его исходный код, что и делают многие дистрибутивы Linux. Когда дело доходит до вопроса о том, насколько радикально команда Android изменила ядро Linux, Embedded Linux wiki приходит к выводу, что количество изменений, внесенных командой Android, «не очень велико и соответствует порядку изменений, которые обычно вносятся в ядро Linux разработчиками ПО для встраиваемых систем».

Android не содержит ПО и библиотек GNU

Если вы согласны с тем, что программное обеспечение GNU является определяющей характеристикой дистрибутива Linux до такой степени, что мы все должны называть дистрибутивы Linux термином «GNU/Linux», то Android никоим образом не может быть дистрибутивом Linux. Android включает в себя очень мало программного обеспечения GNU. В частности, команда Android, вместо того, чтобы использовать библиотеку GNU C (glibc), разработала кастомную библиотеку под названием Bionic.

Даже если вы не согласны с тем, что дистрибутив Linux должен включать программное обеспечение GNU, все равно нельзя отрицать тот факт, что отсутствие GNU сильно отличает Android от большинства дистрибутивов Linux.

Вы не можете запускать приложения Linux на Android и наоборот

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

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

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

В отличие от Android, Linux не содержит виртуальной машины Dalvik, и поэтому не может запускать приложения для Android. Виртуальную машину Dalvik и всё другое программное обеспечение Android нельзя просто перенести на настольную машину Linux — вам придется проделать большую работу, чтобы приложения Android выводились в окно на стандартном рабочем столе Linux.

Примечание: BlueStacks и другие эмуляторы приложений для Android пытаются сделать это для Windows и macOS. Они запускают Android на виртуальной машине, что позволяет им запускать приложения для Android (со снижением производительности) на рабочем столе. Однако эти решения оказались не очень популярными.

Android — это продукт Google

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

Кроме того, хотя разработчики, не являющиеся сотрудниками Google, могут вносить свой вклад в AOSP в различных объемах, официальный сайт AOSP четко указывает, что руководители проектов, как правило, являются сотрудниками Google. Еще один нюанс заключается в том, что Google владеет правами на название и логотип Android, поэтому, даже если вы создадите операционную систему на основе кода AOSP, вам все равно потребуется связаться с Google, если вы захотите опубликовать свою работу, включив в её название часть «Android».

В то время как некоторые дистрибутивы Linux действительно имеют тесные связи с определенной компанией (например, Canonical и Ubuntu или Red Hat и Fedora), для большинства дистрибутивов Linux необычно, чтобы разработка велась в частном порядке только одной организацией.

Дебаты по поводу статуса Android как «ОС с открытым исходным кодом»

Несмотря на рекомендации Фонда свободного программного обеспечения (сокр. «FSF» от англ. «Free Software Foundation») разработчикам удалить всё несвободное программное обеспечение из своих дистрибутивов Linux, нет строгого правила, согласно которому дистрибутивам Linux запрещено содержать несвободное (проприетарное) программное обеспечение. В реальности многие дистрибутивы включают скомпилированные вендором двоичные файлы драйверов, также известные как BLOB-объекты, поэтому возникает вопрос: «Насколько открыт Android по сравнению с «типичным» дистрибутивом Linux?».

Хотя многие почитатели ПО с открытым исходным кодом согласились бы с тем, что AOSP далек от идеального проекта с открытым исходным кодом, его код свободно доступен для изменения и распространения другими людьми.

Однако прежде чем базовая версия AOSP станет полноценным Android, в нее добавится большое количество проприетарного кода, и это верно независимо от того, выбираете ли вы устройство с «чистым Android» (Nexus или Pixel) или устройство с модификациями производителя.

Читайте также:  Для андроид mortal combat

Несмотря на то, что многие дистрибутивы Linux содержат собственный код, термин «Linux» тесно связан с программным обеспечением с открытым исходным кодом, а весь проприетарный код пользовательской части Android превращает данную ОС в гораздо более закрытую систему, нежели «типичный» дистрибутив Linux.

Отсутствие возможности кастомизации Android

Хотя, как правило, довольно легко изменить дистрибутив Linux на уровне операционной системы, по умолчанию владельцы Android не могут получить доступ к «базовой» операционной системе на своем смартфоне или планшете, а «чувствительные» разделы ОС надежно заблокированы.

Краткий экскурс в операционные системы

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

Основные функции типичной современной операционной системы:

Управление памятью и контроль её использования приложениями.

Управление использованием вычислительной мощности приложениями.

Управление файловыми системами и жесткими дисками (HDD и SSD).

Предоставление интерфейса для создания драйверов устройств (чтобы иметь возможность добавлять в систему новое оборудование).

Предоставление графического пользовательского интерфейса для взаимодействия с программным обеспечением.

Работа служб, запускающих такие приложения, как: HTTP-серверы, FTP-серверы, SSH-серверы, SQL-серверы и т.д.

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

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

Слой аппаратных абстракций (сокр. «HAL» от англ. «Hardware Abstraction Layer») — слой абстрагирования, реализованный в программном обеспечении, позволяющий взаимодействовать инструкциям высокоуровневых языков программирования с аппаратным обеспечением.

Графический интерфейс пользователя (сокр. «GUI» от англ. «Graphical User Interface») — система средств, позволяющая пользователю взаимодействовать с программным и аппаратным обеспечением компьютера.

Утилиты, библиотеки и фреймворки, которые совместно используются всеми службами и приложениями.

Службы и приложения конечных пользователей.

Вышеперечисленные части можно условно разделить на 2 области, в которых они работают:

Пространство пользователя (или «пользовательское пространство») — вытесняемые части оперативной памяти, в которой работают обычные программы, библиотеки, службы и приложения конечных пользователей.

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

Примечание: Графический интерфейс пользователя, в зависимости от архитектуры операционной системы, может принадлежать либо пользовательскому пространству (как в Linux), либо пространству ядра (как в Windows).

Различия между Android и Linux

Рассмотрим общие различия между Android и Linux:

Android Linux
Тип ПО Операционная система. Ядро.
Канал передачи данных Оптимизировано под сотовые сети. Оптимизировано под Ethernet и Wi-Fi.
Причины создания Сделать мобильные устройства «умными», конкуренция с iOS. Исследовательские цели в области разработки ПО, а также желание создать свободное программное обеспечение с открытым исходным кодом.
Способ монетизации Продвижение продуктов Google, ежемесячная оплата сервисов и комиссионные вознаграждения от продажи приложений/фильмов/книг и пр. в Google Play. Большинство дистрибутивов поддерживаются сообществом и некоммерческими организациями. Основным источником дохода коммерческих организаций является платная техническая поддержка для корпоративных клиентов.
Тип лицензии Apache License. GNU GPL v2.0.
Основной тип устройств Смартфоны, планшеты. Персональные компьютеры и серверы.
Простота использования Прост в использовании. Сложность варьируется в зависимости от выбранного дистрибутива. Но стоит отметить, что изначальная сложность в разы больше сложности использования Android.
Разработчик и поддержка Google. Коммерческие и некоммерческие компании и организации, сообщества разработчиков-энтузиастов по всему миру.

А теперь рассмотрим технические различия между Android и Linux:

Android Linux
Архитектура процессора ARM. x86 и x64.
Пространство пользователя Android Runtime (модифицированный Java Runtime Environment) и библиотеки Core. Преимущественно GNU и X Window System.
Оптимизация ядра Оптимизировано на пониженное энергопотребление. Баланс между производительностью и энергопотреблением.
Доступ к терминалу (shell) Обычно заблокирован, необходимо получить доступ к root, чтобы иметь возможность взаимодействовать с терминалом. Доступно «из коробки», так как терминал является чрезвычайно важной частью Linux-дистрибутивов.
Основа GUI Google SurfaceFlinger поверх OpenGL. Большинство дистрибутивов используют GUI на основе X Window System.
Основные архитектурные элементы Только ядро, HAL и отличное от GNU пользовательское пространство, и собственное окружение рабочего стола. Ядро, HAL, пользовательское пространство GNU (приложения) и слой пользовательского интерфейса (окружение рабочего стола).
Драйверы оборудования Почти все драйверы являются проприетарными. Большинство драйверов поставляются с открытым исходным кодом.
Загрузчик Простой загрузчик, который выполняет необходимый минимум и передает управление ядру. Стандартизированные загрузчики, подобно GRUB2, с возможность кастомизации.
BIOS/EFI Отсутствует на устройствах ARM. Стандарт для всех материнских плат x86/x64.
Библиотека C Облегченный вариант стандартной библиотеки — Bionic. Библиотека GNU C (glibc).

Заключение

Итак, возвращаясь к нашему первоначальному вопросу: «Является ли Android дистрибутивом Linux?». В конечном счете всё зависит от того, что вы вкладываете в это понятие. Если вы согласны с тем, что мы все должны называть дистрибутивы Linux термином «GNU/Linux», а не «Linux», то ответ отрицательный, поскольку Android включает в себя очень мало программного обеспечения GNU.

Если вы определяете «дистрибутив Linux» как операционную систему, включающую ядро Linux и удовлетворяющую одному или нескольким дополнительным критериям, то, опять же, ответ, скорее всего, будет отрицательным. Хотя каждый смартфон и планшет на базе Android включает ядро Linux, ОС Android полностью не соответствует ни одной из других характеристик, обычно ассоциируемых с дистрибутивами Linux. Например, Android явно является продуктом одной компании, он несовместим с обычными приложениями Linux, и, хотя исходные коды AOSP являются открытыми, версия Android, с которой вы сталкиваетесь на коммерческих устройствах, кажется значительно более закрытой, чем можно было бы ожидать от дистрибутива Linux, благодаря включению большого количества взаимодействующего с пользователем проприетарного кода.

Однако, если для вас дистрибутив Linux — это операционная система, основанная на ядре Linux, то Android является дистрибутивом Linux. Это может быть необычный, узкоспециализированный дистрибутив, но это такой же дистрибутив, как Ubuntu, Fedora, Debian и любая другая операционная система, основанная на ядре Linux.

Источник

Оцените статью