BSD, Ядро, Процессы

Планировщик ULE детали работы

Как уже было сказано, планировщик ULE создает набор из трех очередей для каждого процессора в сис­теме. Одна из очередей является очередью простоя, в которой размещаются все про­стаивающие потоки. Следующие две очереди определены как текущая и следующая. Потоки отбираются на выполнение в порядке приоритетов из текущей очереди, пока она не станет пустой, в этот момент текущая и следующая очереди меняются местами и планирование начинается снова.

Ограничения ресурсов

Ядро поддерживает также ограничение для каждого процесса некоторых ресурсов. Эти ресурсы включают:

Использование ресурсов

В ходе выполнения процесса он использует системные ресурсы, такие, как время процес­сора и память. Ядро отслеживает ресурсы, используемые каждым процессом, и состав­ляет статистику, описывающую это использование. Управляемая ядром статистика доступна процессу во время его выполнения. Когда процесс завершается, статистика становится доступной родителю через семейство системных вызовов wait.

Службы ресурсов

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

Приоритеты процессов

Группы процессов и сеансы

Каждый процесс в системе связан с группой процессов. Группу процесса иногда назы­вают заданием (job), она управляется как единое целое такими процессами, как обо­лочка. Некоторые сигналы (например, SIGINT) доставляются всем членам группы процессов, заставляя всю группу в целом приостанавливать или возобновлять выпол­нение, прерываться или завершаться.

Идентификаторы (Часть 1)

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

Тайм-ауты

Оставшаяся часть относящейся ко времени обработки включает обработку запросов тайм-аутов и периодическое изменение приоритетов готовых к выполнению процессов. Эти функции обрабатываются процедурой softclockQ. Когда hardclockQ завершается, если было бы нужно выполнить какие-нибудь функции softclockQ, hardclockQ назначает для выполнения процесс softclock. Основной задачей процедуры softclockQ является организация выполнения следующих периодических событий.

Статистика и планирование процессов

На старых системах FreeBSD процедура hardclockQ собирала статистику использова­ния ресурсов о том, что происходило при прерывании от часов. Эта статистика исполь­зовалась для учета ресурсов, отслеживания деятельности системы и определения буду­щих приоритетов планирования. Кроме того, hardclockQ форсировала переключения контекстов так, чтобы процессы могли разделять время процессора.

Программные прерывания

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

Возвращение из системного вызова

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

RSS-материал