УПРАВЛЕНИЕ ПРОЦЕССАМИИ ПОТОКАМИ в LINUX
Процессы в Linux
В операционной системе Linux процесс, или задание, представляется структурой данных task_struct. Linux поддерживает таблицу task, представляющую собой линейный вектор указателей на каждую определенную в данный момент структуру данных task_struct. В этой структуре данных информация разбита на следующие категории.
• Состояние. Состояние выполнения процесса (выполняющийся, готовый к выполнению, приостановленный, остановленный, зомби).
• Информация по планированию. Информация, которая нужна операционной системе Linux для планирования процессов. Процесс может быть обычным или выполняющимся в реальном времени; кроме того, он обладает некоторым приоритетом. Процессы, выполняющиеся в реальном времени, планируются до обычных процессов; в каждой из категорий можно использовать относительные приоритеты. Счетчик ведет отсчет времени, отведенного процессу.
• Идентификаторы. Каждый процесс обладает своим собственным идентификатором, а также идентификаторами пользователя и группы. Идентификатор группы используется для того, чтобы назначить группе пользователя права доступа к ресурсам.
• Обмен информацией между процессами. В операционной системе Linux используется такой же механизм межпроцессного взаимодействия, как и в операционной системе UNIX SVR4, описанной в главе 6, "Взаимоблокировка и голодание".
• Связи. Каждый процесс содержит в себе связи с параллельными ему процессами, с родственными ему процессами (с которыми он имеет общий родительский процесс) и связи со всеми своими дочерними процессами.
• Время и таймеры. Сюда входит время создания процесса, а также количество процессорного времени, затраченного на данный процесс. С процессом а также могут быть связаны интервальные таймеры (один или несколько). Интервальный таймер задается в процессе с помощью системного вызова; после истечения периода таймера процессу отправляется соответствующий сигнал. Таймер может быть создан для одноразового или периодического использования.
• Файловая система. Содержит в себе указатели на все файлы, открытые данным процессом.
• Виртуальная память. Определяет отведенную данному процессу виртуальную память.
• Контекст, зависящий от процессора. Информация по регистрам и стеку, составляющая контекст данного процесса. На рис. 4.18 показаны состояния выполнения процесса.
• Выполняющийся. Это состояние отвечает на самом деле двум состояниям: текущий процесс либо выполняется, либо готов к выполнению.
• Прерываемый. Это состояние блокировки, в котором процесс ожидает наступления события, например, завершения операции ввода-вывода, освобождения ресурса или сигнала от другого процесса.
• Непрерываемый. Это состояние блокировки другого рода. Его отличие от предыдущего состоит в том, что в непрерываемом состоянии процесс непосредственно ожидает выполнения какого-то аппаратного условия, поэтому он не воспринимает никаких сигналов.
• Остановленный. Процесс был остановлен и может быть продолжен только при соответствующем воздействии другого процесса. Например, процесс, который находится в состоянии отладки, может перейти в состояние остановки.
• Зомби. Процесс был прекращен, но по какой-то причине его структура остается в таблице процессов.
•
Потоки в Linux
В операционной системе Linux новый процесс создается путем копирования атрибутов текущего процесса. Новый процесс может быть клонирован (cloned); при этом такие ресурсы, как файлы, обработчики сигналов и виртуальная память, используются совместно. Если два процесса пользуются одной и той же виртуальной памятью, они функционируют как потоки в рамках одного и того же процесса. Однако для потоков структуры данных отдельно не задаются. Таким образом, в операционной системе Linux потоки и процессы не различаются.
РЕЗЮМЕ, КЛЮЧЕВЫЕ ТЕРМИНЫ И КОНТРОЛЬНЫЕ ВОПРОСЫ
В некоторых операционных системах различаются понятия процесса и потока; первый из них имеет отношение к владению ресурсами, а второй — к выполнению программы. Такой подход может привести к повышению эффективности программы и удобен при составлении кода. В многопоточной системе в рамках одного процесса есть возможность задавать несколько потоков. Для этого можно использовать либо потоки на пользовательском уровне, либо потоки на уровне ядра. Потоки на пользовательском уровне остаются невидимыми для операционной системы, они создаются и управляются библиотекой потоков, которая выполняется в пользовательском пространстве процесса. Потоки на пользовательском уровне очень эффективны, так как при их переключении не нужно переключать режим работы процессора. Однако в одном процессе в каждый момент времени может выполняться только один поток на пользовательском уровне. Если один такой поток будет заблокирован, это приведет к блокированию всего процесса. Потоки на уровне ядра — это потоки, которые управляются ядром. Благодаря тому, что такие потоки распознаются ядром, в многопроцессорной системе могут параллельно выполняться несколько потоков одного и того же процесса, а блокирование потока не приводит к блокированию всего процесса. Однако для переключения потоков на уровне ядра нужно переключать режим работы процессора.
Симметричная многопроцессорная обработка — это такой метод организации многопроцессорной системы, при котором каждый процесс или поток (в том числе и процесс ядра) может выполняться на любом процессоре. В связи с использованием симметричной многопроцессорной архитектуры, обеспечивающей при равных условиях более высокую производительность по сравнению с однопроцессорной системой, возникают новые аспекты архитектуры операционных систем.
В последние годы большой интерес вызывает разработка операционных систем с микроядром. В чистом виде операционная система с микроядром основана на очень маленьком микроядре, которое работает в режиме ядра и выполняет только самые важные и существенные функции операционной системы. Другие ее функции реализованы так, что они выполняются в пользовательском режиме, применяя микроядро только для важнейших сервисов. Дизайн с использованием микроядра способствует гибкой и модульной реализации; однако при этом встают вопросы производительности.
Ключевые термины Задание Облегченный процесс Процесс Микроядро Поток Симметричная многопроцессорная Многопоточность Поток на пользовательском- обработка Монолитная уровне операционная система Поток на уровне ядра |
Контрольные вопросы
4.1. В табл. 3.5 перечислены типичные элементы, встречающиеся в управляющем блоке процесса операционной системы, в которой не используются потоки. Какие из них следует отнести к управляющему блоку потока, а какие — к управляющему блоку процесса в многопоточной системе?
4.2. Перечислите причины, по которым переключение потоков обходится дешевле, чем переключение процессов.
4.3. Назовите две различные и потенциально независимые характеристики, содержащиеся в понятии процесса.
4.4. Приведите четыре общих примера использования потоков в однопользовательской многопроцессорной системе.
4.5. Какие ресурсы обычно совместно используются всеми потоками процесса?
4.6. Перечислите три преимущества потоков на пользовательском уровне над потоками на уровне ядра.
4.7. Приведите два недостатка потоков на пользовательском уровне по сравнению с потоками на уровне ядра.
4.8. Дайте краткое описание различных архитектур, приведенных на рис. 4.8.
4.9. Перечислите основные особенности архитектуры операционной системы для многопроцессорной машины.
4.10. Приведите примеры сервисов и функций, встречающихся в типичной монолитной операционной системе, которые в операционной системе с микроядром могли бы быть реализованы в виде внешних подсистем.
4.11. Назовите семь потенциальных преимуществ архитектуры операционной системы с микроядром по сравнению с монолитной операционной системой.
4.12.Объясните, в чем заключаются потенциальные недостатки операционной системы с микроядром, связанные с ее производительностью.
4.13. Назовите три функции, которые, скорее всего, будут включены даже в операционную систему с самым малым микроядром.
4.14. Назовите основную форму обмена информацией между процессами в операционной системе с микроядром.
РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
В [LEWI96] и [KLEI96] представлены обзоры концепций потока и обсуждение стратегий программирования. В первом издании больше внимания уделяется описанию концепций, а во втором — программированию, но и в том и в другом тема изложена достаточно хорошо. В [РНАМ96] представлены средства работы с потоками в операционной системе Windows NT, которые, по сути, идентичны соответствующим средствам операционной системы Windows 2000.
В [MUKH96] приводится обсуждение вопросов, связанных с архитектурой операционных систем для многопроцессорных машин. В [СНАР97] содержится пять статей, в которых идет речь о современных направлениях развития многопроцессорных операционных систем. Интересное обсуждение принципов архитектуры микроядра можно найти в [LIED95] и [LIED96]; во втором издании внимание фокусируется на вопросах производительности.
СНАР97 Chapin S., Maccabe A., eds. Multiprocessor Operating Systems: Harnessing the Power Special issue of IEEE Concurrency, April-June 1997.
KLEI96 Kleiman S., Shah D., Smallders B. Programming with Threads. — Upper Saddle River, NJ: Prentice Hall, 1996.
LEWI96 Lewis B.y Berg D. Threads Primer. — Upper Saddle River, NJ: Prentice
Hall, 1996.
LIED95 Liedtke J. On ji-Kernel Construction. — Proceedings of the Fifteenth ACM
Symposium on Operation Systems Principles, December 1995.
LIED96 Liedtke J. Toward Real Microkernels. — Communications of the ACM, September 1996.
MUKH96Mukherjee В., Karsten S. Operating Systems for Parallel Machines. Parallel Computers: Theory and Practice, Ed. by T. Casavant, P. Tvrkik and F. Plasil. — Los Alamitos, CA: IEEE Computer Society Press, 1996.
PHAM96 Pham Т., Garg P. Multithreaded Programming with Windows NT. —Saddle River, NJ: Prentice Hall, 1996.
ЗАДАЧИ
4.1. Отмечено, что использование нескольких потоков в одном и том же процессе обладает следующими преимуществами: (1) создание нового потока в уже существующем процессе требует меньших непроизводительных затрат, переключение потоков одного процесса требует меньших затрат, чем переключение потоков разных процессов?
4.2.При сравнении потоков на пользовательском уровне и потоков на уровне ядра упоминалось, что недостаток потоков на пользовательском уровне состоит в том, что выполнение системного вызова блокирует не только вызвавший поток, но и все остальные потоки данного процесса. Почему так происходит?
4.3.То, что в других операционных системах воплощено в концепции процесса, в операционной системе OS/2 разделено на три составляющих: сессия, процессы и потоки. Сессия является набором одного или нескольких процессов, имеющих связь с интерфейсом пользователя (клавиатурой, дисплеем, мышью). Сессия представляет собой интерактивное пользовательское приложение, в роли которого может выступать текстовый редактор или электронная таблица. Эта концепция позволяет пользователю персонального компьютера запускать несколько приложений, открывая в каждом из них одно или несколько окон. Операционная система должна следить за тем, какое из окон, а следовательно, какая из сессий является активной. В зависимости от этого ввод, поступающий с клавиатуры и мыши, направляется в ту или иную сессию. В любой момент времени одна сессия обрабатывается на переднем плане, тогда как остальные сессии находятся в фоновом режиме. Все, что вводится с помощью клавиатуры и мыши, направляется в процесс, сессия которого в соответствии с состоянием приложений находится в приоритетном режиме. Когда сессия находится на переднем плане, процесс, выводящий видеосигнал, пересылает его непосредственно в видеобуфер и, соответственно, на экран пользователя. При переходе сессии в фоновый режим содержимое физического видеобуфера сохраняется в логическом видеобуфере. Если какой-нибудь из потоков любого процесса, относящегося к сессии в фоновом режиме, производит вывод на экран, этот вывод направляется в соответствующий логический видеобуфер. Когда сессия возвращается на передний план, происходит обновление экрана, отражающее текущее содержимое логического видеобуфера этой сессии.
Исключив сессии и связав интерфейс пользователя (клавиатуру, мышь, экран) с процессами, можно свести количество концепций, имеющих отношение к процессу, к двум. Таким образом, в каждый момент времени на переднем плане будет находиться один процесс. В целях структурирования процессы можно разделить на потоки.
а. Какие преимущества теряются при таком подходе?
б. Если такая модификация будет реализована, как следует осуществлять назначение ресурсов (памяти, файлов и т.д.) — на уровне процесса или на уровне потока?
4.4.Рассмотрим среду, в которой осуществляется взаимно однозначное отображение между потоками на пользовательском уровне и потоками на уровне ядра. В такой системе один или несколько потоков одного и того же процесса могут производить блокирующие системные вызовы, в то время как другие будут продолжать выполняться. Объясните, почему на однопроцессорной машине в такой системе многопроцессорные программы могут выполняться быстрее, чем их однопоточные двойники.
4.5.Если процесс завершается, но какие-то его потоки все еще выполняются, то будут ли они выполняться и далее?
4.6.Структурирование операционной системы OS/390, предназначенной для мейнфреймов, основано на концепциях адресного пространства и задания. В других операционных системах адресное пространство, грубо говоря, соответствует приложению и более или менее соответствует процессу. В рамках одного и того же адресного пространства можно одновременно создавать и выполнять несколько заданий, что приближенно соответствует концепции многопоточности. Для управления этими заданиями создается ряд структур данных, две из которых являются основными. Независимо от того, является ли данное адресное пространство выполняющимся или нет, в соответствующем управляющем блоке адресного пространства (address space control block — ASCB) содержится необходимая операционной системе OS/390 информация. В ее состав входят текущий приоритет, размер выделенной данному адресному пространству реальной и виртуальной памяти, количество готовых к выполнению заданий в адресном пространстве, а также сведения о том, является ли каждое из этих заданий выгруженным из памяти или нет. В управляющем блоке задания (task control block — ТСВ) отражается выполнение пользовательской программы. В нем содержится информация, необходимая для управления заданием в пределах адресного пространства, включая информацию о статусе процессора, указатели на входящие в состав задания программы и состояние выполнения задания. Блоки ASCB являются глобальными структурами, поддерживаемыми в системной памяти, а блоки ТСВ — локальными структурами, каждая из которых поддерживается в своем адресном пространстве. В чем состоит преимущество разделения управляющей информации на глобальную и локальную части?
4.7. К многопроцессорной системе с 8 процессорами подключены 20 лентопротяжных устройств. В систему поступает большое количество заданий, причем каждое из них для завершения требует максимум 4 лентопротяжных устройства. Предположим, что каждое задание начинает выполняться с требованием только трех устройств; четвертое ему потребуется только через достаточно продолжительный срок, причем будет использоваться очень недолго. Предположим также, что источник заданий бесконечен.
а. Допустим, что планировщик операционной системы не запускает задание до тех пор, пока не становятся доступными четыре устройства. В начале работы задания за ним закрепляются четыре устройства, которые освобождаются только по завершении задания. Чему равно максимальное количество заданий, которые могут одновременно выполняться в такой системе? Чему равно минимальное и максимальное количество лентопротяжных устройств, которые могут оказаться простаивающими при такой стратегии?
б. Предложите альтернативную стратегию для повышения степени использования лентопротяжных устройств, которая в то же время позволяет избежать взаимоблокировок. Чему равно максимальное количество одновременно выполняющихся заданий? Какой величиной ограничено количество простаивающих лентопротяжных устройств?
4.8. В описании состояний потоков на пользовательском уровне в операционной системе Solaris говорилось о том, что поток пользовательского уровня может уступить управление другому потоку с таким же приоритетом. Возможна ли ситуация, когда в системе находится готовый к выполнению поток с более высоким приоритетом, и, следовательно, выполняющийся поток уступит управление потоку с таким же или более высоким приоритетом?
Дата добавления: 2016-06-05; просмотров: 3861;