- •Билет №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. Процессы и потоки. Многопоточные приложения. Модель многопоточных приложений
Понятие многозадачности. Операционная система является многозадачной (multitasking), если она способна одновременно выполнять несколько программ:
один микропроцессор может последовательно выполнять инструкции только одной программы
операционная система настолько оперативно реагирует на потребности разных программы, что создается впечатление одновременности их совместной работы.
Многозадачность может быть кооперативной и вытесняющей. При кооперативной многозадачности (cooperative multitasking) операционная система не занимается решением проблемы распределения процессорного времени. Распределяют его сами программы. Активная программа самостоятельно решает, отдавать ли процессор другой программе.
При вытесняющей многозадачности (preemptive multitasking) распределением процессорного времени занимается операционная система. Она выделяет каждой задаче фиксированный квант времени процессора. По истечении этого кванта времени система вновь получает управление, чтобы выбрать другую задачу для ее активизации. Если задача обращается к операционной системе до истечения ее кванта, это также служит причиной переключения задач. В операционных системах, начиная с Windows 95, Windows NT 3.5 реализована вытесняющая многозадачность.
Многопоточность (multithreading) ОС означает то, что процессы могут разделяться на несколько частей - потоков, самостоятельно претендующих на процессорное время. Это обеспечивает одновременное выполнение программой нескольких операций.
Процессом (process) называется экземпляр программы, загруженной в память. Процесс создает не менее одного потока (thread). Первый поток называется главным (основным) потоком приложения, создаваемым системой автоматически. Он порождает другие потоки, те в свою очередь третьи и т. д.
Потоки выполняются на процессорах или ядрах процессоров. Так как потоков обычно больше, чем процессоров, часть потоков выполняются не параллельно, а последовательно по очереди. Система выделяет потокам кванты времени по принципу карусели.
В зависимости от ситуации потоки могут находиться в трех состояниях: активном, готовности/ожидания, блокировки. Перевод потока из состояния блокировки в состояние готовности выполняется по событиям.
В первичном потоке приложения вызывается входная функция main или ее аналоги. В MFC основной поток приложения создается с помощью класса CWinApp, производного от CWinThread.
Другие потоки. Пространство кода и данных процесса доступно всем его потокам. Два потока могут обращаться к одним глобальным переменным. У каждого потока есть свой стек. Потоки в Windows бывают двух видов:
рабочие потоки (worker threads)
потоки пользовательского интерфейса (user-interface threads).
У потока пользовательского интерфейса могут быть окна и свой цикл выборки сообщений.
Многопоточность в WIN32 API. В Win32 API поток создается функцией:
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
Поток завершает выполнение при выходе из функции потока посредством оператора return. Функция WaitForSingleObject ждет, пока конкретный поток закончит свою работу.
Выполнение потока можно приостановить вызовом функции:
DWORD SuspendThread(HANDLE hThread);
Поток возобновляется вызовом функции:
DWORD ResumeThread(HANDLE hThread);
Приоритеты потоков. Каждому потоку присваивается приоритет от 0 до 31. Windows поддерживает следующие семь классов приоритета потоков: CRITICAL, HIGHEST, ABOVE_NORMAL, NORMAL, BELOW_NORMAL, LOWEST, IDLE. Для установки и получения приоритета служат функции SetThreadPriority и GetThreadPriority.
Потоки взаимодействуют друг с другом в двух основных случаях:
совместно используя разделяемый ресурс (чтобы не разрушить его);
при уведомлении других потоков о завершении каких-либо операций.
Используются следующие средства синхронизации потоков.
Критические секции. Здесь синхронизация потоков связана с атомарным доступом (atomic access) — монопольным захватом ресурса некоторым потоком в случае, если доступ к общим ресурсам (файлу, глобальной переменной и др.) происходит из разных потоков одновременно. Критическая секция (critical section) — участок кода, выполняющий монопольный доступ к общим данным, - позволяет сделать так, чтобы одновременно только один поток получал доступ к ресурсу.
Семафоры реализуются с помощью счетчика, значение которого уменьшается, когда задаче выделяется семафор, и увеличивается, когда задача освобождает семафор. Семафор позволяет более чем одному процессу или потоку обращаться к единому ресурсу.
Мьютексы. Мьютекс (mutual exclusion – mutex) – взаимно исключающий семафор. Мьютексы гарантируют потокам взаимоисключающий доступ к общему ресурсу. Это разновидность семафора, содержащего счетчик числа пользователей. Идентификатор потока определяет, какой поток захватил мьютекс, а счетчик — сколько раз. Как правило, мьютексы защищают блок памяти, к которому обращается множество потоков.
Задача - Дать пример определения функцию QueryInterface.
STDMETHODIMP FileClassFactory::QueryInterface(REFIID riid,void** pIFace)
{
if ( riid == IID_IUnknown )
{
*pIFace = (IUnknown*)this;
}
else if ( riid == IID_IClassFactory )
{
*pIFace = (IClassFactory*)this;
}
else
{
*pIFace = NULL;
return E_NOINTERFACE;
}
((IUnknown*)(*pIFace))->AddRef();
return S_OK;
}
