Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 130стр.doc
Скачиваний:
93
Добавлен:
15.06.2014
Размер:
2.49 Mб
Скачать

17 Организация взаимодействия процессов и потоков в Win32.Процессы и потоки в Win32. Приоритеты. Планирование

Процесс– это отдельная исполняемая программа с используемой ею памятью и другими выделяемыми ей ресурсами. Многозадачность - это способность операционной системы выполнять несколько программ одновременно. В основе этого принципа лежит использование операционной системой аппаратного таймера для выделения отрезков времени для каждого из одновременно выполняемых процессов.

32-разрядные версии Windows кроме многозадачности поддерживают еще и многопоточность. Многопоточность - это возможность программы самой быть многозадачной. Программа может быть разделена на отдельные потоки выполнения, которые, как кажется, выполняются параллельно между собой и потоками других задач (процессов).

Управление процессами и потоками в ОС Windows производится при помощи приоритетов ( от 0 до 31). Установка приоритета производится функцией SetPriorityClass().

Процессы.

(По приоритету) процессы можно разделить на 4 класса:

  1. Idle (4). Процессор требуется время от времени.(мониторинг системы, фоновая печать). Если порождающий процесс Idle, то и порожденный тоже Idle.

  2. Normal (7-9). Все пользовательские процессы по умолчанию. Это интерактивные процессы , они требуют постоянного внимания пользователя (работа в графическом или текстовом редакторе). Делятся на foreground (переднего плана) и background (фоновые).

  3. High (13). Процессы, которые большую часть времени ожидают какого-либо события.(TaskManager в windows ожидает нажатия комбинации клавиш, чтобы активизироваться).

  4. Realtime (24). Это: Программы, напрямую общающиеся с аппаратурой и операции, которые ни в коем случае нельзя прерывать.

Создание: CreateProcess(); Создается новый процесс и его главный поток ( запускается исполняемый модуль, соответствующий указанному имени файла).

Возвращается булевое значение ( TRUE или FALSE).

Завершение: ExitProcess(); Завершает процесс и все его потоки.

Уничтожение извне: TerminateProcess(); Уничтожает процесс и все его потоки. Возвращает булевое значение.

Другие функции:

GetCommandLine(); Возвращает указатель на коммандную стоку текущего процесса.

GetCurrentProcess(); Возвращает псевдодескриптор текущего процесса, который не может буть унаследован дочерними процессами.

GetCurrentProcessId();Возвр идентификатор текущ. процесса.

OpenProcess(); Возвращает дескриптор процесса по его идентификатору.

GetExitCodeProcess();Воз код завершения указанного процесса.

GetSturtupInfo(); Создает копию структуры STURTUPINFO текущего процесса.

Поток – это последовательность исполняемых команд. Процесс может состоять из единственного потока, а может содержать их несколько

Поток является базовым элементом механизма выполнения программ.

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

Основным фактор - приоритет выполнения каждого потока. В Win32 каждому потоку присваивается свой приоритет - от 0 до 31; чем больше число, тем выше приоритет. Приоритет 31 под особенно критичные операции, например, прием данных в реальном режиме времени.

Приоритет 0 назначается операционной системой некоторым второстепенным задачам, выполнение которых происходит в то время, когда нет других задач.

Большинство потоков работают с приоритетом от 7 до 11.

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

Создание: CreateThread(); Создается новый поток в адресном прострнстве вызывающего процесса. Возвращается дескриптор потока.

Прекращение существования:

  1. Поток самостоятельно завершается.

  2. Поток принудительно завершен другим потоком этого процесса. ЛЮБОЙ ПОТОК МОЖЕТ ВМЕШАТЬСЯ В РАБОТУ ЛЮБОГО ПОТОКА В СИСТЕМЕ,

  3. При завершении процесса все связанные с ним потоки будут завершены системой.

Завершение: ExitThread(); Завершает поток.

Уничтожение извне: TerminateThread (); Уничтожается поток. Возвращается булевое значение.

Объекты: большинство создаваемых потоком объектов являются собственностью процеса, к которому принадлежит данный поток. Принадлежность объекта процессу дает возможность другим потокам процесса доступаться к этому объекту.

Другие функции:

AttacheThreadInput(); Назначает или отменяет вывод одного потока на вход другого.

CreatRemoteThread(); Создает поток в адресном пространстве другого процесса.

GetCurrentThread(); Возвращает псевдодескриптор текущего потока, который не может буть унаследован дочерними процессами.

GetCurrentThreadId(); Возвращает идентификатор текущего процесса.

GetExitCodeThread(); Возвращает код завершения указанного потока.

SuspendThread(); Приостанавливает поток, если он еще не приостановлен, и увеличивает значение счетчика вызовов этой функции на 1.

ResumeThread(); Уменьшает на 1 значение счетчика вызовов SuspendThread(), и если это значение ==0, поток возобновляется.