Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpora_ROD_1.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

Билет №2

1. Параллелизм в распределенной системе

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

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

Существует несколько классификаций параллелизма:

1.Пространственно временная – в пространстве: характ. наличием только одного набора данных в пространстве; во времени: характеризуется наличием нескольких наборов данных.

2. Синхронная - весь вычислительный процесс разбивается на шаги управления; асинхронная - вычислительный процесс представляется графом.

2. Реализация локального сервера

Если компонент и клиент находятся в разных EXE, они будут расположены в отдельных процессах, поскольку для каждого EXE-модуля создается свой процесс. При передаче информации между такими компонентом и клиентом необходимо пересечь границу между процессами. Нет нужды изменять код компонента, хотя некоторые изменения в класс CFactory внести придется. Однако, прежде чем перейти к реализации, следует рассмотреть проблемы и решения, связанные с обращением к интерфейсам СОМ через границы процессов.

Каждый модуль EXE исполняется в отдельном процессе. У каждого процесса есть свое адресное пространство. В то время как каждому EXE-модулю соответствует свой процесс, DLL проецируется в процесс того EXE, с которым они скомпонованы. По этой причине DLL называют серверами внутри процесса (in process), а EXE — серверами вне процесса (out of process). Иногда EXE также называют локальными серверами, чтобы отличить их от другого вида серверов вне процесса — удаленных серверов.

вспомните, что CoCreateInstance вызывает CoGetClassObject, которая вызывает DllGelClassObject. Последняя возвращает указатель на IClassFactory, который используется для создания компонента. Поскольку EXE не могут экспортировать DllGetClassObject, нужен другой способ передачи CoGetClassObject нашего указателя на IClassFactory. Решение, предлагаемое СОМ, — поддержка внутренней таблицы зарегистрированных фабрик класса. Когда клиент вызывает CoGetClassObject с соответствующими параметрами, СОМ сначала просматривает свою внутреннюю таблицу фабрик класса, ища заданный клиентом CLSID. Если фабрика класса в таблице отсутствует, то СОМ обращается к Реестру и запускает соответствующий модуль EXE. Задача последнего — как можно скорее зарегистрировать свои фабрики класса, чтобы их могла найти СОМ. Для регистрации фабрики класса EXE использует функцию СОМ CoRegisterClassObject. При запуске EXE обязан зарегистрировать все поддерживаемые им фабрики. Я добавил в CFactory новую стратегическую функцию-член StartFactories, которая вызывает CoRegisterClassObject для каждого компонента в массиве структур CFactoryData.

Когда работа сервера завершается, фабрики класса следует удалить из внутренней таблицы СОМ. Это выполняется при помощи функции библиотеки СОМ CoRevokeClassObject.

Позвольте мне пояснить необходимость изменений. DLL не управляет временем своей жизни. EXE загружает DLL, и EXE выгружает DLL. Однако EXE управляют временем своего существования и могут выгружаться сами. Никто не будет выгружать модуль EXE, он должен делать это сам.

Задача - Дать пример инкапсуляции на языке С++

Инкапсуляция - абстракция и сокрытие данных и действий от окружающей среды

Классы объектов в С++. Они инкапсулируют данные и функции, описывающие объект класса и записываются в виде

class X {

private:

<внутренняя реализация>

public:

<интерфейс с внешним миром>

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]