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

Билет №10

  1. Стратегия планирования asap Алгоритм планирования asap (как можно раньше)

Тип – планирование на достижимость.

Исходные данные: 1) Граф непосредственного предшествования операций.

Результирующие данные:

  1. Шаги управления.

  2. Распределение операций по шагам управления.

  3. Число процессоров каждого типа.

Описание алгоритма:

  1. Планирование выполняется в цикле, начиная с первого шага и кончая последним шагом.

  2. Алгоритм начинает работу с введения первого шага управления и размещения на нем операций, не имеющих операций-предшественников.

  3. Алгоритм завершает работу в случае назначения всех операций на шаги управления.

  4. Для каждого шага управления выполняются следующие действия по планированию:

    1. Из множества всех операций выбираются не спланированные операции.

    2. Для каждой из них проверяется, все ли операции-предшественники спланированы на предшествующих шагах управления.

    3. Если да, то операция включается в текущий шаг, в противном случае остается не спланированной.

2. Серверы в exe.

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

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

Если компонент и клиент используют общее адресное пространство, компонент передает клиенту интерфейс. Интерфейс — это, по существу, массив указателей функций. Клиент должен иметь доступ к памяти, занимаемой интерфейсом. Если компонент находится в DLL, то доступ осуществляется легко: и компонент, и клиент находятся в одном адресном пространстве. Но если компонент и клиент находятся в разных адресных пространствах, то у клиента нет доступа к памяти процесса компонента. Если у клиента нет даже доступа к памяти, связанной с интерфейсом, то он не сможет вызывать и функции этого интерфейса. Для того, чтобы с интерфейсом можно было работать через границы процесса, необходимо следующее:

  1. Процесс должен иметь возможность вызвать функцию в другом процессе.

  2. Процесс должен иметь возможность передавать другому процессу данные.

  3. Клиент может одинаково работать с компонентом внутри или вне процесса.

Задача - Дать пример чисто абстрактного базового класса на языке С++

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

В начале объявления чисто виртуальной функции ставится спецификатор virtual, а за функцией следует присваивание нуля =0 (это знак спецификатора чистоты - pure specifier).

// Чисто абстрактные базовые классы - интерфейсы

class IType_1 { public: virtual void __stdcall operT1(int, int, int*) = 0; };

class IType_2 { public: virtual void __stdcall operT2(int, int, int*) = 0; };

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