Меню

Ядра в телефоне что это – Что такое количество ядер процессора в телефоне, за что оно отвечает, какую функцию выполняет? На что влияет количество ядер в смартфоне? Какое самое большое количество ядер в смартфоне? Что означает количество ядер в телефоне, смартфоне? Количество ядер .

Leave a comment

Что такое ядро в телефоне/смартфоне?

Бывает, читаешь информацию про понравившийся тебе смартфон, а затем натыкаешься на такое слово как ядро (по-английски — kernel). Многие пользователи не понимают, о чем идет речь, а потому обращаются за помощью к операционным системам. Итак, о чем речь?

Версия ядра указана в настройках смартфона. Зайдите в раздел «Об устройстве» и увидите напротив данного пункта («Версия ядра» или Kernel Version в англоязычной прошивке) набор букв, цифр, а зачастую — и символов:

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

Кстати, если вы считаете, что ядро есть только у ОС Android, вы ошибаетесь, поскольку ядро есть и у других операционных систем.

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

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

Выбираем кастомное ядро для своего Android-аппарата — «Хакер»

Содержание статьи

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

 

Custom kernel?

Что такое кастомное ядро? Как мы все знаем, Android представляет собой пирог, состоящий из трех базовых слоев: ядро Linux, набор низкоуровневых библиотек и сервисов и виртуальная машина Dalvik, поверх которой работает графическая оболочка, высокоуровневые инструменты и сервисы, а также почти все приложения, установленные из маркета. Создатели большинства альтернативных кастомных прошивок обычно работают только с двумя верхними слоями, добавляя функции в графическую оболочку (например, кнопки в шторке), изменяя ее (движок тем в CyanogenMod), а также добавляя новые системные сервисы (эквалайзер в CyanogenMod) и оптимизируя существующие.

Авторы популярных прошивок также по мере возможностей вносят изменения в ядро Linux: оптимизируют (сборка с более агрессивными флагами оптимизации компилятора), включают в него новую функциональность (например, поддержку шар Windows), а также вносят другие изменения вроде возможности поднимать частоту процессора выше предусмотренной производителем. Зачастую все это остается за кадром, и многие пользователи кастомных прошивок даже не подозревают об этих возможностях, тем более что тот же CyanogenMod поставляется с кастомным ядром только для ограниченного круга девайсов, для которых доступны как исходники родного ядра, так и возможность его замены. Например, почти все прошивки CyanogenMod для смартфонов Motorola используют стандартное ядро — заменить его на свое невозможно из-за непробиваемой защиты загрузчика.

Выбираем алгоритм перезагрузки TCP, планировщик I/O и алгоритм управления энергосбережением

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

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

 

Умный регулировщик

В SoC’ах OMAP35XX, используемых, например, в Galaxy S II и Galaxy Nexus, есть функция SmartReflex, которая выполняет роль умной системы регулировки вольтажа при изменении нагрузки на процессор. По сути, она избавляет от необходимости тонкого тюнинга вольтажа пользователем.

Регулируем вольтаж

 

Оптимизации

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

  1. Сборка с помощью компилятора Linaro GCC с агрессивными опциями оптимизации. Писк сезона, используется почти во всех ядрах. Особую популярность этот метод получил после того, как организация Linaro с помощью каких-то непонятных синтетических тестов продемонстрировала 400%-й (!) прирост производительности Android, собранного с помощью своего компилятора. В реальных условиях эффективность Linaro GCC несколько ниже, но польза от него все же ощутима, так как он реально подгоняет код под особенности архитектуры ARMv7 и, если судить по личному опыту, не приносит никаких проблем в стабильность работы ни ядра, ни приложений.
  2. Расширение возможностей управления частотой и вольтажом центрального и графического процессоров, а также использование более эффективного для планшетов и смартфонов алгоритма управления энергосбережением. Используется во всех кастомных ядрах и ядрах большинства серьезных кастомных прошивок. Подробнее эту особенность мы рассмотрим в следующем разделе.
  3. Активация более эффективных внутренних механизмов, появившихся в последних ядрах Linux. Сюда можно отнести SLQB аллокатор памяти, который, по мнению некоторых разработчиков, может быть более эффективным, чем SLUB, однако никаких экспериментальных подтверждений этому нет. Такой аллокатор используется в ядре GLaDOS для Nexus 7.

    Приятная полезность Trickster MOD: возможность включить ADB по Wi-Fi

  4. Многие разработчики любят изменять стандартный алгоритм контроля насыщения TCP (TCP Congrestion control), который регулирует размер TCP-окна на основе множества параметров, чтобы сделать поток пакетов более ровным и достичь наивысшей скорости передачи данных. Начиная с версии 2.6.19, ядро Linux по умолчанию использует эффективный алгоритм CUBIC, который также обычно применяется и в стандартных ядрах Android. Проблема только в том, что CUBIC эффективен в проводных сетях с высокой скоростью передачи данных, тогда как для 3G- и Wi-Fi-сетей гораздо лучшим выбором будет алгоритм Westwood+. Именно этот алгоритм используется в ядрах Leankernel для Galaxy Nexus и faux123 для Nexus 7, а franko.Kernel для Galaxy S II и Galaxy Nexus так и вообще включает в себя весь набор доступных алгоритмов. Просмотреть их список и выбрать нужный можно с помощью следующих команд:Изменение алгоритма контроля насыщения TCPsysctl net.ipv4.tcp_available_congestion_control sysctl -w net.ipv4.tcp_congestion_control=westwood
В 3G-сетях алгоритм контроля перегрузки TCP Westwood+ всегда выигрывает

Еще один тип оптимизации: изменение стандартного планировщика ввода-вывода. Ситуация на этом поле еще более интересная, так как вместо того, чтобы разобраться в принципах работы планировщиков, некоторые сборщики ядер просто читают в Сети документы по I/O-планировщикам для Linux и делают выводы. Среди пользователей такой подход распространен еще более сильно. На самом деле почти все самые производительные и умные Linux-планировщики совершенно не подходят для Android: они рассчитаны на применение с механическими хранилищами данных, в которых скорость доступа к данным разнится в зависимости от положения головки. Планировщик использует разные схемы объединения запросов в зависимости от физического положения данных, поэтому запросы к данным, которые располагаются близко к текущему положению головки, будут получать больший приоритет. Это совершенно нелогично в случае с твердотельной памятью, которая гарантирует одинаковую скорость доступа ко всем ячейкам. Продвинутые планировщики принесут на смартфоне больше вреда, чем пользы, а лучший результат покажут самые топорные и примитивные. В Linux есть три подобных планировщика:

  • Noop (No operation) — так называемый не-планировщик. Простая FIFO очередь запросов, первый запрос будет обработан первым, второй вторым и так далее. Хорошо подходит для твердотельной памяти и позволяет справедливо распределить приоритеты приложений на доступ к накопителю. Дополнительный плюс: низкая нагрузка на процессор в силу ну очень простого принципа работы. Минус: никакого учета специфики работы девайса, из-за чего могут возникнуть провалы производительности.
  • SIO (Simple I/O) — аналог планировщика Deadline без учета близости секторов друг к другу, то есть разработанный специально для твердотельной памяти. Две главные изюминки: приоритет операций чтения над операциями записи и группировка операций по процессам с выделением каждому процессу кванта времени на выполнение операций. В смартфонах, где важна скорость работы текущего приложения и преобладание операций чтения над записью, показывает очень хорошую производительность. Доступен в Leankernel, ядре Matr1x для Nexus 4 и SiyahKernel.
  • ROW (READ Over WRITE) — планировщик, специально разработанный для мобильных устройств и добавленный в ядро всего несколько месяцев назад. Основная задача: первоочередная обработка запросов чтения, но справедливое распределение времени и для запросов записи. Считается лучшим на данный момент планировщиком для NAND-памяти, по умолчанию используется в Leankernel и Matr1x.

Стоит сказать, что почти все стандартные прошивки и половина кастомных до сих пор используют ядро со стандартным для Linux планировщиком CFQ, что, впрочем, не так уж и плохо, поскольку он умеет правильно работать с твердотельными накопителями. С другой стороны, он слишком сложен, создает бОльшую нагрузку на процессор (а значит, и батарею) и не учитывает специфику работы мобильной ОС. Еще один популярный выбор — это планировщик Deadline, который не хуже SIO, но избыточен. Посмотреть список доступных планировщиков можно с помощью такой команды:

# cat /sys/block/*/queue/scheduler

Для изменения применяется такая (где row — это имя планировщика):

# for i in /sys/block/*/queue/scheduler; do echo row > $1; done

Некоторые сборщики ядер применяют и другой вид оптимизации, связанный с вводом-выводом. Это отключение системного вызова fsync, применяемого для принудительного сброса изменившегося содержимого открытых файлов на диск. Существует мнение, что без fsync система будет реже обращаться к накопителю и таким образом удастся сохранить время процессора и заряд батареи. Довольно спорное утверждение: fsync в приложениях используется не так уж и часто и только для сохранения действительно важной информации, зато его отключение может привести к потере этой же информации в случае падения операционной системы или других проблем. Возможность отключить fsync доступна в ядрах franco.Kernel и GLaDOS, а для управления используется файл /sys/module/sync/parameters/fsync_enabled, в который следует записать 0 для отключения или 1 для включения. Повторюсь, что использовать эту возможность не рекомендуется.

 

 

Добавляем в ядро новые функции

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

В основном это различные драйверы и файловые системы. Например, некоторые ядра включают в себя поддержку модуля CIFS, позволяющего монтировать Windows-шары. Такой модуль есть в ядре Matr1x для Nexus S, faux123 для Nexus 7, SiyahKernel и GLaDOS. Сам по себе он бесполезен, но в маркете есть несколько приложений, позволяющих задействовать его возможности.

Еще одна полезность — это включение в ядро драйвера ntfs-3g (точнее, в пакет с ядром, сам драйвер работает как Linux-приложение), который необходим для монтирования флешек, отформатированных в файловую систему NTFS. Этот драйвер есть в ядрах faux123 и SiyahKernel. Обычно он задействуется автоматически, но если этого не происходит, можно воспользоваться приложением StickMount из маркета.

Многие ядра также имеют в своем составе поддержку так называемой технологии zram, которая позволяет зарезервировать небольшой объем оперативной памяти (обычно 10%) и использовать ее в качестве сжатой области подкачки. В результате происходит как бы расширение количества памяти, без каких-либо серьезных последствий для производительности. Доступно в Leankernel, включается с помощью Trickster MOD или командой zram enable.

Последние две интересные функции — это Fast USB charge и Sweep2wake. Первая — это не что иное, как принудительное включение режима «быстрой зарядки», даже если смартфон подключен к USB-порту компьютера. Режим быстрой зарядки доступен во всех более-менее новых смартфонах, однако в силу технических ограничений он не может быть включен одновременно с доступом к карте памяти. Функция Fast USB charge позволяет включить этот режим всегда, отключив при этом доступ к накопителю.

Sweep2wake — это новый способ будить устройство, изобретенный автором Breaked-kernel. Смысл его в том, чтобы включать смартфон, проведя пальцем по клавишам навигации, располагающимся ниже экрана, либо по самому экрану. Это действительно удобная функция, но в результате ее включения сенсор будет оставаться активным даже во время сна устройства, что может заметно разряжать батарею.

Разгоняем графический процессор

 

Разгон, вольтаж и энергосбережение

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

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

Всем этим можно управлять с помощью известной платной утилиты SetCPU или же бесплатной Trickster MOD. Рекомендации по управлению все те же, что и для настольных систем. Нижнюю частоту процессора лучше установить минимальной, но не ниже 200 МГц (чтобы избежать лагов), верхний порог повышается постепенно с тестированием стабильности работы, при падении которой рекомендуется немного поднять вольтаж для данной частоты. Каких-то рекомендаций по вольтажу нет, так как каждый процессор уникален и значения будут для всех разными.

Главный экран утилиты настройки ядер Trickster MOD

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

  • SmartAssV2 — переосмысление алгоритма Interactive с фокусом на сохранение батареи. Основное отличие в том, чтобы не дергать процессор на высокие частоты в случае кратковременных всплесков нагрузки, для которых хватит и низкой производительности процессора. По умолчанию используется в ядре Matr1x.
  • InteractiveX — тюнингованный алгоритм Interactive, главная особенность которого в залочке процессора на минимальной указанной пользователем частоте и обесточивании второго ядра процессора во время отключения экрана. По умолчанию используется в Leankernel.
  • LulzactiveV2 — по сути, изобретенный заново OnDemand. Когда нагрузка на процессор превышает указанную (по умолчанию 60%), алгоритм поднимает частоту на определенное число делений (по умолчанию 1), при понижении нагрузки — опускает. Особый интерес представляет тем, что позволяет самостоятельно задавать параметры работы, поэтому подходит для прожженных гиков.

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

Trickster MOD позволяет активировать почти все возможности кастомных ядер

 

Интерфейсы управления

Большинство популярных кастомных ядер включают в себя несколько механизмов тонкого управления различными параметрами драйверов, наиболее распространены из которых ColorControl, GammaControl, SoundControl и TempControl.

Первые два интерфейса доступны практически везде, включая ядра CyanogenMod, вторые два — в Leankernel и, может быть, в других. Так или иначе, всеми ими можно управлять с помощью Trickster MOD.

 

Ядра

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

  • Leankernel — ядро для Galaxy Nexus, Nexus 7 и Galaxy S III. Основной акцент при разработке делается на простоту и скорость работы. Алгоритм энергосбережения: InteractiveX V2, планировщик I/O: ROW, все перечисленные выше интерфейсы управления, поддержка Fast USB charge, Swap и zram, гибкие возможности разгона CPU и GPU. Одно из лучших ядер. Настраивается с помощью с помощью Trickster MOD.
  • Matr1x (http://goo.gl/FQLBI, goo.gl/ZcyvA) — ядро для Nexus S и Nexus 4. Простое и неперегруженное ядро. Поддержка разгона CPU и GPU, GammaControl, Fast USB Charge, Sweep2wake, планировщики I/O: SIO, ROW и FIOPS. Твики производительности. Настраивается с помощью Trickster MOD.
  • Bricked-Kernel (http://goo.gl/kd5F4, goo.gl/eZkAV) — простое и неперегруженное ядро для Nexus 4 и HTC One X. Оптимизации для Snapdragon S4 и NVIDIA Tegra 3, переработанный режим энергосбережения для Tegra 3, возможность разгона, алгоритм энергосбережения: тюнингованный OnDemand (доступен и Interactive).
  • SiyahKernel — ядро для Galaxy S II и S III. Гибкие возможности разгона, автоматическая калибровка батареи, улучшенный драйвер сенсорного экрана, алгоритмы энергосбережения: smartassV2 и lulzactiveV2, планировщики I/O: noop, deadline, CFQ, BFQV3r2 (по умолчанию), V(R), SIO. Драйверы CIFS и NTFS (с автомонтированием). Конфигурируется с помощью ExTweaks.
  • franco.Kernel — ядро для Nexus S, Galaxy Nexus, Nexus 4, Nexus 7, Nexus 10, Galaxy S III, Galaxy Note, Optimus One и One X.

Возможности ядра сильно разнятся от устройства к устройству, поэтому подробности придется смотреть на месте. Тем не менее, прошивая это ядро, ты получишь возможность разгона, тюнинга драйверов, отличную производительность, а также поддержку различных алгоритмов энергосбережения и планировщиков. По сути, ядро включает в себя почти все описанные в статье твики. Считается одним из лучших доступных ядер. Имеется приложение для автоматического обновления franko.Kernel Updater. Конфигурировать можно с помощью Trickster MOD.

 

Как установить?

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

 

Выводы

Как ты смог убедиться, кастомные ядра обладают множеством преимуществ перед ядрами, используемыми в стандартных или сторонних прошивках. А что еще более важно — необязательно знать все тонкости Android, чтобы их использовать, достаточно скачать и установить ZIP-архив.

 

Обзор особенностей ядра Андроида / Mail.ru Group corporate blog / Habr

“А я… карбюратор промываю!”
Анекдот

Введение

В детском садике мы с единомышленниками препарировали кузнечиков в надежде разобраться в их строении. В школе распаивали радиоприёмник “Россия”. В институте дошла очередь до автомобилей, гайки которых были многократно переставлены. Интересы поменялись, но желание “разбирать” иногда просыпается, и сегодня оно направлено на Андроид.

Сколько раз вас выручало наличие исходников Андроида? Меня — уже не счесть. Андроид — открытый проект, но, к сожалению, у нас есть возможность только читать; править код Андроида, не будучи сотрудником Google, практически невозможно. Погрустим над этим моментом и загрузим репозиторий. Как это сделать, отлично описано на официальном сайте.



Общая архитектура

Архитектуру Андроида можно схематично изобразить так:

Оригинальная схема не содержит информации об особенностях ядра и не акцентирует внимание на Binder-е и системных сервисах. А ведь Binder является “клеем”, связывающим все компоненты системы.

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

Ядро

Ядро — центральная часть любого дистрибутива, называемого “Линукс”. Несмотря на доступность “чистого” ядра, многие разработчики (Ubuntu, Fedora, SuSe и т.д.) добавляют к нему свои патчи перед включением в дистрибутив. Андроид идёт той же дорогой, только ценой потери прямой совместимости: на “чистом” ядре он не заведётся. В настоящее время есть намерения включить “андроидизмы” в основную версию ядра, в 2011 году Линус Торвальдс давал на этот процесс 4-5 лет. Успех уже достигнут в рамках включения механизма wakelocks в версии ядра 3.5.

Рассмотрим “андроидизмы” более подробно.

Wakelocks

История данного механизма эпична, потянет на сборник статей “Путь wakelock-ов в Линукс”: их обсуждение заняло порядка 2000 писем в рассылке LKML.

Настольные компьютеры и ноутбуки имеют устоявшуюся систему энергорежимов (у x86 процессоров таковых несколько): компьютер работает “на полных оборотах”, когда что-то делается, и уходит в энергоэффективный режим, когда система простаивает. Уход в “спящий” режим происходит либо после довольно длительного бездействия, либо вручную, например, при закрытии крышки ноутбука.

На телефонах требовался другой механизм: основное состояние системы — “спячка”, выход из него осуществляется только в случаях необходимости. Таким образом, система может уснуть, даже если какое-то приложение проявляет активность. В Андроиде был реализован механизм wakelock-ов: если приложение (или драйвер) выполняет что-то важное, что должно дойти до логического завершения, оно “захватывает” wakelock, предотвращая засыпание устройства.

Попытки портирования механизма wakelock-ов в ядро вызвали сопротивление многих разработчиков. Программисты Андроида решали конкретную проблему, решением которой стал определённый механизм. Условия задачи были весьма узки. Целевая платформа — ARM, поэтому использовались её особенности: ARM-процессоры изначально предполагают частую смену режимов работы “сна” и “бодрствования”, в отличие от x86. В Андроиде приложения общаются с системой управления питанием через PowerManager, а что делать клиентским Линукс-приложениям?

Разработчики Андроида даже не пытались найти общее решение “на будущее”, которое потом без проблем бы вливалось в основное ядро, не консультировались по этой проблеме с сообществом ядра Линукс. Можно ли их за это винить? Несмотря на все проблемы и обсуждения, как упоминалось выше, в ядре появилось API с идентичной функциональностью autosleep.

Программистам приложений под Андроид довольно редко приходится сталкиваться с wakelock-ами, так как платформа и драйверы обрабатывают возложенные на них обязательства с учётом “спящего” режима. Тем не менее, вмешаться в этот процесс поможет знакомый PowerManager. Кстати, автору приходит в голову только один сценарий: не дать телефону уснуть при запуске сервиса из BroadcastReceiver-а, что решается вспомогательным классом из Android Support Library WakefulBroadcastReceiver.

Low Memory Killer

В стандартном ядре Линукса есть Out of Memory Killer, который на основании параметра badness определяет убиваемый процесс:

badness_for_task = total_vm_for_task / (sqrt(cpu_time_in_seconds) *
sqrt(sqrt(cpu_time_in_minutes)))

Таким образом, чем больше процесс потребляет памяти и чем меньше живёт, тем меньше ему повезёт.

Все программисты, читавшие документацию или проходившие собеседования, знают, что, во-первых, процесс может быть “убит” и при наличии свободных ресурсов, во-вторых, кандидат на вытеснение выбирается по другим критериям: наличие “живых” Андроид-компонент, видимость пользователю и так далее.

Механизм довольно простой: каждому процессу присваивается приоритет от -17 до 16, при этом чем выше приоритет, тем выше вероятность убивания процесса, и, в зависимости от количества свободной памяти, выбирается приоритет, начиная с которого процессы будут завершены. Приоритеты описаны в ProcessList.java. Занимательно, что приоритет приложения домашнего экрана HOME_APP_ADJ довольно высок, а я-то думал: почему он постоянно перезапускается?

Массивы mOomAdj и mOomMinFreeLow/mOomMinFreeHigh как раз задают правила “когда что очистить”:

private final int[] mOomAdj = new int[] {FOREGROUND_APP_ADJ, VISIBLE_APP_ADJ, PERCEPTIBLE_APP_ADJ, BACKUP_APP_ADJ, CACHED_APP_MIN_ADJ, CACHED_APP_MAX_ADJ};

private final long[] mOomMinFreeHigh = new long[] {49152, 61440, 73728,86016, 98304, 122880};

Таким образом, приложение домашнего экрана вытесняется при остатке свободной памяти в 73728 КБ на телефоне с экраном 1280x800 и ОЗУ в 700 МБ.
ProcessList передаёт соответствующие значения в ядро, что можно видеть в его методе updateOomLevels.

Приоритеты процессам выставляет Activity Manager Service, один из многих системных сервисов, общаться с которым можно через Activity Manager.

Binder

Binder, наряду с другими решениями (Files, Sigmals, Sockets, Pipes, Semaphores, Shared Memory и т.д.), решает задачу межпроцессного взаимодействия. Ноги у данного решения растут из проекта OpenBinder, разработчики которого в своё время перешли в команду Андроида.

Bionic (реализация libc) не использует System V IPC, так как в андроидовском окружении стандартные средства приведут к утечкам ресурсов.

Особенности:

  1. Управление потоками (мы все помним, что сервис, поддерживающий AIDL, должен работать в многопоточном окружении). Максимальное число потоков — 15 (ProcessState.c, метод open_driver), поэтому не стоит блокировать Binder-потоки в большом количестве без лишней необходимости.
  2. Механизм информирования о смерти процесса, держащего объект Binder “Link to Death”. Например, через него Window Manager узнаёт о смерти приложения и удаляет связанные с ним окна. Также LocationManager при смерти всех своих слушателей перестаёт опрашивать GPS-приёмник. Lowmemorykiller доволен. 🙂
  3. 2 режима вызова: блокирующий и неблокирующий (oneway). В первом случае вызывающий поток блокируется и ждёт отработки метода в потоке процесса-обработчика. Программисты просто вызывают методы через точку, взаимодействие потоков берёт на себя платформа.
  4. Передача UID и PID для безопасности. Через них системные сервисы определяют, есть ли у вызывающего процесса права совершать запрашиваемые действия.
  5. Для Java-программистов — средства создания Proxy и Stub-ов для конвертирования вызовов Java-методов в транзакции Binder-а.

Рассмотрим как это работает на примере LocationManager-а.

Когда мы хотим получить информацию о GPS, происходит следующее:

  1. Наше приложение вызывает соответствующий метод у LocationManager-а.
  2. LocationManager делегирует вызов прокси-объекту, преобразующему Java-методы и объекты в Binder-транзакцию (прокси-объектом у LocationManager-а является mService).
  3. Транзакция посылается драйверу ядра, который перенаправляет её LocationManagerService-у, отнаследованному от .LocationManager.Stub.
  4. .LocationManager.Stub делает обратные действия: разворачивает транзакцию в вызов Java-метода.
  5. .LocationManagerService обрабатывает запрос (используя, например, GPS-драйвер).
  6. Stub-объект пакует ответ в транзакцию, и процесс идёт в обратном направлении.
  7. Драйвер пересылает ответ обратно.
  8. Прокси-объект распаковывает результат вызова метода в Java-объекты.

Как видим, за вызовом методов системных сервисов скрывается довольно большая логика.

Ashmem

Anonymous Shared Memory (ashmem) — механизм разделяемой памяти. В Линуксе, как правило, данный механизм реализован через POSIX SHM. Разработчики Андроида сочли его недостаточно защищённым, что могло сыграть на руку вредоносному ПО. Особенностями ashmem-а являются счётчик ссылок, при обнулении которого разделяемая память может быть освобождена (например, память освобождается при завершении всех процессов, использующих её), и сокращение разделяемого региона при нехватке памяти в системе.

Ярким примером использования ashmem-а является процесс zygote, в котором загружается стартовая версия Dalvik VM с загруженными базовыми классами и ресурсами, а остальные приложения просто ссылаются на эту память.

Binder имеет ограничение на размер транзакции в 1МБ (иначе будет выброшено исключение TransactionTooLargeException). Если нам надо передать из одного процесса в другой большой объём данных, можно как раз воспользоваться Ashmem-ом: создать MemoryFile и передать дескриптор файла в другой процесс.

Logger

Обычные дистрибутивы, как правило, используют две системы логирования: лог ядра, доступный через команду dmesg, и системные логи, располагающиеся обычно в директории /var/log.

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

На диаграмме представлена общая система логирования Андроида. Драйвер логирования предоставляет доступ к каждому буферу через /dev/log/*. Приложения имеют доступ к ним не напрямую, а через библиотеку liblog. С библиотекой liblog общаются классы Log, Slog и EventLog. Команда adb logcat показывает содержимое буфера “main”.

Заключение

В данной заметке мы кратко рассмотрели некоторые особенности Андроида как Линукс-системы. За скобками остались некоторые другие части (pmem, RAM console и т.д.), а также такие важные аспекты платформы в целом, как System Service, процесс запуска системы и другие. Если данная тема будет интересна, в следующих статьях мы рассмотрим и их.

Что такое ядро в телефоне? Сложное простым языком

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

ядро мобильных телефонов

История

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

зачем нужны ядра в телефоне

Необходимость многоядерности

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

что такое ядро в телефоне

Различия четырехъядерного и восьмиядерного процессоров

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

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

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

Так уж важно количество ядер в телефоне?

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

ниже четвертого андроида второе ядро не задействовано ну а на нем конечно хорошо когда есть такой подсос

1ного с головой хватает, остальные только батарею жрут

когда то на наручных часах была надпись 8 или 16 камней и эти камни тоже как то влияли на производительность часов. и всегда остряки говорили: "сколько у тебя в часах камней 8? не хватает ещё двух. на один положить и другим прихлопнуть":))) так и с ядрами в телефоне. есть пара камней в помощь:)))

Ну да, важно, наверное ((:: Чтоб позвонить одного ядра нав. уже не хватает, а чтоб написать СМСку - тут и двух мало будет (:

Это смотря что ты собираешься этим телефоном "производить" 🙂

В эпоху современных многоядерных смартфонов часто возникает воспрос «а не настало ли время сменить мой старый телефон (смартфон) на что-нибудь новенькое?», «не появилось ли на рынке что-нибудь, что сможет дать мне такие функции, доступ к которым я не имею сейчас?». Давайте разберёмся — так ли важно количество ядер в процессоре и для кого они могут пригодиться. Практически все современные смартфоны имеют в своём составе не одно ядро, но, по сути, в обычных пользовательских функциях они ничем не отличаются от их более старых собратьев с одним ядром. Сам принцип смартфона — это быстрое выполнение множества задач (ведь смартфон уже давно перестал быть просто «звонилкой»). Пользоваться браузером, смотреть фильмы, читать почту и, естественно, звонить можно и с помощью обычного одноядерного смартфона, который стоит сейчас не такие большие деньги. Получается, что количество ядер — это просто пиар-ход компаний и ядра не имеют никакой пользы для владельца? Нет — не совсем так. Многоядерные смартфоны создаются для тех, кто считает, что его смартфон должен выполнять функции портативной игровой консоли. Самые мощные смартфоны, на данный момент, имеют 4 ядра, что естественно говорит об их быстродействии в тяжелых играх и приложениях, но они, пока, ничем не уступают коммуникаторам с двумя ядрами. На данном этапе 4 ядра — это просто пиар-ход компаний, приложений которые реально напрягали бы все ядра выпустили не так уж и много (эти приложения можно, буквально, пересчитать на пальцах одной руки, но и они прекрасно работают на двух ядрах с помощью специальных оптимизаторов). Так что если вы задумались над сменой своего мобильного телефона на смартфон, но вас мало интересуют «тяжелые» игры — то не стоит гнаться за количеством ядер, а, вполне, можно приобрести именно тот девайс, который нравится больше по диагонали экрана, технологии изготовления экрана, операционной системе, набору дополнительных функций, фирмы-изготовителю, гарантийному обслуживанию, дизайну и прочим характеристикам.

Сколько процессорных ядер нужно современным смартфонам? — Рамблер/новости

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

Где же подвох? Дело в том, что современные 8-ядерные процессоры состоят из двух 4-ядерных чипов с разной тактовой частотой. Во время работы эти CPU распределяют задачи между друг другом. То есть, когда смартфону требуется выполнить сложную задачу — он перебрасывает ее на более быстрые ядра. Напомним: чем выше частота процессорных ядер — тем выше скорость выполнения задач.

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

Получается, что 8-ядерный процессор на деле никакой не 8-ядерный, а, скорее, двойной четырехъядерный. Но для рекламного названия такой оборот подходит не очень, поэтому на слуху у всех формулировка «восьмиядерный». В итоге разница в производительности между 4-ядерными и 8-ядерными процессорами может быть не заметна для обычного пользователя. Но тем, кто хочет получить смартфон с большей автономностью, лучше выбирать 8-ядерный аппарат. Стоит ли покупать смартфон с 2-ядерным процессором? Некоторые пользователи считают, что 2-ядерные процессоры с большой частотой намного лучше, чем 4-ядерные CPU с меньшей частотой. Отметим сразу, что количество ядер в мобильном процессоре сказывается на игровых свойствах, поэтому двухъядерный смартфон вряд ли подойдет для современных игр, а вот для веб-серфинга и общения в мессенджерах — это самое то. Однако, мы не рекомендуем покупать устаревшие модели телефонов со слабыми CPU. За эти же деньги вы с большой вероятностью сможете получить современный смартфон с четырьмя процессорными ядрами. Сколько ядер в процессоре вашего смартфона? Не знаю =___= 2 ядра 4 ядра 8 ядер Просмотреть результаты Загрузка … Читайте также: Как очистить оперативную память на Android-смартфоне?

4 действия на Android, которые можно и нужно автоматизировать

Какой кабель USB Type-C выбрать: тестируем 6 моделей на практике

Видео дня. Как выигранные миллионы доводят до пьянства и долгов

Читайте также

Покупаем смартфон: что означают аппаратные спецификации?

Покупаем смартфон: что означают аппаратные спецификации?

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

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

Срок службы батареи

Большинство производителей указывают на упаковке срок службы аккумулятора смартфона. Часто эта единица выражена в миллиамперах в час (мАч). Чем больше эта величина, тем лучше. В то же время Apple, например, не указывает мощность батареи своего iPhone 5, а говорит о том, что ее заряда хватит на 10 часов воспроизведения видеофайлов. Многим пользователям такой подход более понятен.

С каждым новым поколением смартфонов, производители стараются увеличить срок службы батареи. Например, мощность аккумулятора недавно анонсированного Nokia Lumia 920 составляет 2000 мАч. Такая же мощность и у батареи Droid Razr M от Motorola. Мощность новой батареи Samsung Galaxy Note 2 составит 3200 мАч. Однако это не означает, что устройство без подзарядки будет работать дольше, чем Lumia, поскольку Galaxy Note 2 потребляет больше энергии при работе.

Сегодня большинство хороших смартфонов обладают батареей мощностью около 2000 мАч и выше, что позволяет устройству работать без подзарядки не менее 10 часов. Лучшими по этому показателю пока остаются Motorola и Nokia, а сразу за ними следуют Apple и Samsung.

Количество ядер процессора

Не нужно быть вундеркиндом, чтобы понимать, что даже самая мощная батарея становится абсолютно бесполезной, если устройство не оснащено хорошим центральным и графическим процессором. Одноядерный процессор, работающий с частотой 1,2 ГГц (Гигагерц – это мера определяющая быстроту работы устройства), немного выиграет от наличия мощной батареи. Устройство с двухъядерным процессором будет работать гораздо быстрее.

Покупая смартфон, знайте, чем выше показатель ГГц, тем лучше и, конечно же, двухъядерное устройство лучше одноядерного. Большинство современных смартфонов сегодня поставляются с двухъядерным процессором, работающим с частотой в 1,5 ГГц. Также на рынке представлены и смартфоны с четырехъядерным процессором.

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

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

Разрешение экрана

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

Плотность разрешения экрана у iPhone 5 составляет 326 точек на дюйм. Точно такое же разрешение было и у iPhone 4S. Общее разрешение нового девайса составляет 1136х640. Крупнейший конкурент iPhone от Apple, Samsung Galaxy S III может похвастаться 306 точками на дюйм и общим разрешением в 1280x720. Технически у Galaxy больше пикселей, однако, и экран девайса тоже больше, а плотность на дюйм меньше, а это значит, картинка будет менее качественной.

Отправить ответ

avatar
  Подписаться  
Уведомление о