- •Глава 4.
- •Многопоточность
- •Функциональность потоков
- •Потоки на пользовательском уровне и на уровне ядра
- •Другие схемы
- •4.2 Симметричная многопроцессорная обработка
- •Организация симметричной многопроцессорной системы
- •Архитектура многопроцессорных операционных систем
- •4.3. Микроядра
- •Архитектура микроядра
- •Достоинства архитектуры с микроядром
- •Производительность микроядра
- •Архитектура микроядер
- •4.4. Потоки и smp в windows 2000
- •Объекты процессов и потоков
- •Многопоточность
- •Состояния потоков
- •Поддержка подсистем операционной системы
- •Поддержка симметричной многопроцессорной обработки
- •4.5. Управление потоками и smp в solaris
- •Мотивация
- •Структура процессов
- •Выполнение потоков
- •Прерывания в роли потоков
- •4 6. Управление процессамии потоками в linux
- •4.7. Резюме, ключевые термины и контрольные вопросы
- •Контрольные вопросы
- •4.8. Рекомендуемая литература
- •4.9. Задачи
4.8. Рекомендуемая литература
В [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.
MUKH96 Mukherjee В., 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.9. Задачи
4.1. Отмечено, что использование нескольких потоков в одном и том же процессе обладает следующими преимуществами: (1) создание нового потока в уже существующем процессе требует меньших непроизводительных затрат, переключение потоков одного процесса требует меньших затрат, чем переключение потоков разных процессов?
При сравнении потоков на пользовательском уровне и потоков на уровне ядра упоминалось, что недостаток потоков на пользовательском уровне состоит в том, что выполнение системного вызова блокирует не только вызвавший поток, но и все остальные потоки данного процесса. Почему так происходит?
То, что в других операционных системах воплощено в концепции процесса, в операционной системе OS/2 разделено на три составляющих: сессия, процессы и потоки. Сессия является набором одного или нескольких процессов, имеющих связь с интерфейсом пользователя (клавиатурой, дисплеем, мышью). Сессия представляет собой интерактивное пользовательское приложение, в роли которого может выступать текстовый редактор или электронная таблица. Эта концепция позволяет пользователю персонального компьютера запускать несколько приложений, открывая в каждом из них одно или несколько окон. Операционная система должна следить за тем, какое из окон, а следовательно, какая из сессий является активной. В зависимости от этого ввод, поступающий с клавиатуры и мыши, направляется в ту или иную сессию. В любой момент времени одна сессия обрабатывается на переднем плане, тогда как остальные сессии находятся в фоновом режиме. Все, что вводится с помощью клавиатуры и мыши, направляется в процесс, сессия которого в соответствии с состоянием приложений находится в приоритетном режиме. Когда сессия находится на переднем плане, процесс, выводящий видеосигнал, пересылает его непосредственно в видеобуфер и, соответственно, на экран пользователя. При переходе сессии в фоновый режим содержимое физического видеобуфера сохраняется в логическом видеобуфере. Если какой-нибудь из потоков любого процесса, относящегося к сессии в фоновом режиме, производит вывод на экран, этот вывод направляется в соответствующий логический видеобуфер. Когда сессия возвращается на передний план, происходит обновление экрана, отражающее текущее содержимое логического видеобуфера этой сессии. Исключив сессии и связав интерфейс пользователя (клавиатуру, мышь, экран) с процессами, можно свести количество концепций, имеющих отношение к процессу, к двум. Таким образом, в каждый момент времени на переднем плане будет находиться один процесс. В целях структурирования процессы можно разделить на потоки.
а. Какие преимущества теряются при таком подходе?
б. Если такая модификация будет реализована, как следует осуществлять назначение ресурсов (памяти, файлов и т.д.) — на уровне процесса или на уровне потока?
Рассмотрим среду, в которой осуществляется взаимно однозначное отображение между потоками на пользовательском уровне и потоками на уровне ядра. В такой системе один или несколько потоков одного и того же процесса могут производить блокирующие системные вызовы, в то время как другие будут продолжать выполняться. Объясните, почему на однопроцессорной машине в такой системе многопроцессорные программы могут выполняться быстрее, чем их однопоточные двойники.
Если процесс завершается, но какие-то его потоки все еще выполняются, то будут ли они выполняться и далее?
Структурирование операционной системы OS/390, предназначенной для мейнфреймов, основано на концепциях адресного пространства и задания. В других операционных системах адресное пространство, грубо говоря, соответствует приложению и более или менее соответствует процессу. В рамках одного и того же адресного пространства можно одновременно создавать и выполнять несколько заданий, что приближенно соответствует концепции многопоточности. Для управления этими заданиями создается ряд структур данных, две из которых являются основными. Независимо от того, является ли данное адресное пространство выполняющимся или нет, в соответствующем управляющем блоке адресного пространства (address space control block — ASCB) содержится необходимая операционной системе OS/390 информация. В ее состав входят текущий приоритет, размер выделенной данному адресному пространству реальной и виртуальной памяти, количество готовых к выполнению заданий в адресном пространстве, а также сведения о том, является ли каждое из этих заданий выгруженным из памяти или нет. В управляющем блоке задания (task control block — ТСВ) отражается выполнение пользовательской программы. В нем содержится информация, необходимая для управления заданием в пределах адресного пространства, включая информацию о статусе процессора, указатели на входящие в состав задания программы и состояние выполнения задания. Блоки ASCB являются глобальными структурами, поддерживаемыми в системной памяти, а блоки ТСВ — локальными структурами, каждая из которых поддерживается в своем адресном пространстве. В чем состоит преимущество разделения управляющей информации на глобальную и локальную части?
4.7.К многопроцессорной системе с 8 процессорами подключены 20 лентопротяжных устройств. В систему поступает большое количество заданий, причем каждое из них для завершения требует максимум 4 лентопротяжных устройства. Предположим, что каждое задание начинает выполняться с требованием только трех устройств; четвертое ему потребуется только через достаточно продолжительный срок, причем будет использоваться очень недолго. Предположим также, что источник заданий бесконечен.
а. Допустим, что планировщик операционной системы не запускает задание до тех пор, пока не становятся доступными четыре устройства. В начале работы задания за ним закрепляются четыре устройства, которые освобождаются только по завершении задания. Чему равно максимальное количество заданий, которые могут одновременно выполняться в такой системе? Чему равно минимальное и максимальное количество лентопротяжных устройств, которые могут оказаться простаивающими при такой стратегии?
б. Предложите альтернативную стратегию для повышения степени использования лентопротяжных устройств, которая в то же время позволяет избежать взаимоблокировок. Чему равно максимальное количество одновременно выполняющихся заданий? Какой величиной ограничено количество простаивающих лентопротяжных устройств?
4.8. В описании состояний потоков на пользовательском уровне в операционной системе Solaris говорилось о том, что поток пользовательского уровня может уступить управление другому потоку с таким же приоритетом. Возможна ли ситуация, когда в системе находится готовый к выполнению поток с более высоким приоритетом, и, следовательно, выполняющийся поток уступит управление потоку с таким же или более высоким приоритетом?