<<
>>

Запуск процессов

Чтобы запустить новый процесс, диспетчер активностей должен быть связан с процессом zygote. При первом запуске диспетчера активностей он создает выделенный сокет с zygote, через который посылает команду, когда нуждается в запуске нового процесса.
Команда прежде всего дает описание создаваемой песочницы: UID, под которым должен запуститься новый процесс, и любые другие ограничения, связанные с мерами безопасности, которые будут применяться. Таким образом, zygote должен запускаться с root-правами: при разветвлении он выполняет соответствующую настройку для UID, с которым процесс будет запущен, и в конце сбрасывает root-права и изменяет процесс, присваивая ему нужный UID.

Вспомним, что в предыдущем рассмотрении Android-приложений говорилось, что диспетчер активностей обслуживает динамическую информацию о выполнении активностей (см. рис. 10.32), служб (см. рис. 10.37), рассылок (для получателей, как на рис. 10.39) и поставщиков контента (см. рис. 10.40). Он использует эту информацию для контроля над созданием прикладных процессов и управления ими.

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

Порядок запуска активности в новом процессе показан на рис. 10.45. А вот как выглядят подробности каждого этапа:

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

2. Диспетчер активностей просит, чтобы диспетчер пакетов провел разрешение намерения до явного компонента.

3. Диспетчер активностей определяет, что прикладной процесс еще не запущен, а затем просит zygote создать новый процесс с соответствующим UID.

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

5. Новый процесс, представляющий собой клон zygote с полностью установленной и работающей Java-средой, осуществляет обратный вызов диспетчера активностей с вопросом: «Для чего я нужен?».

6. Диспетчер активностей возвращает ему полную информацию о запускаемом в нем приложении, например о том, где найти его код.

7. Новый процесс загружает код запускаемого приложения.

8. Диспетчер активностей отправляет новому процессу любую ожидающую операцию, в данном случае «Запустить активность X».

9. Новый процесс получает команду на запуск активности, создает экземпляр соответствующего Java-класса и выполняет его.

Рис. 10.45. Этапы запуска нового прикладного процесса

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

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Запуск процессов:

  1. Первый запуск программы
  2. Второй этап - ЗАПУСК НА ПОДСОЗНАНИЕ.
  3. Очерк 2: Берт «Процесс — вот мое достояние. Именно процесс создает успех»
  4. Задания, мешающие когнитивному процессу (ЗМКП), и задания, помогающие когнитивному процессу (ЗПКП)
  5. ПРОЦЕСС НЕРВНЫЙ
  6. ПРОЦЕСС НАДСОЗНАТЕЛЬНЫЙ
  7. Психические процессы
  8. ПРОЦЕСС НЕРВНЫЙ: ИНДУКЦИЯ
  9. ПРОЦЕСС ПСИХИЧЕСКИЙ
  10. ПРОЦЕСС КУЛЬТУРНЫЙ
  11. Обратный процесс
  12. Ю.М. Плотински. Модели социальных процессо, 2001
  13. ПРОЦЕСС ТЕЛЕПАТИЧЕСКИЙ
  14. ПРОЦЕСС ДУШЕВНЫЙ БЕССОЗНАТЕЛЬНЫЙ
  15. Процесс
  16. Творческий процесс на телевидении
  17. 3.1. Содержание процесса