Процессы и потоки

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

Процессы

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

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

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

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

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

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

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

Модель процессов упрощает представление о внутреннем поведении системы. Некоторые процессы запускают программы, выполняющие команды, введенные с клавиатуры пользователем. Другие процессы являются частью системы и обрабатывают такие задачи, как выполнение запросов файловой службы, управление запуском диска или магнитного накопителя. В случае дискового прерывания система останавливает текущий процесс и запускает дисковый процесс, который был заблокирован в ожидании этого прерывания. Вместо прерываний мы можем представлять себе дисковые процессы, процессы пользователя, терминала и т. п., блокирующиеся на время ожидания событий. Когда событие произошло – информация прочитана с диска или клавиатуры, блокировка снимается, и процесс может быть запущен.

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

Процессы

n-2

n-1

Планировщик

Рис. 3.3. Нижний уровень ОС, отвечающий за прерывание и планирование

 

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

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

Потоки

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

Модель процесса базируется на двух независимых концепциях: группировании ресурсов и выполнении программы. Когда их разделяют, появляется понятие потока.

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

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

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

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

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

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

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

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

Концепция потоков полезна также в системах с несколькими процессорами, где возможен настоящий параллелизм.

Необходимость потоков проще продемонстрировать на конкретном примере. Рассмотрим текстовый процессор Word (ТП). ТП выводит на экран монитора текст в том виде, в котором он будет напечатан. В частности, разрывы строк и страниц находятся на своих местах, и пользователь при необходимости может их откорректировать. Представим, что пользователь пишет книгу. С его точки зрения проще хранить книгу в одном файле, чтобы легче было искать отдельные разделы, выполнять замену и т.п. С другой стороны, можно хранить каждый раздел в отдельном файле. Это приведет к потере большого количества времени в случае глобальных изменений – придется редактировать большое количество файлов.

Представим, что пользователь удалил одно предложение на первой странице документа, в котором 400 страниц. После этого пользователь решил исправить предложение на 350 странице. Он дает команду ТП перейти на страницу с номером 350 (например, задав поиск фразы, встречающейся только на этой странице). Текстовому процессору придется переформатировать весь документ вплоть до 350 страницы, поскольку до форматирования он не будет знать, где начинается эта страница. Это может занять довольно много времени и вряд ли обрадует пользователя.

В этом случае помогут потоки. Пусть ТП написан в виде двухпоточной программы. Один поток взаимодействует с пользователем, а второй переформатирует документ в фоновом режиме. Как только предложение на первой странице было удалено, интерактивный поток дает команду фоновому потоку переформатировать весь документ. В то время как первый поток продолжает отслеживать и выполнять команды с клавиатуры или мыши – второй поток быстро переформатирует документ. Может случиться, что форматирование будет закончено раньше, чем пользователь захочет перейти к 350 странице, и тогда команда будет выполнена мгновенно.

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

 








Дата добавления: 2015-08-20; просмотров: 697;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.