Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Materialy_po_SP_2013.doc
Скачиваний:
270
Добавлен:
11.05.2015
Размер:
754.69 Кб
Скачать

26 Совместное использование объектов ядра несколькими процессами. Дублирование описателей объектов

Последний механизм совместного использования объектов ядра несколькими процессами требует функции DuplicateHandle:

BOOL DuplicateHandle(

HANDLE hSourceProcessHandle,

HANDLE hSourceHandle,

HANDLE hTargetProcessHandle,

PHANDLE phTargetHandle,

DWORD dwDESIredAccess,

BOOLbInheritHandle,

DWORDdwOptions);

Эта функция берет запись в таблице описателей одного процесса и создает ее копию в таблице другого. DuplicateHandle принимает несколько параметров. Обычно ее применение требует наличия в системе трех разных процессов.

Первый и третий параметры функции DuplicateHandle представляют собой описатели объектов ядра, специфичные для вызывающего процесса. Кроме того, эти параметры должны идентифицировать объекты ядра “процессы” – функция завершится с ошибкой, если передать описатели на объекты ядра любого другого типа. Объект ядра “процесс” создается при каждой инициализации в системе нового процесса.

Второй параметр hSourceHandlе, - описатель объекта ядра любого типа. Однако его значение специфично не для процесса, вызывающегоDuplicateHandle, а для того, на который указывает описательhSourceHandlе. ПараметрphTargetHandleадрес переменной типаHANDLE, в который возвращается индекс записи с копией описателя из процесса-источника. Значение возвращаемого описателя спецефично для процесса, идентифицируемого параметромhTargetProcessHandle.

Предпоследние два параметра DuplicateHandle позволяют задать маску доступа и флаг наследования, устанавливаемые для данного описателя объекта ядра в процессе-приемнике.

Параметр dwOptionsможет быть 0 или любой другой комбинацией двух флагов:DUPLICATE_SAME_ACCESSиDUPLICATE_CLOSE_SOURCE.

Первый флаг подсказывает функции DuplicateHandle:у описателя, получаемого процессом-приемником, должна быть та же маска доступа, что и у описателя в процессе-источнике. Этот флаг заставляетDuplicateHandle игнорировать параметрdwDesiredAccess.

Второй флаг приводит к закрытию описателя в процессе-источнике. Он позволяет процессам обмениваться объектом ядра как эстафетной палочкой. При этом счетчик объекта не меняется. Необходимость использовать этот флаг возникает крайне редко.

27Планирование и диспетчеризация потоков.

На протяжении существования процесса выполнение его потоков может быть многократно прервано и продолжено.

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

Планирование потоков, по существу, включает в себя решение двух задач:

  • определение момента времени для смены текущего активного потока;

  • выбор для выполнения потока из очереди готовых потоков.

В большинстве операционных систем универсального назначения планирование осуществляется динамически (on-line), то есть решения принимаются во время работы системы на основе анализа текущей ситуации.

Статическийтип планирования используется в специализированных системах, в которых весь набор одновременно выполняемых задач определен заранее, например в системах реального времени.Планировщик называется статическим (или предварительным планировщиком), если он принимает решения о планировании не во время работы системы, а заранее (off-line).

Диспетчеризация заключается в реализации найденного в результате планирования (динамического или статистического) решения, то есть в переключении процессора с одного потока на другой. Прежде чем прервать выполнение потока, ОС запоминает его контекст, с тем чтобы впоследствии использовать эту информацию для последующего возобновления выполнения данного потока. Контекст отражает, во-первых, состояние аппаратуры компьютера в момент прерывания потока: значение счетчика команд, содержимое регистров общего назначения, режим работы процессора, флаги, маски прерываний и другие параметры. Во-вторых, контекст включает параметры операционной среды, а именно ссылки на открытые файлы, данные о незавершенных операциях ввода-вывода, коды оши¬бок выполняемых данным потоком системных вызовов и т. д.

Диспетчеризация сводится к следующему:

– сохранение контекста текущего потока, который требуется сменить;

– загрузка контекста нового потока, выбранного в результате планирования;

– запуск нового потока на выполнение.

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