Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС М1 2011.docx
Скачиваний:
9
Добавлен:
12.11.2019
Размер:
162.32 Кб
Скачать

2.1.2. Модели процессов и потоков

Максимально возможное количество процессов (защищенных адресных пространств) и потоков, которые в них выполняются, может варьироваться в разных системах.

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

  • В некоторых встроенных системах тоже есть одно адресное пространство (один процесс), но в нем разрешенное выполнение многих потоков. В этом случае можно организовывать параллельные вычисления, но защита данных приложения не реализованы.

  • В системах, подобный традиционным версиям UNIX, допускается наличие многих процессов, но в рамках адресного пространства процесса выполняется только один поток. Это традиционная однопоточная модель процессов. Понятие потока в данной модели не применяют, а используют термин «переключение между процессами», «планирование выполнения процессов», «последовательность команд процесса» и т.п. (здесь под процессом понимают его единый поток).

  • В большинстве современных ОС (таких, как линия Windows ХР, современные версии UNIX) может быть много процессов, а в адресном пространстве каждого процесса - много потоков. Эти системы поддерживают многопотоковость или реализуют модель потоков. Процесс в такой системе называют многопотоковым процессом.

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

2.1.3. Составные элементы процессов и потоков

К элементам процесса принадлежат:

  • защищенное адресное пространство;

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

  • информация об использовании ресурсов (открытые файлы, сетевые соединения и т.п.);

  • информация о потоках процесса.

Поток содержит такие элементы:

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

  • стек потока (участок памяти, где находятся адреса возвращения функций потока, которые вызваны в его коде).

2.2. Многопотоковость и ее реализация

2.2.1. Понятие параллелизма

Использование нескольких потоков в приложении означает внесение у него параллелизма. Параллелизм - это одновременное (с точки зрения прикладного программиста) выполнение действий разными фрагментами кода приложения.

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

2.2.2. Виды параллелизма

Можно выделить такие основные виды параллелизма:

  • параллелизм многопроцесорних систем;

  • параллелизм операций ввода-вывода;

  • параллелизм взаимодействия с пользователем;

  • параллелизм распределенных систем.

Параллелизм операций ввода-вывода

Во время выполнения операции ввода-вывода (например, обмена данными с диском) низкоуровневый код доступа к диску и код приложения не могут выполняться одновременно. В этом случае приложению надо подождать завершение операции ввода-вывода, освободив на это время процессор. Естественным считается занять на это время процессор инструкциями другой задачи.

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

Параллелизм взаимодействия с пользователем

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

Чтобы решить эту задачу, можно выделить отдельные потоки для непосредственного взаимодействия с пользователем (например, один поток может ожидать ввода c клавиатуры, другой - от мыши, дополнительные потоки - отображать интерфейс пользователя). Основные задачи приложения (расчеты, взаимодействие с базой данных и т.д.) в это время будут выполнять другие потоки.

Параллелизм распределенных применений

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