Операционные системы учебное пособие (1085734), страница 8
Текст из файла (страница 8)
Сервисы
Служба Windows-сервисов состоит из трех компонентов:
-
Сервисного приложения (service application);
-
Программы управления сервисом (service control program, SCP);
-
Диспетчера управления сервисами (service control manager, SCM).
Практически в каждой операционной системе есть механизм, запускающий при загрузке системы процессы, которые предоставляют сервисы, не увязываемые с интерактивным пользователем. В Windows такие процессы называются сервисами, или Windows-сервисами, поскольку при взаимодействии с системой они полагаются на Windows API.
Сервисы аналогичны демонам UNIX и часто используются для реализации серверной части клиент-серверных приложений.
Windows Management Instrumentation
WMI - это реализация WBEM, стандарта введенного DMTF
WMI состоит из четырех главных компонентов:
-
Управляющих приложений
-
Инфраструктуры WMI
-
Компонентов доступа
-
Управляемых объектов
Итоги
Основные системные механизмы Windows:
-
Диспетчеризация ловушек
-
Диспетчеризация прерываний
-
Обработка аппаратных прерываний
-
Диспетчеризация исключений
-
Диспетчеризация системных сервисов
-
Диспетчер объектов
Управление локальными ресурсами в ОС Windows. Процессы и потоки
Процессы, потоки и задания
Хотя на первый взгляд кажется, что программа и процесс — понятия практически одинаковые, они фундаментально отличаются друг от друга. Программа представляет собой статический набор команд, а процесс — это контейнер для набора ресурсов, используемых при выполнении экземпляра программы. На самом высоком уровне абстракции процесс в Windows включает следующее:
-
закрытое виртуальное адресное пространство — диапазон адресов виртуальной памяти, которым может пользоваться процесс;
-
исполняемую программу — начальный код и данные, проецируемые на виртуальное адресное пространство процесса;
-
список открытых описателей (handles) различных системных ресурсов — семафоров, коммуникационных портов, файлов и других объектов, доступных всем потокам в данном процессе;
-
контекст защиты (security context), называемый маркером доступа (access token) и идентифицирующий пользователя, группы безопасности и привилегии, сопоставленные с процессом;
-
уникальный идентификатор процесса (во внутрисистемной терминологии называемый идентификатором клиента); •минимум один поток.
Поток (thread) — некая сущность внутри процесса, получающая процессорное время для выполнения. Без потока программа процесса не может выполняться. Поток включает следующие наиболее важные элементы:
-
содержимое набора регистров процессора, отражающих состояние процессора;
-
два стека, один из которых используется потоком при выполнении в режиме ядра, а другой — в пользовательском режиме;
-
закрытую область памяти, называемую локальной памятью потока (thread-local storage, TLS) и используемую подсистемами, библиотеками исполняющих систем (run-time libraries) и DLL;
-
уникальный идентификатор потока (во внутрисистемной терминологии также называемый идентификатором клиента: идентификаторы процессов и потоков генерируются из одного пространства имен и никогда не перекрываются);
-
иногда потоки обладают своим контекстом защиты, который обычно используется многопоточными серверными приложениями, подменяющими контекст защиты обслуживаемых клиентов.
Переменные регистры, стеки и локальные области памяти называются контекстом потока.
Хотя у потоков свой контекст выполнения, каждый поток внутри одного процесса делит его виртуальное адресное пространство (а также остальные ресурсы, принадлежащие процессу). Это означает, что все потоки в процессе могут записывать и считывать содержимое памяти любого из потоков данного процесса. Однако потоки не могут случайно сослаться на адресное пространство другого процесса. Исключение возможно в ситуации, когда тот предоставляет часть своего адресного пространства как раздел общей памяти (shared memory section), в Windows API называемый объектом «проекция файла» (file mapping object).
Процесс и его ресурсы
Процесс и его ресурсы
Кроме закрытого адресного пространства и одного или нескольких потоков у каждого процесса имеются идентификация защиты и список открытых описателей таких объектов, как файлы и разделы общей памяти, или синхронизирующих объектов вроде мьютексов, событий и семафоров.
Каждый процесс обладает контекстом защиты, который хранится в объекте — маркере доступа. Маркер доступа содержит идентификацию защиты и определяет полномочия данного процесса.
Дескрипторы виртуальных адресов (virtual address descriptors, VAD) — это структуры данных, используемые диспетчером памяти для учета виртуальных адресов, задействованных процессом.
Процессы потоки задания
Структуры данных
Каждый процесс в Windows представлен блоком процесса, создаваемым исполнительной системой (EPROCESS).
Планирование потоков
-
Вытесняющее планирование на основе уровней приоритета
-
Выбор потока может быть ограничен привязкой к процессору
-
Выбранный поток работает в течении кванта времени. Квант зависит от:
-
Конфигурационных параметров
-
Статуса процесса
-
Использования объекта задание
-
Код отвечающий за планирование рассредоточен по ядру
-
Совокупность процедур, выполняющих эти обязанности называется диспетчером ядра
Код Windows, отвечающий за планирование, реализован в ядре. Поскольку этот код рассредоточен по ядру, единого модуля или процедуры с названием «планировщик» нет. Совокупность процедур, выполняющих эти обязанности, называется диспетчерам ядра (kernel's dispatcher). Диспетчеризация потоков может быть вызвана любым из следующих событий:
-
Поток готов к выполнению — например, он только что создан или вышел из состояния ожидания.
-
Поток выходит из состояния Running (выполняется), так как его квант истек или поток завершается либо переходит в состояние ожидания.
-
Приоритет потока изменяется в результате вызова системного сервиса или самой Windows.
-
Изменяется привязка к процессорам, из-за чего поток больше не может работать на процессоре, на котором он выполнялся.
Планирование в Windows осуществляется на уровне потоков.
Поскольку решения, принимаемые в ходе планирования, касаются исключительно потоков, система не обращает внимания на то, какому процессу принадлежит тот или иной поток. Так, если у процесса А есть 10, у процесса В — 2 готовых к выполнению потока, и все 12 имеют одинаковый приоритет, каждый из потоков теоретически получит 1/12 процессорного времени, потому что Windows не станет поровну делить процессорное время между двумя процессами.
Уровни приоритета
Уровни приоритета
Чтобы понять алгоритмы планирования потоков, необходимо сначала разобраться в уровнях приоритета, используемых Windows.
Уровни приоритета назначаются с учетом двух разных точек зрения - Windows API и ядра Windows.
Windows API сначала упорядочивает процессы по классам приоритета, назначенным при их создании [Real-time (реального времени), High (высокий), Above Normal (выше обычного), Normal (обычный), Below Normal (ниже обычного) и Idle (простаивающий)], а затем — по относительному приоритету индивидуальных потоков в рамках этих процессов [Time-critical (критичный по времени), Highest (наивысший), Above-normal (выше обычного), Normal (обычный), Below-normal (ниже обычного), Lowest (наименьший) и Idle (простаивающий)].
Базовый приоритет каждого потока в Windows API устанавливается, исходя из класса приоритета его процесса и относительного приоритета самого потока. Если у процесса только одно значение приоритета (базовое), то у каждого потока их два: текущее и базовое. Решения, связанные с планированием, принимаются на основе текущего приоритета. В определенных обстоятельствах система может на короткое время повышать приоритеты потоков в динамическом диапазоне (1-15). Windows никогда не изменяет приоритеты потоков в диапазоне реального времени (16-31), поэтому у таких потоков базовый приоритет идентичен текущему.
Обычно базовый приоритет процесса (а значит, и базовый приоритет первичного потока) по умолчанию равен значению из середины диапазонов приоритетов процессов (24, 13, 10, 8, 6 или 4). Однако базовый приоритет некоторых системных процессов (например, диспетчера сеансов, контроллера сервисов и сервера локальной аутентификации) несколько превышает значение по умолчанию для класса Normal (8). Более высокий базовый приоритет по умолчанию обеспечивает запуск потоков этих процессов с приоритетом выше 8.
Приоритеты реального времени
Можно повысить или понизить приоритет потока любого приложения в динамическом диапазоне; однако, чтобы задать значение из диапазона реального времени, должна быть привилегия Increase Scheduling Priority. Многие важные системные потоки режима ядра выполняются в диапазоне приоритетов реального времени. Поэтому, если потоки слишком долго выполняются с приоритетом этого диапазона, они могут блокировать критичные системные функции (например в диспетчере памяти, диспетчере кэша или драйверах устройств).
Состояния потоков
Состояния потоков
Прежде чем перейти к алгоритмам планирования потоков, надо разобраться, в каких состояниях могут находиться потоки в процессе выполнения в Windows 2000 и Windows XP:
-
Ready (готов) Поток в состоянии готовности ожидает выполнения. Выбирая следующий поток для выполнения, диспетчер принимает во внимание только пул потоков, готовых к выполнению.
-
Standby (простаивает) Поток в этом состоянии уже выбран следующим для выполнения на конкретном процессоре. В подходящий момент диспетчер переключает контекст на этот поток. В состоянии Standby может находиться только один поток для каждого процессора в системе. Поток может быть вытеснен даже в этом состоянии (если, например, до начала выполнения потока, который пока находится в состоянии Standby, к выполнению будет готов поток с более высоким приоритетом).
-
Running (выполняется) Поток переходит в это состояние и начинает выполняться сразу после того, как диспетчер переключает на него контекст. Выполнение потока прекращается, как только он завершается, вытесняется потоком с более высоким приоритетом, переключает контекст на другой поток, самостоятельно переходит в состояние ожидания или истекает выделенный ему квант процессорного времени (и другой поток с тем же приоритетом готов к выполнению).
-
Waiting (ожидает) Поток входит в состояние Waiting несколькими способами. Он может самостоятельно начать ожидание на синхронизирующем объекте или его вынуждает к этому подсистема окружения. По окончании ожидания поток — в зависимости от приоритета — либо немедленно начинает выполняться, либо переходит в состояние Ready.
-
Transition (переходное состояние) Поток переходит в это состояние, если он готов к выполнению, но его стек ядра выгружен из памяти. Как только этот стек загружается в память, поток переходит в состояние Ready.
-
Terminated (завершен) Заканчивая выполнение, поток переходит в состояние Terminated. После этого блок потока исполнительной системы (структура данных в пуле неподкачиваемой памяти, описывающая данный поток) может быть удален, а может быть и не удален — это уже определяется диспетчером объектов.
-
Initialized (инициализирован) В это состояние поток входит в процессе своего создания.
Состояния потоков в Windows Server 2003
Состояния потоков в Windows Server 2003
Обратите внимание на новое состояние Deferred Ready (готов, отложен). Это состояние используется для потоков, выбранных для выполнения на конкретном процессоре, но пока не запланированных к выполнению. Это новое состояние предназначено для того, чтобы ядро могло свести к минимуму срок применения общесистемной блокировки к базе данных планирования (scheduling database).
Планирование потоков
База данных диспетчера ядра
Для принятия решений при планировании потоков ядро поддерживает набор структур данных, в совокупности известных как база данных диспетчера ядра (dispatcher database). Эта база данных позволяет отслеживать потоки, ждущие выполнения, и потоки, выполняемые на тех или иных процессорах.