воскресенье, 11 августа 2013 г.

Концепция VIX API

Введение от себя

В прошлом посте было сделано небольшое введение по библиотеке VIX API, позволяющую писать автоскрипты для выполнения процессов на виртуальных машинах VMWare. В этой статье рассмотрим базовые концепции VIX API. Данная статья яляется переводом части официальной документации, оригинальная статья на английском доступна по ссылке www.vmware.com/support/developer/vix-api/vix112_reference

Объекты и Хендлеры

Подсчет ссылок на хендлеры

Хендлеры содержат ссылки, поэтому пред их использованием необходимо вызвать функцию «release».  Передовать в функцию Vix_ReleaseHandle() нужно валидный хендлер. Функция Vix_ReleaseHandle() освобождает любые типы хендлеров:
void Vix_ReleaseHandle(VixHandle handle);
Пример, показывающий как открывать и освобождать хендлер:
VixHandle handle1;
handle1 = MyOpenVMWrapper(...various parameters...);
// handle1 is assigned a unique integer value.

// Now you can perform various operations on handle1.

Vix_ReleaseHandle(handle1);
handle1 = VIX_INVALID_HANDLE;
// handle1 has been released and should no longer be used.

Независимость хендлеров

Как правило, в программе, используется несколько активных хендлеров, каждый из которых может, представляет разные объекты. Хендлеры могут создаваться и уничтожаться независимо. Пример:
VixHandle handle1;
VixHandle handle2;

handle1 = MyOpenVMWrapper(... parameters for virtual machine 1...);
// handle1 is assigned a unique value - for example, 11.

handle2 = MyOpenVMWrapper(... parameters for virtual machine 2...);
// handle2 is assigned a unique value - for example, 12.

// Now you can perform various operations on handle1 or handle2.

Vix_ReleaseHandle(handle1);
handle1 = VIX_INVALID_HANDLE;
// handle1 has been released and should no longer be used.

// You can still perform operations on handle 2.

Vix_ReleaseHandle(handle2);
handle2 = VIX_INVALID_HANDLE;
// handle2 has been released and should no longer be used.

Удаление хендлеров

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

Открытие хендлеров

Если дважды открыть хендлер для некоторой виртуальной машины, без освобождения первого хендлера, открывающая функция вернет тот же хендлер оба раза. При этом  счетчик ссылок хендлера увеличивается два раза, поэтому нужно вызвать функцию освобождения дважды.
VixHandle handle1;
VixHandle handle2;

handle1 = MyOpenVMWrapper(...various parameters...);
// handle1 is assigned a unique value.
// handle1 has reference count 1.

// Now you can perform various operations on handle1.

handle2 = MyOpenVMWrapper(...the SAME parameters identifying the SAME virtual machine...);
// handle2 has the same value as handle1.
// handle1 has reference count 2.
ASSERT(handle1 == handle2);

Vix_ReleaseHandle(handle1);
// handle1 has reference count 1.

// The handle still can be safely used here.

Vix_ReleaseHandle(handle1);
handle1 = handle2 = VIX_INVALID_HANDLE;
// The handle has been released and should no longer be used.

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

Внутренние ссылки хендлера

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

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


Комментариев нет:

Отправить комментарий