- •Сообщения
- •Сообщения, определяемые пользователем
- •Реализация модели на основе функций api Windows
- •Отчет по лабораторной работе
- •Пример выполнения лабораторной работы №3 Функции Win 32ip, реализуемые в программе
- •Организация синхронизации действий процессов
- •Модуль process_unit.Pas:
- •Модуль curtime_unit.Pas:
- •Модуль a0wait_unit.Pas:
- •Модуль a1wait_unit.Pas:
- •Модуль herd_unit.Pas:
- •Модуль myProcedure_unit.Pas:
- •Листинг выполнения модели
Отчет по лабораторной работе
Отчет по лабораторной работе должен содержать:
-
Перечень функций Win 32 IP, реализующих синхронизацию процессов;
-
Протокол работы модели по заданному в варианте процессу.
Литература
-
Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. СПб.: Питер, 2001.
-
Дейтел Г., Введение в операционные системы. М."Мир",1987.
-
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, обработчик сообщения этого не делает, после обработки сообщения процесс продолжает работать обычным образом.
************************************************************************