Понятие потока. Потоки на пользовательском уровне и на уровне ядра. Комбинированные подходы.

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

 

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

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

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

· Стек

· Состояние

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

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

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

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

· Таймеры

· Семафоры

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

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

Преимущества использования потоков

Упрощение программы в некоторых случаях, за счет использования общего адресного пространства.

Быстрота создания потока, по сравнению с процессом, примерно в 100 раз.

Повышение производительности самой программы, т.к. есть возможность одновременно выполнять вычисления на процессоре и операцию ввода/вывода. Пример: текстовый редактор с тремя потоками может одновременно взаимодействовать с пользователем, форматировать текст и записывать на диск резервную копию.

 

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

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

B - потоки в пространстве ядра

 

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

потоков, аналогичная таблице процессов.

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

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

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

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

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

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

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

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