Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория вычислительных процессов (1).doc
Скачиваний:
3
Добавлен:
01.03.2025
Размер:
9.39 Mб
Скачать

2.10 Лекция номер 8 Потоки.

Потоком называется объект ядра (Thread) отвечающий за выполнение программного кода в процессе при инициализации процесса система создает его первичный поток. Первичный поток начинает свое выполнение с функции main в консольных приложениях или WinMain в приложениях обладающих GUI и существует до тех пор пока main или WinMain не вернет управление. Большинство процессов (несколько устаревшая информаци) обходятся одним потоком однако(с присутствующим многоядерностью и многопроцессорностью) создается несколько главных потоков выполняющих код параллельно. На системах с одним процессором или одним ядром, диспетчер последовательно переключает процессор между запущенными потоками, потоки представлены на уровне ОС блоком со следующими структурами:

    1. Thread ID – индентификатор потока. ( вещь угикальная)

    2. Стартовый адрес потока- данные о стеке потока в двух возможных режимах.

    3. Контекст потока

    4. Информация для деспетчиризации. (ее много)

    5. Время создания и завершения потока.

    6. Информация о локальной памяти потока. (TLS)

Фактически в контексте потока выделяются три составляющие:

  1. Пользовательский контекст

  1. Системный контекст. Заносится:

    1. Стек ядра.

    2. Записи таблицы областей процесса, сопоставление из LDT.

  1. Регистровый контекст:

    1. Счетчик команд

    2. Регистр состояния процессора

    3. Указатель вершины стека (stack pointer).

    4. Информация о состоянии регистров потока.

Контекст– аппаратно зависимая структура, описание контекстов можно найти в структуре контекстов Context SDK WinAPI.

Переключение контекста потока происходит в следующих случаях:

  1. Когда текущий процесс "засыпает" ожидая освобождения недоступного ему на данный момент ресурса.

  1. Когда текущий процесс завершает свое выполнение отдавая управление ОС

  1. Если в очередь поступил процесс с более высоким приоритетом

  1. Если "пробудился" процесс ожидавший долгое время находившийся в системе и ему присвоен более высокий приоритет.

Для хранения набора переменных окружения используются ini файлы или ключи системного реестра. При порождении нового процесса происходит следующее: резервируется место в области свопинга для сегмента данных и стека процесса, сохраняются переменные окружения, в таблице процессов появляется новая запись и процессу присваивается уникальный ID, генерируется таблица описателей, связывающий виртуальный адрес в физич, инициализируется контекст процесса путем копирования с родительского контекста, процесс помечается готовым к запуску и отправляется в очередь на исполнение. Завершение процесса проходит в несколько этапов:

  1. Отключаются все сигналы

  1. Закрываются все открытые файлы

  1. В соответствующей записи таблицы описателей сохраняется код возврата.

  1. Родительскому процессу направляется сигнал о закрытии потомка.

  1. Уничтожается контекст завершаемого процесса.

  1. Эта последовательность шагов выполняется каждый раз при закрытии пользовательского/системного процесса.

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

Элементы процесса присущие всем потокам процесса

Элементы потока, присущие индивидуальные для потока

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

Счетчик команд

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

Регистры

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

Стек

Дочерние процессы

Состояние

Аварийные сигналы

Обработчики сигналов

Ресурсы

Многопоточность это свойство присущие разным ОС, потоки реализованы как достаточно самостоятельная часть системы платформы windows и как интегрированная вовлеченная часть (*nix) системы. Работа с потоками предполагает наличие механизмов позволяющих выполнять управлением потока так же как и процессом. Многие функции работы с потоками переносятся со структуры процессов, можно отправлять в сон заставляя их заснуть, возобновляя выполнение, завершая их выполнение.