317
которые или переопределить обработку которых процесс не имеет
возможности, – обязательно в этом списке должно быть прерывание kill.
В большинстве современных ОС (Unix, OS/2 и др.) виртуальные
прерывания носят название сигналов и используются прежде всего для
сигнализации о чрезвычайных событиях. Сигнальные системы конкретных
ОС, как правило, не предоставляют в составе API универсального вызова
типа raiseInterrupt, который позволял бы пользователю выдавать
сигналы любого типа. Набор зарезервированных типов сигналов ограничен
(в Unix, например, их 19, а в OS/2 – всего 7), не все из них доступны
процессам и для каждого из доступных имеется собственный системный
вызов. Недопустимы также незарезервированные типы сигналов. В набор
включается несколько (по 3 – в упомянутых ОС) типов сигналов,
зарезервированных за процессами, – эти типы и используют
взаимодействующие процессы для посылки друг другу сигналов, которые
они интерпретируют по предварительной договоренности.
В момент, когда для процесса генерируется виртуальное прерывание,
процесс, возможно (в однопроцессорной системе – наверняка), пребывает в
неактивном состоянии. Поэтому обработка прерывания откладывается до
момента активизации процесса (в порядке очереди к планировщику), а
прерывание запоминается в блоке контекста процесса. Как должно
обрабатываться виртуальное прерывание, если во время его поступления
процесс выполняет системный вызов? Выполнение системного вызова
включает в себя как фрагменты кода, выполняемые в привилегированном
режиме, так и фрагменты, выполняемые в режиме задачи. Очевидно, что
привилегированные фрагменты прерываться не могут – их выполнение
может быть связано с изменениями системных структур данных, которые
должны выполняться транзакционно (т.е. не должны прерываться). В этом
случае пришедшее виртуальное прерывание запоминается в блоке контекста
процесса и обрабатывается при переходе процесса из состояния ядра в
состояние задачи. Но системный вызов может содержать и
непривилегированную часть, к тому же выполняющуюся весьма длительно