- •Билет №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
Билет №18
1. Модель разнородной распределенной системы
Реальные распределенные системы являются типично разнородными. Разнородность системы обусловлена двумя главными причинами:
разнородностью процессоров, находящихся в узлах;
разнородностью каналов передачи данных, соединяющих пары процессоров.
Разнородность процессоров и каналов передачи данных проявляется в вариациях значений их главных параметров в широких диапазонах. Так тактовые частоты процессоров и скорости в каналах передачи данных могут изменяться в разы.
Как следствие, предположение о константном времени решения задач и константном времени передачи данных от одной задачи к другой не совсем соответствует свойствам разнородной системы.
2. Управление временем жизни компонента. Подсчет ссылок
Клиент не должен управлять временем жизни компонента напрямую. По мере того, как программа усложняется, становится все труднее определить, когда компонент больше не нужен. Поэтому клиент сообщает компоненту об окончании работы с конкретным интерфейсом, а компонент сам отслеживает, когда клиент перестает пользоваться всеми интерфейсами. Для реализации этой стратегии предназначены функции AddRef и Release интерфейса IUnknown.
AddRef и Release реализуют технику управления памятью, известную как подсчет ссылок (reference counting). Подсчет ссылок — простой и быстрый способ, позволяющий компонентам самим удалять себя. Компонент СОМ поддерживает счетчик ссылок. Когда клиент получает некоторый интерфейс, значение счетчика инкрементируется. Когда клиент заканчивает работу с интерфейсом, значение декрементируется. Когда оно доходит до нуля, компонент удаляет себя из памяти. Клиент также увеличивает счетчик ссылок, когда создает новую ссылку на уже имеющийся у него интерфейс. Увеличивается счетчик вызовом AddRef, уменьшается — вызовом Release. Для подсчета ссылок необходимо использовать три правила:
1. Вызывайте AddRef перед возвратом. Функции, возвращающие интерфейсы, перед возвратом должны вызывать AddRef. Это относится к функциям QueryInterface и CreateInstance. Не нужно вызывать AddRef в своей программе после получения указателя на интерфейс.
2. По завершении работы вызывайте Release. После завершения работы с интерфейсом следует вызывать Release.
3. Вызывайте AddRef после присваивания одного указателя на интерфейс другому.
Клиент должен работать с каждым интерфейсом так, как если бы у того был отдельный счетчик ссылок.
Пример компонента, косвенно наследующего интерфейс IUnknown:
class COMP : public IType_1, public IType_2 {
virtual HRESULT __stdcall QueryInterface(const IID& iid, void** ppv);
virtual ULONG __stdcall AddRef();
virtual ULONG __stdcall Release();
virtual void __stdcall operT1(int a, int b, int* pr) { *pr = a + b; }
virtual void __stdcall operT2(int c, int d, int* ps) { *ps = c * d; }
public:
COMP() : m_cRef(0) {}
~COMP() { cout<< s_conv("Самоликвидация компонента при m_cRef = 0")<<endl; }
private:
long m_cRef;
};
Реализация функции AddRef:
ULONG __stdcall COMP::AddRef() {
return InterlockedIncrement(&m_cRef);
}
Реализация функции Release:
ULONG __stdcall COMP::Release() {
if (InterlockedDecrement(&m_cRef) == 0) {
delete this;
return 0;
}
return m_cRef;
}
Функции AddRef и Release реализуются при помощи функци1 InterlockedIncrement и InterlockedDecremen,t гарантирующих изменение в каждый момент времени значения переменной m_cRef только одним потоком управления.
Задача - Дать пример определения компонента на языке С++ в модели COM
//объявление компонента
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_1virtual 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;//счетчик ссылок
};//определение компонентаCOMP::COMP():m_cRef(1) {
InterlockedIncrement(&g_cComponents);}COMP::~COMP() {
InterlockedDecrement(&g_cComponents); }
void COMP::operT1(int a, int b, int* c) { *c = a + b;
}void COMP::operT2(int a, int b, int* c) {
*c = a * b;
}
HRESULT __stdcall COMP::QueryInterface(const IID& iid, void** ppv) {
if (iid == IID_IUnknown) {
*ppv = static_cast<IType_1*>(this);
}
else if (iid == IID_IType_1) {
*ppv = static_cast<IType_1*>(this);
}
else if (iid == IID_IType_2) {
*ppv = static_cast<IType_2*>(this);
} else {
*ppv = NULL;
return E_NOINTERFACE;
}
reinterpret_cast<IUnknown*>(*ppv)->AddRef();
return S_OK;
}
ULONG __stdcall COMP::AddRef() {
return InterlockedIncrement(&m_cRef);
}
ULONG __stdcall COMP::Release() {
if (InterlockedDecrement(&m_cRef) == 0)
{
delete this;
return 0;
}
return m_cRef;
}
