ПРОЦЕССЫ
ПРОЦЕССЫ И ПОТОКИ В ОПЕРАЦИОННОЙ СИСТЕМЕ
Лекция № 2
Вопросы:
1. Процессы.
2. Потоки.
3. Планирование процессов и потоков.
4. Система приоритетов.
5. Средства межпроцессной синхронизации
Важнейшей частью операционной системы, непосредственно влияющей на функционирование вычислительной машины, является подсистема управления процессами. Процесс(или по-другому, задача) – абстракция, описывающая выполняющуюся программу. Для операционной системы процесс представляет собой единицу работы, заявку на потребление системных ресурсов. Программа(program) — это статическая последовательность команд, тогда как процесс(process) — это программа и системные ресурсы, необходимые для ее работы. Фактически, процесс– программа, находящаяся в режиме выполнения.
Подсистема управления процессами планирует выполнение процессов, то есть распределяет процессорное время между несколькими одновременно существующими в системе процессами, а также занимается созданием и уничтожением процессов, обеспечивает процессы необходимыми системными ресурсами, поддерживает взаимодействие между процессами.
В Windows 3.x, да иногда и в Win32 процесс определяют как копию (экземпляр) выполняющейся программы. Так оно и есть, но при этом забывают, что копия - понятие статическое. Другими словами процесс в Win32 - это объект, который не выполняется, а просто "владеет" выделенным ей адресным пространством, другими словами процесс является структурой в памяти. А вот в адресном пространстве процесса находятся:
− саму программу;
− данные к программе;
− стек программы.
В общем случае ОС содержат блок кода, управляющий созданием и удалением процессов, а также отношениями между ними. Этот код называется структурой процессов(process structure) и в Windows реализован диспетчером процессов (process manager).
Основной задачей диспетчера процессов является предоставление набора базовых сервисов процесса, который подсистемы среды могли бы использовать для эмуляции своих собственных уникальных структур процессов. Цель такого подхода — обеспечить в Windows несколько сред ОС, работающих в пользовательском режиме.
Во многих операционных системах вся информация о каждом процессе, дополнительная к содержимому его собственного адресного пространства, хранится в таблице процессов операционной системы (табл.1).
Таблица 1
Поля таблицы процессов
Управление процессом | Управление памятью | Управление файлами |
Регистры Счетчик команд Указатель стека Состояние процесса Приоритет Параметры планирования Идентификатор процесса Родительский процесс Группа процесса Время начала процесса Использованное процессорное время | Указатель на текстовый сегмент Указатель на сегмент данных Указатель на сегмент стека | Корневой каталог Рабочий каталог Дескрипторы файла Идентификатор пользователя Идентификатор группы |
На самом высоком уровне абстракции процесс состоит из:
• исполняемой программы, которая определяет начальный код и данные;
• закрытого адресного пространства (address space), т. е. набора адресов виртуальной памяти, который процесс может использовать;
• системных ресурсов, таких как семафоры, коммуникационные порты
и файлы, выделяемых ОС процессу во время выполнения программы.
В Windows процесс, чтобы он мог работать, должен включать четвертый элемент:
• по крайней мере один поток управления(thread of execution).
Поток управления — это сущность внутри процесса, которую ядро Windows направляет на исполнение. Без него программа процесса не может выполняться.
Процесс не должен иметь неограниченного права управления другими процессами. Одним из способов достижения этого в Windows служит система виртуальной памяти (virtual memory). С ее помощью программисты (и создаваемые ими процессы) получают логический образ памяти, который не совпадает с ее физической структурой.
При всяком обращении процесса по виртуальному адресу система виртуальной памяти транслирует этот адрес в физический. Она также предотвращает непосредственный доступ процесса к виртуальной памяти, занятой другими процессами или ОС. Для исполнения кода ОС или доступа к памяти ОС поток должен исполняться в привилегированном режиме процессора — так называемом режиме ядра (kernel mode). Однако большинство процессов — это процессы пользовательского режима, т. е. такие, потоки которых исполняются в основном в непривилегированном режиме процессора — пользовательском режиме (user mode).
Поток пользовательского режима получает доступ к ОС, вызывая некоторый системный сервис. Когда поток вызывает сервис, процесс перехватывает его и переключает из пользовательского режима в режим ядра.
ОС получает управление потоком, проверяет аргументы, переданные потоком сервису, после чего исполняет сервис. Перед возвратом управления пользовательской программе ОС переключает поток обратно в пользовательский режим. Таким образом, ОС защищает себя и свои данные от просмотра и модификации пользовательскими процессами.
Кроме закрытого адресного пространства, с каждым процессом связан набор разнообразных системных ресурсов. На рис. 1 показан типичный процесс и его ресурсы.
Вверху схемы изображен маркер доступа процесса. Маркер доступа присоединяется к процессу непосредственно ОС. Если процессу требуется получить информацию о его маркере доступа или, возможно, изменить некоторые атрибуты маркера, то он должен открыть описатель своего объекта-маркера. Подсистема защиты определяет, есть ли у процесса такое право. Процесс, показанный на рис.1, не открыл дескриптор своего маркера доступа, поэтому отсутствует стрелка, идущая из таблицы объектов к маркеру.
Ниже маркера доступа расположен набор структур данных, созданных диспетчером виртуальной памяти для отслеживания виртуальных адресов, используемых процессом. Процесс не может напрямую читать или изменять эти структуры; диспетчер виртуальной памяти создает и модифицирует их неявно, по мере выделения памяти программой.
Таблица объектов процесса показана в нижней части рис.1 Процесс открыл описатели одного из своих потоков, файла и секции совместно используемой памяти. (Описание виртуального адресного пространства содержит информацию о виртуальных адресах, занятых стеком потока и объектом-секцией, на что указывают стрелки, идущие от описания виртуального адресного пространства к этим объектам.)
Кроме материально осязаемых ресурсов, показанных на рис.1, каждый процесс имеет набор квот на ресурсы, ограничивающий объем памяти, который его потоки могут использовать для открытия описателей объектов.
В исполнительной системе Windows процессы — это просто объекты, создаваемые и уничтожаемые диспетчером объектов. Объект-процесс, как и другие объекты, содержит заголовок, создаваемый и инициализируемый диспетчером объектов. В заголовке хранятся стандартные атрибуты объекта, такие как:
− дескриптор защиты объекта-процесса,
− имя процесса (может назначаться ему в целях совместного использования)
− каталог объектов, в котором хранится имя, если оно есть.
Диспетчер процессов определяет атрибуты, хранящиеся в теле объектов-процессов, а также предоставляет системные сервисы для чтения и изменения этих атрибутов. Атрибуты и сервисы для объектов-процессов показаны на рис.2.
Обратите внимание, что таблица объектов и описание адресного пространства не показаны как часть объекта-процесса. Причина в том, что они, хотя и связаны с процессом, но не могут быть изменены процессами пользовательского режима напрямую. На рис.2 изображены только те данные, которые код пользовательского режима может считывать или изменять путем вызова сервисов объекта-процесса. В табл. 2 приведены атрибуты объекта-процесса.
Таблица 2
Атрибуты объекта – процесса
Атрибут | Назначение |
Идентификатор процесса | Уникальное значение, идентифицирующее процесс в ОС |
Маркер доступа | Объект исполнительной системы, содержащий информацию о правах зарегистрированного в системе пользователя, которого представляет данный процесс |
Базовый приоритет | Базовый приоритет потоков процесса |
Процессорное сродство по умолчанию | Набор процессоров, на которых потоки процесса могут исполняться по умолчанию |
Размеры квот | Максимальный объем резидентной и нерезидентной системной памяти, пространства в файле подкачки и процессорного времени, выделяемый пользовательскому процессу |
Время выполнения | Общее время выполнения всех потоков процесса |
Счетчики ввода-вывода | Переменные, в которых записывается число и тип операций ввода-вывода, выполненных потоками процесса |
Счетчики операций виртуальной памяти | Переменные, в которых записывается число и тип операций виртуальной памяти, выполненных потоками процесса |
Порты исключений-отладки | Каналы коммуникаций между процессами, по которым диспетчер процессов посылает сообщение, если один из потоков процесса вызывает исключение |
Код завершения | Причина завершения процесса |
Некоторые атрибуты объекта-процесса налагают ограничения на потоки, исполняемые внутри процесса. Например, на многопроцессорном компьютере процессорное сродство может ограничить исполнение потоков процесса подмножеством всех доступных процессоров. Аналогично, размеры квот регулируют, сколько памяти, пространства файла подкачки и времени процессора могут использовать все потоки процесса вместе.
Базовый приоритет процесса помогает ядру Windows регулировать приоритет потоков в системе. Приоритеты отдельных потоков изменяются, но всегда остаются в диапазоне базовых приоритетов их процессов. Подсистемы среды могут использовать базовый приоритет, чтобы повлиять на то, потоки какого процесса будут выбраны ядром Windows для исполнения в первую очередь. Например, подсистема Win32 при помощи сервисов NT повышает базовый приоритет процесса выбранного пользователем приложения и понижает базовый приоритет процессов фоновых приложений, давая интерактивным приложениям преимущество над другими. Размеры квот, процессорное средство и базовый приоритет входят в состав тех атрибутов и структур данных процесса, которые могут наследоваться от него другим процессом.
Порты исключений и отладки процесса — это каналы коммуникаций между процессами, по которым ОС посылает сообщения, если один из потоков процесса возбуждает исключение или если идет отладка процесса. Поток другого процесса ожидает у порта для приема сообщения и соответствующих действий. Например, поток подсистемы среды может "слушать" у порта исключений для перехвата ошибок ее клиентских процессов, а отладчик может перехватывать исключения, такие как отладочные точки останова.
Сервисы процессов.
Таблица 3
Сервисы процессов
Сервис | Функция Win32 |
Создать процесс | CreateProcess() |
Открыть процесс | OpenProcess() |
Запросить информацию процесса | GetPriorityClass(), GetProcessTimes(), GetProcessWorkingSetSize(), GetExitProcessCode() и т.д. |
Установить информацию процесса | SetPriorityClass(), SetProcessWorkingSetSize() |
Текущий процесс | GetCurrentProcess(), GetCurrentProcessId() |
Завершить процесс | ExitProcess() или TerminateProcess(). |
Рассмотрим наиболее важные из них.