Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У. Столлингс ГЛАВА 4 Потоки.doc
Скачиваний:
49
Добавлен:
11.05.2015
Размер:
6.22 Mб
Скачать

Мотивация

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

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

Если в приложение входят потоки, которые могут быть блокированы, на­пример, при выполнении ввода-вывода, то заманчиво использовать несколько облегченных процессов, поддерживающих такое же или большее количество по­токов на пользовательском уровне. Чтобы в рамках этого же процесса могли вы­полняться и другие потоки, не нужно никакого вмешательства приложения или библиотеки потоков. Если один из потоков процесса будет блокирован, другие его потоки могут выполняться в оставшихся облегченных процессах.

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

Для некоторых приложений подходит смешанное использование потоков, постоянно связанных с облегченными процессами, и несвязанных потоков (при этом несколько облегченных процессов совместно используются несколькими по­токами). Например, при реализации прикладной системы реального времени программист может захотеть, чтобы одни потоки обладали приоритетом в мас­штабе всей системы и планировались в реальном времени, а другие — выполня­ли функции в фоновом режиме и могли совместно использовать один или не­большое количество облегченных процессов.

Структура процессов

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

В структуру данных облегченного процесса входят такие элементы:

  • идентификатор облегченного процесса;

  • приоритет данного облегченного процесса (и, следовательно, потока ядра, который его поддерживает);

  • маска сигналов, предоставляющая ядру информацию о том, какие сигналы могут быть восприняты процессом;

  • сохраненные значения регистров пользовательского уровня (когда облегчен­ный процесс не выполняется);

  • стек ядра данного облегченного процесса, в который входят аргументы сис­темного вызова, результаты и коды ошибок каждого уровня;

  • данные по использованию ресурсов и профилированию;

  • указатель на соответствующий поток ядра;

  • указатель на структуру процесса.