Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 03.docx
Скачиваний:
10
Добавлен:
26.09.2019
Размер:
977.5 Кб
Скачать

5.2.2 Модель потока

С каждым потоком связывается:

  • Счетчик выполнения команд

  • Регистры для текущих переменных

  • Стек

  • Состояние

Потоки делят между собой элементы своего процесса:

  • Адресное пространство

  • Глобальные переменные

  • Открытые файлы

  • Таймеры

  • Семафоры

  • Статистическую информацию.

В остальном модель идентична модели процессов.

В POSIX и Windows есть поддержка потоков на уровне ядра.

В Linux есть новый системный вызов clone для создания потоков, отсутствующий во всех остальных версиях системы UNIX.

В POSIX есть новый системный вызов pthread_create для создания потоков.

В Windows есть новый системный вызов Createthread для создания потоков.

5.2.4 Реализация потоков в пространстве пользователя, ядра и смешанное

А - потоки в пространстве пользователя B - потоки в пространстве ядра

Реализация многопоточности в ОС, как и многих других возможностей, имеет несколько уровней абстракции. Самый высокий из них – пользовательский уровень. С точки зрения пользователя и его программ, управление потоками реализовано через библиотеку потоков пользовательского уровня (user threads). Отметим, что существует несколько моделей потоков пользовательского уровня, среди которых:

  • POSIX Pthreads – потоки, специфицированные стандартом POSIX и используемые в POSIX-приложениях (рассмотрены позже в данной лекции);

  • Mac C-threads – пользовательские потоки в системе MacOS;

  • Solaris threads – пользовательские потоки в ОС Solaris (рассмотрены позже в данной лекции).

Низкоуровневые потоки, в которые отображаются пользовательские потоки, называются потоками ядра (kernel threads). Они поддержаны и используются на уровне ядра операционной системы. Как и подходы к пользовательским потокам, подходы к архитектуре и реализации системных потоков и к отображению пользовательских потоков в системные в разных ОС различны. Например, собственные модели потоков ядра со своей спецификой реализованы в следующих ОС:

  • Windows 95/98/NT/2000/XP/2003/2008/7;

  • Solaris;

  • Tru64 UNIX;

  • BeOS;

  • Linux.

Описание рисунка. В случае А ядро о потоках ничего не знает. Каждому процессу необходима таблица потоков, аналогичная таблице процессов.

Преимущества случая А:

  • Такую многопоточность можно реализовать на ядре не поддерживающем многопоточность

  • Более быстрое переключение, создание и завершение потоков

  • Процесс может иметь собственный алгоритм планирования.

Недостатки случая А:

  • Отсутствие прерывания по таймеру внутри одного процесса

  • При использовании блокирующего (процесс переводится в режим ожидания, например: чтение с клавиатуры, а данные не поступают) системного запроса все остальные потоки блокируются.

  • Сложность реализации

Существуют различные модели многопоточности – способы отображения пользовательских потоков в потоки ядра. Теоретически возможны (и на практике реализованы) следующие модели многопоточности:

- Модель много / один (many-to-one) – отображение нескольких пользовательских потоков в один и тот же поток ядра. Используется в операционных системах, не поддерживающих множественные системные потоки (например, с целью экономии памяти). Данная модель изображена на рис. 10.2.

Рис. 10.2. Схема модели многопоточности "много / один".

- Модель один / один (one-to-one) – взаимно-однозначное отображение каждого пользовательского потока в определенный поток ядра. Примеры ОС, использующих данную модель, - Windows 95/98/NT/2000/XP/2003/2008/7; OS/2. Данная модель изображена на рис. 10.3.

Рис. 10.3. Схема модели многопоточности "один / один".

- Модель много / много (many-to-many) – модель, допускающая отображение нескольких пользовательских потоков в несколько системных потоков. Такая модель позволяет ОС создавать большое число системных потоков. Характерным примером ОС, использующей подобную модель, является ОС Solaris, а также Windows NT / 2000 / XP / 2003 / 2008 / 7 с пакетом ThreadFiber. Данная модель изображена на рис. 10.4.

Рис. 10.4. Схема модели многопоточности "много / много".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]