<<
>>

API пользовательского пространства Binder

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

1. IBinder — класса абстрактного интерфейса для объекта Binder. Его основным методом является transact. Этот метод отправляет объекту транзакцию. Получателем транзакции может быть объект, находящийся либо в локальном процессе, либо в каком-нибудь другом процессе. В том случае, если это другой процесс, транзакция, как уже говорилось, будет ему доставлена через модуль ядра Binder;.

2. Binder — класса, представляющего конкретный объект Binder. Реализация подкласса Binder предоставляет вам класс, который может быть вызван другими процессами. Его основным методом является onTransact, получающий присланную ему транзакцию.

Главное предназначение подкласса Binder заключается в просмотре получаемых здесь данных транзакции и выполнении соответствующей операции;

3. Parcel — класса-контейнера для считываемых и записываемых данных, находящихся в транзакции Binder. В нем имеются методы для чтения и записи типизированных данных (целых чисел, строк, массивов), но его самой важной функцией является возможность считывать и записывать ссылки на любой объект IBinder, используя соответствующую структуру данных для ядра, чтобы эти ссылки можно было распознавать и перемещать между процессами.

На рис. 10.29 показана совместная работа этих классов, вносящая изменения в схему (см. рис. 10.27), которая ранее рассматривалась с используемыми классами пользовательского пространства. Здесь показано, что Binderlb и Binder2a являются экземплярами конкретных подклассов Binder. Для обмена данными между процессами теперь процесс создает Parcel, содержащий нужные данные, и отправляет его через еще один класс, который мы пока не рассматривали, BinderProxy.

Этот класс создается при появлении в процессе нового описателя и, таким образом, предоставляет реализацию IBinder, чей метод transact создает соответствующую транзакцию для вызова и отправки ее ядру.

Таким образом, рассмотренная ранее имеющаяся в ядре структура транзакций в API- функциях пользовательского пространства раздваивается: цель представляется с помощью BinderProxy, а данные содержатся в Parcel. Как мы уже видели, транзакция проходит через ядро и после появления в пользовательском пространстве в процессе-получателе ее цель используется для определения получающего объекта Binder, а Parcel создается из данных транзакции и доставляется принадлежащим этому объекту методом onTransact.

Теперь эти три класса существенно упрощают написание IPC-кода:

1. Нужно создать подкласс из Binder.

2. Нужно реализовать метод onTransact для декодирования и выполнения входящих вызовов.

3. Нужно реализовать соответствующий код для создания Parcel, который может быть передан методу transact этого объекта.

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

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

Еще по теме API пользовательского пространства Binder:

  1. Два пространства
  2. ПРОСТРАНСТВО: ВОСПРИЯТИЕ
  3. ПРОСТРАНСТВО: ВОСПРИЯТИЕ: НАРУШЕНИЕ
  4. ПРОСТРАНСТВО СЕМАНТИЧЕСКОЕ СУБЪЕКТИВНОЕ
  5. Часть I Пространство движения
  6. 5.10.1. Создание пространства для ответа
  7. ФАЗИРОВАНИЕ ПРОСТРАНСТВА
  8. Утренняя медитация от возлюбленной Сарасвати. Исцеление пространства.
  9. ЛЕКЦИЯ 11 2.2.3. Структура городского пространства
  10. 5.3. КАК ОСВОБОДИТЬ ПРОСТРАНСТВО ДЛЯ СЮРПРИЗА
  11. Структурирование консультативного пространства
  12. Упражнение для восприятия физических пространств
  13. 3.11.12. Метод пространства - времени