Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0626114503_03 - Конспект лекций.doc
Скачиваний:
10
Добавлен:
21.04.2019
Размер:
554.5 Кб
Скачать

Способы взаимодействия между процессами.

  1. Общая память(самый быстрый способ взаимодействия)

Этот способ требует строгой синхронизации данных. Типы данных должны совпадать по структуре, должна совпадать последовательность полей структур данных и выравнивание (размер, с границы которого имеет право начинаться новое поле структуры) должно совпадать.

  1. Сигналы.

Один процесс передает сигналы другому (информация, которая передается процессу – это номер сигнала). Сигнал очень похож на прерывание: у него есть номер и он обязателен к выполнению.

  1. Сообщение.

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

  1. Каналы (pipe)

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

  1. Сокеты.

Способ сетевого взаимодействия.

Лекция №9 Управление процессами в среде Window’s.

В Window’s многопоточная многозадачность. Имеется 32 приоритета, которые поделены на 6 классов:

1. IDLE

2. BELOW_NORMAL

3. NORMAL

4. ABOVE_NORMAL

5. HIGH

6. REALTIME

Запуск. Создание процесса.

BOOL CreateProcess(

LPCTSTR AppName,

LPTSTR CmdLine,

LPSECURITY ATTRIBUTES ProcAttr,

LPSECURITY ATTRIBUTES ThreadAttr,

BOOL InheritHaudles,

DWORD CreationFlag,

LPVOID Environmint,

LPCTSTR Directory,

LPSTARTUPINFO info,

LPPROCESS_INFORMATION procInfo);

Результат – запущен/не запущен процесс.

Параметры:

  1. имя программы, которую запускаем. Если имя состоит из слов, разделенных пробелом, то необходимо его заключить в «». Пнрывй параметр может быть пустым указателем.

  2. строка, но не константная. Нужно завести строку, занести туда командную строку и передать как параметр. Если первый параметр NULL, то первое имя файла в командной строке рассматривается как имя запускаемого файла и, если у этого имени нет пути, то сперва операционная система будет искать его в текущем каталоге, а потом, если не найдет, во всех каталогах переменной окружения path.

  3. 4)LPSECURITY ATTRIBUTES - структура данных, которая описывает атрибуты безопасности любого объекта. по умолчанию может быть NULL.

  1. признак – будет ли запускаемый процесс наследовать ресурсы процесса

родителя.

  1. флаги создания: указывается класс приоритета. Если флаг не указан и у

родительского класса стоит приоритет IDLE, BELOW_NORMAL, то дочерний

класс наследует, если NORMAL и выше – не наследует.

  1. необязательный (NULL) указатель на область памяти, содержащей переменные среды окружения. Если NULL, то операционная система делает для нашего процесса копию своих переменных окружения, иначе область памяти должна быть представлена в виде: <пер1>=<знач1>\0<пер2>=<знач2> \0…\0\0 – в этом случае операционная система больше не добавляет в список переменных.

  2. Каталог, который будет текущим при запуске приложения. Можно указать NULL, тогда текущим будет каталог, который записан в системной переменной %SYSTEM_ROOT%.

  3. LPTSATRUPINFO – огромная структура, которая описывает параметры запуска программ, постоянно увеличивается.

  4. выходной параметр. Надо передать указатель на переменную типа Process_Information. В структуре Process_Information 4 поля, два из них это:

  1. HANDLE hProcess – дескриптор процесса

  2. HANDLE hThread - дескриптор главного потока.

VOID ExitProcess( UINT ExitCode) – выход из программы. Функций осуществляет так называемое «магическое» завершение. Все заинтересованные стороны(системные библиотеки,…) получают уведомление о завершении процесса.

ExitCode – число – код возврата.

BOOL TerminateProces ( HANDLE h,

UINT ExitCode)

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

Возвращаемое значение: завершен процесс или нет, так как на завершение процесса может не быть прав.

HANDLE GetCurrentProcess() – возвращает собственный дескриптор.

LPTSTR GetCommandLine() – получить собственную командную строку.

BOOL GetProcessAffinityMask(

HANDLE h,

LPDWORD ProcessMask,

LPDWORD SystemMask)

Побитовая маска, которая указывает, на каких процессорах может работать процесс.

ПОТОКИ

HANDLE CreateThread(

LPSECURITY ATTRIBUTES ProcAttr,

SIZT_T StackSize,

LPTHREAD_START_ROUTINE Func,

LPVOID Params,

DWORD Flags,

LPWORD ThreadId)

  1. Показывает NULL

  2. Размер стэка зависит от того, что делает поток

  3. Функция, которая будет запущена в качестве потока

  4. Параметр, который попадает в функцию как данные

  5. Создать, но не запускать

  6. Iв потока