История появления сигналов

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

Возможности сигналов, которые можно найти в FreeBSD, спроектированы вокруг модели виртуальной машины, в которой системные вызовы рассматриваются как сход­ные с набором аппаратных инструкций машины. Сигналы являются программным эк­вивалентом исключений и прерываний, а процедуры обработки сигналов выполняют функцию, эквивалентную процедурам обслуживания прерываний или исключений. Так же как машины предоставляют механизм для блокирования прерываний, чтобы обеспечить согласованный доступ к структурам данных, возможности сигналов позво­ляют маскировать программные сигналы. Наконец, из-за сложного окружения стека времени выполнения, которое может им требоваться, сигналы, подобно прерываниям, могут обрабатываться в альтернативном стеке, предоставленном приложением. Сводка этих машинных моделей приведена в таблице

 Сравнение аппаратно-машинных операций и соответствующих операций виртуальной машины

Аппаратная машина

Программная виртуальная машина

Набор инструкций

Набор системных вызовов

Повторно запускаемые инструкции

Повторно запускаемые системные вызовы

Прерывания/исключения

Сигналы

Обработчики прерываний/исключений

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

Блокирование прерываний

Маскирование сигналов

Стек прерываний

Стек сигналов

 

Еще материалы

  • Процедуры вычисления приоритета потока -

    Вычисления приоритета, использованные в алгоритме кратковременного планирования, разбросаны в различных частях системы. Периодически запускаются две процедуры, schedcpuQ и roundrobinQ. SchedcpuQ пересчитывает приоритеты потоков раз в секунду, используя формулу 4.2, и обновляет значение kg_slptime для потоков, заблокированных вызовом sleepQ. Процедура roundrobinQ запускается 10 раз в секунду и заставляет систе­му перепланировать потоки в (непустой) очереди с самым высоким приоритетом в режиме карусели, что дает каждому потоку квант времени в 100 миллисекунд.

  • Учет использования ресурсов -

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

  • Идентификаторы и SETID -

    FreeBSD реализует возможность setgid путем установки в нулевом элементе мас­сива дополнительных групп процесса, который выполняет программу setgid, значения группы этого файла. После этого можно проверять права доступа, как если бы это был обычный процесс. Из-за дополнительной группы программа setgid может иметь воз­можность доступа к большему количеству файлов, чем процесс пользователя, запус­кающий программу без этой особой привилегии.

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

    Часто пользователю нужно предоставить дополнительные ограниченные привиле­гии. Например, пользователь, который хочет отправить сообщение, должен иметь воз­можность добавить сообщение в почтовый ящик другого пользователя. Разрешение записи в почтовый ящик назначения для всех пользователей дало бы возможность пользователю, не являющемуся владельцем ящика, изменять в нем сообщения (злона­меренно или неумышленно). Чтобы решить эту проблему, ядро допускает создание программ, которым предоставляются при их выполнении дополнительные привиле­гии.

  • Корректировка времени и интервальное время -

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