Категория > Новости > Android: архитектура Fuchsia и тяжеловесные вычисления в UI-потоке - «Новости»
Android: архитектура Fuchsia и тяжеловесные вычисления в UI-потоке - «Новости»26-06-2020, 12:38. Автор: Jeff |
В этом выпуске: погружение в архитектуру и безопасность ОС Fuchsia, несколько способов использовать Kotlin в качестве скриптового языка, неожиданный способ запустить тяжеловесные вычисления в основном потоке приложения, читшит по коллекциям Kotlin, советы по работе с отладчиком, способ быстрого заполнения полей data-классов и способ хранения логов на удаленном сервере без необходимости поднимать сервер. А также свежая подборка библиотек для разработчиков.ПочитатьFuchsia: архитектура и безопасностьPlaying Around With The Fuchsia Operating System — исследование безопасности операционной системы Fuchsia, которая, по слухам, должна прийти на смену Android. Исследователи нашли в ОС несколько стандартных багов, которые тем не менее не дают каких-либо полномочий в системе в силу самой архитектуры ОС. И именно описание архитектуры — наиболее интересная часть статьи. Fuchsia — это микроядерная операционная система на базе ядра Zircon, написанного на языке C++. Все остальные компоненты ОС, обычно реализованные внутри ядра, вынесены в сервисы пространства пользователя и общаются между собой с помощью независимого от языка механизма IPC. Часть этих компонентов, как и само ядро, реализована на языке C++ (драйверы USB, например), другая часть — на других языках. Например, TCP/IP-стек написан на языке Rust, также поддерживается Go. ![]() В отличие от других микроядерных ОС, драйверы Fuchsia могут быть объединены в один процесс, именуемый devhost. На рисунке ниже драйверы AHCI, SATA, MinFS и BlobFS объединены в Devhost Proccess 3. ![]() Такая архитектура позволяет сократить количество переключений контекста и сделать ОС более эффективной. С другой стороны, надежность компонентов снижается, но не катастрофически — devhost-процессы обычно объединяют в себе драйверы одного стека (в случае с Devhost Process 3 это драйверы для работы с внутренним накопителем ПК), поэтому уязвимость в одном процессе Devhost приведет к уязвимости в драйверах одного стека и не заденет другие (например, драйверы USB). Fuchsia активно использует модуль IOMMU для защиты памяти устройств. Каждый процесс Devhost имеет право обращаться только к своим адресам ввода-вывода. Как и Unix, Fuchsia следует концепции «все есть файл», когда файлы могут представлять собой как данные на диске, так и устройства или каналы коммуникации. Однако, в отличие от Unix, Fuchsia не открывает каждому процессу доступ ко всей файловой иерархии, а создает для него собственное пространство имен (так же как это делает Plan 9, неудавшаяся преемница Unix). Так реализуется идея песочницы, когда каждое приложение имеет доступ только к ограниченному набору ресурсов. На самом низком уровне (уровне микроядра Zircon) все файлы представлены хендлами (handle) — это нечто вроде токена для доступа к файловому объекту. Каждый хендл должен иметь свой вид (kind) и права, которые контролируют доступ к системным вызовам. В репозитории Fuchsia все компоненты имеют unit-тесты и фуззеры. Код собирается с активированными технологиями защиты: ASLR, DEP, SafeStack, ShadowCallStack и AutoVarInit. Для кода на C++ дополнительно повышают надежность. Например, часто используется версия оператора [] с проверками границ массива. РазработчикуKotlin в качестве скриптового языкаMay 2020: The state of Kotlin Scripting — статья об использовании Kotlin в качестве скриптового языка. Существует два способа запустить код Kotlin как скрипт: kscript, успевший стать стандартным методом, и запуск с помощью самого компилятора Kotlin (который тоже может работать в качестве интерпретатора). В первом случае скрипт для macOS/Linux будет выглядеть так:
кеширование байт-кода для ускорения последующих запусков того же скрипта;
Очередь исполнения основного потока приложения при использовании yield
Перейти обратно к новости |