Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБ_5 DELPHI_СПО.doc
Скачиваний:
1
Добавлен:
22.11.2018
Размер:
120.32 Кб
Скачать

Отчет по лабораторной работе

Отчет по лабораторной работе должен содержать:

  • Перечень функций Win 32 IP, реализующих синхронизацию процессов;

  • Протокол работы модели по заданному в варианте процессу.

Литература

  1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. СПб.: Питер, 2001.

  2. Дейтел Г., Введение в операционные системы. М."Мир",1987.

  3. Delphi 7.0. Функции Win 32 API.

Пример выполнения лабораторной работы №3 Функции Win 32ip, реализуемые в программе

  • ProcessMonitor «создает» процессы. Каждому процессу ProcessMonitor дает при этом случайную поправку к приоритету, также пользователь может установить приоритет и вручную для заранее выбранного процесса. Каждый процесс действует независимо от других.

  • По истечении введенного интервала ProcessMonitor проверяет состояние порожденных им процессов. Если процесс завершил свою деятельность, ProcessMonitor выводит сообщение о нормальном завершении процесса. Если процесс еще не завершил свою деятельность, происходит проверка, в каком состоянии находится процесс. Если процессу для окончания второго этапа требуется не более 1 сек процессорного времени, процесс получает возможность закончить второй этап. В противном случае процесс завершается принудительно.

Организация синхронизации действий процессов

  • Во время выполнения ProcessMonitor создает поток (при помощи CreateThread) в тело которого помещен цикл обработки сообщений. В цикле обработки сообщений установлены собственные обработчики WM_USER (для получения идентификатора потока дочернего процесса), WM_MYUSR1, WM_MYUSR2 сообщений. Каждый дочерний процесс в начале выполнения устанавливает собственный обработчик сообщений WM_MYUSR1 и WM_MYTERM.

  • Полностью выдержав введенный интервал ProcessMonitor перебирает, имеющийся у него список процессов. Для тех процессов, которые были успешно запущены ProcessMonitor выполняет системный вызов GetExitCodeProcess. Если процесс к этому моменту уже завершился (успешно), то будет выведено сообщение о его успешном завершении.

  • Если дочерний процесс еще не завершился, то ProcessMonitor отправляет ему сообщение WM_MYUSR1. Обработчик этого сообщения в процессе анализирует текущее состояние программы процесса. Если программа еще выполняет первый этап, то процесс отвечает родительскому процессу сообщением WM_MYUSR1, если программа уже перешла во второй этап - сообщением WM_MYUSR2.

  • ProcessMonitor (в своем обработчике этих сообщений) анализирует сообщение, полученное от дочернего процесса, и в зависимости от типа сообщения устанавливает у себя индикатор состояния данного процесса. Затем процессы, от которых было получено сообщение WM_MYUSR1, завершаются (terminateprocess), а процессам, от которых получено сообщение WM_MYUSR2, - посылается сообщение WM_MYTERM.

  • В обработчике WM_MYTERM анализируется значение переменной waitFactor, которая определяет приблизительное время, необходимое модулю a0wait для завершения этапа. Если значение этой переменной больше 1000 (что приблизительно соответствует 1 сек), то обработчик сообщения WM_MYTERM завершает процесс системным вызовом halt с кодом завершения 0. Если же значение waitFactor меньше 1000, обработчик сообщения этого не делает, после обработки сообщения процесс продолжает работать обычным образом.

************************************************************************