В. Столлингс - Операционные системы (1114679), страница 35
Текст из файла (страница 35)
В однопоточной программе результаты получаются последовательно, аозтому программа должна ожидать, пока от каждого сервера по очереди будет получен ответ. Переписав программу так, чтобы для каждого вызова удаленной процедуры она использовала отдельный поток, можно получить супгественный выигрыш в скорости. Заметим, что если такая программа работает на однопроцессорной машине, то запросы будут генерироваться последовательно; результаты тоже будут получены последовательно, однако прога Рамма будет ожидать двух ответов одновременно.
г Вгггов удаленнои процедуры — эта технология, лри которой две программы, карые маг ггагут выполняться на разных машина», вгаимодействугат между собой с ломосинугш таксиса и семантики. вызовов и возвратов ив процедур. Обе программы. выгыгглца и - и вызываемая, ведут себя так, как будто ани выполняются на одной и тай же 'аине и - Вызовы удаленных процедур наста применяются в приложения», работающих схс гге ас„ '.
е клиент,гсервер. ХХодробнее вызовы удаленны~ процедур абсугкдакгпгся в главе 13, 'гределенные системы". 4. Потоки, симметричная многопроцессорная обработка... Завергдение обработки запроса Запрос на удаленный Запрос на удаленный вызов процедуры вызов процедуры (теток д (процесс 1) ()огок В (процесс 1) Поток С (процесс 2) Запрос на вызов про пток д (процесс 1) Поток В (процесс Ц б) удален ныи вызов процедуры с для каткдого сервера (в однопроцессорной системе) (,-г г -.яд Блокирован, ожидает ответа на удаленный вьаов процедуры ~ Блокирован.ожидаеткогда освободится процессор, который зантп потоком В Часть 2." а) удаленный вызов процедуры с использованием одного потока ~ Выполняется :3: Рис.
4.3. удаленный вызов процедуры ("ВРС~, в котором использутагпся пата В однопроцессорных системах многозадачность ость позволяет че, ы' личные потоки нескольких процессов. В примере, пок е показанном на едуются три потока, принадлежащие двум процессам. Р ессам. Передача ' ~о т одного процесса другому происходит либо тогда, тог а когда бло, юлняющийся поток, либо когда заканчивается интер инте вал време ный для его выполнения.з З В зтам примере поток С начинает выполняться, , после того как о первал времени, агпведекныи потоку А, несмотря на то то чта поток В нах тяпни готовности.
Выбор между потока.ни В и С вЂ” это вопрос планирова ', иа исследуется в четвертой части книги. ЙХИ.Я Блокирован ~ Выполняется Рис. 4.4. П име р р многопоточности в однопроцессорной системе Синхронизация потоков Все потоки процесса используют одно и то же адресное пространство, как и другие ресурсы, например открытые Файлы.
Любое изменение какого-нибудь ресурса одним из потоков процесса оказывает влияние ние на другие потоки этого же процесса. Поэтому действия различных потоков необходимо синхронизировать, чтобы они не мешали друг другу или чтобы не повредили структуры данных. д д ух потоков будет пытаться добавить свой элемент в двунаправленный список, может быть потерян один и один из элементов (или нарушена целостность списка) При рассмотрении синхронизации потоков возникают те же вопросы и используются те же мета ы д, что и при синхронизации процессов.
Эти вопросы и методы обсуждаются в главе 5 "П и многозадачно ", " .. ание . а е 5, Параллельные вычисления: взаимоисключен ия сть, и главе б, "Взаимоблокировка и голодание". ~РИвтЕр: АЙОЬЕ РадЕМайЕГ (У1а)с Ра~~мотрим использо ользование потоков на примере приложения Лс)оЬе Ра е- раКеМ а ег. Работающего по и под управлением операционной системы 1 тппх. Программа соз а аЮМа)сег является настольны ьным издательским средством, предназначенным ля дания и Формати ования й для етого п р ия документов. Для оптимизации скорости отклика ~кв~," приложения была выб ан т рана потоковая структура, показанная на рис.
4.5 твй 9Й Три потока ~ П~ток, обно активны всегда — поток, отвечающий за обраб б отку со ыОпе , о новляющий экран, и служебный поток. тр у ся много времени (печать, импорт данных и Рации, на которые еб ет выполняются в служебном потоке программы Ра~еМа)сег, чтобы не овать этими операциями возможность обработки поступающих сообще- ,:, ~~О Пааво этом же потоке п оисхо ит б р д альшая часть инициализации программы, ':втв док валяет избежать и осто р я.
которыи мог бы возникнуть при создании новоумента или отк ытии е абот .„ р уже существующего. Отдельный поток служит для ки сообщений о новых событиях. 4 П """'р ц рн б б Потоки на уровне пользова~еля ова стр оватедьское странство в! "оаьаоватееьскнй уровень Готов на подьаоватеньском уровне й Потот на уровне ядра Процесс О Часть 2.'- Рис. 4.5.
Потоковая структура программы Ат1оЬе РауеМайег Синхронизация служебного потока и потока обработки событий непростой задачей. Пользователь может продолжать набирать текст или : мышью, активизируя тем самым поток обработки событий, в то вре :лужебный поток будет все еще занят. При возникновении подобного ко РааеМа1сег Фильтрует сообщения и воспринимает только основные из . кие, как запрос на изменение размера окна. О завершении выполнения задания свидетельствует сообщение, и шее из служебного потока. Пока это сообщение не будет получено, возм пользователя в программе РааеМаЫег ограничены.
Об этом свидетел ключение пунктов меню и специальный вид курсора. Пользователь мо визировать окна других приложений; когда курсор перемещается в др он приобретает вид, соответствующий приложению этого окна. Для обновления экрана используется отдельный поток, что выз дующими причинами. 1. В программе РадеМа)сег количество объектов на странице не огр поэтому обработка запроса на обновление экрана может оказаться;:. длительной. 2. Использование отдельного потока позволяет пользователю в любой,: остановить вывод изображения на экран. При такой методике, н.
может немедленно выполняться команда изменения масштаба. программа должна была сначала закончить вывод страницы в с штабе, а затем полностью вывести ее в новом масштабе, это резко ' ло бы время ее отклика. Возможна также динамическая прокрутка, т.е. обновление экрана:::, ретаскивании пользователем ползунка прокрутки.
Поток обработки соб.. слеживает положение ползунка и перерисовывает размещенные вдоль нейки (которые перерисовываются очень быстро, позволяя пользовател тироваться в текущем положении документа). В это время поток об" экрана постоянно пытается перерисовать смещающуюся страницу, изменение ее положения. Реализация динамического обновления экрана без использован привела бы к перегрузке приложения, так как ему приходилось бы ть свои действия в разных частях кода с помощью обмена сообщениями.
Мно„опо точность позволяет более естественно реализовать код, в котором преднола„ается параллельное выполнение различных действий. потоки на пользовательском уровне и на уровне ядра Обычно выделяют две общие категории потоков: потоки на уровне пользоателя (ттеег-1е~те! тЬгеас)э — 1)1.Т) и потоки на уровне ядра (1сегпе1-1еье! 1)тгеайэ — К1.Т). Потоки второго типа в литературе иногда называются потока~и, поддерживаемыми ядром, или облегченными процессами. В программе, полностью состоящей из 1)ЕТ-потоков, все действия по управлению потоками выполняются самим приложением; ядро, по сути, и не подозревает о существовании потоков. На рис. 4.б,а проиллюстрирован подход, при котором используются только потоки на уровне пользователя.
Чтобы приложение было многопоточным, его следует создавать с применением специальной библиотеки, представляющей собой пакет программ для работы с потоками на уровне ядра. Такая библиотека для работы с потоками содержит код, с помощью которого можно создавать и удалять потоки, производить обмен сообщениями и данными между потоками, планировать их выполнение, а также сохранять и восстанавливать их контекст. Рис. 4.6.
Потоки на яольаоеательеком уровне и но уровне ядри умолчанию приложение в начале своей работы состоит из одного потока и Бо его в олнение начинается как выполнение этого потока. Такое приложение вместе ° яющим его потоком размещается в едином процессе, который управляется сс Р~~к. Вы ыполняющесся приложение в любой момент времени может породить нс;- ьтй по„к ток, который будет выполняться в пределах того же процесса.
Новый поток дается , явой я с помощью вызова специальной подпрограммы из библиотеки, предназнадля работы с потоками. Управление к этой подпрограмме переходит в ре- 4- Потоки, симметричная многопроцессорная обработка... 205 тате вызова процедуры. Библиотека потоков создает структуру данных потока, а потом передает управление одному из готовых к выполнению ,ого процесса, руководствуясь некоторым алгоритмом планирования,; „аленке переходит к библиотечной подпрограмме, контекст текущего пото ' яется, а когда управление возвращается к потоку, его контекст восстан этот контекст в основном состоит из содержимого пользовательских ре чика команд и указателей стека. Все описанные в предыдущих абзацах события происходят в пользо ~ пространстве в рамках одного процесса.
Ядро не подозревает об з ,ности. Оно продолжает осуществлять планирование процесса как то и приписывать ему единое состояние выполнения (состояние гото ' ояние выполняющегося процесса, состояние блокировки и т.д.). П ниже примеры должны прояснить взаимосвязь между планирование . и планированием процессов. Предположим, что выполняется поток ~ий в процесс В (см. рис. 4.7). Состояния этого процесса и составляю эков на пользовательском уровне показаны на рис. 4.7,а. Впоследс произойти одно из следующих событий. Приложение, в котором выполняется поток 2, может произвести си ' ' вызов, например запрос ввода-вывода, который блокирует процесс зультате этого вызова управление перейдет к ядру. Ядро вызывает, ру ввода-вывода, переводит процесс В в состояние блокировки и и управление другому процессу.
Тем временем поток 2 процесса В все ходится в состоянии выполнения в соответствии со структурой поддерживаемой библиотекой потоков. Важно отметить, что поток 2:" полняется в том смысле, что он работает с процессором; однако биб потоков воспринимает его как выполняющийся. Соответствующие мы состояний показаны на рис. 4.7,6. . В результате прерывания по таймеру управление может перейти к ро определяет, что интервал времени, отведенный выполняющемуся' ный момент процессу В„истек.
Ядро переводит процесс В в состо товности и передает управление другому процессу. В это время, Ф': структуре данных, которая поддерживается библиотекой потоков, ",' процесса В по-прежнему будет находиться в состоянии выполнен . ветствующие диаграммы состояний показаны на рис. 4.7,в. '. Поток 2 достигает точки выполнения, когда ему требуется, чтобы '.. процесса В выполнил некоторое действие. Он переходит в заблоки состояние, а поток 1 — из состояния готовности в состояние вып, Сам процесс остается в состоянии выполнения.