Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен Павлов.docx
Скачиваний:
64
Добавлен:
17.08.2022
Размер:
786.12 Кб
Скачать

2.1 Классическая модель потоков

Процессы используются для группировки взаимосвязанных ресурсов в единое целое, а потоки являются «сущностью», распределяемой для выполнения на центральном процессоре.

Процесс содержит:

- адресное пространство (содержащее текст программы и данные);

- глобальные переменные;

- открытые файлы;

- дочерние процессы;

- необработанные аварийные сигналы;

- сигналы и обработчики сигналов;

- учетную информации.

Поток выполнения имеет:

- счетчик команд, отслеживающий, какую очередную инструкцию нужно выполнять;

- регистры, в которых содержатся текущие рабочие переменные;

- стек с протоколом выполнения, содержащим по одному фрейму для каждой вызванной, но еще не возвратившей управление процедуры

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

Многопоточный режим допускает работу нескольких потоков в одном и том же процессе.

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

Различные процессы могут сильно конкурировать друг с другом, а потоки внутри одного процесса служат для совместной работы, активно и тесно сотрудничают друг с другом.

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

 выполняемый,

 заблокированный,

 готовый,

 завершенный.

Каждый поток имеет собственный стек, который содержит по одному фрейму для каждой уже вызванной, но еще не возвратившей управление процедуры.

  1. Применение потоков, моделирование режима многозадачности

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

С появлением понятия потоков в проектирование добавляется возможность использования в ходе параллельных действий единого адресного пространства и всех имеющихся данных процесса. Еще одной отличительной особенностью потоков является лёгкость создания и завершения по сравнению с более сложными процессами.

Потоки позволяют получить довольно большой прирост производительности приложений, выполняющих серьезные вычисления за счет параллельного выполнения различных задач и лёгкости создания. Особенно это актуально для систем, использующих несколько центральных процессоров, где появляется «реальная» возможность параллельных вычислений.

Потоки можно классифицировать следующим способом:

  • По отображению в ядро: 1:1, N:M, N:1.

  • По многозадачной модели: вытесняющая многозадачность, кооперативная многозадачность.

  • По уровню реализации: режим ядра, режим пользователя, гибридная реализация.

Классификация по отображению в ядро.

Модель 1:1 – любой поток, созданный в любом процессе управляется напрямую планировщиков ядра ОС, то есть один пользовательский процесс на один поток ядра.

Модель N:M описывает некоторое число потоков пользовательских процессов N на M потоков режим ядра. К примеру, имеется некая гибридная система, где часть потоков отдается на выполнение в планировщике, а большая их часть в планировщике потоков процесса или библиотеки. Данная модель труднореализуема, но обладает серьезной производительностью.

Модель N:1 – это множество потоков пользовательского процесса, которые отображается на один поток ядра ОС.

Классификация по многозадачной модели

Понятие кооперативной многозадачности обозначает то, что все потоки выполняют свою работу по очереди, с одинаковым отведенным на это временем.

Вытесняющая многозадачность.

Поток с большим приоритетом «вытесняет» поток с меньшим. Современные ОС используют данный подход для выполнения поставленных задач.

Классификация по уровню реализации

Реализацию потоков на уровне ядра можно сравнить с классической моделью 1:1.

Реализация потоков в пользовательском режиме. Такие тяжелые операции, как системный вызов и смена контекста требовали реализацию поддержку в режиме пользователя. Было сделано много попыток реализации, но данная методика не обрела популярности.

Гибридная реализация появилась при попытке совместить преимущества двух предшествующих реализаций, но задумка не удалась: получилось больше недостатков, чем достоинств.

Применение потоков

Допустим мы имеем веб-сайт, куда поступают запросы на определенные веб-страницы, которые затем отправляются обратно пользователям. Как правильно, на главную страницу сайта приходится большинство клиентских запросов. Данные «подборки» называются кэшем, который позволяет повысить производительность за счёт размещения часто используемых запросов на основной странице, то есть в основной памяти.

Один из потоков называется диспетчером, который «читает» входящие запросы от пользователей. Далее он анализирует запрос, подбирает «спящий» (то есть заблокированный) рабочий поток, которому и передает запрос. После этого диспетчер разблокирует данный поток и переводит его в состояние готовности к работе.

После перевода рабочий поток проверяет возможность получения запрашиваемых данных из кэша страниц (доступ к которому имеют все потоки). Если нужная информация не находится, то поток запускает операцию чтения с диска и переводится в «спящий» режим работы до завершения операции.

При блокировке одного потока из-за необходимости поиска данных с диска разблокируется другой рабочий поток и переходит в состояние готовности к работе.

Потоки позволяют использовать концепцию последовательных процессов, которые осуществляют блокирующие системные вызовы и в это же время позволяют «распараллелить» работу. Данные блокирующие системные вызовы позволяют упростить программирование, а работа в параллели даёт большую производительность.

Многозадачность

Многозадачность – это свойство ОС или среды программирования обеспечивать возможность параллельной обработки нескольких процессов. Примитивные многозадачные среды позволяют закрепить за каждой задачей определённый участок памяти и задача выполняется в строго определённые интервалы времени.

Развитые многозадачные системы проводят распределение ресурсов динамически, когда определенная задача занимает память или же освобождает её в зависимости от приоритета и стратегии системы. Такая многозадачная среда обладает данными особенностями:

  • Каждая задача имеет свой приоритет, в соответствии с которым для её выполнения выделяется время и память.

  • Очередь задач выстраивается по принципу стратегии системы и приоритетов, чтобы каждая задача получила требуемые ресурсы.

  • Система обеспечивает защиту памяти от «несанкционированного» вмешательства других задач.

  • Система обрабатывает запросы в режиме реального времени.

Режим многозадачности целесообразно применять для рационального использования ЦП.

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

Допустим, некий процесс проводит часть времени , которое ему выделил ЦП, в режиме ожидания завершения некоторых операций ввода-вывода. В памяти также присутствуют одновременно процессов, то вероятность того, что все процессы находятся в режиме ожидания равна .

На рис. 1 представлена функция, называемая степенью многозадачности, которая представляет из себя зависимость времени использования ЦП от количества процессов, находящихся одновременно в памяти.

Рис. 1. Зависимость времени использования ЦП от количества процессов, находящихся одновременно в памяти.

Если процесс находится в режиме ожидания 80% своего времени, то для снижения бездействия ЦП до 10% в памяти должны находиться одновременно 10 процессов. В данном случае под режимом ожидания подразумевается не только ожидание ввода-вывода, а также ещё ожидание пользовательского ввода.

Например, память компьютера имеет объем 8 Гбайт, ОС и её таблицы используют около 2 Гбайт памяти, а каждая пользовательская программа также занимает около 2 Гбайт. Значит в памяти компьютера можно одновременно разместить всего три программы пользователя. В данном случае ЦП будет загружен на (учитывая среднее ожидание ввода-вывода равное 80% времени). Если увеличить объем памяти компьютера до 16 Гбайт, то это позволит системе перейти от трёхкратной многозадачности к семикратной, что повысит загрузку ЦП до 79%, то есть дополнительные 8 Гбайт памяти увеличат производительность процессора на 30%.

Первое увеличение объема памяти привносит большой рост производительности процессора для повседневных задач рядового пользователя. Увеличение объема до 24 Гбайт поднимет уровень производительности с 79% до 91% (прирост только 12%).

Прям совсем коротко по теме

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

Потоки позволяют использовать концепцию последовательных процессов, которые осуществляют блокирующие системные вызовы и в это же время позволяют «распараллелить» работу.

Многозадачность – это свойство ОС или среды программирования обеспечивать возможность параллельной обработки нескольких процессов. Примитивные многозадачные среды позволяют закрепить за каждой задачей определённый участок памяти и задача выполняется в строго определённые интервалы времени.