Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
27
Добавлен:
17.04.2013
Размер:
60.93 Кб
Скачать

Легкие процессы (threads - нити)

В современных ОС традиционное понятие процесса расширено абстракцией «нить».

Нить (легкий процесс)– это последовательное выполнение потока команд процесса на одном процессоре. Процессорное время делится между нитями!

Зачем?

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

  • нити выполняются в общем адресном пространстве, что упрощает организацию взаимодействия параллельных ветвей процесса. (В случае взаимодействия процессов есть проблема: ОС обязана защищать адресные пространства процессов)

  • разные нити могут выполняться на разных процессорах

Легкие процессы обычно порождаются на основе функций (частей программы).

Пример:Обсудить разницу в структуре однонитевой и многонитевой программы, обрабатывающей потоки сообщений, поступающие по нескольким каналам.

Замечания по терминологии

  • В некоторых книгах по Windows вместо термина«нить»используется термин«поток». Видимо это связано с понятием « последовательное выполнение потока команд ». Термин занят вC++, и в некоторых ОС, где он обозначает метод обработки потоков данных от внешних устройств (streams-драйверы в ОСSolaris)

  • В Windows процесс и нитьразличают по способности владеть ресурсами. Выделяемые системой ресурсы приписываются только процессу. Нить является объектом для планировщика процессов и принадлежит процессу.

Контекст (состояние) нити

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

Все необходимое размещается в адресном пространстве процесса.

Часть контекста нити может быть разделяемое с другими нитями:

  • куча (динамически распределяемая память процесса)

  • глобальные данные процесса

  • дескрипторы открытых файлов

Часть контекста нити может является локальной:

  • стек

  • содержимое регистров процессора

Классификация ос

Число нитей в

Число адресных пространств

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

Одно

Много

Одна

MS-DOS

ранний UNIX

Много

VxWorks, JavaOS

(не нужна защита)

OS/2, Windows 95/NT, Solaris, Linux, HP-UX

Состояние нити

Для каждой нити создается структура «Дескриптор нити или Thread Control Block (TCB)».

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

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

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

Переходы:

  1. «Активен» -> «Блокирован»: по инициативе программы (системный вызов)

  2. «Блокирован» -> «Готов»: в результате реакции на сигнал о завершении операции

  3. «Активен» <-> «Готов»: в результате работы планировщика

В лабораторном практикуме дескриптор процесса представлен двумя структурами: DOSThread и DOSThreadManager

DOSThreadManager:

- next // указатель на следующий объект

- prev // указатель на предыдущий объект

- thread // указатель на DOSThread

- stack // указатель на область стека

- stkptr // указатель стека

- wakeup // время, когда будить после delay

- fpustate // состояние сопроцессора

DOSThread:

- state // состояние процесса

- id // идентификатор

- entry // указатель на DOSThreadManager

- starttme // время создания

- readytime // время в очереди готовых

- activetime // время использования процессора

Соседние файлы в папке вар1