logo
ГОСЫ_ИТОГ_2

2. Управление процессами и потоками.

Одной из основных подсистем любой современной мультипрограммной ОС,

непосредственно влияющей на функционирование компьютера, является

подсистема управления процессами и потоками. Основные функции этой

подсистемы [10, 12, 17]:

• создание процессов и потоков;

• обеспечение процессов и потоков необходимыми ресурсами;

• изоляция процессов;

• планирование выполнения процессов и потоков (вообще, следует гово-

рить и о планировании заданий);

• диспетчеризация потоков;

• организация межпроцессного взаимодействия;

• синхронизация процессов и потоков;

• завершение и уничтожение процессов и потоков.

К созданию процесса приводят пять основных событий:

1. инициализация ОС (загрузка);

2. выполнение запроса работающего процесса на создание процесса;

3. запрос пользователя на создание процесса, например, при входе в сис-

тему в интерактивном режиме;

4. инициирование пакетного задания;

5. создание операционной системой процесса, необходимого для работы

каких-либо служб.

Обычно при загрузке ОС создаются несколько процессов. Некоторые из них

являются высокоприоритетными процессами, обеспечивающими взаимодей-

ствие с пользователями и выполняющими заданную работу. Остальные про-

цессы являются фоновыми, они не связаны с конкретными пользователями,

но выполняют особые функции – например, связанные с электронной почтой,

Web-страницами, выводом на печать, передачей файлов по сети, периодиче-

ским запуском программ (например, дефрагментации дисков) и т.д. Фоновые

процессы называют демонами.

Новый процесс может быть создан по запросу текущего процесса. Создание

новых процессов полезно в тех случаях, когда выполняемую задачу проще

всего сформировать как набор связанных, но, тем не менее, независимых

взаимодействующих процессов. В интерактивных системах пользователь

может запустить программу, набрав на клавиатуре команду или дважды

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

запуск в нем программы

С технической точки зрения во всех перечисленных случаях новый процесс

формируется одинаково: текущий процесс выполняет системный запрос на

создание нового процесса. Подсистема управления процессами и потоками

отвечает за обеспечение процессов необходимыми ресурсами. ОС поддержи-

вает в памяти специальные информационные структуры, в которые записы-

вает, какие ресурсы выделены каждому процессу. Она может назначить про-

цессу ресурсы в единоличное пользование или совместное пользование с

другими процессами. Некоторые из ресурсов выделяются процессу при его

создании, а некоторые – динамически по запросам во время выполнения. Ре-

сурсы могут быть выделены процессу на все время его жизни или только на

определенный период. При выполнении этих функций подсистема управле-

ния процессами взаимодействует с другими подсистемами ОС, ответствен-

ными за управление ресурсами, такими как подсистема управления памятью,

подсистема ввода-вывода, файловая система.

Для того чтобы процессы не могли вмешаться в распределение ресурсов, а

также не могли повредить коды и данные друг друга, важнейшей задачей ОС

является изоляция одного процесса от другого. Для этого операционная сис-

тема обеспечивает каждый процесс отдельным виртуальным адресным про-

странством, так что ни один процесс не может получить прямого доступа к

командам и данным другого процесса.

В ОС, где существуют процессы и потоки, процесс рассматривается как заяв-

ка на потребление всех видов ресурсов, кроме одного – процессорного вре-

мени. Этот важнейший ресурс распределяется операционной системой между

другими единицами работы – потоками, которые и получили свое название

благодаря тому, что они представляют собой последовательности (потоки

выполнения) команд. Переход от выполнения одного потока к другому осу-

ществляется в результате планирования и диспетчеризации. Работа по опре-

делению момента, в который необходимо прервать выполнение текущего по-

тока, и потока, которому следует предоставить возможность выполняться,

называется планированием. Планирование потоков осуществляется на основе

информации, хранящейся в описателях процессов и потоков. При планирова-

нии принимается во внимание приоритет потоков, время их ожидания в оче-

реди, накопленное время выполнения, интенсивность обращения к вводу-

выводу и другие факторы.

Диспетчеризация заключается в реализации найденного в результате плани-

рования решения, т.е. в переключении процессора с одного потока на другой.

Диспетчеризация проходит в три этапа:

• сохранение контекста текущего потока;

• загрузка контекста потока, выбранного в результате планирования;

• запуск нового потока на выполнение.

Когда в системе одновременно выполняется несколько независимых задач,

возникают дополнительные проблемы. Хотя потоки возникают и выполня-

ются синхронно, у них может возникнуть необходимость во взаимодействии,

например, при обмене данными.

Синхронизация потоков является одной из важнейших функций подсистемы

управления процессами и потоками. Современные операционные системы

предоставляют множество механизмов синхронизации, включая семафоры,

мьютексы, критические области и события. Все эти механизмы работают с

потоками, а не с процессами. Поэтому когда поток блокируется на семафоре,

другие потоки этого процесса могут продолжать работу.

Очевидно, что любая работа вычислительной системы заключается в выпол-

нении некоторой программы. Поэтому и с процессом, и с потоком связывает-

ся определенный программный код, который оформляется в виде исполняе-

мого модуля. В простейшем случае процесс состоит из одного потока, и в не-

которых современных ОС сохранилось такое положение. Мультипрограмми-

рование в таких ОС осуществляется на уровне процессов. При необходимо-

сти взаимодействия процессы обращаются к операционной системе, которая,

выполняя функции посредника, предоставляет им средства межпроцессной

связи– каналы, почтовые акции, разделяемые секции памяти и др.

Понятию "поток" соответствует последовательный переход процессора от

одной команды к другой. Процессору ОС назначают адресное пространство и

набор ресурсов, которые совместно используются всеми его потоками. В от-

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

приложениям, все потоки одного процесса всегда принадлежат одному при-

ложению, поэтому ОС изолирует потоки в гораздо меньшей степени, чем

процессы в традиционной мультипрограммной системе. Все потоки одного

процесса используют общие файлы, таймеры, устройства, одну и ту же об-

ласть оперативной памяти, одно и то же адресное пространство.

Это означает, что они разделяют одни и те же глобальные переменные. По-

скольку каждый поток может иметь доступ к любому виртуальному адресу,

один поток может задействовать стек другого потока. Между потоками одно-

го процесса нет полной защиты, во-первых, потому что это невозможно, а во-

вторых, потому что не нужно. Чтобы организовать взаимодействие и обмен

данными, потокам не требуется обращаться к ОС, им достаточно использо-

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

другой стороны, потоки разных процессов по-прежнему хорошо защищены

друг от друга.

Таким образом, мультипрограммирование более эффективно на уровне пото-

ков, а не процессов. Еще больший эффект многопоточной обработки дости-

гается в мультипроцессорных системах, в которых потоки могут выполнять-

ся на разных процессорах действительно параллельно.