Лекция 8. Процессы в ОС Windows

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

Процесс (process)– это программа, загруженная в память вместе со всеми относящимися к ней ресурсами. Каждый процесс имеет свое собственное виртуальное адресное пространство (4Gb). Процесс состоит из кода, данных и других системных ресурсов, таких как открытые файлы, каналы (pipes), синхронизирующие объекты. Однако процесс – статический объект, который сам по себе действия не производит.. При многозадачности процессного типа две или более программы могут выполняться параллельно. Конечно, они по очереди используют ресурсы центрального процессора и с технической точки зрения выполняются неодновременно, но благодаря высокой скорости работы компьютера это практически незаметно.

Поток (thread)– это базовый объект, которому операционная система распределяет время центрального процессора. Каждый процесс состоит из потоков.В многозадачности данного типа отдельные потоки внутри одного процесса также могут выполняться одновременно. Все процессы имеют по крайней мере один поток.

Другой особенностью Windows является приоритетная многозадачность.

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

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

Основная единица выполнения в Win32 -это поток (по терминологии защищённого ежима -задача). Потоки объединяются в процессы. В общем случае одна программа - это один процесс. В процессе может быть сколько угодно потоков. Каждый процесс обособлен от всех остальных. Это достигается за счет того, что у каждого процесса своя собственная виртуальная память. Тем не менее, если программе надо получить доступ в памяти других процессов, она может осуществить это через специальные системные сервисы.

Диспетчеризация потоков осуществляется на основе приоритетов. Приоритеты у потоков не являются статическими параметрами - они могут меняться в зависимости от того, что делает поток. Так или иначе, в некоторый момент времени на центральном процессоре всегда выполняется поток с наибольшим приоритетом.

Поток представляет собой набор исполняющихся команд для текущего момента исполнения. С одним или несколькими потоками ассоциирован набор ресурсов, которые объединены в рамках процесса. Для описания процесса в системе поддерживается связанная совокупность структур, главной из которых является структура EPROCESS. В свою очередь, структура ETHREAD и связанные с ней структуры необходимы для реализации потоков. В лекции проанализированы функции CreateProcess и CreateThread и этапы создания процессов и потоков. Важными характеристиками потока являются его контекст и состояние. Наблюдение за состоянием потоков предлагается осуществить при помощи инструментальных средств системы

Понятие процесса и потока

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

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

Для описания столь сложного динамического объекта ОС поддерживает набор структур, главную из которых принято называть блоком управления процессом (PCB, Process control block). В состав PCB обычно включают:

· состояние, в котором находится процесс;

· программный счетчик процесса или, другими словами, адрес команды, которая должна быть выполнена для него следующей;

· содержимое регистров процессора;

· данные, необходимые для планирования использования процессора и управления памятью (приоритет процесса, размер и расположение адресного пространства и т. д.);

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

· информацию об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом; таблица открытых файлов).

Блок управления процессом является моделью процесса для операционной системы. Любая операция, производимая операционной системой над процессом, вызывает определенные изменения в PCB. Псевдопараллельное выполнение процессов предполагает периодическую приостановку текущего процесса и его последующее возобновление. Для этого нужно уметь сохранять часть данных из PCB, которые обычно называют контекстом процесса, а операцию по сохранению данных одного процесса и восстановлению данных другого называют переключением контекстов. Переключение контекста не имеет отношения к полезной работе, выполняемой процессами, и время, затраченное на него, сокращает полезное время работы процессора.

Потоки

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

Лекция 8. Процессы в ОС Windows - student2.ru

Рис. 5.1. Процесс с несколькими потоками

В этом случае процесс можно рассматривать в качестве контейнера ресурсов, а все проблемы, связанные с динамикой исполнения, решаются на уровне потоков. Обычно каждый процесс начинается с одного потока, а остальные (при необходимости) создаются в ходе выполнения. Теперь уже не процесс, а поток характеризуется состоянием, поток является единицей планирования, процессор переключается между потоками, и необходимо сохранять контекст потока (что существенно проще, чем сохранение контекста процесса). Подобно процессам потоки (нити, threads) в системе описываются структурой данных, которую обычно называют блоком управления потоком (thread control block, TCB).

Реализация процессов

Наши рекомендации