Режимы выполнения процессов

Выполнение процессов может происходить в одном из двух возможных режимах: в режиме ядра, либо в пользовательском режиме. В режиме ядра процесс может выполнять любые привилегированные инструкции по управлению центральным процессором. В пользовательском режиме выполняются обычные, непривилегированные инструкции. Любая программа, созданная для многозадачной операционной системы, использует вызовы системных функций. Большинство таких функций (вычислительные процедуры, операции со строками и др.) не требуют каких-либо исключительных привилегий и могут выполняться в пользовательском режиме. Но создание или удаление объектов файловой системы, обращение к устройствам требует системных привилегий. Если пользовательскому процессу не хватает прав, он обращается к ядру с системным вызовом и продолжает выполнение в другом контексте уже в привилегированном режиме ядра.

Управление процессами осуществляется частью ядра, именуемой планировщиком задач или просто планировщиком (scheduler). В системах UNIX реализована принудительная (или по-другом, вытесняющая) многозадачность, когда планировщик задач передает управление следующему процессу, не «спрашивая» согласия на это у предыдущего процесса. Для того чтобы переключить центральный процессор с одной задачи на другую, тоже требуется время. Планировщик задач обычно расходует 5-7% процессорного времени на то, чтобы сохранить в памяти содержимое предыдущей задачи, загрузить в регистры центрального процессора адреса следующей задачи и передать ей управление. Каждый процесс выполняется в течение нескольких миллисекунд, и у пользователя создается представление, что компьютер способен выполнять все задачи одновременно.

Процесс является носителем определенного приоритета Nice Number, который принимается во внимание планировщиком задач при выборе очередности и продолжительности запуска. Приоритет процесса - это его право распоряжаться временем центрального процессора. Пользовательские процессы заведомо обладают меньшими правами по отношению к объектам доступа. Однако на их приоритетах это не сказывается. Некоторые системные процессы должны иметь большой приоритет, но если они будут владеть большей частью процессорного времени, у компьютера не останется возможностей для выполнения пользовательских задач, ради которых он, собственно, и работает. Поэтому системные процессы, как правило, не злоупотребляют своими полномочиями. Процессы, созданные в одинаковых условиях обычным пользователем и администратором системы, имеют примерно одинаковые приоритеты. Избыточный приоритет - весьма опасная вещь, способная приводить к атакам на отказ в обслуживании.

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

Процесс с привилегиями суперпользователя может запускать процессы с отрицательным фактором уступчивости или понижать это значение у выполняющегося процесса. Обычные пользователи и их процессы не могут захватывать лишнее время у центрального процессора.

Как это не покажется странным, в некоторых случаях можно атаковать компьютерную систему, преднамеренно уменьшая свой приоритет