- •Билет №1
- •1.Составные части и свойства распределенной системы
- •2. Удаленный сервер
- •Билет №2
- •1. Параллелизм в распределенной системе
- •2. Реализация локального сервера
- •Билет №3
- •1. Закон Амдала
- •2. Заместитель/заглушка. Компилятор midl
- •Билет №4
- •1. Ускорение решения задачи в распределенной параллельной системе
- •2. Язык idl
- •Билет №5
- •1. Последовательные операции. Параллельные операции. Число процессоров.
- •2. Назначение данных на узлы распределенной системы. Модель назначения объектов на узлы. Сокращение трафика в каналах передачи данных.
- •Билет №6
- •1. Планирование параллельной распределенной обработки данных.
- •2. Модель назначения объектов на узлы. Частоты запросов к объектам. Длины объектов. Производительность узлов. Производительность каналов передачи данных.
- •Билет №7
- •1. Параллелизм в пространстве и во времени (конвейерный параллелизм)
- •2. Среднее время обработки одного запроса. Минимизация времени
- •Многошаговое планирование на базе asap
- •1 31 6 Типы операций:
- •Билет №8
- •1. Синхронное и асинхронное планирование.
- •2. Время обработки всех запросов к объектам. Загрузка узлов. Загрузка каналов передачи данных.
- •Билет №9
- •1. Планирование при ограничениях на ресурсы, время, достижимость
- •2. Локальный вызов процедуры. Маршалинг Локальный вызов процедуры
- •Маршалинг
- •Билет №10
- •Стратегия планирования asap Алгоритм планирования asap (как можно раньше)
- •2. Серверы в exe.
- •Билет №11
- •1. Стратегия планирования alap
- •2. Включение и агрегирование компонентов
- •Стратегия планирования «Группировка доминирующей последовательности» (Dominant Sequence Clustering - dsc)
- •Билет №12
- •1. Стратегия спискового планирования
- •Регистрация компонента в реестре
- •Билет №13
- •1. Многошаговое планирование
- •2. Функции CoGetClassObject и DllGetClassObject и их использование
- •Билет №14
- •1. Цепочечное планирование
- •2. Интерфейс iClassFactory
- •AБилет №15
- •1. Граф предшествования и граф распараллеленности операций
- •2. Фабрика класса
- •Билет №16
- •1. Свертывание графа распараллеленности операций
- •2. Использование динамической библиотеки. Экспорт функций из библиотеки. Загрузка и выгрузка dll
- •Билет №17
- •1. Синтез последовательно параллельного плана
- •2. Динамическая компоновка. Библиотеки dll. Создание динамической библиотеки
- •Билет №18
- •1. Модель разнородной распределенной системы
- •2. Управление временем жизни компонента. Подсчет ссылок
- •Билет №19
- •1. Сведение планирования к задаче целочисленного линейного программирования
- •2. Запрос интерфейса. Интерфейс iUnknown. Реализация интерфейса
- •1 31 6 Типы операций:
- •Билет №20
- •1. Задача минимизации ресурсов при заданном времени реализации плана
- •2. Таблица виртуальных функций
- •Билет №21
- •1. Целочисленное линейное программирование. Пример. Целевая функция. Система ограничений
- •Многошаговое планирование на базе asap
- •Билет №22
- •1. Планирование выполнения графа задач на узлах распределенной системы с учетом обмена данными
- •2. Теория интерфейсов
- •Неизменность интерфейсов
- •Билет №23
- •1. Граф задач. Назначение задач на процессоры. Обмен данными. План решения задач на каждом процессоре. Планирование выполнения графа задач на узлах распределенной системы с учетом обмена данными
- •Планирование графа задач
- •2. Языки и инструменты программирования распределенной обработки данных.
- •1 31 6 Типы операций:
- •Билет №24
- •1. Стратегии планирования на графе задач. Планирование графа задач
- •2. Процессы и потоки. Многопоточные приложения. Модель многопоточных приложений
- •Билет №25
- •1. Стратегия планирования «Наиболее ранняя задача первая» (Earliest Task First - etf). Стратегия планирования «Наиболее ранняя задача первая» (Earliest Task First - etf)
- •2 . Инкапсуляция. Полиморфизм. Виртуальные функции. Чисто абстрактные базовые классы. Множественное наследование. Инкапсуляция.
- •Полиморфизм и виртуальные функции
- •Чисто абстрактные базовые классы
- •Множественное наследование классов. Компоненты
- •1 31 6 Типы операций:
- •Билет №26
- •1. Стратегия планирования «Зануление дуг» (Edge Zeroing - ez). Стратегия планирования «Зануление дуг» (Edge Zeroing - ez)
- •2. Преимущество использования компонентов. Требования к компонентам. Преимущества использования компонентов
- •Требования к компонентам
- •Билет №27
- •2. Модель компонентных объектов com.
- •1 31 6 Типы операций:
- •Билет №28
- •1. Стратегия планирования «Управление мобильностью» (Mobility Directed - md). Стратегия планирования «Управление мобильностью» (Mobility Directed - md)
- •2. Интерфейс передачи сообщений (Message Passing Interface - mpi). Интерфейс передачи сообщений mpi
- •Постановка проблемы
- •Билет №29
- •1. Граф взаимодействия задач. Граф разнородной сети. Планирование решения задач в разнородной распределенной системе
- •2. Интерфейс OpenMp. Интерфейс OpenMp
- •Билет №30
- •Постановка проблемы
- •Алгоритм а* оптимального назначения задач на процессоры
- •2. Технологический стандарт написания распределённых приложений corba. Технологический стандарт corba
2. Использование динамической библиотеки. Экспорт функций из библиотеки. Загрузка и выгрузка dll
Динамически подсоединяемая библиотека (DLL - Dynamic-Link Library). DLL для компонента — сервер, или средство доставки. Компонент — это набор интерфейсов, которые реализованы в DLL. В свою очередь, интерфейс DLL — это набор функций, экспортируемых ею.
Загрузка DLL в адресное пространство клиента. Клиент может загрузить DLL в свое адресное пространство и получить адрес CreateInstance с помощью функций LoadLibrary и GetProcAddress. Имея этот адрес, клиент создает компонент и получает указатель на его IUnknown.
Паспорт функции LoadLibrary:
HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName
);
где HINSTANCE - описатель загруженной DLL; lpLibFileName - Имя файла DLL
Этот метод тесно привязывает клиент к реализации компонента, т.к. он должен знать имя DLL, в которой реализован компонент. Это не позволяет перемещать компонент из одной DLL в другую или из одной директории в другую.
Паспорт функции GetProcAddress:
FARPROC GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName
}
где hModule – описатель модуля DLL, lpProcName - имя экспортируемой из DLL функции; возвращаемое значение – адрес экспортируемой функции.
Пример использования функций:
typedef IUnknown* (*FUNPTR)();
IUnknown* CallCreateInstance(char* name) {
HINSTANCE hComponent = LoadLibrary(name);
if (hComponent == NULL) return NULL;
FUNPTR CreateInstance =
(FUNPTR)::GetProcAddress(hComponent, "CreateInstance");
return CreateInstance();
}
Загрузка DLL посредством библиотеки COM.
Все клиенты и компоненты СОМ выполняют много типовых операций. Эти операции стандартизируются библиотекой функций СОМ.
Для инициализации библиотеки процесс должен вызвать функцию CoInitialize, прежде чем использовать ее функции. Когда процесс завершает работу с библиотекой СОМ, он должен вызвать CoUninitialize. Прототипы этих функций:
HRESULT CoInitialize(void* reserved);
void CoUninitialize();
Параметр reserved должно иметь значение NULL. Библиотека СОМ требует инициализации только один раз для каждого процесса. При завершении работы с библиотекой вызывается функция CoUninitialize. СОМ инициализируется в EXE, а не в DLL, следовательно, она инициализируется клиентом, но не сервером.
Для создания компонентов в библиотеке СОМ служит функция CoCreateInstance, которая, получив CLSID, создает экземпляр соответствующего компонента и возвращает интерфейс этого экземпляра. Для идентификации компонента функция CoCreateInstance использует не строку с именем файла библиотеки DLL, а идентификатор класса GUID, описываемый посредством типа CLSID, отличающегося от типа идентификатора интерфейса IID. Объявление CoCreateInstance:
HRESULT __stdcall CoCreateInstance(
const CLSID& clsid,IUnknown* pUnknownOuter,
DWORD dwClsContext,const IID& iid,void** ppv);
где clsid – идентификатор компонента; pUnknownOuter – указатель на внешний компонент (используется для агрегирования компонентов); dwClsContext - контекст исполнения компонента (значение CLSCTX_INPROC_SERVER указывает на то, что клиент принимает только компоненты, реализованные в DLL и исполняются в одном процессе); iid – идентификатор запрашиваемого интерфейса; ppv - указатель на запрашиваемый интерфейс.
Функция CoCreateInstance создает и использует фабрику класса для экспортирования запрашиваемого компонента из библиотеки DLL. Фабрика класса — это компонент, единственной задачей которого является создание других компонентов. Экспортирование компонента и управление подключением библиотеки выполняется посредством функций DllGetClassObject и DllCanUnloadNow. Соответствующий .def файл, используемый для создания динамической библиотеки компонента имеет вид:
LIBRARY MyServer.dll
EXPORTS
DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
Определение функций DllGetClassObject и DllCanUnloadNow выполняется в процессе написания кода компонента и соответствующей фабрики класса.
Задача - Дать пример объявления компонента на языке С++ в модели COM
interface IType_1: IUnknown {
virtual void __stdcall operT1(int, int, int*) = 0;
};
interface IType_2: IUnknown {
virtual void __stdcall operT2(int, int, int*) = 0;
};
class COMP: public IType_1, public IType_2 {
public: // IUnknown
virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv);
virtual ULONG __stdcall AddRef();
virtual ULONG __stdcall Release();
COMP();
~COMP();
//IType_1
virtual void __stdcall operT1(int a, int b, int* c);
//IType_2
virtual void __stdcall operT2(int a, int b, int* c);
private:
long m_cRef;//счетчик ссылок
};
