- •Лекция 3: Управление процессами (I)
- •Понятие о последовательном процессе.
- •Легкие процессы (threads - нити)
- •Замечания по терминологии
- •Контекст (состояние) нити
- •Классификация ос
- •Состояние нити
- •Диспетчеризация. Цикл планирования
- •Создание процесса и нити Создание нити в лабораторном практикуме (конструктор dosThread)
- •Создание процесса в unix
- •Создание процесса в Win32api
- •Создание нити
Легкие процессы (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, является объектом, который представляет нить и содержит информацию, необходимую для управления.
Обычно содержит: область сохранения регистров процессора; данные для планировщика (текущее состояние, приоритет, использованное процессорное время); учетную информацию о нити.
После создания нить пребывает в одном из трех состояний, показанных ниже.
Переходы:
«Активен» -> «Блокирован»: по инициативе программы (системный вызов)
«Блокирован» -> «Готов»: в результате реакции на сигнал о завершении операции
«Активен» <-> «Готов»: в результате работы планировщика
В лабораторном практикуме дескриптор процесса представлен двумя структурами: DOSThread и DOSThreadManager
DOSThreadManager:
- next // указатель на следующий объект
- prev // указатель на предыдущий объект
- thread // указатель на DOSThread
- stack // указатель на область стека
- stkptr // указатель стека
- wakeup // время, когда будить после delay
- fpustate // состояние сопроцессора
DOSThread:
- state // состояние процесса
- id // идентификатор
- entry // указатель на DOSThreadManager
- starttme // время создания
- readytime // время в очереди готовых
- activetime // время использования процессора